diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..3affdd38e54123c27b697377e6d500ce0025aa1c
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,61 @@
+# Compiled source #
+###################
+*.com
+*.class
+*.dll
+*.exe
+*.o
+*.so
+
+# Packages #
+############
+# it's better to unpack these files and commit the raw source
+# git has its own built in compression methods
+*.7z
+*.dmg
+*.gz
+*.iso
+*.jar
+*.rar
+*.tar
+*.zip
+
+# Logs and databases #
+######################
+*.log
+*.sql
+*.sqlite
+
+# OS generated files #
+######################
+.DS_Store
+.DS_Store?
+._*
+.Spotlight-V100
+.Trashes
+ehthumbs.db
+Thumbs.db
+
+###### Other
+
+AUTHORS
+COPYING
+ChangeLog
+INSTALL
+NEWS
+README
+Makefile
+Makefile.in
+config.status
+configure
+numerics
+**/.deps
+**/src/config
+aclocal.m4
+**/autom4te.cache
+src/io
+csv_out.csv
+test_graph.graphml
+test_graph2.graphml
+*.html
+
diff --git a/build_io.sh b/build_io.sh
index d35a92d4f4e1c9f2c51c05621728890d4db47fd4..9a30aeb487f9dec4e54693b61ca3b5d8cec8460e 100755
--- a/build_io.sh
+++ b/build_io.sh
@@ -11,9 +11,7 @@ mkdir openfpm_io/src/config
 git clone git@ppmcore.mpi-cbg.de:incardon/openfpm_devices.git openfpm_devices
 git clone git@ppmcore.mpi-cbg.de:incardon/openfpm_data.git openfpm_data
 git clone git@ppmcore.mpi-cbg.de:incardon/openfpm_pdata.git openfpm_pdata
-cd "$1/openfpm_data"
-git checkout develop
-cd ..
+git clone git@ppmcore.mpi-cbg.de:incardon/openfpm_vcluster.git openfpm_vcluster
 
 cd "$1/openfpm_io"
 
diff --git a/configure.ac b/configure.ac
index 0406ea4a18b5c0a7bb5d07c1878f5b2d7a044ce4..ee2c8c7a91770a3dee458dbe7c5f7e629a34a652 100755
--- a/configure.ac
+++ b/configure.ac
@@ -17,7 +17,18 @@ m4_ifdef([AX_BOOST_IOSTREAMS],,[m4_include([m4/ax_boost_iostreams.m4])])
 m4_ifdef([AX_BOOST_PROGRAM_OPTIONS],,[m4_include([m4/ax_boost_program_options.m4])])
 m4_ifdef([AX_BOOST_UNIT_TEST_FRAMEWORK],,[m4_include([m4/ax_boost_unit_test_framework.m4])])
 
-CXXFLAGS+=" --std=c++11 -march=native -mtune=native -Wno-unused-local-typedefs -Wextra -Wno-unused-parameter "
+case $host_os in
+   *cygwin*)
+        # Do something specific for cygwin
+        CXXFLAGS+=" --std=gnu++11 "
+        ;;
+    *)
+        #Default Case
+        CXXFLAGS+=" --std=c++11 "
+        ;;
+esac
+
+CXXFLAGS+=" -march=native -mtune=native -Wno-unused-local-typedefs -Wextra -Wno-unused-parameter "
 NVCCFLAGS=" "
 INCLUDES_PATH=" "
 
@@ -73,6 +84,16 @@ AC_ARG_WITH([pdata],
              [pdata_dir="$withval"],
              [pdata_dir="../../openfpm_pdata/src"])
 
+####### HDF5 
+
+AX_LIB_HDF5([parallel])
+
+if test x"$with_hdf5" = x"no"; then
+    echo "Cannot detect hdf5, use the --with-hdf5 option if it is not installed in the default location"
+    exit 207
+fi
+
+
 ####### include openfpm_devices include path
 
 INCLUDES_PATH+="-I. -Iconfig -I../../openfpm_data/src -I../../openfpm_devices/src -I../../openfpm_vcluster/src -I$pdata_dir "
diff --git a/gc_out2_test.html b/gc_out2_test.html
new file mode 100644
index 0000000000000000000000000000000000000000..771c7bfc6dccce3725accacdcc9d9c2978570703
--- /dev/null
+++ b/gc_out2_test.html
@@ -0,0 +1,31 @@
+<html>
+  <head>
+    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
+    <script type="text/javascript">
+      google.charts.load('current', {'packages':['corechart']});
+      google.charts.setOnLoadCallback(drawVisualization);
+
+
+      function drawVisualization() {
+var data0 = google.visualization.arrayToDataTable([
+['X Axis','dataset1','dataset2','dataset3','dataset4'],
+['colum1',2.200000,1.300000,4.500000,0.600000],
+['colum2',5.000000,6.100000,1.300000,2.600000],
+['colum3',2.100000,1.000000,6.100000,9.300000],
+['colum4',1.100000,6.100000,3.000000,2.000000],
+['colum5',3.300000,0.300000,0.000000,6.200000],
+['colum6',2.000000,1.100000,4.000000,6.100000],
+]);
+var options0= {
+title : 'Example',
+vAxis: {title: 'Y Axis'},
+hAxis: {title: 'X Axis'},
+seriesType: 'bars',
+};
+var chart = new google.visualization.ComboChart(document.getElementById('chart_div0'));chart.draw(data0, options0);
+}</script>
+</head>
+<body>
+<div id="chart_div0" style="width: 900px; height: 500px;"></div>
+</body>
+</html>
diff --git a/gc_out3_test.html b/gc_out3_test.html
new file mode 100644
index 0000000000000000000000000000000000000000..6ae633a424a988d754fa3e46a6053ebcd43fd33b
--- /dev/null
+++ b/gc_out3_test.html
@@ -0,0 +1,31 @@
+<html>
+  <head>
+    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
+    <script type="text/javascript">
+      google.charts.load('current', {'packages':['corechart']});
+      google.charts.setOnLoadCallback(drawVisualization);
+
+
+      function drawVisualization() {
+var data0 = google.visualization.arrayToDataTable([
+['X Axis','dataset1','dataset2','dataset3','dataset4'],
+['colum1',2.200000,1.300000,4.500000,0.600000],
+['colum2',5.000000,6.100000,1.300000,2.600000],
+['colum3',2.100000,1.000000,6.100000,9.300000],
+['colum4',1.100000,6.100000,3.000000,2.000000],
+['colum5',3.300000,0.300000,0.000000,6.200000],
+['colum6',2.000000,1.100000,4.000000,6.100000],
+]);
+var options0= {
+title : 'Example',
+vAxis: {title: 'Y Axis'},
+hAxis: {title: 'X Axis'},
+seriesType: '',
+};
+var chart = new google.visualization.ComboChart(document.getElementById('chart_div0'));chart.draw(data0, options0);
+}</script>
+</head>
+<body>
+<div id="chart_div0" style="width: 900px; height: 500px;"></div>
+</body>
+</html>
diff --git a/gc_out4_test.html b/gc_out4_test.html
new file mode 100644
index 0000000000000000000000000000000000000000..53d712696c22c2824fcf65eed863f0f473e7cd35
--- /dev/null
+++ b/gc_out4_test.html
@@ -0,0 +1,31 @@
+<html>
+  <head>
+    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
+    <script type="text/javascript">
+      google.charts.load('current', {'packages':['corechart']});
+      google.charts.setOnLoadCallback(drawVisualization);
+
+
+      function drawVisualization() {
+var data0 = google.visualization.arrayToDataTable([
+['','dataset1','dataset2','dataset3','dataset4'],
+['colum1',2.200000,1.300000,4.500000,0.600000],
+['colum2',5.000000,6.100000,1.300000,2.600000],
+['colum3',2.100000,1.000000,6.100000,9.300000],
+['colum4',1.100000,6.100000,3.000000,2.000000],
+['colum5',3.300000,0.300000,0.000000,6.200000],
+['colum6',2.000000,1.100000,4.000000,6.100000],
+]);
+var options0= {
+title : '',
+vAxis: {title: ''},
+hAxis: {title: ''},
+seriesType: '',
+};
+var chart = new google.visualization.ComboChart(document.getElementById('chart_div0'));chart.draw(data0, options0);
+}</script>
+</head>
+<body>
+<div id="chart_div0" style="width: 900px; height: 500px;"></div>
+</body>
+</html>
diff --git a/gc_out5_test.html b/gc_out5_test.html
new file mode 100644
index 0000000000000000000000000000000000000000..866e4b702683b0103713d1d32f3293745f671542
--- /dev/null
+++ b/gc_out5_test.html
@@ -0,0 +1,31 @@
+<html>
+  <head>
+    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
+    <script type="text/javascript">
+      google.charts.load('current', {'packages':['corechart']});
+      google.charts.setOnLoadCallback(drawVisualization);
+
+
+      function drawVisualization() {
+var data0 = google.visualization.arrayToDataTable([
+['','','','',''],
+['colum1',2.200000,1.300000,4.500000,0.600000],
+['colum2',5.000000,6.100000,1.300000,2.600000],
+['colum3',2.100000,1.000000,6.100000,9.300000],
+['colum4',1.100000,6.100000,3.000000,2.000000],
+['colum5',3.300000,0.300000,0.000000,6.200000],
+['colum6',2.000000,1.100000,4.000000,6.100000],
+]);
+var options0= {
+title : '',
+vAxis: {title: ''},
+hAxis: {title: ''},
+seriesType: '',
+};
+var chart = new google.visualization.ComboChart(document.getElementById('chart_div0'));chart.draw(data0, options0);
+}</script>
+</head>
+<body>
+<div id="chart_div0" style="width: 900px; height: 500px;"></div>
+</body>
+</html>
diff --git a/gc_out6_test.html b/gc_out6_test.html
new file mode 100644
index 0000000000000000000000000000000000000000..8787f4649c178c6bd4a910f21b849336ff604ec7
--- /dev/null
+++ b/gc_out6_test.html
@@ -0,0 +1,31 @@
+<html>
+  <head>
+    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
+    <script type="text/javascript">
+      google.charts.load('current', {'packages':['corechart']});
+      google.charts.setOnLoadCallback(drawVisualization);
+
+
+      function drawVisualization() {
+var data0 = google.visualization.arrayToDataTable([
+['','','','',''],
+['',2.200000,1.300000,4.500000,0.600000],
+['',5.000000,6.100000,1.300000,2.600000],
+['',2.100000,1.000000,6.100000,9.300000],
+['',1.100000,6.100000,3.000000,2.000000],
+['',3.300000,0.300000,0.000000,6.200000],
+['',2.000000,1.100000,4.000000,6.100000],
+]);
+var options0= {
+title : '',
+vAxis: {title: ''},
+hAxis: {title: ''},
+seriesType: '',
+};
+var chart = new google.visualization.ComboChart(document.getElementById('chart_div0'));chart.draw(data0, options0);
+}</script>
+</head>
+<body>
+<div id="chart_div0" style="width: 900px; height: 500px;"></div>
+</body>
+</html>
diff --git a/gc_out7_test.html b/gc_out7_test.html
new file mode 100644
index 0000000000000000000000000000000000000000..3ff25d9859b5d043e7ed39f55c517a7124a28b1c
--- /dev/null
+++ b/gc_out7_test.html
@@ -0,0 +1,68 @@
+<html>
+  <head>
+    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
+    <script type="text/javascript">
+      google.charts.load('current', {'packages':['corechart']});
+      google.charts.setOnLoadCallback(drawVisualization);
+
+
+      function drawVisualization() {
+var data0 = google.visualization.arrayToDataTable([
+['X Axis','dataset1','dataset2','dataset3','dataset4'],
+['colum1',2,3,5,6],
+['colum2',5,6,1,6],
+['colum3',2,1,6,9],
+['colum4',1,6,3,2],
+['colum5',3,3,0,6],
+['colum6',2,1,4,6],
+]);
+var data1 = google.visualization.arrayToDataTable([
+['X Axis','dataset1','dataset2','dataset3','dataset4'],
+['colum1',2,3,5,6],
+['colum2',5,6,1,6],
+['colum3',2,1,6,9],
+['colum4',1,6,3,2],
+['colum5',3,3,0,6],
+['colum6',2,1,4,6],
+]);
+var data2 = google.visualization.arrayToDataTable([
+['X Axis','dataset1','dataset2','dataset3','dataset4'],
+['colum1',2,3,5,6],
+['colum2',5,6,1,6],
+['colum3',2,1,6,9],
+['colum4',1,6,3,2],
+['colum5',3,3,0,6],
+['colum6',2,1,4,6],
+]);
+var options0= {
+title : 'Example',
+vAxis: {title: 'Y Axis'},
+hAxis: {title: 'X Axis'},
+seriesType: 'bars',
+series: {3: {type: 'line'}}
+};
+var options1= {
+title : 'Example',
+vAxis: {title: 'Y Axis'},
+hAxis: {title: 'X Axis'},
+seriesType: 'bars',
+series: {3: {type: 'line'}}
+};
+var options2= {
+title : 'Example',
+vAxis: {title: 'Y Axis'},
+hAxis: {title: 'X Axis'},
+seriesType: 'bars',
+series: {3: {type: 'line'}}
+};
+var chart = new google.visualization.ComboChart(document.getElementById('chart_div0'));chart.draw(data0, options0);
+var chart = new google.visualization.ComboChart(document.getElementById('chart_div1'));chart.draw(data1, options1);
+var chart = new google.visualization.ComboChart(document.getElementById('chart_div2'));chart.draw(data2, options2);
+}</script>
+</head>
+<body>
+<h2>Before first graph</h2><div id="chart_div0" style="width: 900px; height: 500px;"></div>
+<h2>Before second graph</h2><div id="chart_div1" style="width: 900px; height: 500px;"></div>
+<h2>Before third graph</h2><div id="chart_div2" style="width: 900px; height: 500px;"></div>
+<h2>At the end</h2></body>
+</html>
diff --git a/gc_out_test.html b/gc_out_test.html
new file mode 100644
index 0000000000000000000000000000000000000000..77b615238355cd3dab9c821dca488a86bb27fd4f
--- /dev/null
+++ b/gc_out_test.html
@@ -0,0 +1,32 @@
+<html>
+  <head>
+    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
+    <script type="text/javascript">
+      google.charts.load('current', {'packages':['corechart']});
+      google.charts.setOnLoadCallback(drawVisualization);
+
+
+      function drawVisualization() {
+var data0 = google.visualization.arrayToDataTable([
+['X Axis','dataset1','dataset2','dataset3','dataset4'],
+['colum1',2,3,5,6],
+['colum2',5,6,1,6],
+['colum3',2,1,6,9],
+['colum4',1,6,3,2],
+['colum5',3,3,0,6],
+['colum6',2,1,4,6],
+]);
+var options0= {
+title : 'Example',
+vAxis: {title: 'Y Axis'},
+hAxis: {title: 'X Axis'},
+seriesType: 'bars',
+series: {3: {type: 'line'}}
+};
+var chart = new google.visualization.ComboChart(document.getElementById('chart_div0'));chart.draw(data0, options0);
+}</script>
+</head>
+<body>
+<div id="chart_div0" style="width: 900px; height: 500px;"></div>
+</body>
+</html>
diff --git a/gc_plot2_out_test.html b/gc_plot2_out_test.html
new file mode 100644
index 0000000000000000000000000000000000000000..0fd3d25f7db51b8abddf937ff930e64924bb34bf
--- /dev/null
+++ b/gc_plot2_out_test.html
@@ -0,0 +1,43 @@
+<html>
+  <head>
+    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
+    <script type="text/javascript">
+      google.charts.load('current', {'packages':['corechart']});
+      google.charts.setOnLoadCallback(drawVisualization);
+
+
+      function drawVisualization() {
+var data0 = new google.visualization.DataTable();
+data0.addColumn('string','X Axis');
+data0.addColumn('number','line0');
+data0.addColumn('number','line1');
+data0.addColumn('number','line2');
+data0.addColumn('number','line3');
+data0.addColumn('number','line4');
+data0.addColumn('number','line5');
+data0.addColumn('number','line6');
+data0.addColumn('number','line7');
+data0.addColumn('number','line8');
+data0.addRows([
+['colum1',0.1,0.2,0.19,0.22,0.195,0.215,0.35,0.34,0.36],
+['colum2',0.11,0.21,0.18,0.22,0.19,0.215,0.36,0.35,0.37],
+['colum3',0.12,0.22,0.21,0.23,0.215,0.225,0.35,0.34,0.36],
+['colum4',0.15,0.25,0.2,0.26,0.22,0.255,0.36,0.35,0.37],
+['colum5',0.09,0.29,0.25,0.3,0.26,0.295,0.35,0.34,0.36],
+['colum6',0.08,0.28,0.27,0.29,0.275,0.285,0.36,0.35,0.37],
+]);
+var options0= {
+title : 'Example',
+vAxis: {title: 'Y Axis'},
+hAxis: {title: 'X Axis'},
+curveType: 'function',
+lineWidth: 1,
+intervals: { 'style':'area' },
+};
+var chart = new google.visualization.ComboChart(document.getElementById('chart_div0'));chart.draw(data0, options0);
+}</script>
+</head>
+<body>
+<div id="chart_div0" style="width: 900px; height: 500px;"></div>
+</body>
+</html>
diff --git a/gc_plot_out_test.html b/gc_plot_out_test.html
new file mode 100644
index 0000000000000000000000000000000000000000..4baf5abdf68f3ac00b9dba44479eb6dc6c73d6f5
--- /dev/null
+++ b/gc_plot_out_test.html
@@ -0,0 +1,44 @@
+<html>
+  <head>
+    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
+    <script type="text/javascript">
+      google.charts.load('current', {'packages':['corechart']});
+      google.charts.setOnLoadCallback(drawVisualization);
+
+
+      function drawVisualization() {
+var data0 = new google.visualization.DataTable();
+data0.addColumn('string','X Axis');
+data0.addColumn('number','line1');
+data0.addColumn('number','line2');
+data0.addColumn({id:'i0', type:'number', role:'interval'});
+data0.addColumn({id:'i0', type:'number', role:'interval'});
+data0.addColumn({id:'i1', type:'number', role:'interval'});
+data0.addColumn({id:'i1', type:'number', role:'interval'});
+data0.addColumn('number','line3');
+data0.addColumn({id:'i2', type:'number', role:'interval'});
+data0.addColumn({id:'i2', type:'number', role:'interval'});
+data0.addRows([
+['colum1',0.1,0.2,0.19,0.22,0.195,0.215,0.35,0.34,0.36],
+['colum2',0.11,0.21,0.18,0.22,0.19,0.215,0.36,0.35,0.37],
+['colum3',0.12,0.22,0.21,0.23,0.215,0.225,0.35,0.34,0.36],
+['colum4',0.15,0.25,0.2,0.26,0.22,0.255,0.36,0.35,0.37],
+['colum5',0.09,0.29,0.25,0.3,0.26,0.295,0.35,0.34,0.36],
+['colum6',0.08,0.28,0.27,0.29,0.275,0.285,0.36,0.35,0.37],
+]);
+var options0= {
+title : 'Example',
+vAxis: {title: 'Y Axis'},
+hAxis: {title: 'X Axis'},
+curveType: 'function',
+lineWidth: 1,
+intervals: { 'style':'area' },
+interval: {'i2': { 'color': '#4374E0', 'style':'bars', 'lineWidth':4, 'fillOpacity':1 } }
+};
+var chart = new google.visualization.ComboChart(document.getElementById('chart_div0'));chart.draw(data0, options0);
+}</script>
+</head>
+<body>
+<div id="chart_div0" style="width: 900px; height: 500px;"></div>
+</body>
+</html>
diff --git a/src/CSVWriter.hpp b/src/CSVWriter/CSVWriter.hpp
similarity index 91%
rename from src/CSVWriter.hpp
rename to src/CSVWriter/CSVWriter.hpp
index ff31345666f1beefb27fed672bfda9dadc483cb4..fc6822c8af1ad00d00f7305eafbf2c7256d76d86 100644
--- a/src/CSVWriter.hpp
+++ b/src/CSVWriter/CSVWriter.hpp
@@ -18,6 +18,8 @@
 #include "csv_multiarray.hpp"
 #include "util.hpp"
 
+#define CSV_WRITER 0x30000
+
 /*! \brief this class is a functor for "for_each" algorithm
  *
  * For each element of the boost::vector the operator() is called.
@@ -54,7 +56,7 @@ struct csv_prp
     void operator()(T& t)
     {
 		// This is the type of the csv column
-		typedef typename boost::fusion::result_of::at_c<typename Tobj::type,T::value>::type col_type;
+		typedef decltype(obj.template get<T::value>()) col_type;
 
 		// Remove the reference from the column type
 		typedef typename boost::remove_reference<col_type>::type col_rtype;
@@ -87,7 +89,7 @@ struct csv_col
     void operator()(T& t)
     {
 		// This is the type of the csv column
-		typedef typename boost::fusion::result_of::at_c<typename Tobj::type,T::value>::type col_type;
+		typedef decltype(std::declval<Tobj>.template get<T::value>()) col_type;
 
 		// Remove the reference from the column type
 		typedef typename boost::remove_reference<col_type>::type col_rtype;
@@ -181,9 +183,10 @@ class CSVWriter
 	 *
 	 * \param v_pos vector that contain the positional information
 	 * \param v_prp vector that contain the property information
+	 * \param offset from where to start
 	 *
 	 */
-	std::string get_csv_data(v_pos & vp, v_prp & vpr)
+	std::string get_csv_data(v_pos & vp, v_prp & vpr, size_t offset)
 	{
 		std::stringstream str;
 
@@ -195,7 +198,7 @@ class CSVWriter
 		}
 
 		// Write the data
-		for (size_t i = 0 ; i < vp.size() ; i++)
+		for (size_t i = offset ; i < vp.size() ; i++)
 		{
 			for (size_t j = 0 ; j < v_pos::value_type::dims ; j++)
 			{
@@ -206,9 +209,9 @@ class CSVWriter
 			}
 
 			// Object to write
-			typename v_prp::value_type obj = vpr.get(i);
+			auto obj = vpr.get(i);
 
-			csv_prp<typename v_prp::value_type> c_prp(str,obj);
+			csv_prp<decltype(obj)> c_prp(str,obj);
 
 			// write the properties to the stream string
 			boost::mpl::for_each< boost::mpl::range_c<int,0,v_prp::value_type::max_prop> >(c_prp);
@@ -228,10 +231,11 @@ public:
 	 * \param file path where to write
 	 * \param v_pos positional vector
 	 * \param v_prp properties vector
+	 * \param offset from where to start to write
 	 *
 	 */
 
-	bool write(std::string file, v_pos & v , v_prp & prp)
+	bool write(std::string file, v_pos & v , v_prp & prp, size_t offset=0)
 	{
 		// Header for csv (colums name)
 		std::string csv_header;
@@ -242,7 +246,7 @@ public:
 		csv_header = get_csv_colums();
 
 		// For each property in the vertex type produce a point data
-		point_data = get_csv_data(v,prp);
+		point_data = get_csv_data(v,prp,offset);
 
 		// write the file
 		std::ofstream ofs(file);
diff --git a/src/CSVWriter_unit_tests.hpp b/src/CSVWriter/CSVWriter_unit_tests.hpp
similarity index 100%
rename from src/CSVWriter_unit_tests.hpp
rename to src/CSVWriter/CSVWriter_unit_tests.hpp
diff --git a/src/csv_multiarray.hpp b/src/CSVWriter/csv_multiarray.hpp
similarity index 100%
rename from src/csv_multiarray.hpp
rename to src/CSVWriter/csv_multiarray.hpp
diff --git a/src/GraphMLWriter.hpp b/src/GraphMLWriter/GraphMLWriter.hpp
similarity index 99%
rename from src/GraphMLWriter.hpp
rename to src/GraphMLWriter/GraphMLWriter.hpp
index 16e993cca80181e443f73e55b28273ae4801ecc3..b96b8bb65c5f9436d61427a019c33b46326ae1de 100644
--- a/src/GraphMLWriter.hpp
+++ b/src/GraphMLWriter/GraphMLWriter.hpp
@@ -208,6 +208,11 @@ struct vertex_node
 		create_prop<typename G::V_type>(attributes_names);
 	};
 
+	inline ~vertex_node()
+	{
+		delete [] attributes_names;
+	}
+
 #ifdef DEBUG
 	/*! \brief Constructor
 	 *
@@ -558,7 +563,7 @@ class GraphMLWriter
 			vn.new_node(nc);
 
 			// Iterate through all the vertex and create the vertex list
-			boost::mpl::for_each< boost::mpl::range_c<int,0,Graph::V_type::max_prop> >(vn);
+			boost::mpl::for_each_ref< boost::mpl::range_c<int,0,Graph::V_type::max_prop> >(vn);
 
 			// end node
 			vn.end_node();
diff --git a/src/GraphMLWriter_unit_tests.hpp b/src/GraphMLWriter/GraphMLWriter_unit_tests.hpp
similarity index 87%
rename from src/GraphMLWriter_unit_tests.hpp
rename to src/GraphMLWriter/GraphMLWriter_unit_tests.hpp
index 8da0ccdeb15fdc037914500d70649d8eb1ef05ea..1fc568bb89d019a660a5686dd25a24122a9dd6bd 100644
--- a/src/GraphMLWriter_unit_tests.hpp
+++ b/src/GraphMLWriter/GraphMLWriter_unit_tests.hpp
@@ -11,7 +11,6 @@
 #define GS_SIZE 8
 
 #include "GraphMLWriter.hpp"
-#include "VTKWriter.hpp"
 #include "Graph/CartesianGraphFactory.hpp"
 #include "util.hpp"
 
@@ -94,14 +93,22 @@ BOOST_AUTO_TEST_CASE( graphml_writer_use)
 	n1.get_i() = 6.0;
 	n1.get_str() = std::string("test");
 	g_csr2.addVertex(n1);
+	n1.get_str() = std::string("tes2");
 	g_csr2.addVertex(n1);
+	n1.get_str() = std::string("test3");
 	g_csr2.addVertex(n1);
+	n1.get_str() = std::string("test4");
 	g_csr2.addVertex(n1);
+	n1.get_str() = std::string("test5");
 
 	g_csr2.addEdge(0,1,n1);
+	n1.get_str() = std::string("test6");
 	g_csr2.addEdge(2,1,n1);
+	n1.get_str() = std::string("test7");
 	g_csr2.addEdge(3,1,n1);
+	n1.get_str() = std::string("test8");
 	g_csr2.addEdge(2,0,n1);
+	n1.get_str() = std::string("test9");
 	g_csr2.addEdge(3,2,n1);
 
 	// Create a graph ML
@@ -123,7 +130,10 @@ BOOST_AUTO_TEST_CASE( graphml_writer_use)
 	// Box
 	Box<3,float> box({0.0,0.0,0.0},{1.0,1.0,1.0});
 
-	Graph_CSR<ne_cp,ne_cp> g_csr = g_factory.construct<5,float,2,ne_cp::x,ne_cp::y,ne_cp::z>(sz,box);
+	// Boundary conditions, non periodic
+	size_t bc[] = {NON_PERIODIC,NON_PERIODIC,NON_PERIODIC};
+
+	Graph_CSR<ne_cp,ne_cp> g_csr = g_factory.construct<5,NO_VERTEX_ID,float,2,ne_cp::x,ne_cp::y,ne_cp::z>(sz,box,bc);
 
 	// Create a graph ML
 	GraphMLWriter<Graph_CSR<ne_cp,ne_cp>> gw(g_csr);
diff --git a/src/HDF5_XdmfWriter/HDF5_XdmfWriter.hpp b/src/HDF5_XdmfWriter/HDF5_XdmfWriter.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..597c69b92eb18877741c75e0723dc0e9340a5973
--- /dev/null
+++ b/src/HDF5_XdmfWriter/HDF5_XdmfWriter.hpp
@@ -0,0 +1,24 @@
+/*
+ * H5PartWriter.hpp
+ *
+ *  Created on: Feb 7, 2016
+ *      Author: i-bird
+ */
+
+#ifndef OPENFPM_IO_SRC_HDF5_XDMFWRITER_HDF5_XDMFWRITER_HPP_
+#define OPENFPM_IO_SRC_HDF5_XDMFWRITER_HDF5_XDMFWRITER_HPP_
+
+#define H5PART_WRITER 0x20000
+
+#define H5_POINTSET 1
+
+template <unsigned int imp>
+class HDF5_XdmfWriter
+{
+
+};
+
+#include "HDF5_XdmfWriter_point_set.hpp"
+
+
+#endif /* OPENFPM_IO_SRC_HDF5_XDMFWRITER_HDF5_XDMFWRITER_HPP_ */
diff --git a/src/HDF5_XdmfWriter/HDF5_XdmfWriter_point_set.hpp b/src/HDF5_XdmfWriter/HDF5_XdmfWriter_point_set.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..fd760158524f56f7bf6e889b400f4908ef1c9ad6
--- /dev/null
+++ b/src/HDF5_XdmfWriter/HDF5_XdmfWriter_point_set.hpp
@@ -0,0 +1,178 @@
+/*
+ * H5PartWriter_point_set.hpp
+ *
+ *  Created on: Feb 7, 2016
+ *      Author: i-bird
+ */
+
+#ifndef OPENFPM_IO_SRC_HDF5_XDMFWRITER_HDF5_XDMFWRITER_POINT_SET_HPP_
+#define OPENFPM_IO_SRC_HDF5_XDMFWRITER_HDF5_XDMFWRITER_POINT_SET_HPP_
+
+#include "HDF5_XdmfWriter_util.hpp"
+#include "Vector/map_vector.hpp"
+#include "VCluster.hpp"
+
+/*! \brief this class is a functor for "for_each" algorithm
+ *
+ * This class is a functor for "for_each" algorithm. For each
+ * element of the boost::vector the operator() is called.
+ * Is mainly used to produce write each property in H5Part
+ *
+ * \tparam ele_v is the vector of properties
+ * \tparam seq, sequence of property to output
+ * \tparam has_name define if the structure define names for the properties
+ *
+ */
+
+template<typename ele_v, bool has_name>
+struct H5_prop_out
+{
+	// HDF5 file
+	hid_t file_id;
+
+	// vector that we are processing
+	ele_v & vv;
+
+	// Up to which element to write
+	size_t stop;
+
+	/*! \brief constructor
+	 *
+	 * \param v_out string to fill with the vertex properties
+	 *
+	 */
+	H5_prop_out(hid_t file_id, ele_v & vv, size_t stop)
+	:file_id(file_id),vv(vv),stop(stop)
+	{};
+
+	//! It produce an output for each property
+    template<typename T>
+    void operator()(T& t) const
+    {
+    	typedef typename boost::mpl::at<typename ele_v::value_type::value_type::type,boost::mpl::int_<T::value>>::type ptype;
+
+    	H5_write<ptype,T::value,ele_v>::write(file_id,std::string(ele_v::value_type::attributes::names[T::value]),vv,stop);
+    }
+};
+
+
+
+/*! \brief this class is a functor for "for_each" algorithm
+ *
+ * This class is a functor for "for_each" algorithm. For each
+ * element of the boost::vector the operator() is called.
+ * Is mainly used to produce an output for each property
+ *
+ * \tparam ele_v is the vector of properties
+ * \tparam seq, sequence of property to output
+ * \tparam has_name define if the structure define names
+ *
+ */
+template<typename ele_v>
+struct H5_prop_out<ele_v,false>
+{
+	// HDF5 file
+	hid_t file_id;
+
+	// vector that we are processing
+	ele_v & vv;
+
+	// Up to which element to write
+	size_t stop;
+
+	/*! \brief constructor
+	 *
+	 * \param v_out string to fill with the vertex properties
+	 *
+	 */
+	H5_prop_out(hid_t file_id, ele_v & vv, size_t stop)
+	:file_id(file_id),vv(vv),stop(stop)
+	{};
+
+	//! It produce an output for each property
+    template<typename T>
+    void operator()(T& t) const
+    {
+    	typedef typename boost::mpl::at<typename ele_v::value_type::type,boost::mpl::int_<T::value>>::type ptype;
+
+    	H5_write<ptype,T::value,ele_v>::write(file_id,std::string("attr") + std::to_string(T::value),vv,stop);
+    }
+};
+
+template <>
+class HDF5_XdmfWriter<H5_POINTSET>
+{
+	// Time step
+	int t;
+
+	//! HDF5 file
+	hid_t file_id;
+
+public:
+
+	/*!
+	 *
+	 * H5PartWriter constructor
+	 *
+	 */
+	HDF5_XdmfWriter()
+	:t(0)
+	{}
+
+
+	/*!
+	 *
+	 * \brief Write a set of particle position and properties into HDF5
+	 *
+	 * \tparam Pos Vector of positions type
+	 * \taparam Prp Vector of properties type
+	 * \tparam prp list of properties to output
+	 *
+	 * \param pos Vector with the positions
+	 * \param prp Vector with the properties
+	 * \param stop size of the vector to output
+	 *
+	 */
+	template<typename VPos, typename VPrp, int ... prp > bool write(const std::string & file, openfpm::vector<VPos> & v_pos, openfpm::vector<VPrp> & v_prp, size_t stop)
+	{
+		Vcluster & v_cl = *global_v_cluster;
+
+		// Open and HDF5 file in parallel
+
+		hid_t plist_id = H5Pcreate(H5P_FILE_ACCESS);
+		H5Pset_fapl_mpio(plist_id, v_cl.getMPIComm(), MPI_INFO_NULL);
+		file_id = H5Fcreate(file.c_str(), H5F_ACC_TRUNC, H5P_DEFAULT, plist_id);
+		H5Pclose(plist_id);
+
+		// Single coordinate positional vector
+		openfpm::vector<typename VPos::coord_type> x_n;
+		x_n.resize(stop);
+
+		//for each component, fill x_n
+		for (size_t i = 0 ; i < VPos::dims ; i++)
+		{
+			//
+			for (size_t j = 0 ; j < stop ; j++)
+				x_n.get(j) = v_pos.template get<0>(j)[i];
+
+			std::stringstream str;
+			str << "x" << i;
+
+			HDF5CreateDataSet<typename VPos::coord_type>(file_id,str.str(),x_n.getPointer(),stop*sizeof(typename VPos::coord_type));
+		}
+
+		// Now we write the properties
+
+		typedef typename to_boost_vmpl<prp ... >::type v_prp_seq;
+		H5_prop_out<openfpm::vector<VPrp>,has_attributes<VPrp>::value> f(file_id,v_prp,stop);
+
+		boost::mpl::for_each_ref<v_prp_seq>(f);
+
+		H5Fclose(file_id);
+
+		return true;
+	}
+};
+
+
+#endif /* OPENFPM_IO_SRC_HDF5_XDMFWRITER_HDF5_XDMFWRITER_POINT_SET_HPP_ */
diff --git a/src/HDF5_XdmfWriter/HDF5_XdmfWriter_unit_tests.hpp b/src/HDF5_XdmfWriter/HDF5_XdmfWriter_unit_tests.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..86bd879f3da0f221c1f3e6fa675d1fc00587de3f
--- /dev/null
+++ b/src/HDF5_XdmfWriter/HDF5_XdmfWriter_unit_tests.hpp
@@ -0,0 +1,64 @@
+/*
+ * H5PartWriter_unit_tests.hpp
+ *
+ *  Created on: Feb 22, 2016
+ *      Author: i-bird
+ */
+
+#ifndef OPENFPM_IO_SRC_HDF5_XDMFWRITER_HDF5_XDMFWRITER_UNIT_TESTS_HPP_
+#define OPENFPM_IO_SRC_HDF5_XDMFWRITER_HDF5_XDMFWRITER_UNIT_TESTS_HPP_
+
+#include "VCluster.hpp"
+#include "util/SimpleRNG.hpp"
+#include "HDF5_XdmfWriter.hpp"
+
+BOOST_AUTO_TEST_SUITE( HDF5_writer_test )
+
+
+BOOST_AUTO_TEST_CASE( HDF5_writer_use)
+{
+	openfpm::vector<Point<3,double>> pv;
+	openfpm::vector<Point_test<double>> pvp;
+
+	SimpleRNG rng;
+
+	Vcluster & v_cl = *global_v_cluster;
+
+	if (v_cl.getProcessingUnits() != 3)
+		return;
+
+	double z_base = v_cl.getProcessUnitID();
+
+	// fill 1000 particles for each processors
+
+	for (size_t i = 0 ; i < 1000 ; i++)
+	{
+		Point<3,double> p;
+		p[0] = rng.GetUniform();
+		p[1] = rng.GetUniform();
+		p[2] = z_base+rng.GetUniform();
+
+		pv.add(p);
+
+		p[0] += 2.0;
+
+		Point_test<double> pt;
+		pt.fill();
+
+		pvp.add(pt);
+	}
+
+	HDF5_XdmfWriter<H5_POINTSET> h5p;
+	h5p.template write<Point<3,double>,Point_test<double>,0,1,4,5>("h5part.h5",pv,pvp,1000);
+
+	// check that match
+
+	bool test = compare("test_h5part.h5part","test_h5part_test.h5part");
+	BOOST_REQUIRE_EQUAL(true,test);
+}
+
+BOOST_AUTO_TEST_SUITE_END()
+
+
+
+#endif /* OPENFPM_IO_SRC_HDF5_XDMFWRITER_HDF5_XDMFWRITER_UNIT_TESTS_HPP_ */
diff --git a/src/HDF5_XdmfWriter/HDF5_XdmfWriter_util.hpp b/src/HDF5_XdmfWriter/HDF5_XdmfWriter_util.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..db7acd59b26ee8da0ed7e25da3a7071f17e6f3ff
--- /dev/null
+++ b/src/HDF5_XdmfWriter/HDF5_XdmfWriter_util.hpp
@@ -0,0 +1,300 @@
+/*
+ * H5PartWriteData_meta.hpp
+ *
+ *  Created on: Feb 22, 2016
+ *      Author: i-bird
+ */
+
+#ifndef OPENFPM_IO_SRC_HDF5_XDMFWRITER_HDF5_XDMFWRITER_UTIL_HPP_
+#define OPENFPM_IO_SRC_HDF5_XDMFWRITER_HDF5_XDMFWRITER_UTIL_HPP_
+
+#include "hdf5.h"
+#include "Vector/map_vector.hpp"
+
+/*! \brief HDF5 Create the data-set in the file
+ *
+ * \tparam type Type to write
+ *
+ * \param file_id Id of the file
+ * \param filespace id where to write
+ * \param str dataset to write
+ * \param ptr pointer with the data to write
+ * \param sz size of the data to write
+ *
+ * \return true if the function succeed
+ *
+ */
+template<typename type> bool HDF5CreateDataSet(hid_t file_id, const std::string & str ,void * ptr, size_t sz)
+{
+	hid_t plist_id = H5Pcreate(H5P_DATASET_XFER);
+	if (plist_id < 0)
+		return false;
+
+	/* Create the dataspace for the position dataset.  */
+	hsize_t dimsf[1] = {sz};
+	hid_t filespace = H5Screate_simple(1, dimsf, NULL);
+	if (filespace < 0)
+		return false;
+
+	if (std::is_same<type,char>::value == true)
+	{
+		hid_t dset_id = H5Dcreate(file_id, str.c_str(), H5T_NATIVE_CHAR, filespace, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+		if (dset_id < 0)
+			return false;
+
+		herr_t status = H5Dwrite(dset_id, H5T_NATIVE_CHAR, H5S_ALL, H5S_ALL, plist_id, ptr);
+		if (status < 0)
+			return false;
+
+	    H5Dclose(dset_id);
+	    H5Dclose(filespace);
+	    return true;
+	}
+/*	else if (std::is_same<type,signed char>::value == true)
+	{
+		dset_id = H5Dcreate(file_id, std.c_str(), H5T_NATIVE_SCHAR, filespace, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+		H5Dclose(dset_id);
+		return status;
+	}
+	else if (std::is_same<type,unsigned char>::value == true)
+	{
+		dset_id = H5Dcreate(file_id, std.c_str(), H5T_NATIVE_UCHAR, filespace, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+	}
+	else if (std::is_same<type,short>::value == true)
+	{
+		dset_id = H5Dcreate(file_id, std.c_str(), H5T_NATIVE_SHORT, filespace, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+	}
+	else if (std::is_same<type,unsigned short>::value == true)
+	{
+		dset_id = H5Dcreate(file_id, std.c_str(), H5T_NATIVE_USHORT, filespace, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+	}
+	else if (std::is_same<type,int>::value == true)
+	{
+		dset_id = H5Dcreate(file_id, std.c_str(), H5T_NATIVE_INT, filespace, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+	}
+	else if (std::is_same<type,unsigned int>::value == true)
+	{
+		dset_id = H5Dcreate(file_id, std.c_str(), H5T_NATIVE_UINT, filespace, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+	}
+	else if (std::is_same<type,long>::value == true)
+	{
+		dset_id = H5Dcreate(file_id, std.c_str(), H5T_NATIVE_LONG, filespace, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+	}
+	else if (std::is_same<type,unsigned long>::value == true)
+	{
+		dset_id = H5Dcreate(file_id, std.c_str(), H5T_NATIVE_ULONG, filespace, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+	}
+	else if (std::is_same<type,long long>::value == true)
+	{
+		dset_id = H5Dcreate(file_id, std.c_str(), H5T_NATIVE_LLONG, filespace, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+	}
+	else if (std::is_same<type,unsigned long long>::value == true)
+	{
+		dset_id = H5Dcreate(file_id, std.c_str(), H5T_NATIVE_ULLONG, filespace, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+	}
+	else if (std::is_same<type,float>::value == true)
+	{
+		dset_id = H5Dcreate(file_id, std.c_str(), H5T_NATIVE_FLOAT, filespace, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+	}*/
+	else if (std::is_same<type,double>::value == true)
+	{
+		hid_t dset_id = H5Dcreate(file_id, str.c_str(), H5T_NATIVE_DOUBLE, filespace, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+		if (dset_id < 0)
+			return false;
+
+		herr_t status = H5Dwrite(dset_id, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, plist_id, ptr);
+		if (status < 0)
+			return false;
+
+	    H5Dclose(dset_id);
+	    H5Dclose(filespace);
+	    return true;
+	}
+	/*else if (std::is_same<type,long double>::value == true)
+	{
+		dset_id = H5Dcreate(file_id, std.c_str(), H5T_NATIVE_LDOUBLE, filespace, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+	}*/
+
+	return true;
+}
+
+
+/*! \brief Write an HDF5 dataset in case of scalars and vectors
+ *
+ * \tparam T type to write
+ * \tparam pid Property id
+ * \tparam V Vector containing the information
+ *
+ */
+template<typename T,size_t pid, typename V>
+struct H5_write
+{
+	/*! \brief write
+	 *
+	 * \param file_id HDF5 file
+	 * \param str dataset name
+	 * \param v Vector containing the information
+	 * \param stop size to store
+	 *
+	 */
+	static inline void write(hid_t file_id, const std::string & str, V & v, size_t stop)
+	{
+		// Create the buffer
+		openfpm::vector<T> buffer;
+		buffer.resize(stop);
+
+		for (size_t j = 0 ; j < stop ; j++)
+			buffer.get(j) = v.template get<pid>(j);
+
+		HDF5CreateDataSet<T>(file_id,str.c_str(),buffer.getPointer(),stop*sizeof(T));
+	}
+};
+
+//! Partial specialization for N=1 1D-Array
+template<typename T,size_t pid, typename V,size_t N1>
+struct H5_write<T[N1],pid,V>
+{
+
+	/*! \brief write
+	 *
+	 * \param file_id HDF5 file
+	 * \param str dataset name
+	 * \param v Vector containing the information
+	 * \param stop size to store
+	 *
+	 */
+	static inline void write(hid_t file_id, const std::string & str, V & v, size_t stop)
+	{
+		for (size_t i1 = 0 ; i1 < N1 ; i1++)
+		{
+			// Create the buffer
+			openfpm::vector<T> buffer;
+			buffer.resize(stop);
+
+			for (size_t j = 0 ; j < stop ; j++)
+				buffer.get(j) = v.template get<pid>(j)[i1];
+
+			std::stringstream sstr;
+			sstr << "_" << i1;
+
+			HDF5CreateDataSet<T>(file_id,std::string(str) + sstr.str(),v.getPointer(),stop*sizeof(T));
+		}
+	}
+};
+
+//! Partial specialization for N=2 2D-Array
+template<typename T, size_t pid, typename V,size_t N1,size_t N2>
+struct H5_write<T[N1][N2],pid,V>
+{
+
+	/*! \brief write
+	 *
+	 * \param file_id HDF5 file
+	 * \param str dataset name
+	 * \param v Vector containing the information
+	 * \param stop size to store
+	 *
+	 */
+	static inline void write(hid_t file_id, const std::string & str, V & v, size_t stop)
+	{
+		for (size_t i1 = 0 ; i1 < N1 ; i1++)
+		{
+			for (size_t i2 = 0 ; i2 < N2 ; i2++)
+			{
+				// Create the buffer
+				openfpm::vector<T> buffer;
+				buffer.resize(stop);
+
+				for (size_t j = 0 ; j < stop ; j++)
+					buffer.get(j) = v.template get<pid>(j)[i1][i2];
+
+				std::stringstream sstr;
+				sstr << "_" << i1 << "_" << i2;
+
+				HDF5CreateDataSet<T>(file_id,std::string(str) + sstr.str(),v.getPointer(),stop*sizeof(T));
+			}
+		}
+	}
+};
+
+//! Partial specialization for N=3
+template<typename T, size_t pid, typename V,size_t N1,size_t N2,size_t N3>
+struct H5_write<T[N1][N2][N3],pid,V>
+{
+
+	/*! \brief write
+	 *
+	 * \param file_id HDF5 file
+	 * \param str dataset name
+	 * \param v Vector containing the information
+	 * \param stop size to store
+	 *
+	 */
+	static inline void write(hid_t file_id, const std::string & str, V & v, size_t stop)
+	{
+		for (size_t i1 = 0 ; i1 < N1 ; i1++)
+		{
+			for (size_t i2 = 0 ; i2 < N2 ; i2++)
+			{
+				for (size_t i3 = 0 ; i3 < N3 ; i3++)
+				{
+					// Create the buffer
+					openfpm::vector<T> buffer;
+					buffer.resize(stop);
+
+					for (size_t j = 0 ; j < stop ; j++)
+						buffer.get(j) = v.template get<pid>(j)[i1][i2][i3];
+
+					std::stringstream sstr;
+					sstr << "_" << i1 << "_" << i2 << "_" << i3;
+
+					HDF5CreateDataSet<T>(file_id,std::string(str) + sstr.str(),v.getPointer(),stop*sizeof(T));
+				}
+			}
+		}
+	}
+};
+
+//! Partial specialization for N=4
+template<typename T, size_t pid, typename V ,size_t N1,size_t N2,size_t N3,size_t N4>
+struct H5_write<T[N1][N2][N3][N4],pid,V>
+{
+
+	/*! \brief write
+	 *
+	 * \param file_id HDF5 file
+	 * \param str dataset name
+	 * \param v Vector containing the information
+	 * \param stop size to store
+	 *
+	 */
+	static inline void write(hid_t file_id, const std::string & str, V & v, size_t stop)
+	{
+		for (size_t i1 = 0 ; i1 < N1 ; i1++)
+		{
+			for (size_t i2 = 0 ; i2 < N2 ; i2++)
+			{
+				for (size_t i3 = 0 ; i3 < N3 ; i3++)
+				{
+					for (size_t i4 = 0 ; i4 < N4 ; i4++)
+					{
+						// Create the buffer
+						openfpm::vector<T> buffer;
+						buffer.resize(stop);
+
+						for (size_t j = 0 ; j < stop ; j++)
+							buffer.get(j) = v.template get<pid>(j)[i1][i2][i3][i4];
+
+
+						std::stringstream sstr;
+						sstr << "_" << i1 << "_" << i2 << "_" << i3 << "_" << i4;
+
+						HDF5CreateDataSet<T>(file_id,std::string(str) + sstr.str(),v.getPointer(),stop*sizeof(T));
+					}
+				}
+			}
+		}
+	}
+};
+
+#endif /* OPENFPM_IO_SRC_HDF5_XDMFWRITER_HDF5_XDMFWRITER_UTIL_HPP_ */
diff --git a/src/Makefile.am b/src/Makefile.am
index a2698977663d8692f4324d9df2627a17e80cc613..a51c04f242bbbefe1b8d0f51dbfaa570b2d47d7d 100755
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1,13 +1,16 @@
 
-LINKLIBS = $(PTHREAD_LIBS) $(OPT_LIBS) $(BOOST_IOSTREAMS_LIB)  $(BOOST_LDFLAGS) $(BOOST_PROGRAM_OPTIONS_LIB) $(BOOST_THREAD_LIB)
+LINKLIBS = $(PTHREAD_LIBS) $(OPT_LIBS) $(BOOST_IOSTREAMS_LIB)  $(BOOST_LDFLAGS) $(BOOST_PROGRAM_OPTIONS_LIB) $(BOOST_THREAD_LIB) $(HDF5_LDFLAGS)  $(HDF5_LIBS)
 
 noinst_PROGRAMS = io
-io_SOURCES = main.cpp ../../openfpm_devices/src/memory/HeapMemory.cpp ../../openfpm_devices/src/Memleak_check.cpp
-io_CXXFLAGS = $(CUDA_CFLAGS) $(INCLUDES_PATH) $(BOOST_CPPFLAGS) -I/usr/local/include
+io_SOURCES = main.cpp ../../openfpm_vcluster/src/VCluster.cpp ../../openfpm_devices/src/memory/HeapMemory.cpp ../../openfpm_devices/src/Memleak_check.cpp
+io_CXXFLAGS = $(CUDA_CFLAGS) $(INCLUDES_PATH) $(BOOST_CPPFLAGS) -I/usr/local/include $(HDF5_CPPFLAGS)
 io_CFLAGS = $(CUDA_CFLAGS)
 io_LDADD = $(LINKLIBS)
 
-nobase_include_HEADERS = csv_multiarray.hpp CSVWriter.hpp GraphMLWriter.hpp util.hpp VTKWriter.hpp VTKWriter_graph.hpp VTKWriter_grids.hpp VTKWriter_grids_st.hpp VTKWriter_grids_util.hpp VTKWriter_vector_box.hpp
+nobase_include_HEADERS = CSVWriter/csv_multiarray.hpp CSVWriter/CSVWriter.hpp \
+GraphMLWriter/GraphMLWriter.hpp util.hpp \
+VTKWriter/VTKWriter.hpp VTKWriter/VTKWriter_graph.hpp VTKWriter/VTKWriter_point_set.hpp  VTKWriter/VTKWriter_grids.hpp VTKWriter/VTKWriter_grids_st.hpp VTKWriter/VTKWriter_grids_util.hpp VTKWriter/VTKWriter_vector_box.hpp HDF5_XdmfWriter/HDF5_XdmfWriter.hpp HDF5_XdmfWriter/HDF5_XdmfWriter_point_set.hpp HDF5_XdmfWriter/HDF5_XdmfWriter_util.hpp  \
+Plot/GoogleChart.hpp Plot/util.hpp
 
 
 .cu.o :
diff --git a/src/Plot/GoogleChart.hpp b/src/Plot/GoogleChart.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..1bf4a0814decb6cfb3545255e546ca415dab0304
--- /dev/null
+++ b/src/Plot/GoogleChart.hpp
@@ -0,0 +1,547 @@
+/*
+ * GoogleChart.hpp
+ *
+ *  Created on: Jan 9, 2016
+ *      Author: i-bird
+ */
+
+#ifndef OPENFPM_DATA_SRC_PLOT_GOOGLECHART_HPP_
+#define OPENFPM_DATA_SRC_PLOT_GOOGLECHART_HPP_
+
+#include <fstream>
+#include "Vector/map_vector.hpp"
+
+#define GGRAPH_COLUMS 1
+#define GGRAPH_POINTS 2
+
+/*! \brief Google chart options
+ *
+ */
+struct GCoptions
+{
+	//! Title of the chart
+	std::string title;
+	//! Y axis name
+	std::string yAxis;
+	//! X axis name
+	std::string xAxis;
+
+	//! Type of chart (list of the option can be founded in Google Chart API for seriesType)
+	//! Possible options are:
+	//!  'line', 'area', 'bars', 'candlesticks', and 'steppedArea'
+	//! default: line
+	std::string stype;
+
+	//! Extended series options
+	//! Example {5: {type: 'line'}} specify that the series number 5 must be represented
+	//! with a line
+	std::string stypeext;
+
+	size_t width=900;
+	size_t heigh=500;
+
+	//! Flag that specify if the colums are stacked
+	//! Check in Google Chart for is stacked option
+	bool isStacked = false;
+
+	//! Width of the line
+	size_t lineWidth = 4;
+
+	//! Style for all the intervals
+	//! Check Google Chart API intervals option
+	std::string intervalsext;
+
+	//! Style for each interval
+	//! Check Google Chart API interval option
+	std::string intervalext;
+
+	//! more
+	std::string more;
+
+	GCoptions & operator=(const GCoptions & opt)
+	{
+		title = opt.title;
+		yAxis = opt.yAxis;
+		xAxis = opt.xAxis;
+		stype = opt.stype;
+		stypeext = opt.stypeext;
+		width=opt.width;
+		heigh=opt.heigh;
+
+		lineWidth = opt.lineWidth;
+		intervalsext = opt.intervalsext;
+		more = opt.more;
+
+		return *this;
+	}
+};
+
+struct GGraph
+{
+	// TypeOfGraph
+	size_t type;
+
+	// data
+	std::string data;
+
+	// option
+	std::string option;
+
+	// Google chart option
+	GCoptions opt;
+};
+
+/////////////////// Constants strings usefull to construct the HTML page //////////
+
+const std::string begin_data ="<html>\n\
+  <head>\n\
+    <script type=\"text/javascript\" src=\"https://www.gstatic.com/charts/loader.js\"></script>\n\
+    <script type=\"text/javascript\">\n\
+      google.charts.load('current', {'packages':['corechart']});\n\
+      google.charts.setOnLoadCallback(drawVisualization);\n\
+\n\
+\n\
+      function drawVisualization() {\n";
+
+const std::string end_data="]);\n\n";
+
+const std::string begin_div = "}</script>\n\
+</head>\n\
+<body>\n";
+
+const std::string div_end = "</body>\n\
+</html>\n";
+
+/////////////////////////////////////////////////////////////////////
+
+/*! It convert an array y or a set of two array x,y into a Google chart
+ *
+ */
+class GoogleChart
+{
+	// set of graphs
+	openfpm::vector<GGraph> set_of_graphs;
+
+	// set inject HTML;
+	openfpm::vector<std::string> injectHTML;
+
+	/*! \brief Given X and Y vector return the string representing the data section of the Google Chart
+	 *
+	 * \param X vector
+	 * \param Y vector
+	 * \param i counter
+	 *
+	 * \return string with the data section
+	 *
+	 */
+	template<typename X, typename Y> std::string get_points_plot_data(const openfpm::vector<X> & x, const openfpm::vector<Y> & y, const openfpm::vector<std::string> & yn, const GCoptions & opt, size_t i)
+	{
+		std::stringstream data;
+
+		size_t interval = 0;
+
+		// we require that the number of x elements are the same as y elements
+
+		if (x.size() != y.size())
+			std::cerr << "Error: " << __FILE__ << ":" << __LINE__ << " vector x and the vector y must have the same number of elements " << x.size() << "!=" << y.size() << "\n";
+
+		// Google chart visualization
+        data << "var data" << i << " = new google.visualization.DataTable();\n";
+		if (std::is_same<X,typename std::string>::value == true)
+			data << "data" << i << ".addColumn("  << "'string'" << "," << "'" << opt.xAxis <<"');\n";
+		else
+			data << "data" << i << ".addColumn("  << "'number'" << "," << "'" << opt.xAxis <<"');\n";
+
+        for (size_t j = 0 ; j < y.last().size() ; j++)
+        {
+        	if (yn.get(j) == std::string("interval"))
+        	{
+        		data << "data" << i << ".addColumn({id:'i" << interval/2 << "', type:'number', role:'interval'});\n";
+        		interval++;
+        	}
+        	else
+        		data << "data" << i << ".addColumn("  << "'number'" << "," << "'" << yn.get(j) <<"');\n";
+        }
+
+        data << "data" << i << ".addRows([\n";
+        for (size_t i = 0 ; i < y.size() ; i++)
+        {
+
+        	for (size_t j = 0 ; j < y.get(i).size()+1 ; j++)
+        	{
+        		// the first is x
+        		if (j == 0)
+        		{
+        			if (std::is_same<X,typename std::string>::value == true)
+        				data << "['"  << x.get(i) << "'";
+        			else
+        				data << "["  << x.get(i);
+        		}
+        		else
+        			data << "," << y.get(i).get(j-1);
+        	}
+        	data << "],\n";
+        }
+
+		return data.str();
+	}
+
+	/*! \brief Given X and Y vector return the string representing the data section of the Google Chart
+	 *
+	 * \param X vector
+	 * \param Y vector
+	 *
+	 * \return string with the data section
+	 *
+	 */
+	template<typename X, typename Y, typename Yn> std::string get_colums_bar_data(const openfpm::vector<X> & x, const openfpm::vector<Y> & y, const openfpm::vector<Yn> & yn, const GCoptions & opt, size_t i)
+	{
+		std::stringstream data;
+
+		data << "var data";
+		data << i;
+		data << " = google.visualization.arrayToDataTable([\n";
+
+		// we require that the number of x elements are the same as y elements
+
+		if (x.size() != y.size())
+			std::cerr << "Error: " << __FILE__ << ":" << __LINE__ << " vector x and the vector y must have the same number of elements " << x.size() << "!=" << y.size() << "\n";
+
+		data << "['";
+		data << opt.xAxis << "'";
+		for (size_t i = 0 ; i < yn.size() ; i++)
+			data << ",'" << std::to_string(yn.get(i)) << "'";
+
+		data << "],\n";
+
+		// Write the values
+		for (size_t i = 0 ; i < y.size() ; i++)
+		{
+			data << "[";
+			data << "'" << std::to_string(x.get(i)) << "'";
+			for (size_t j = 0 ; j < y.get(i).size() ; j++)
+				data << "," << std::to_string(y.get(i).get(j));
+
+			data << "],\n";
+		}
+
+		return data.str();
+	}
+
+	std::string get_colums_bar_option(const GCoptions & opt)
+	{
+		std::stringstream str;
+		str << "title : '" << opt.title << "',\n";
+	    str << "vAxis: {title: '" << opt.yAxis <<  "'},\n";
+	    str << "hAxis: {title: '" << opt.xAxis << "'},\n";
+	    str << "seriesType: '" << opt.stype << "',\n";
+	    if (opt.stypeext.size() != 0)
+	    	str << "series: " << opt.stypeext << "\n";
+	    str << opt.more;
+
+	    return str.str();
+	}
+
+	std::string get_points_plot_option(const GCoptions & opt)
+	{
+		std::stringstream str;
+		str << "title : '" << opt.title << "',\n";
+	    str << "vAxis: {title: '" << opt.yAxis <<  "'},\n";
+	    str << "hAxis: {title: '" << opt.xAxis << "'},\n";
+	    str << "curveType: 'function',\n";
+
+        str << "lineWidth: " << opt.lineWidth << ",\n";
+        if (opt.intervalsext.size() != 0)
+        	str << "intervals: " << opt.intervalsext << ",\n";
+        else
+        	str << "intervals: " << "{ 'style':'area' }" << ",\n";
+
+        if (opt.intervalext.size() != 0)
+        	str << "interval: " << opt.intervalext << "\n";
+
+        str << opt.more;
+
+	    return str.str();
+	}
+
+	/*! \brief Add a graph data variable
+	 *
+	 * \param of file out
+	 * \param i id
+	 * \param data string
+	 *
+	 */
+	void addData(std::ofstream & of, size_t i, const std::string & data)
+	{
+
+		of << data;
+		of << "]);\n";
+	}
+
+	/*! \brief Add an option data variable
+	 *
+	 * \param of file out
+	 * \param i id
+	 * \param opt string
+	 *
+	 */
+	void addOption(std::ofstream & of, size_t i, const std::string & opt)
+	{
+		of << "var options";
+		of << i;
+		of << "= {\n";
+		of << opt;
+		of << "};\n";
+	}
+
+	/*! \brief Add a draw div section
+	 *
+	 * \param of file out
+	 * \param i id
+	 *
+	 */
+	void addDrawDiv(std::ofstream & of, size_t i)
+	{
+		of << "var chart = new google.visualization.ComboChart(document.getElementById('chart_div";
+		of << i;
+		of << "'));chart.draw(data";
+		of << i;
+		of << ", options";
+		of << i;
+		of << ");\n";
+	}
+
+	/*! \brief Add a div section
+	 *
+	 * \param i id
+	 * \param gc GoogleChart option
+	 *
+	 */
+	void addDiv(std::ofstream & of, size_t i, const GCoptions & gc)
+	{
+		of << "<div id=\"chart_div";
+		of << i;
+		of << "\" style=\"width: ";
+		of << gc.width;
+		of << "px; height: ";
+		of << gc.heigh;
+		of << "px;\"></div>\n";
+	}
+
+public:
+
+	GoogleChart()
+	{
+		injectHTML.add();
+	}
+
+	/*! \brief Add a colums graph
+	 *
+	 * \param y A vector of vector of values (numbers) the size of y indicate how many columns
+	 *          has the graph while the internal vector can store multiple datasets
+	 *
+	 */
+	template<typename Y> void AddColumsGraph(openfpm::vector<Y> & y)
+	{
+		openfpm::vector<std::string> x;
+		x.resize(y.size());
+
+		AddColumsGraph<std::string,Y>(x,y);
+	}
+
+	/*! \brief Add a colums graph
+	 *
+	 * \param y A vector of vector of values (numbers) the size of y indicate how many columns
+	 *          has the graph while the internal vector can store multiple datasets
+	 *
+	 * \param x Give a name or number to each colums, so can be a string or a number
+	 *
+	 */
+	template<typename X, typename Y> void AddColumsGraph(openfpm::vector<X> & x, openfpm::vector<Y> & y)
+	{
+		GCoptions opt;
+
+		openfpm::vector<std::string> yn;
+
+		if (y.size() != 0)
+			yn.resize(y.get(0).size());
+
+		AddColumsGraph<X,Y,std::string>(x,y,yn,opt);
+	}
+
+	/*! \brief Add a colums graph
+	 *
+	 * \param y A vector of vector of values (numbers) the size of y indicate how many columns
+	 *          has the graph while the internal vector can store multiple datasets
+	 *
+	 * \param x Give a name or number to each colums, so can be a string or a number
+	 *
+	 * \param yn Give a name to each dataset
+	 *
+	 */
+	template<typename X, typename Y, typename Yn> void AddColumsGraph(openfpm::vector<X> & x, openfpm::vector<Y> & y, openfpm::vector<Yn> & yn)
+	{
+		GCoptions opt;
+
+		AddColumsGraph(x,y,yn,opt);
+	}
+
+	/*! \brief Add a colums graph
+	 *
+	 * \param y A vector of vector of values (numbers) the size of y indicate how many columns
+	 *          has the graph while the internal vector can store multiple datasets
+	 *
+	 * \param x Give a name or number to each colums, so can be a string or a number
+	 *
+	 * \param yn Give a name to each dataset
+	 *
+	 * \param opt Graph options
+	 *
+	 */
+	template<typename X, typename Y, typename Yn> void AddColumsGraph(openfpm::vector<X> & x, openfpm::vector<Y> & y, openfpm::vector<Yn> & yn , const GCoptions & opt)
+	{
+		set_of_graphs.add();
+		injectHTML.add();
+
+		// Check that all the internal vector has the same number of elements
+
+		if (y.size() != 0)
+		{
+			size_t sz = y.get(0).size();
+			for (size_t i = 0; i < y.size() ; i++)
+			{
+				if (y.get(i).size() != sz)
+					std::cerr << __FILE__ << ":" << __LINE__ << " error all the elements in the y vector must have the same numbers, element " << i << ": " << y.get(i).size() << " " << " mismatch the numbers of elements at 0: " << sz << "/n";
+			}
+		}
+
+		set_of_graphs.last().type = GGRAPH_COLUMS;
+		set_of_graphs.last().data = get_colums_bar_data(x,y,yn,opt,set_of_graphs.size()-1);
+		set_of_graphs.last().option = get_colums_bar_option(opt);
+		set_of_graphs.last().opt = opt;
+	}
+
+	/*! \brief Add a simple plot graph
+	 *
+	 * \param y A vector of vector of values (numbers) the size of y indicate how many x values
+	 *          or colums do we have, while the internal vector can store multiple realizations,
+	 *          or min and max, for error bar
+	 *
+	 * \param x Give a name or number to each colums, so can be a string or a number
+	 *
+	 * \param opt Graph options
+	 *
+	 */
+	template<typename X, typename Y> void AddPointsGraph(openfpm::vector<X> & x, openfpm::vector<Y> & y , const GCoptions & opt)
+	{
+		openfpm::vector<std::string> yn;
+
+		if (y.size() == 0)
+		{
+			std::cerr << "Error: " << __FILE__ << ":" << __LINE__ << " vector y must be filled";
+			return;
+		}
+
+		for (size_t i = 0 ; i < y.last().size() ; i++)
+			yn.add(std::string("line") + std::to_string(i));
+
+		AddPointsGraph(x,y,yn,opt);
+	}
+
+	/*! \brief Add a simple plot graph
+	 *
+	 * \param y A vector of vector of values (numbers) the size of y indicate how many x values
+	 *          or colums we have, while the internal vector store multiple lines,
+	 *          or error bars
+	 *
+	 * \param x Give a name or number to each colums, so can be a string or a number
+	 *
+	 * \param yn Give a name to each line, or specify an error bar
+	 *
+	 * \param opt Graph options
+	 *
+	 */
+	template<typename X, typename Y> void AddPointsGraph(openfpm::vector<X> & x, openfpm::vector<Y> & y , const openfpm::vector<std::string> & yn, const GCoptions & opt)
+	{
+		if (y.size() == 0)
+		{
+			std::cerr << "Error: " << __FILE__ << ":" << __LINE__ << " vector y must be filled\n";
+			return;
+		}
+
+		set_of_graphs.add();
+		injectHTML.add();
+
+		// Check that all the internal vectors has the same number of elements
+
+		if (y.size() != 0)
+		{
+			size_t sz = y.get(0).size();
+			for (size_t i = 0; i < y.size() ; i++)
+			{
+				if (y.get(i).size() != sz)
+					std::cerr << __FILE__ << ":" << __LINE__ << " error all the elements in the y vector must have the same numbers, element " << i << ": " << y.get(i).size() << " " << " mismatch the numbers of elements at 0: " << sz << "/n";
+			}
+		}
+
+		set_of_graphs.last().type = GGRAPH_POINTS;
+		set_of_graphs.last().data = get_points_plot_data(x,y,yn,opt,set_of_graphs.size()-1);
+		set_of_graphs.last().option = get_points_plot_option(opt);
+		set_of_graphs.last().opt = opt;
+	}
+
+	/*! \brief Add HTML text
+	 *
+	 * \param html add html text in the page
+	 *
+	 */
+	void addHTML(const std::string & html)
+	{
+		injectHTML.last() = html;
+	}
+
+	/*! \brief It write the html file
+	 *
+	 * \param file output html file
+	 *
+	 */
+	void write(std::string file)
+	{
+		// Open a file
+
+		std::ofstream of(file);
+
+		// Check if the file is open
+		if (of.is_open() == false)
+		{std::cerr << "Error cannot create the HTML file: " + file + "\n";}
+
+		// write the file
+
+		of << begin_data;
+
+		for (size_t i = 0 ; i < set_of_graphs.size() ; i++)
+			addData(of,i,set_of_graphs.get(i).data);
+
+		for (size_t i = 0 ; i < set_of_graphs.size() ; i++)
+			addOption(of,i,set_of_graphs.get(i).option);
+
+		for (size_t i = 0 ; i < set_of_graphs.size() ; i++)
+			addDrawDiv(of,i);
+
+		of << begin_div;
+
+		of << injectHTML.get(0);
+
+		for (size_t i = 0 ; i < set_of_graphs.size() ; i++)
+		{
+			addDiv(of,i,set_of_graphs.get(i).opt);
+			of << injectHTML.get(i+1);
+		}
+
+		of << div_end;
+
+		of.close();
+	}
+};
+
+#endif /* OPENFPM_DATA_SRC_PLOT_GOOGLECHART_HPP_ */
diff --git a/src/Plot/Plot_unit_tests.hpp b/src/Plot/Plot_unit_tests.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..7c77f192d8b3d0b7c0d88fce3e4a2aca275cd618
--- /dev/null
+++ b/src/Plot/Plot_unit_tests.hpp
@@ -0,0 +1,428 @@
+/*
+ * Plot_unit_tests.hpp
+ *
+ *  Created on: Jan 9, 2016
+ *      Author: i-bird
+ */
+
+#ifndef OPENFPM_DATA_SRC_PLOT_PLOT_UNIT_TESTS_HPP_
+#define OPENFPM_DATA_SRC_PLOT_PLOT_UNIT_TESTS_HPP_
+
+#include "GoogleChart.hpp"
+#include "Plot/util.hpp"
+
+BOOST_AUTO_TEST_SUITE( plot_unit_test )
+
+BOOST_AUTO_TEST_CASE( google_chart )
+{
+	openfpm::vector<std::string> x;
+	openfpm::vector<openfpm::vector<size_t>> y;
+	openfpm::vector<std::string> yn;
+
+	x.add("colum1");
+	x.add("colum2");
+	x.add("colum3");
+	x.add("colum4");
+	x.add("colum5");
+	x.add("colum6");
+
+	// Each colum can have multiple data set (in this case 4 dataset)
+	// Each dataset can have a name
+	yn.add("dataset1");
+	yn.add("dataset2");
+	yn.add("dataset3");
+	yn.add("dataset4");
+
+	// Each colums can have multiple data-set
+	y.add({2,3,5,6});
+	y.add({5,6,1,6});
+	y.add({2,1,6,9});
+	y.add({1,6,3,2});
+	y.add({3,3,0,6});
+	y.add({2,1,4,6});
+
+	// Google charts options
+	GCoptions options;
+
+	options.title = std::string("Example");
+	options.yAxis = std::string("Y Axis");
+	options.xAxis = std::string("X Axis");
+	options.stype = std::string("bars");
+
+	// it say that the colum4 must me represented with a line
+	options.stypeext = std::string("{3: {type: 'line'}}");
+
+	GoogleChart cg;
+	cg.AddColumsGraph(x,y,yn,options);
+	cg.write("gc_out.html");
+
+	bool test = compare("gc_out.html","gc_out_test.html");
+	BOOST_REQUIRE_EQUAL(true,test);
+}
+
+BOOST_AUTO_TEST_CASE( google_chart2 )
+{
+	openfpm::vector<std::string> x;
+	openfpm::vector<openfpm::vector<float>> y;
+	openfpm::vector<std::string> yn;
+
+	x.add("colum1");
+	x.add("colum2");
+	x.add("colum3");
+	x.add("colum4");
+	x.add("colum5");
+	x.add("colum6");
+
+	// Each colum can have multiple data set (in this case 4 dataset)
+	// Each dataset can have a name
+	yn.add("dataset1");
+	yn.add("dataset2");
+	yn.add("dataset3");
+	yn.add("dataset4");
+
+	// Each colums can have multiple data-set
+	y.add({2.2,1.3,4.5,0.6});
+	y.add({5.0,6.1,1.3,2.6});
+	y.add({2.1,1.0,6.1,9.3});
+	y.add({1.1,6.1,3.0,2.0});
+	y.add({3.3,0.3,0.0,6.2});
+	y.add({2.0,1.1,4.0,6.1});
+
+	// Google charts options
+	GCoptions options;
+
+	options.title = std::string("Example");
+	options.yAxis = std::string("Y Axis");
+	options.xAxis = std::string("X Axis");
+	options.stype = std::string("bars");
+
+	GoogleChart cg;
+	cg.AddColumsGraph(x,y,yn,options);
+	cg.write("gc_out2.html");
+
+	bool test = compare("gc_out2.html","gc_out2_test.html");
+	BOOST_REQUIRE_EQUAL(true,test);
+}
+
+BOOST_AUTO_TEST_CASE( google_chart3 )
+{
+	openfpm::vector<std::string> x;
+	openfpm::vector<openfpm::vector<float>> y;
+	openfpm::vector<std::string> yn;
+
+	x.add("colum1");
+	x.add("colum2");
+	x.add("colum3");
+	x.add("colum4");
+	x.add("colum5");
+	x.add("colum6");
+
+	// Each colum can have multiple data set (in this case 4 dataset)
+	// Each dataset can have a name
+	yn.add("dataset1");
+	yn.add("dataset2");
+	yn.add("dataset3");
+	yn.add("dataset4");
+
+	// Each colums can have multiple data-set
+	y.add({2.2,1.3,4.5,0.6});
+	y.add({5.0,6.1,1.3,2.6});
+	y.add({2.1,1.0,6.1,9.3});
+	y.add({1.1,6.1,3.0,2.0});
+	y.add({3.3,0.3,0.0,6.2});
+	y.add({2.0,1.1,4.0,6.1});
+
+	// Google charts options
+	GCoptions options;
+
+	options.title = std::string("Example");
+	options.yAxis = std::string("Y Axis");
+	options.xAxis = std::string("X Axis");
+
+	GoogleChart cg;
+	cg.AddColumsGraph(x,y,yn,options);
+	cg.write("gc_out3.html");
+
+	bool test = compare("gc_out3.html","gc_out3_test.html");
+	BOOST_REQUIRE_EQUAL(true,test);
+}
+
+BOOST_AUTO_TEST_CASE( google_chart4 )
+{
+	openfpm::vector<std::string> x;
+	openfpm::vector<openfpm::vector<float>> y;
+	openfpm::vector<std::string> yn;
+
+	x.add("colum1");
+	x.add("colum2");
+	x.add("colum3");
+	x.add("colum4");
+	x.add("colum5");
+	x.add("colum6");
+
+	// Each colum can have multiple data set (in this case 4 dataset)
+	// Each dataset can have a name
+	yn.add("dataset1");
+	yn.add("dataset2");
+	yn.add("dataset3");
+	yn.add("dataset4");
+
+	// Each colums can have multiple data-set
+	y.add({2.2,1.3,4.5,0.6});
+	y.add({5.0,6.1,1.3,2.6});
+	y.add({2.1,1.0,6.1,9.3});
+	y.add({1.1,6.1,3.0,2.0});
+	y.add({3.3,0.3,0.0,6.2});
+	y.add({2.0,1.1,4.0,6.1});
+
+	GoogleChart cg;
+	cg.AddColumsGraph(x,y,yn);
+	cg.write("gc_out4.html");
+
+	bool test = compare("gc_out4.html","gc_out4_test.html");
+	BOOST_REQUIRE_EQUAL(true,test);
+}
+
+BOOST_AUTO_TEST_CASE( google_chart5 )
+{
+	openfpm::vector<std::string> x;
+	openfpm::vector<openfpm::vector<float>> y;
+
+	x.add("colum1");
+	x.add("colum2");
+	x.add("colum3");
+	x.add("colum4");
+	x.add("colum5");
+	x.add("colum6");
+
+	// Each colums can have multiple data-set
+	y.add({2.2,1.3,4.5,0.6});
+	y.add({5.0,6.1,1.3,2.6});
+	y.add({2.1,1.0,6.1,9.3});
+	y.add({1.1,6.1,3.0,2.0});
+	y.add({3.3,0.3,0.0,6.2});
+	y.add({2.0,1.1,4.0,6.1});
+
+	GoogleChart cg;
+	cg.AddColumsGraph(x,y);
+	cg.write("gc_out5.html");
+
+	bool test = compare("gc_out5.html","gc_out5_test.html");
+	BOOST_REQUIRE_EQUAL(true,test);
+}
+
+BOOST_AUTO_TEST_CASE( google_chart6 )
+{
+	openfpm::vector<openfpm::vector<float>> y;
+
+	// Each colums can have multiple data-set
+	y.add({2.2,1.3,4.5,0.6});
+	y.add({5.0,6.1,1.3,2.6});
+	y.add({2.1,1.0,6.1,9.3});
+	y.add({1.1,6.1,3.0,2.0});
+	y.add({3.3,0.3,0.0,6.2});
+	y.add({2.0,1.1,4.0,6.1});
+
+	GoogleChart cg;
+	cg.AddColumsGraph(y);
+	cg.write("gc_out6.html");
+
+	bool test = compare("gc_out6.html","gc_out6_test.html");
+	BOOST_REQUIRE_EQUAL(true,test);
+}
+
+BOOST_AUTO_TEST_CASE( google_chart_with_inject_HTML )
+{
+	openfpm::vector<std::string> x;
+	openfpm::vector<openfpm::vector<size_t>> y;
+	openfpm::vector<std::string> yn;
+
+	x.add("colum1");
+	x.add("colum2");
+	x.add("colum3");
+	x.add("colum4");
+	x.add("colum5");
+	x.add("colum6");
+
+	// Each colum can have multiple data set (in this case 4 dataset)
+	// Each dataset can have a name
+	yn.add("dataset1");
+	yn.add("dataset2");
+	yn.add("dataset3");
+	yn.add("dataset4");
+
+	// Each colums can have multiple data-set
+	y.add({2,3,5,6});
+	y.add({5,6,1,6});
+	y.add({2,1,6,9});
+	y.add({1,6,3,2});
+	y.add({3,3,0,6});
+	y.add({2,1,4,6});
+
+	// Google charts options
+	GCoptions options;
+
+	options.title = std::string("Example");
+	options.yAxis = std::string("Y Axis");
+	options.xAxis = std::string("X Axis");
+	options.stype = std::string("bars");
+
+	// it say that the colum4 must me represented with a line
+	options.stypeext = std::string("{3: {type: 'line'}}");
+
+	GoogleChart cg;
+	//
+	cg.addHTML("<h2>Before first graph</h2>");
+	cg.AddColumsGraph(x,y,yn,options);
+	cg.addHTML("<h2>Before second graph</h2>");
+	cg.AddColumsGraph(x,y,yn,options);
+	cg.addHTML("<h2>Before third graph</h2>");
+	cg.AddColumsGraph(x,y,yn,options);
+	cg.addHTML("<h2>At the end</h2>");
+	cg.write("gc_out7.html");
+
+	bool test = compare("gc_out7.html","gc_out7_test.html");
+	BOOST_REQUIRE_EQUAL(true,test);
+}
+
+BOOST_AUTO_TEST_CASE( google_chart_linear_plot )
+{
+	openfpm::vector<std::string> x;
+	openfpm::vector<openfpm::vector<double>> y;
+	openfpm::vector<std::string> yn;
+
+	x.add("colum1");
+	x.add("colum2");
+	x.add("colum3");
+	x.add("colum4");
+	x.add("colum5");
+	x.add("colum6");
+
+	// Here we specify how many lines we have
+	// first Line
+	yn.add("line1");
+
+	// second line + 2 intervals (Error bands)
+	yn.add("line2");
+	yn.add("interval");
+	yn.add("interval");
+	yn.add("interval");
+	yn.add("interval");
+
+	// third line + 1 interval (Error bands)
+	yn.add("line3");
+	yn.add("interval");
+	yn.add("interval");
+
+	// Each line can have multiple intervals or error bars
+	// The first number specify the bottom line
+	// The last three numbers specify the top line + error band (min, max)
+	// The middle 5 line specify the middle lines + one external error band + one internal error band
+
+	y.add({0.10,0.20,0.19,0.22,0.195,0.215,0.35,0.34,0.36});
+	y.add({0.11,0.21,0.18,0.22,0.19,0.215,0.36,0.35,0.37});
+	y.add({0.12,0.22,0.21,0.23,0.215,0.225,0.35,0.34,0.36});
+	y.add({0.15,0.25,0.20,0.26,0.22,0.255,0.36,0.35,0.37});
+	y.add({0.09,0.29,0.25,0.30,0.26,0.295,0.35,0.34,0.36});
+	y.add({0.08,0.28,0.27,0.29,0.275,0.285,0.36,0.35,0.37});
+
+	// Google charts options
+	GCoptions options;
+
+	options.title = std::string("Example");
+	options.yAxis = std::string("Y Axis");
+	options.xAxis = std::string("X Axis");
+	options.lineWidth = 1.0;
+	options.intervalext = std::string("{'i2': { 'color': '#4374E0', 'style':'bars', 'lineWidth':4, 'fillOpacity':1 } }");
+
+	GoogleChart cg;
+	cg.AddPointsGraph(x,y,yn,options);
+	cg.write("gc_plot_out.html");
+
+	bool test = compare("gc_plot_out.html","gc_plot_out_test.html");
+	BOOST_REQUIRE_EQUAL(true,test);
+}
+
+BOOST_AUTO_TEST_CASE( google_chart_linear_plot2 )
+{
+	openfpm::vector<std::string> x;
+	openfpm::vector<openfpm::vector<double>> y;
+
+	x.add("colum1");
+	x.add("colum2");
+	x.add("colum3");
+	x.add("colum4");
+	x.add("colum5");
+	x.add("colum6");
+
+	// Each line can have multiple intervals or error bars
+	// The first number specify the bottom line
+	// The last three numbers specify the top line + error band (min, max)
+	// The middle 5 line specify the middle lines + one external error band + one internal error band
+
+	y.add({0.10,0.20,0.19,0.22,0.195,0.215,0.35,0.34,0.36});
+	y.add({0.11,0.21,0.18,0.22,0.19,0.215,0.36,0.35,0.37});
+	y.add({0.12,0.22,0.21,0.23,0.215,0.225,0.35,0.34,0.36});
+	y.add({0.15,0.25,0.20,0.26,0.22,0.255,0.36,0.35,0.37});
+	y.add({0.09,0.29,0.25,0.30,0.26,0.295,0.35,0.34,0.36});
+	y.add({0.08,0.28,0.27,0.29,0.275,0.285,0.36,0.35,0.37});
+
+	// Google charts options
+	GCoptions options;
+
+	options.title = std::string("Example");
+	options.yAxis = std::string("Y Axis");
+	options.xAxis = std::string("X Axis");
+	options.lineWidth = 1.0;
+
+	GoogleChart cg;
+	cg.AddPointsGraph(x,y,options);
+	cg.write("gc_plot2_out.html");
+
+	bool test = compare("gc_plot2_out.html","gc_plot2_out_test.html");
+	BOOST_REQUIRE_EQUAL(true,test);
+}
+
+//! [Definition of a function]
+
+double f(double x)
+{
+	return x*x;
+}
+
+//! [Definition of a function]
+
+BOOST_AUTO_TEST_CASE( plot_util )
+{
+	//! [fill a vector]
+
+	openfpm::vector<double> x;
+
+	Fill1D(0.0,2.0,5,x);
+
+	BOOST_REQUIRE_EQUAL(x.get(0),0.0);
+	BOOST_REQUIRE_EQUAL(x.get(1),0.5);
+	BOOST_REQUIRE_EQUAL(x.get(2),1.0);
+	BOOST_REQUIRE_EQUAL(x.get(3),1.5);
+	BOOST_REQUIRE_EQUAL(x.get(4),2.0);
+
+	//! [fill a vector]
+
+	x.clear();
+
+	//! [fill a vector with a function]
+
+	Fill1D(0.0,2.0,5,x,f);
+
+	BOOST_REQUIRE_EQUAL(x.get(0),0.0);
+	BOOST_REQUIRE_EQUAL(x.get(1),0.25);
+	BOOST_REQUIRE_EQUAL(x.get(2),1.0);
+	BOOST_REQUIRE_EQUAL(x.get(3),2.25);
+	BOOST_REQUIRE_EQUAL(x.get(4),4.0);
+
+	//! [fill a vector function]
+}
+
+BOOST_AUTO_TEST_SUITE_END()
+
+#endif /* OPENFPM_DATA_SRC_PLOT_PLOT_UNIT_TESTS_HPP_ */
diff --git a/src/Plot/util.hpp b/src/Plot/util.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..b9a53c529877493353f35f4e9f56d030e2425ba4
--- /dev/null
+++ b/src/Plot/util.hpp
@@ -0,0 +1,45 @@
+/*
+ * util.hpp
+ *
+ *  Created on: Feb 23, 2016
+ *      Author: i-bird
+ */
+
+#ifndef OPENFPM_IO_SRC_PLOT_UTIL_HPP_
+#define OPENFPM_IO_SRC_PLOT_UTIL_HPP_
+
+/*! \brief It fill the vector x with function values
+ *
+ * ### Define a function
+ * \snippet Plot_unit_tests.hpp Definition of a function
+ * ### Example vector with points on a specified range
+ * \snippet Plot_unit_tests.hpp fill a vector with a function
+ *
+ */
+template<typename T> static inline void Fill1D(T start, T stop, size_t np, openfpm::vector<T> & x,T f(T x))
+{
+	x.resize(np);
+
+	T spacing = (stop - start) / (np - 1);
+
+	for (size_t i = 0 ; i < np ; i++)
+		x.get(i) = f(start + i*spacing);
+}
+
+/*! \brief It fill the vector x with uniformly distributed set of points
+ *
+ * ### Example vector with points on a specified range
+ * \snippet Plot_unit_tests.hpp fill a vector
+ *
+ */
+template<typename T> static inline void Fill1D(T start, T stop, size_t np, openfpm::vector<T> & x)
+{
+	x.resize(np);
+
+	T spacing = (stop - start) / (np - 1);
+
+	for (size_t i = 0 ; i < np ; i++)
+		x.get(i) = start + i*spacing;
+}
+
+#endif /* OPENFPM_IO_SRC_PLOT_UTIL_HPP_ */
diff --git a/src/VTKWriter.hpp b/src/VTKWriter/VTKWriter.hpp
similarity index 93%
rename from src/VTKWriter.hpp
rename to src/VTKWriter/VTKWriter.hpp
index 8acb81ac9fa19642087ce32854d735e7dec28c54..caeb31f6b2acedfd51e317ec6a4d168f8451b7aa 100644
--- a/src/VTKWriter.hpp
+++ b/src/VTKWriter/VTKWriter.hpp
@@ -94,13 +94,15 @@ enum file_type
 	ASCII
 };
 
-#define GRAPH 1
+#define VTK_GRAPH 1
 #define VECTOR_BOX 2
 #define VECTOR_GRIDS 3
 #define VECTOR_ST_GRIDS 4
 #define DIST_GRAPH 5
+#define VECTOR_POINTS 6
+#define VTK_WRITER 0x10000
 
-template <typename Graph, unsigned int imp>
+template <typename Object, unsigned int imp>
 class VTKWriter
 {
 
@@ -111,5 +113,6 @@ class VTKWriter
 #include "VTKWriter_grids.hpp"
 #include "VTKWriter_grids_st.hpp"
 #include "VTKWriter_dist_graph.hpp"
+#include "VTKWriter_point_set.hpp"
 
 #endif /* VTKWRITER_HPP_ */
diff --git a/src/VTKWriter_graph.hpp b/src/VTKWriter/VTKWriter_graph.hpp
similarity index 99%
rename from src/VTKWriter_graph.hpp
rename to src/VTKWriter/VTKWriter_graph.hpp
index 8f59d13f134522c5e46947e26b8c1a001cd312cf..f896a2d3d5119a7032d0f94eaf3a918a12705ee2 100644
--- a/src/VTKWriter_graph.hpp
+++ b/src/VTKWriter/VTKWriter_graph.hpp
@@ -109,11 +109,10 @@ struct vtk_vertex_node
 	 * \param n_obj object container to access its properties for example encapc<...>
 	 *
 	 */
-	vtk_vertex_node(std::string & v_node, typename G::V_container & n_obj, s_type (&x)[3]) :
-			x(x), vo(n_obj), v_node(v_node), z_set(false)
+	vtk_vertex_node(std::string & v_node, typename G::V_container & n_obj, s_type (&x)[3])
+	:z_set(false),x(x),vo(n_obj),v_node(v_node)
 	{
 	}
-	;
 
 	//! \brief Write collected information
 	void write()
@@ -473,7 +472,7 @@ public:
 
 		// Check if T is a supported format
 		// for now we support only scalar of native type
-		if (std::is_array<T>::value == true && std::is_array<typename std::remove_extent<T>::type>::value == false)
+		if (std::rank<T>::value == 1)
 		{
 			//Get type of the property
 			type = getType<typename std::remove_all_extents<T>::type>();
@@ -879,7 +878,7 @@ struct prop_out_edge
  */
 
 template<typename Graph>
-class VTKWriter<Graph, GRAPH>
+class VTKWriter<Graph, VTK_GRAPH>
 {
 	const Graph & g;
 
@@ -971,7 +970,7 @@ class VTKWriter<Graph, GRAPH>
 			vtk_vertex_node<Graph, attr> vn(v_out, obj, x);
 
 			// Iterate through all the vertex and create the vertex list
-			boost::mpl::for_each<boost::mpl::range_c<int, 0, Graph::V_type::max_prop> >(vn);
+			boost::mpl::for_each<boost::mpl::range_c<int, 0, Graph::V_type::max_prop > >(vn);
 
 			// write the node string
 			vn.write();
diff --git a/src/VTKWriter_grids.hpp b/src/VTKWriter/VTKWriter_grids.hpp
similarity index 97%
rename from src/VTKWriter_grids.hpp
rename to src/VTKWriter/VTKWriter_grids.hpp
index 6b5fba6d1090127acadf8629b3ce5b20466a9910..52545d595223b7f3b743ed86f8bb4e019a8e46a5 100644
--- a/src/VTKWriter_grids.hpp
+++ b/src/VTKWriter/VTKWriter_grids.hpp
@@ -11,6 +11,12 @@
 #include <boost/mpl/pair.hpp>
 #include "VTKWriter_grids_util.hpp"
 
+/*! \brief It store one grid
+ *
+ * \tparam Grid type of grid
+ * \tparam St type of space where the grid is defined
+ *
+ */
 template <typename Grid, typename St>
 class ele_g
 {
@@ -22,6 +28,7 @@ public:
 	:g(g),offset(offset),spacing(spacing),dom(dom)
 	{}
 
+	//! Dataset name
 	std::string dataset;
 	//! Grid
 	const Grid & g;
@@ -41,10 +48,8 @@ public:
  * element of the boost::vector the operator() is called.
  * Is mainly used to produce at output for each property
  *
- * \tparam Graph graph we are processing
- *
- * \param dim Dimensionality
- * \param S type of grid
+ * \tparam ele_g element that store the grid and its attributes
+ * \param St type of space where the grid live
  *
  */
 
diff --git a/src/VTKWriter_grids_st.hpp b/src/VTKWriter/VTKWriter_grids_st.hpp
similarity index 100%
rename from src/VTKWriter_grids_st.hpp
rename to src/VTKWriter/VTKWriter_grids_st.hpp
diff --git a/src/VTKWriter_grids_util.hpp b/src/VTKWriter/VTKWriter_grids_util.hpp
similarity index 72%
rename from src/VTKWriter_grids_util.hpp
rename to src/VTKWriter/VTKWriter_grids_util.hpp
index fa576b8961eb1cad491db1f87a68bda8f3ece868..246aa7303e8bead138e6dfb1092c8b0364624204 100644
--- a/src/VTKWriter_grids_util.hpp
+++ b/src/VTKWriter/VTKWriter_grids_util.hpp
@@ -69,26 +69,40 @@ public:
 		//! vertex node output string
 		std::string v_out;
 
-		typedef typename boost::fusion::result_of::at<typename ele_g::value_type::value_type::type,boost::mpl::int_<i>>::type ctype;
+		typedef typename boost::mpl::at<typename ele_g::value_type::value_type::type,boost::mpl::int_<i>>::type ctype;
 
 		// Check if T is a supported format
 		// for now we support only scalar of native type
+		if (std::rank<ctype>::value == 1)
+		{
+			//Get type of the property
+			std::string type = getType<typename std::remove_all_extents<ctype>::type>();
 
-		std::string type = getType<ctype>();
+			// if the type is not supported skip-it
+			if (type.size() == 0)
+			{
+				std::cerr << "Error " << __FILE__ << ":" << __LINE__ << " the type " << demangle(typeid(ctype).name()) << " is not supported by vtk\n";
+				return "";
+			}
 
-		// if the type is not supported return
-		// if the type is not supported return
-		if (type.size() == 0)
-		{
-			std::cerr << "Error " << __FILE__ << ":" << __LINE__ << " the type " << demangle(typeid(ctype).name()) << " is not supported by vtk\n";
-			return "";
+			// Create point data properties
+			v_out += "VECTORS " + get_attributes("") + " " + type + "\n";
 		}
+		else
+		{
+			std::string type = getType<ctype>();
 
-		// Create point data properties
-		v_out += "SCALARS " + get_attributes(oprp) + " " + type + "\n";
+			// if the type is not supported return
+			if (type.size() == 0)
+				return v_out;
 
-		// Default lookup table
-		v_out += "LOOKUP_TABLE default\n";
+			// Create point data properties
+			v_out += "SCALARS " + get_attributes(oprp) + " " + type + "\n";
+
+			// Default lookup table
+			v_out += "LOOKUP_TABLE default\n";
+
+		}
 
 		// return the vertex list
 		return v_out;
@@ -134,26 +148,40 @@ public:
 		//! vertex node output string
 		std::string v_out;
 
+		typedef typename boost::mpl::at<typename ele_g::value_type::value_type::type,boost::mpl::int_<i>>::type ctype;
+
 		// Check if T is a supported format
 		// for now we support only scalar of native type
+		if (std::rank<ctype>::value == 1)
+		{
+			//Get type of the property
+			std::string type = getType<typename std::remove_all_extents<ctype>::type>();
 
-		typedef typename boost::mpl::at<typename ele_g::value_type::value_type::type,boost::mpl::int_<i>>::type ctype;
-		typedef typename std::remove_all_extents<ctype>::type vttype;
-
-		std::string type = getType<vttype>();
+			// if the type is not supported skip-it
+			if (type.size() == 0)
+			{
+				std::cerr << "Error " << __FILE__ << ":" << __LINE__ << " the type " << demangle(typeid(ctype).name()) << " is not supported by vtk\n";
+				return "";
+			}
 
-		// if the type is not supported return
-		if (type.size() == 0)
-		{
-			std::cerr << "Error " << __FILE__ << ":" << __LINE__ << " the type " << demangle(typeid(ctype).name()) << " is not supported by vtk\n";
-			return "";
+			// Create point data properties
+			v_out += "VECTORS " + get_attributes("") + " " + type + "\n";
 		}
+		else
+		{
+			std::string type = getType<typename std::remove_all_extents<ctype>::type>();
+
+			// if the type is not supported return
+			if (type.size() == 0)
+				return v_out;
 
-		// Create point data properties
-		v_out += "SCALARS " + get_attributes(oprp) + " " + type + "\n";
+			// Create point data properties
+			v_out += "SCALARS " + get_attributes(oprp) + " " + type + "\n";
 
-		// Default lookup table
-		v_out += "LOOKUP_TABLE default\n";
+			// Default lookup table
+			v_out += "LOOKUP_TABLE default\n";
+
+		}
 
 		// return the vertex list
 		return v_out;
@@ -170,7 +198,10 @@ public:
 
 /*! \brief This class is an helper to create properties output from scalar and compile-time array elements
  *
- * This class is an helper to copy scalar and compile-time array elements
+ * \tparam I It is an boost::mpl::int_ that indicate which property we are writing
+ * \tparam ele_g element type that store the grid information
+ * \tparam St type of space where the grid live
+ * \tparam T the type of the property
  *
  */
 template<typename I, typename ele_g, typename St, typename T>
@@ -214,33 +245,38 @@ struct meta_prop<I, ele_g,St,T[N1]>
 {
 	inline meta_prop(const openfpm::vector< ele_g > & vg, std::string & v_out)
 	{
-		for (size_t i1 = 0 ; i1 < N1 ; i1++)
-		{
-	    	// actual string size
-	    	size_t sz = v_out.size();
+	    // actual string size
+	    size_t sz = v_out.size();
 
-			// Produce the point properties header
-			v_out += prop_output_g<has_attributes<typename ele_g::value_type::value_type>::value,St ,ele_g,I::value>::get_point_property_header("_" + std::to_string(i1));
+		// Produce the point properties header
+		v_out += prop_output_g<has_attributes<typename ele_g::value_type::value_type>::value,St ,ele_g,I::value>::get_point_property_header("");
 
-			// If the output has changed, we have to write the properties
-			if (v_out.size() != sz)
+		// If the output has changed, we have to write the properties
+		if (v_out.size() != sz)
+		{
+			// Produce point data
+
+			for (size_t k = 0 ; k < vg.size() ; k++)
 			{
-				// Produce point data
+				//! Get a vertex iterator
+				auto it = vg.get(k).g.getIterator();
 
-				for (size_t k = 0 ; k < vg.size() ; k++)
+				// if there is the next element
+				while (it.isNext())
 				{
-					//! Get a vertex iterator
-					auto it = vg.get(k).g.getIterator();
-
-					// if there is the next element
-					while (it.isNext())
+					// Print the properties
+					for (size_t i1 = 0 ; i1 < N1 ; i1++)
 					{
-						// Print the property
-						v_out += std::to_string(vg.get(k).g.get_o(it.get()).template get<I::value>()[i1]) + "\n";
-
-						// increment the iterator and counter
-						++it;
+						v_out += std::to_string(vg.get(k).g.get_o(it.get()).template get<I::value>()[i1]) + " ";
 					}
+					if (N1 == 2)
+					{
+						v_out += "0.0";
+					}
+					v_out += "\n";
+
+					// increment the iterator and counter
+					++it;
 				}
 			}
 		}
diff --git a/src/VTKWriter/VTKWriter_point_set.hpp b/src/VTKWriter/VTKWriter_point_set.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..7fac47715fc81ad97f32ff1edd1245449af39a28
--- /dev/null
+++ b/src/VTKWriter/VTKWriter_point_set.hpp
@@ -0,0 +1,394 @@
+/*
+ * VTKWriter_point_set.hpp
+ *
+ *  Created on: Feb 6, 2016
+ *      Author: i-bird
+ */
+
+#ifndef OPENFPM_IO_SRC_VTKWRITER_POINT_SET_HPP_
+#define OPENFPM_IO_SRC_VTKWRITER_POINT_SET_HPP_
+
+#include <boost/mpl/pair.hpp>
+#include "VTKWriter_grids_util.hpp"
+
+/*! \brief Store the couple of vector position and properties
+ *
+ * \tparam Vps Type of vector that store the position of the particles
+ *
+ */
+template <typename Vps>
+class ele_vps
+{
+public:
+
+	typedef Vps value_type;
+
+	const Vps & g;
+
+	size_t mark;
+
+	ele_vps(const Vps & g, size_t mark)
+	:g(g),mark(mark)
+	{}
+
+};
+
+/*! \brief Store the couple of vector position and properties
+ *
+ * \tparam Vpp Type of vector that store the property of the particles
+ *
+ */
+template <typename Vpp>
+class ele_vpp
+{
+public:
+
+	typedef Vpp value_type;
+
+	const Vpp & g;
+
+	size_t mark;
+
+	ele_vpp(const Vpp & vpp, size_t mark)
+	:g(vpp),mark(mark)
+	{}
+
+};
+
+
+/*! \brief this class is a functor for "for_each" algorithm
+ *
+ * This class is a functor for "for_each" algorithm. For each
+ * element of the boost::vector the operator() is called.
+ * Is mainly used to produce an output for each property
+ *
+ * \tparam ele_v It is the class ele_v that store the couple vector of position and property
+ *
+ *
+ */
+
+template<typename ele_v, typename St>
+struct prop_out_v
+{
+	// property output string
+	std::string & v_out;
+
+	// vector that we are processing
+	const openfpm::vector_std< ele_v > & vv;
+
+	/*! \brief constructor
+	 *
+	 * \param v_out string to fill with the vertex properties
+	 *
+	 */
+	prop_out_v(std::string & v_out, const openfpm::vector_std< ele_v > & vv)
+	:v_out(v_out),vv(vv)
+	{};
+
+	//! It produce an output for each property
+    template<typename T>
+    void operator()(T& t) const
+    {
+    	typedef typename boost::mpl::at<typename ele_v::value_type::value_type::type,boost::mpl::int_<T::value>>::type ptype;
+
+    	meta_prop<boost::mpl::int_<T::value> ,ele_v,St, ptype > m(vv,v_out);
+    }
+
+    void lastProp()
+	{
+		// Create point data properties
+		v_out += "SCALARS domain float\n";
+
+		// Default lookup table
+		v_out += "LOOKUP_TABLE default\n";
+
+		// Produce point data
+		for (size_t k = 0 ; k < vv.size() ; k++)
+		{
+			//! Get a vertex iterator
+			auto it = vv.get(k).g.getIterator();
+
+			// if there is the next element
+			while (it.isNext())
+			{
+				if (it.get() < vv.get(k).mark)
+					v_out += "1.0\n";
+				else
+					v_out += "0.0\n";
+
+				// increment the iterator and counter
+				++it;
+			}
+		}
+	}
+};
+
+/*!
+ *
+ * It write a VTK format file for a list of grids defined on a space
+ *
+ * \tparam boost::mpl::pair<G,S>
+ *
+ * where G is the type of the vector containing the properties, S is the
+ * type of vector containing the particle positions
+ *
+ */
+template <typename pair>
+class VTKWriter<pair,VECTOR_POINTS>
+{
+	//! Vector of couple, position and properties
+	openfpm::vector< ele_vps<typename pair::first >> vps;
+	openfpm::vector< ele_vpp<typename pair::second>> vpp;
+
+	/*! \brief Get the total number of points
+	 *
+	 * \return the total number
+	 *
+	 */
+	size_t get_total()
+	{
+		size_t tot = 0;
+
+		//! Calculate the full number of vertices
+		for (size_t i = 0 ; i < vps.size() ; i++)
+		{
+			tot += vps.get(i).g.size();
+		}
+		return tot;
+	}
+
+	/*! \brief It get the vertex properties list
+	 *
+	 * It get the vertex properties list of the vertex defined as VTK header
+	 *
+	 * \return a string that define the vertex properties in graphML format
+	 *
+	 */
+
+	std::string get_vertex_properties_list()
+	{
+		//! vertex property output string
+		std::string v_out;
+
+		// write the number of vertex
+		v_out += "VERTICES " + std::to_string(get_total()) + " " + std::to_string(get_total() * 2) + "\n";
+
+		// return the vertex properties string
+		return v_out;
+	}
+
+	/*! \brief It get the vertex properties list
+	 *
+	 * It get the vertex properties list of the vertex defined as a VTK header
+	 *
+	 * \return a string that define the vertex properties in graphML format
+	 *
+	 */
+
+	std::string get_point_properties_list()
+	{
+		//! vertex property output string
+		std::string v_out;
+
+		// write the number of vertex
+		v_out += "POINTS " + std::to_string(get_total()) + " float" + "\n";
+
+		// return the vertex properties string
+		return v_out;
+	}
+
+	/*! \brief Create the VTK point definition
+	 *
+	 */
+	std::string get_point_list()
+	{
+		//! vertex node output string
+		std::stringstream v_out;
+
+		//! For each defined grid
+
+		for (size_t i = 0 ; i < vps.size() ; i++)
+		{
+			//! write the particle position
+			auto it = vps.get(i).g.getIterator();
+
+			// if there is the next element
+			while (it.isNext())
+			{
+				Point<pair::first::value_type::dims,typename pair::first::value_type::coord_type> p;
+				p = vps.get(i).g.get(it.get());
+
+				if (pair::first::value_type::dims == 2)
+					v_out << p.toString() << " 0.0" << "\n";
+				else
+					v_out << p.toString() << "\n";
+
+				// increment the iterator and counter
+				++it;
+			}
+		}
+
+		// return the vertex list
+		return v_out.str();
+	}
+
+	/*! \brief Create the VTK vertex definition
+	 *
+	 */
+	std::string get_vertex_list()
+	{
+		//! vertex node output string
+		std::string v_out;
+
+		size_t k = 0;
+
+		for (size_t i = 0 ; i < vps.size() ; i++)
+		{
+			//! For each grid point create a vertex
+			auto it = vps.get(i).g.getIterator();
+
+			while (it.isNext())
+			{
+				v_out += "1 " + std::to_string(k) + "\n";
+
+				++k;
+				++it;
+			}
+		}
+		// return the vertex list
+		return v_out;
+	}
+
+	/*! \brief Get the point data header
+	 *
+	 * \return a string with the point data header for VTK format
+	 *
+	 */
+
+	std::string get_point_data_header()
+	{
+		std::string v_out;
+
+		v_out += "POINT_DATA " + std::to_string(get_total()) + "\n";
+
+		return v_out;
+	}
+
+public:
+
+	/*!
+	 *
+	 * VTKWriter constructor
+	 *
+	 */
+	VTKWriter()
+	{}
+
+	/*! \brief Add a vector dataset
+	 *
+	 * \param vps vector of positions
+	 * \param vpp vector of properties
+	 * \param mark, additional information that divide the dataset into 2
+	 *        (in general is used to mark real from ghost information)
+	 *
+	 */
+	void add(const typename pair::first & vps, const typename pair::second & vpp,size_t mark)
+	{
+		ele_vps<typename pair::first> t1(vps,mark);
+		ele_vpp<typename pair::second> t2(vpp,mark);
+
+		this->vps.add(t1);
+		this->vpp.add(t2);
+	}
+
+	/*! \brief It write a VTK file from a vector of points
+	 *
+	 * \tparam prp_out which properties to output [default = -1 (all)]
+	 *
+	 * \param file path where to write
+	 * \param name name of the dataset
+	 * \param file_type specify if it is a VTK BINARY or ASCII file [default = ASCII]
+	 *
+	 */
+
+	template<int prp = -1> bool write(std::string file, std::string f_name = "grids" , file_type ft = file_type::ASCII)
+	{
+		// Header for the vtk
+		std::string vtk_header;
+		// Point list of the VTK
+		std::string point_list;
+		// Vertex list of the VTK
+		std::string vertex_list;
+		// Graph header
+		std::string vtk_binary_or_ascii;
+		// vertex properties header
+		std::string point_prop_header;
+		// edge properties header
+		std::string vertex_prop_header;
+		// Data point header
+		std::string point_data_header;
+		// Data point
+		std::string point_data;
+
+		// VTK header
+		vtk_header = "# vtk DataFile Version 3.0\n"
+				     + f_name + "\n";
+
+		// Choose if binary or ASCII
+		if (ft == file_type::ASCII)
+		{vtk_header += "ASCII\n";}
+		else
+		{vtk_header += "BINARY\n";}
+
+		// Data type for graph is DATASET POLYDATA
+		vtk_header += "DATASET POLYDATA\n";
+
+		// point properties header
+		point_prop_header = get_point_properties_list();
+
+		// Get point list
+		point_list = get_point_list();
+
+		// vertex properties header
+		vertex_prop_header = get_vertex_properties_list();
+
+		// Get vertex list
+		vertex_list = get_vertex_list();
+
+		// Get the point data header
+		point_data_header = get_point_data_header();
+
+		// For each property in the vertex type produce a point data
+
+		prop_out_v< ele_vpp<typename pair::second>, typename pair::first::value_type::coord_type> pp(point_data, vpp);
+
+		if (prp == -1)
+			boost::mpl::for_each< boost::mpl::range_c<int,0, pair::second::value_type::max_prop> >(pp);
+		else
+			boost::mpl::for_each< boost::mpl::range_c<int,prp, prp> >(pp);
+
+		// Add the last property
+		pp.lastProp();
+
+
+		// write the file
+		std::ofstream ofs(file);
+
+		// Check if the file is open
+		if (ofs.is_open() == false)
+		{std::cerr << "Error cannot create the VTK file: " + file + "\n";}
+
+		ofs << vtk_header << point_prop_header << point_list <<
+				vertex_prop_header << vertex_list << point_data_header << point_data;
+
+		// Close the file
+
+		ofs.close();
+
+		// Completed succefully
+		return true;
+	}
+};
+
+
+#endif /* OPENFPM_IO_SRC_VTKWRITER_POINT_SET_HPP_ */
diff --git a/src/VTKWriter_unit_tests.hpp b/src/VTKWriter/VTKWriter_unit_tests.hpp
similarity index 88%
rename from src/VTKWriter_unit_tests.hpp
rename to src/VTKWriter/VTKWriter_unit_tests.hpp
index c34568a66a60e2712ba32d8a84e94e97c6f85f78..09dc9cab125cda1c9428a0bf958937a581a36684 100644
--- a/src/VTKWriter_unit_tests.hpp
+++ b/src/VTKWriter/VTKWriter_unit_tests.hpp
@@ -8,6 +8,11 @@
 #ifndef VTKWRITER_UNIT_TESTS_HPP_
 #define VTKWRITER_UNIT_TESTS_HPP_
 
+#include "data_type/aggregate.hpp"
+#include <random>
+#include "VTKWriter.hpp"
+#include "util/SimpleRNG.hpp"
+
 BOOST_AUTO_TEST_SUITE( vtk_writer_test )
 
 /* \brief Sub-domain vertex graph node
@@ -195,7 +200,7 @@ BOOST_AUTO_TEST_CASE( vtk_writer_use_graph3D )
 
 	// Write the VTK file
 
-	VTKWriter<Graph_CSR<vertex2,edge>,GRAPH> vtk(gr);
+	VTKWriter<Graph_CSR<vertex2,edge>,VTK_GRAPH> vtk(gr);
 	vtk.write("vtk_graph_v2.vtk");
 
 	// check that match
@@ -273,7 +278,7 @@ BOOST_AUTO_TEST_CASE( vtk_writer_use_graph3D_edge )
 
 	// Write the VTK file
 
-	VTKWriter<Graph_CSR<vertex2,vertex2>,GRAPH> vtk(gr);
+	VTKWriter<Graph_CSR<vertex2,vertex2>,VTK_GRAPH> vtk(gr);
 	vtk.write("vtk_graph_v4.vtk");
 
 	// check that match
@@ -358,7 +363,7 @@ BOOST_AUTO_TEST_CASE( vtk_writer_use_graph2D )
 
 	// Write the VTK file
 
-	VTKWriter<Graph_CSR<vertex3,edge>,GRAPH> vtk(gr);
+	VTKWriter<Graph_CSR<vertex3,edge>,VTK_GRAPH> vtk(gr);
 	vtk.write("vtk_graph_v3.vtk");
 
 	// check that match
@@ -438,7 +443,7 @@ BOOST_AUTO_TEST_CASE( vtk_writer_use_graph)
 
 	// Write the VTK file
 
-	VTKWriter<Graph_CSR<vertex,edge>,GRAPH> vtk(gr);
+	VTKWriter<Graph_CSR<vertex,edge>,VTK_GRAPH> vtk(gr);
 	vtk.write("vtk_graph.vtk");
 
 	// check that match
@@ -754,6 +759,74 @@ BOOST_AUTO_TEST_CASE( vtk_writer_use_grids)
 	}
 }
 
+BOOST_AUTO_TEST_CASE( vtk_writer_use_point_set )
+{
+	{
+	// Create 3 vectors with random particles
+	openfpm::vector<Point<3,double>> v1ps;
+	openfpm::vector<Point<3,double>> v2ps;
+	openfpm::vector<Point<3,double>> v3ps;
+	openfpm::vector<aggregate<float,float[3]>> v1pp;
+	openfpm::vector<aggregate<float,float[3]>> v2pp;
+	openfpm::vector<aggregate<float,float[3]>> v3pp;
+
+    // set the seed
+	// create the random generator engine
+	SimpleRNG rng;
+
+	// fill the vector with random data
+	v1ps.resize(100);
+	v2ps.resize(100);
+	v3ps.resize(100);
+
+	v1pp.resize(100);
+	v2pp.resize(100);
+	v3pp.resize(100);
+
+	for (size_t i = 0 ; i < v1ps.size(); i++)
+	{
+		v1ps.template get<0>(i)[0] = rng.GetUniform();
+		v1ps.template get<0>(i)[1] = rng.GetUniform();
+		v1ps.template get<0>(i)[2] = rng.GetUniform();
+
+		v2ps.template get<0>(i)[0] = rng.GetUniform()*0.5;
+		v2ps.template get<0>(i)[1] = rng.GetUniform()*0.5;
+		v2ps.template get<0>(i)[2] = rng.GetUniform()*0.5;
+
+		v3ps.template get<0>(i)[0] = rng.GetUniform()*0.3;
+		v3ps.template get<0>(i)[1] = rng.GetUniform()*0.3;
+		v3ps.template get<0>(i)[2] = rng.GetUniform()*0.3;
+
+		v1pp.template get<0>(i) = rng.GetUniform();
+		v1pp.template get<1>(i)[0] = rng.GetUniform();
+		v1pp.template get<1>(i)[1] = rng.GetUniform();
+		v1pp.template get<1>(i)[2] = rng.GetUniform();
+
+		v2pp.template get<0>(i) = rng.GetUniform();
+		v2pp.template get<1>(i)[0] = rng.GetUniform();
+		v2pp.template get<1>(i)[1] = rng.GetUniform();
+		v2pp.template get<1>(i)[2] = rng.GetUniform();
+
+		v3pp.template get<0>(i) = rng.GetUniform();
+		v3pp.template get<1>(i)[0] = rng.GetUniform();
+		v3pp.template get<1>(i)[1] = rng.GetUniform();
+		v3pp.template get<1>(i)[2] = rng.GetUniform();
+	}
+
+	// Create a writer and write
+	VTKWriter<boost::mpl::pair<openfpm::vector<Point<3,double>>,openfpm::vector<aggregate<float,float[3]>>>,VECTOR_POINTS> vtk_v;
+	vtk_v.add(v1ps,v1pp,75);
+	vtk_v.add(v2ps,v2pp,88);
+	vtk_v.add(v3ps,v3pp,90);
+
+	vtk_v.write("vtk_points.vtk");
+
+	// Check that match
+	bool test = compare("vtk_points.vtk","vtk_points_test.vtk");
+	BOOST_REQUIRE_EQUAL(test,true);
+	}
+}
+
 BOOST_AUTO_TEST_SUITE_END()
 
 #endif /* VTKWRITER_UNIT_TESTS_HPP_ */
diff --git a/src/VTKWriter_vector_box.hpp b/src/VTKWriter/VTKWriter_vector_box.hpp
similarity index 100%
rename from src/VTKWriter_vector_box.hpp
rename to src/VTKWriter/VTKWriter_vector_box.hpp
diff --git a/src/main.cpp b/src/main.cpp
index 7f156ab1716fc48d281fb667bce3fcb747f565a9..41909bf00eb45948330b6090fa841e2c42ff1dfe 100755
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -7,7 +7,8 @@
 #include <boost/test/included/unit_test.hpp>
 
 #include "VCluster.hpp"
-#include "CSVWriter_unit_tests.hpp"
-#include "GraphMLWriter_unit_tests.hpp"
-#include "VTKWriter_unit_tests.hpp"
-
+#include "CSVWriter/CSVWriter_unit_tests.hpp"
+#include "GraphMLWriter/GraphMLWriter_unit_tests.hpp"
+#include "VTKWriter/VTKWriter_unit_tests.hpp"
+#include "HDF5_XdmfWriter/HDF5_XdmfWriter_unit_tests.hpp"
+#include "Plot/Plot_unit_tests.hpp"
diff --git a/src/util.hpp b/src/util.hpp
index 9533c1d0a16235052d5075668433180cfb0753c2..0e69ba48f891e27bb076d26d8710f66e677959b1 100644
--- a/src/util.hpp
+++ b/src/util.hpp
@@ -21,7 +21,7 @@
  * \return true if they match
  *
  */
-bool compare(std::string file1, std::string file2)
+static inline bool compare(std::string file1, std::string file2)
 {
     boost::iostreams::mapped_file_source f1(file1);
     boost::iostreams::mapped_file_source f2(file2);
@@ -65,12 +65,14 @@ struct RGB
  *
  */
 
-struct RGB getColor(int group, std::uniform_real_distribution<float> & d, std::default_random_engine & g)
+static inline struct RGB getColor(int group, std::uniform_real_distribution<float> & d, std::default_random_engine & g)
 {
 	struct RGB col;
 
 	float s = d(g);
 
+	group = group % 12;
+
 #ifdef ON_IO_UNIT_TESTS
 	s = 0.5;
 #endif
@@ -157,7 +159,7 @@ struct RGB getColor(int group, std::uniform_real_distribution<float> & d, std::d
  * \param ending ending string to check
  *
  */
-bool hasEnding (std::string const &fullString, std::string const &ending)
+static inline bool hasEnding (std::string const &fullString, std::string const &ending)
 {
     if (fullString.length() >= ending.length())
     {return (0 == fullString.compare (fullString.length() - ending.length(), ending.length(), ending));}
diff --git a/test_graph2_test.graphml b/test_graph2_test.graphml
index 8239e46d7fe20987e6e01724d64a10bf8c5e6458..da443afbd0fe26b6a72dea6329f9b8ea8b80c29f 100644
--- a/test_graph2_test.graphml
+++ b/test_graph2_test.graphml
@@ -31,7 +31,7 @@
   <data key="vk3">4.000000</data>
   <data key="vk4">5</data>
   <data key="vk5">6</data>
-  <data key="vk6">test</data>
+  <data key="vk6">tes2</data>
 </node>
 <node id="n2">
   <data key="vk0">1.000000</data>
@@ -40,7 +40,7 @@
   <data key="vk3">4.000000</data>
   <data key="vk4">5</data>
   <data key="vk5">6</data>
-  <data key="vk6">test</data>
+  <data key="vk6">test3</data>
 </node>
 <node id="n3">
   <data key="vk0">1.000000</data>
@@ -49,7 +49,7 @@
   <data key="vk3">4.000000</data>
   <data key="vk4">5</data>
   <data key="vk5">6</data>
-  <data key="vk6">test</data>
+  <data key="vk6">test4</data>
 </node>
 <edge id="e0" source="n0" target="n1">
   <data key="ek0">1.000000</data>
@@ -58,7 +58,7 @@
   <data key="ek3">4.000000</data>
   <data key="ek4">5</data>
   <data key="ek5">6</data>
-  <data key="ek6">test</data>
+  <data key="ek6">test5</data>
 </edge>
 <edge id="e1" source="n2" target="n1">
   <data key="ek0">1.000000</data>
@@ -67,7 +67,7 @@
   <data key="ek3">4.000000</data>
   <data key="ek4">5</data>
   <data key="ek5">6</data>
-  <data key="ek6">test</data>
+  <data key="ek6">test6</data>
 </edge>
 <edge id="e2" source="n2" target="n0">
   <data key="ek0">1.000000</data>
@@ -76,7 +76,7 @@
   <data key="ek3">4.000000</data>
   <data key="ek4">5</data>
   <data key="ek5">6</data>
-  <data key="ek6">test</data>
+  <data key="ek6">test8</data>
 </edge>
 <edge id="e3" source="n3" target="n1">
   <data key="ek0">1.000000</data>
@@ -85,7 +85,7 @@
   <data key="ek3">4.000000</data>
   <data key="ek4">5</data>
   <data key="ek5">6</data>
-  <data key="ek6">test</data>
+  <data key="ek6">test7</data>
 </edge>
 <edge id="e4" source="n3" target="n2">
   <data key="ek0">1.000000</data>
@@ -94,7 +94,7 @@
   <data key="ek3">4.000000</data>
   <data key="ek4">5</data>
   <data key="ek5">6</data>
-  <data key="ek6">test</data>
+  <data key="ek6">test9</data>
 </edge>
 </graph>
 </graphml>
\ No newline at end of file
diff --git a/vtk_grids_test.vtk b/vtk_grids_test.vtk
index ffd8b56387f1eb86bc8600c53554c118966f213e..5e292278af14dc4d2f5993d5492aa0e25e427016 100644
--- a/vtk_grids_test.vtk
+++ b/vtk_grids_test.vtk
@@ -6157,3084 +6157,1031 @@ LOOKUP_TABLE default
 1.000000
 1.000000
 1.000000
-SCALARS attr4_0 float
-LOOKUP_TABLE default
-0.000000
-1.000000
-2.000000
-3.000000
-4.000000
-5.000000
-6.000000
-7.000000
-8.000000
-9.000000
-10.000000
-11.000000
-12.000000
-13.000000
-14.000000
-15.000000
-16.000000
-17.000000
-18.000000
-19.000000
-20.000000
-21.000000
-22.000000
-23.000000
-24.000000
-25.000000
-26.000000
-27.000000
-28.000000
-29.000000
-30.000000
-31.000000
-32.000000
-33.000000
-34.000000
-35.000000
-36.000000
-37.000000
-38.000000
-39.000000
-40.000000
-41.000000
-42.000000
-43.000000
-44.000000
-45.000000
-46.000000
-47.000000
-48.000000
-49.000000
-50.000000
-51.000000
-52.000000
-53.000000
-54.000000
-55.000000
-56.000000
-57.000000
-58.000000
-59.000000
-60.000000
-61.000000
-62.000000
-63.000000
-64.000000
-65.000000
-66.000000
-67.000000
-68.000000
-69.000000
-70.000000
-71.000000
-72.000000
-73.000000
-74.000000
-75.000000
-76.000000
-77.000000
-78.000000
-79.000000
-80.000000
-81.000000
-82.000000
-83.000000
-84.000000
-85.000000
-86.000000
-87.000000
-88.000000
-89.000000
-90.000000
-91.000000
-92.000000
-93.000000
-94.000000
-95.000000
-96.000000
-97.000000
-98.000000
-99.000000
-100.000000
-101.000000
-102.000000
-103.000000
-104.000000
-105.000000
-106.000000
-107.000000
-108.000000
-109.000000
-110.000000
-111.000000
-112.000000
-113.000000
-114.000000
-115.000000
-116.000000
-117.000000
-118.000000
-119.000000
-120.000000
-121.000000
-122.000000
-123.000000
-124.000000
-125.000000
-126.000000
-127.000000
-128.000000
-129.000000
-130.000000
-131.000000
-132.000000
-133.000000
-134.000000
-135.000000
-136.000000
-137.000000
-138.000000
-139.000000
-140.000000
-141.000000
-142.000000
-143.000000
-144.000000
-145.000000
-146.000000
-147.000000
-148.000000
-149.000000
-150.000000
-151.000000
-152.000000
-153.000000
-154.000000
-155.000000
-156.000000
-157.000000
-158.000000
-159.000000
-160.000000
-161.000000
-162.000000
-163.000000
-164.000000
-165.000000
-166.000000
-167.000000
-168.000000
-169.000000
-170.000000
-171.000000
-172.000000
-173.000000
-174.000000
-175.000000
-176.000000
-177.000000
-178.000000
-179.000000
-180.000000
-181.000000
-182.000000
-183.000000
-184.000000
-185.000000
-186.000000
-187.000000
-188.000000
-189.000000
-190.000000
-191.000000
-192.000000
-193.000000
-194.000000
-195.000000
-196.000000
-197.000000
-198.000000
-199.000000
-200.000000
-201.000000
-202.000000
-203.000000
-204.000000
-205.000000
-206.000000
-207.000000
-208.000000
-209.000000
-210.000000
-211.000000
-212.000000
-213.000000
-214.000000
-215.000000
-216.000000
-217.000000
-218.000000
-219.000000
-220.000000
-221.000000
-222.000000
-223.000000
-224.000000
-225.000000
-226.000000
-227.000000
-228.000000
-229.000000
-230.000000
-231.000000
-232.000000
-233.000000
-234.000000
-235.000000
-236.000000
-237.000000
-238.000000
-239.000000
-240.000000
-241.000000
-242.000000
-243.000000
-244.000000
-245.000000
-246.000000
-247.000000
-248.000000
-249.000000
-250.000000
-251.000000
-252.000000
-253.000000
-254.000000
-255.000000
-0.000000
-1.000000
-2.000000
-3.000000
-4.000000
-5.000000
-6.000000
-7.000000
-8.000000
-9.000000
-10.000000
-11.000000
-12.000000
-13.000000
-14.000000
-15.000000
-16.000000
-17.000000
-18.000000
-19.000000
-20.000000
-21.000000
-22.000000
-23.000000
-24.000000
-25.000000
-26.000000
-27.000000
-28.000000
-29.000000
-30.000000
-31.000000
-32.000000
-33.000000
-34.000000
-35.000000
-36.000000
-37.000000
-38.000000
-39.000000
-40.000000
-41.000000
-42.000000
-43.000000
-44.000000
-45.000000
-46.000000
-47.000000
-48.000000
-49.000000
-50.000000
-51.000000
-52.000000
-53.000000
-54.000000
-55.000000
-56.000000
-57.000000
-58.000000
-59.000000
-60.000000
-61.000000
-62.000000
-63.000000
-64.000000
-65.000000
-66.000000
-67.000000
-68.000000
-69.000000
-70.000000
-71.000000
-72.000000
-73.000000
-74.000000
-75.000000
-76.000000
-77.000000
-78.000000
-79.000000
-80.000000
-81.000000
-82.000000
-83.000000
-84.000000
-85.000000
-86.000000
-87.000000
-88.000000
-89.000000
-90.000000
-91.000000
-92.000000
-93.000000
-94.000000
-95.000000
-96.000000
-97.000000
-98.000000
-99.000000
-100.000000
-101.000000
-102.000000
-103.000000
-104.000000
-105.000000
-106.000000
-107.000000
-108.000000
-109.000000
-110.000000
-111.000000
-112.000000
-113.000000
-114.000000
-115.000000
-116.000000
-117.000000
-118.000000
-119.000000
-120.000000
-121.000000
-122.000000
-123.000000
-124.000000
-125.000000
-126.000000
-127.000000
-128.000000
-129.000000
-130.000000
-131.000000
-132.000000
-133.000000
-134.000000
-135.000000
-136.000000
-137.000000
-138.000000
-139.000000
-140.000000
-141.000000
-142.000000
-143.000000
-144.000000
-145.000000
-146.000000
-147.000000
-148.000000
-149.000000
-150.000000
-151.000000
-152.000000
-153.000000
-154.000000
-155.000000
-156.000000
-157.000000
-158.000000
-159.000000
-160.000000
-161.000000
-162.000000
-163.000000
-164.000000
-165.000000
-166.000000
-167.000000
-168.000000
-169.000000
-170.000000
-171.000000
-172.000000
-173.000000
-174.000000
-175.000000
-176.000000
-177.000000
-178.000000
-179.000000
-180.000000
-181.000000
-182.000000
-183.000000
-184.000000
-185.000000
-186.000000
-187.000000
-188.000000
-189.000000
-190.000000
-191.000000
-192.000000
-193.000000
-194.000000
-195.000000
-196.000000
-197.000000
-198.000000
-199.000000
-200.000000
-201.000000
-202.000000
-203.000000
-204.000000
-205.000000
-206.000000
-207.000000
-208.000000
-209.000000
-210.000000
-211.000000
-212.000000
-213.000000
-214.000000
-215.000000
-216.000000
-217.000000
-218.000000
-219.000000
-220.000000
-221.000000
-222.000000
-223.000000
-224.000000
-225.000000
-226.000000
-227.000000
-228.000000
-229.000000
-230.000000
-231.000000
-232.000000
-233.000000
-234.000000
-235.000000
-236.000000
-237.000000
-238.000000
-239.000000
-240.000000
-241.000000
-242.000000
-243.000000
-244.000000
-245.000000
-246.000000
-247.000000
-248.000000
-249.000000
-250.000000
-251.000000
-252.000000
-253.000000
-254.000000
-255.000000
-0.000000
-1.000000
-2.000000
-3.000000
-4.000000
-5.000000
-6.000000
-7.000000
-8.000000
-9.000000
-10.000000
-11.000000
-12.000000
-13.000000
-14.000000
-15.000000
-16.000000
-17.000000
-18.000000
-19.000000
-20.000000
-21.000000
-22.000000
-23.000000
-24.000000
-25.000000
-26.000000
-27.000000
-28.000000
-29.000000
-30.000000
-31.000000
-32.000000
-33.000000
-34.000000
-35.000000
-36.000000
-37.000000
-38.000000
-39.000000
-40.000000
-41.000000
-42.000000
-43.000000
-44.000000
-45.000000
-46.000000
-47.000000
-48.000000
-49.000000
-50.000000
-51.000000
-52.000000
-53.000000
-54.000000
-55.000000
-56.000000
-57.000000
-58.000000
-59.000000
-60.000000
-61.000000
-62.000000
-63.000000
-64.000000
-65.000000
-66.000000
-67.000000
-68.000000
-69.000000
-70.000000
-71.000000
-72.000000
-73.000000
-74.000000
-75.000000
-76.000000
-77.000000
-78.000000
-79.000000
-80.000000
-81.000000
-82.000000
-83.000000
-84.000000
-85.000000
-86.000000
-87.000000
-88.000000
-89.000000
-90.000000
-91.000000
-92.000000
-93.000000
-94.000000
-95.000000
-96.000000
-97.000000
-98.000000
-99.000000
-100.000000
-101.000000
-102.000000
-103.000000
-104.000000
-105.000000
-106.000000
-107.000000
-108.000000
-109.000000
-110.000000
-111.000000
-112.000000
-113.000000
-114.000000
-115.000000
-116.000000
-117.000000
-118.000000
-119.000000
-120.000000
-121.000000
-122.000000
-123.000000
-124.000000
-125.000000
-126.000000
-127.000000
-128.000000
-129.000000
-130.000000
-131.000000
-132.000000
-133.000000
-134.000000
-135.000000
-136.000000
-137.000000
-138.000000
-139.000000
-140.000000
-141.000000
-142.000000
-143.000000
-144.000000
-145.000000
-146.000000
-147.000000
-148.000000
-149.000000
-150.000000
-151.000000
-152.000000
-153.000000
-154.000000
-155.000000
-156.000000
-157.000000
-158.000000
-159.000000
-160.000000
-161.000000
-162.000000
-163.000000
-164.000000
-165.000000
-166.000000
-167.000000
-168.000000
-169.000000
-170.000000
-171.000000
-172.000000
-173.000000
-174.000000
-175.000000
-176.000000
-177.000000
-178.000000
-179.000000
-180.000000
-181.000000
-182.000000
-183.000000
-184.000000
-185.000000
-186.000000
-187.000000
-188.000000
-189.000000
-190.000000
-191.000000
-192.000000
-193.000000
-194.000000
-195.000000
-196.000000
-197.000000
-198.000000
-199.000000
-200.000000
-201.000000
-202.000000
-203.000000
-204.000000
-205.000000
-206.000000
-207.000000
-208.000000
-209.000000
-210.000000
-211.000000
-212.000000
-213.000000
-214.000000
-215.000000
-216.000000
-217.000000
-218.000000
-219.000000
-220.000000
-221.000000
-222.000000
-223.000000
-224.000000
-225.000000
-226.000000
-227.000000
-228.000000
-229.000000
-230.000000
-231.000000
-232.000000
-233.000000
-234.000000
-235.000000
-236.000000
-237.000000
-238.000000
-239.000000
-240.000000
-241.000000
-242.000000
-243.000000
-244.000000
-245.000000
-246.000000
-247.000000
-248.000000
-249.000000
-250.000000
-251.000000
-252.000000
-253.000000
-254.000000
-255.000000
-0.000000
-1.000000
-2.000000
-3.000000
-4.000000
-5.000000
-6.000000
-7.000000
-8.000000
-9.000000
-10.000000
-11.000000
-12.000000
-13.000000
-14.000000
-15.000000
-16.000000
-17.000000
-18.000000
-19.000000
-20.000000
-21.000000
-22.000000
-23.000000
-24.000000
-25.000000
-26.000000
-27.000000
-28.000000
-29.000000
-30.000000
-31.000000
-32.000000
-33.000000
-34.000000
-35.000000
-36.000000
-37.000000
-38.000000
-39.000000
-40.000000
-41.000000
-42.000000
-43.000000
-44.000000
-45.000000
-46.000000
-47.000000
-48.000000
-49.000000
-50.000000
-51.000000
-52.000000
-53.000000
-54.000000
-55.000000
-56.000000
-57.000000
-58.000000
-59.000000
-60.000000
-61.000000
-62.000000
-63.000000
-64.000000
-65.000000
-66.000000
-67.000000
-68.000000
-69.000000
-70.000000
-71.000000
-72.000000
-73.000000
-74.000000
-75.000000
-76.000000
-77.000000
-78.000000
-79.000000
-80.000000
-81.000000
-82.000000
-83.000000
-84.000000
-85.000000
-86.000000
-87.000000
-88.000000
-89.000000
-90.000000
-91.000000
-92.000000
-93.000000
-94.000000
-95.000000
-96.000000
-97.000000
-98.000000
-99.000000
-100.000000
-101.000000
-102.000000
-103.000000
-104.000000
-105.000000
-106.000000
-107.000000
-108.000000
-109.000000
-110.000000
-111.000000
-112.000000
-113.000000
-114.000000
-115.000000
-116.000000
-117.000000
-118.000000
-119.000000
-120.000000
-121.000000
-122.000000
-123.000000
-124.000000
-125.000000
-126.000000
-127.000000
-128.000000
-129.000000
-130.000000
-131.000000
-132.000000
-133.000000
-134.000000
-135.000000
-136.000000
-137.000000
-138.000000
-139.000000
-140.000000
-141.000000
-142.000000
-143.000000
-144.000000
-145.000000
-146.000000
-147.000000
-148.000000
-149.000000
-150.000000
-151.000000
-152.000000
-153.000000
-154.000000
-155.000000
-156.000000
-157.000000
-158.000000
-159.000000
-160.000000
-161.000000
-162.000000
-163.000000
-164.000000
-165.000000
-166.000000
-167.000000
-168.000000
-169.000000
-170.000000
-171.000000
-172.000000
-173.000000
-174.000000
-175.000000
-176.000000
-177.000000
-178.000000
-179.000000
-180.000000
-181.000000
-182.000000
-183.000000
-184.000000
-185.000000
-186.000000
-187.000000
-188.000000
-189.000000
-190.000000
-191.000000
-192.000000
-193.000000
-194.000000
-195.000000
-196.000000
-197.000000
-198.000000
-199.000000
-200.000000
-201.000000
-202.000000
-203.000000
-204.000000
-205.000000
-206.000000
-207.000000
-208.000000
-209.000000
-210.000000
-211.000000
-212.000000
-213.000000
-214.000000
-215.000000
-216.000000
-217.000000
-218.000000
-219.000000
-220.000000
-221.000000
-222.000000
-223.000000
-224.000000
-225.000000
-226.000000
-227.000000
-228.000000
-229.000000
-230.000000
-231.000000
-232.000000
-233.000000
-234.000000
-235.000000
-236.000000
-237.000000
-238.000000
-239.000000
-240.000000
-241.000000
-242.000000
-243.000000
-244.000000
-245.000000
-246.000000
-247.000000
-248.000000
-249.000000
-250.000000
-251.000000
-252.000000
-253.000000
-254.000000
-255.000000
-SCALARS attr4_1 float
-LOOKUP_TABLE default
-0.000000
-1.000000
-2.000000
-3.000000
-4.000000
-5.000000
-6.000000
-7.000000
-8.000000
-9.000000
-10.000000
-11.000000
-12.000000
-13.000000
-14.000000
-15.000000
-16.000000
-17.000000
-18.000000
-19.000000
-20.000000
-21.000000
-22.000000
-23.000000
-24.000000
-25.000000
-26.000000
-27.000000
-28.000000
-29.000000
-30.000000
-31.000000
-32.000000
-33.000000
-34.000000
-35.000000
-36.000000
-37.000000
-38.000000
-39.000000
-40.000000
-41.000000
-42.000000
-43.000000
-44.000000
-45.000000
-46.000000
-47.000000
-48.000000
-49.000000
-50.000000
-51.000000
-52.000000
-53.000000
-54.000000
-55.000000
-56.000000
-57.000000
-58.000000
-59.000000
-60.000000
-61.000000
-62.000000
-63.000000
-64.000000
-65.000000
-66.000000
-67.000000
-68.000000
-69.000000
-70.000000
-71.000000
-72.000000
-73.000000
-74.000000
-75.000000
-76.000000
-77.000000
-78.000000
-79.000000
-80.000000
-81.000000
-82.000000
-83.000000
-84.000000
-85.000000
-86.000000
-87.000000
-88.000000
-89.000000
-90.000000
-91.000000
-92.000000
-93.000000
-94.000000
-95.000000
-96.000000
-97.000000
-98.000000
-99.000000
-100.000000
-101.000000
-102.000000
-103.000000
-104.000000
-105.000000
-106.000000
-107.000000
-108.000000
-109.000000
-110.000000
-111.000000
-112.000000
-113.000000
-114.000000
-115.000000
-116.000000
-117.000000
-118.000000
-119.000000
-120.000000
-121.000000
-122.000000
-123.000000
-124.000000
-125.000000
-126.000000
-127.000000
-128.000000
-129.000000
-130.000000
-131.000000
-132.000000
-133.000000
-134.000000
-135.000000
-136.000000
-137.000000
-138.000000
-139.000000
-140.000000
-141.000000
-142.000000
-143.000000
-144.000000
-145.000000
-146.000000
-147.000000
-148.000000
-149.000000
-150.000000
-151.000000
-152.000000
-153.000000
-154.000000
-155.000000
-156.000000
-157.000000
-158.000000
-159.000000
-160.000000
-161.000000
-162.000000
-163.000000
-164.000000
-165.000000
-166.000000
-167.000000
-168.000000
-169.000000
-170.000000
-171.000000
-172.000000
-173.000000
-174.000000
-175.000000
-176.000000
-177.000000
-178.000000
-179.000000
-180.000000
-181.000000
-182.000000
-183.000000
-184.000000
-185.000000
-186.000000
-187.000000
-188.000000
-189.000000
-190.000000
-191.000000
-192.000000
-193.000000
-194.000000
-195.000000
-196.000000
-197.000000
-198.000000
-199.000000
-200.000000
-201.000000
-202.000000
-203.000000
-204.000000
-205.000000
-206.000000
-207.000000
-208.000000
-209.000000
-210.000000
-211.000000
-212.000000
-213.000000
-214.000000
-215.000000
-216.000000
-217.000000
-218.000000
-219.000000
-220.000000
-221.000000
-222.000000
-223.000000
-224.000000
-225.000000
-226.000000
-227.000000
-228.000000
-229.000000
-230.000000
-231.000000
-232.000000
-233.000000
-234.000000
-235.000000
-236.000000
-237.000000
-238.000000
-239.000000
-240.000000
-241.000000
-242.000000
-243.000000
-244.000000
-245.000000
-246.000000
-247.000000
-248.000000
-249.000000
-250.000000
-251.000000
-252.000000
-253.000000
-254.000000
-255.000000
-0.000000
-1.000000
-2.000000
-3.000000
-4.000000
-5.000000
-6.000000
-7.000000
-8.000000
-9.000000
-10.000000
-11.000000
-12.000000
-13.000000
-14.000000
-15.000000
-16.000000
-17.000000
-18.000000
-19.000000
-20.000000
-21.000000
-22.000000
-23.000000
-24.000000
-25.000000
-26.000000
-27.000000
-28.000000
-29.000000
-30.000000
-31.000000
-32.000000
-33.000000
-34.000000
-35.000000
-36.000000
-37.000000
-38.000000
-39.000000
-40.000000
-41.000000
-42.000000
-43.000000
-44.000000
-45.000000
-46.000000
-47.000000
-48.000000
-49.000000
-50.000000
-51.000000
-52.000000
-53.000000
-54.000000
-55.000000
-56.000000
-57.000000
-58.000000
-59.000000
-60.000000
-61.000000
-62.000000
-63.000000
-64.000000
-65.000000
-66.000000
-67.000000
-68.000000
-69.000000
-70.000000
-71.000000
-72.000000
-73.000000
-74.000000
-75.000000
-76.000000
-77.000000
-78.000000
-79.000000
-80.000000
-81.000000
-82.000000
-83.000000
-84.000000
-85.000000
-86.000000
-87.000000
-88.000000
-89.000000
-90.000000
-91.000000
-92.000000
-93.000000
-94.000000
-95.000000
-96.000000
-97.000000
-98.000000
-99.000000
-100.000000
-101.000000
-102.000000
-103.000000
-104.000000
-105.000000
-106.000000
-107.000000
-108.000000
-109.000000
-110.000000
-111.000000
-112.000000
-113.000000
-114.000000
-115.000000
-116.000000
-117.000000
-118.000000
-119.000000
-120.000000
-121.000000
-122.000000
-123.000000
-124.000000
-125.000000
-126.000000
-127.000000
-128.000000
-129.000000
-130.000000
-131.000000
-132.000000
-133.000000
-134.000000
-135.000000
-136.000000
-137.000000
-138.000000
-139.000000
-140.000000
-141.000000
-142.000000
-143.000000
-144.000000
-145.000000
-146.000000
-147.000000
-148.000000
-149.000000
-150.000000
-151.000000
-152.000000
-153.000000
-154.000000
-155.000000
-156.000000
-157.000000
-158.000000
-159.000000
-160.000000
-161.000000
-162.000000
-163.000000
-164.000000
-165.000000
-166.000000
-167.000000
-168.000000
-169.000000
-170.000000
-171.000000
-172.000000
-173.000000
-174.000000
-175.000000
-176.000000
-177.000000
-178.000000
-179.000000
-180.000000
-181.000000
-182.000000
-183.000000
-184.000000
-185.000000
-186.000000
-187.000000
-188.000000
-189.000000
-190.000000
-191.000000
-192.000000
-193.000000
-194.000000
-195.000000
-196.000000
-197.000000
-198.000000
-199.000000
-200.000000
-201.000000
-202.000000
-203.000000
-204.000000
-205.000000
-206.000000
-207.000000
-208.000000
-209.000000
-210.000000
-211.000000
-212.000000
-213.000000
-214.000000
-215.000000
-216.000000
-217.000000
-218.000000
-219.000000
-220.000000
-221.000000
-222.000000
-223.000000
-224.000000
-225.000000
-226.000000
-227.000000
-228.000000
-229.000000
-230.000000
-231.000000
-232.000000
-233.000000
-234.000000
-235.000000
-236.000000
-237.000000
-238.000000
-239.000000
-240.000000
-241.000000
-242.000000
-243.000000
-244.000000
-245.000000
-246.000000
-247.000000
-248.000000
-249.000000
-250.000000
-251.000000
-252.000000
-253.000000
-254.000000
-255.000000
-0.000000
-1.000000
-2.000000
-3.000000
-4.000000
-5.000000
-6.000000
-7.000000
-8.000000
-9.000000
-10.000000
-11.000000
-12.000000
-13.000000
-14.000000
-15.000000
-16.000000
-17.000000
-18.000000
-19.000000
-20.000000
-21.000000
-22.000000
-23.000000
-24.000000
-25.000000
-26.000000
-27.000000
-28.000000
-29.000000
-30.000000
-31.000000
-32.000000
-33.000000
-34.000000
-35.000000
-36.000000
-37.000000
-38.000000
-39.000000
-40.000000
-41.000000
-42.000000
-43.000000
-44.000000
-45.000000
-46.000000
-47.000000
-48.000000
-49.000000
-50.000000
-51.000000
-52.000000
-53.000000
-54.000000
-55.000000
-56.000000
-57.000000
-58.000000
-59.000000
-60.000000
-61.000000
-62.000000
-63.000000
-64.000000
-65.000000
-66.000000
-67.000000
-68.000000
-69.000000
-70.000000
-71.000000
-72.000000
-73.000000
-74.000000
-75.000000
-76.000000
-77.000000
-78.000000
-79.000000
-80.000000
-81.000000
-82.000000
-83.000000
-84.000000
-85.000000
-86.000000
-87.000000
-88.000000
-89.000000
-90.000000
-91.000000
-92.000000
-93.000000
-94.000000
-95.000000
-96.000000
-97.000000
-98.000000
-99.000000
-100.000000
-101.000000
-102.000000
-103.000000
-104.000000
-105.000000
-106.000000
-107.000000
-108.000000
-109.000000
-110.000000
-111.000000
-112.000000
-113.000000
-114.000000
-115.000000
-116.000000
-117.000000
-118.000000
-119.000000
-120.000000
-121.000000
-122.000000
-123.000000
-124.000000
-125.000000
-126.000000
-127.000000
-128.000000
-129.000000
-130.000000
-131.000000
-132.000000
-133.000000
-134.000000
-135.000000
-136.000000
-137.000000
-138.000000
-139.000000
-140.000000
-141.000000
-142.000000
-143.000000
-144.000000
-145.000000
-146.000000
-147.000000
-148.000000
-149.000000
-150.000000
-151.000000
-152.000000
-153.000000
-154.000000
-155.000000
-156.000000
-157.000000
-158.000000
-159.000000
-160.000000
-161.000000
-162.000000
-163.000000
-164.000000
-165.000000
-166.000000
-167.000000
-168.000000
-169.000000
-170.000000
-171.000000
-172.000000
-173.000000
-174.000000
-175.000000
-176.000000
-177.000000
-178.000000
-179.000000
-180.000000
-181.000000
-182.000000
-183.000000
-184.000000
-185.000000
-186.000000
-187.000000
-188.000000
-189.000000
-190.000000
-191.000000
-192.000000
-193.000000
-194.000000
-195.000000
-196.000000
-197.000000
-198.000000
-199.000000
-200.000000
-201.000000
-202.000000
-203.000000
-204.000000
-205.000000
-206.000000
-207.000000
-208.000000
-209.000000
-210.000000
-211.000000
-212.000000
-213.000000
-214.000000
-215.000000
-216.000000
-217.000000
-218.000000
-219.000000
-220.000000
-221.000000
-222.000000
-223.000000
-224.000000
-225.000000
-226.000000
-227.000000
-228.000000
-229.000000
-230.000000
-231.000000
-232.000000
-233.000000
-234.000000
-235.000000
-236.000000
-237.000000
-238.000000
-239.000000
-240.000000
-241.000000
-242.000000
-243.000000
-244.000000
-245.000000
-246.000000
-247.000000
-248.000000
-249.000000
-250.000000
-251.000000
-252.000000
-253.000000
-254.000000
-255.000000
-0.000000
-1.000000
-2.000000
-3.000000
-4.000000
-5.000000
-6.000000
-7.000000
-8.000000
-9.000000
-10.000000
-11.000000
-12.000000
-13.000000
-14.000000
-15.000000
-16.000000
-17.000000
-18.000000
-19.000000
-20.000000
-21.000000
-22.000000
-23.000000
-24.000000
-25.000000
-26.000000
-27.000000
-28.000000
-29.000000
-30.000000
-31.000000
-32.000000
-33.000000
-34.000000
-35.000000
-36.000000
-37.000000
-38.000000
-39.000000
-40.000000
-41.000000
-42.000000
-43.000000
-44.000000
-45.000000
-46.000000
-47.000000
-48.000000
-49.000000
-50.000000
-51.000000
-52.000000
-53.000000
-54.000000
-55.000000
-56.000000
-57.000000
-58.000000
-59.000000
-60.000000
-61.000000
-62.000000
-63.000000
-64.000000
-65.000000
-66.000000
-67.000000
-68.000000
-69.000000
-70.000000
-71.000000
-72.000000
-73.000000
-74.000000
-75.000000
-76.000000
-77.000000
-78.000000
-79.000000
-80.000000
-81.000000
-82.000000
-83.000000
-84.000000
-85.000000
-86.000000
-87.000000
-88.000000
-89.000000
-90.000000
-91.000000
-92.000000
-93.000000
-94.000000
-95.000000
-96.000000
-97.000000
-98.000000
-99.000000
-100.000000
-101.000000
-102.000000
-103.000000
-104.000000
-105.000000
-106.000000
-107.000000
-108.000000
-109.000000
-110.000000
-111.000000
-112.000000
-113.000000
-114.000000
-115.000000
-116.000000
-117.000000
-118.000000
-119.000000
-120.000000
-121.000000
-122.000000
-123.000000
-124.000000
-125.000000
-126.000000
-127.000000
-128.000000
-129.000000
-130.000000
-131.000000
-132.000000
-133.000000
-134.000000
-135.000000
-136.000000
-137.000000
-138.000000
-139.000000
-140.000000
-141.000000
-142.000000
-143.000000
-144.000000
-145.000000
-146.000000
-147.000000
-148.000000
-149.000000
-150.000000
-151.000000
-152.000000
-153.000000
-154.000000
-155.000000
-156.000000
-157.000000
-158.000000
-159.000000
-160.000000
-161.000000
-162.000000
-163.000000
-164.000000
-165.000000
-166.000000
-167.000000
-168.000000
-169.000000
-170.000000
-171.000000
-172.000000
-173.000000
-174.000000
-175.000000
-176.000000
-177.000000
-178.000000
-179.000000
-180.000000
-181.000000
-182.000000
-183.000000
-184.000000
-185.000000
-186.000000
-187.000000
-188.000000
-189.000000
-190.000000
-191.000000
-192.000000
-193.000000
-194.000000
-195.000000
-196.000000
-197.000000
-198.000000
-199.000000
-200.000000
-201.000000
-202.000000
-203.000000
-204.000000
-205.000000
-206.000000
-207.000000
-208.000000
-209.000000
-210.000000
-211.000000
-212.000000
-213.000000
-214.000000
-215.000000
-216.000000
-217.000000
-218.000000
-219.000000
-220.000000
-221.000000
-222.000000
-223.000000
-224.000000
-225.000000
-226.000000
-227.000000
-228.000000
-229.000000
-230.000000
-231.000000
-232.000000
-233.000000
-234.000000
-235.000000
-236.000000
-237.000000
-238.000000
-239.000000
-240.000000
-241.000000
-242.000000
-243.000000
-244.000000
-245.000000
-246.000000
-247.000000
-248.000000
-249.000000
-250.000000
-251.000000
-252.000000
-253.000000
-254.000000
-255.000000
-SCALARS attr4_2 float
-LOOKUP_TABLE default
-0.000000
-1.000000
-2.000000
-3.000000
-4.000000
-5.000000
-6.000000
-7.000000
-8.000000
-9.000000
-10.000000
-11.000000
-12.000000
-13.000000
-14.000000
-15.000000
-16.000000
-17.000000
-18.000000
-19.000000
-20.000000
-21.000000
-22.000000
-23.000000
-24.000000
-25.000000
-26.000000
-27.000000
-28.000000
-29.000000
-30.000000
-31.000000
-32.000000
-33.000000
-34.000000
-35.000000
-36.000000
-37.000000
-38.000000
-39.000000
-40.000000
-41.000000
-42.000000
-43.000000
-44.000000
-45.000000
-46.000000
-47.000000
-48.000000
-49.000000
-50.000000
-51.000000
-52.000000
-53.000000
-54.000000
-55.000000
-56.000000
-57.000000
-58.000000
-59.000000
-60.000000
-61.000000
-62.000000
-63.000000
-64.000000
-65.000000
-66.000000
-67.000000
-68.000000
-69.000000
-70.000000
-71.000000
-72.000000
-73.000000
-74.000000
-75.000000
-76.000000
-77.000000
-78.000000
-79.000000
-80.000000
-81.000000
-82.000000
-83.000000
-84.000000
-85.000000
-86.000000
-87.000000
-88.000000
-89.000000
-90.000000
-91.000000
-92.000000
-93.000000
-94.000000
-95.000000
-96.000000
-97.000000
-98.000000
-99.000000
-100.000000
-101.000000
-102.000000
-103.000000
-104.000000
-105.000000
-106.000000
-107.000000
-108.000000
-109.000000
-110.000000
-111.000000
-112.000000
-113.000000
-114.000000
-115.000000
-116.000000
-117.000000
-118.000000
-119.000000
-120.000000
-121.000000
-122.000000
-123.000000
-124.000000
-125.000000
-126.000000
-127.000000
-128.000000
-129.000000
-130.000000
-131.000000
-132.000000
-133.000000
-134.000000
-135.000000
-136.000000
-137.000000
-138.000000
-139.000000
-140.000000
-141.000000
-142.000000
-143.000000
-144.000000
-145.000000
-146.000000
-147.000000
-148.000000
-149.000000
-150.000000
-151.000000
-152.000000
-153.000000
-154.000000
-155.000000
-156.000000
-157.000000
-158.000000
-159.000000
-160.000000
-161.000000
-162.000000
-163.000000
-164.000000
-165.000000
-166.000000
-167.000000
-168.000000
-169.000000
-170.000000
-171.000000
-172.000000
-173.000000
-174.000000
-175.000000
-176.000000
-177.000000
-178.000000
-179.000000
-180.000000
-181.000000
-182.000000
-183.000000
-184.000000
-185.000000
-186.000000
-187.000000
-188.000000
-189.000000
-190.000000
-191.000000
-192.000000
-193.000000
-194.000000
-195.000000
-196.000000
-197.000000
-198.000000
-199.000000
-200.000000
-201.000000
-202.000000
-203.000000
-204.000000
-205.000000
-206.000000
-207.000000
-208.000000
-209.000000
-210.000000
-211.000000
-212.000000
-213.000000
-214.000000
-215.000000
-216.000000
-217.000000
-218.000000
-219.000000
-220.000000
-221.000000
-222.000000
-223.000000
-224.000000
-225.000000
-226.000000
-227.000000
-228.000000
-229.000000
-230.000000
-231.000000
-232.000000
-233.000000
-234.000000
-235.000000
-236.000000
-237.000000
-238.000000
-239.000000
-240.000000
-241.000000
-242.000000
-243.000000
-244.000000
-245.000000
-246.000000
-247.000000
-248.000000
-249.000000
-250.000000
-251.000000
-252.000000
-253.000000
-254.000000
-255.000000
-0.000000
-1.000000
-2.000000
-3.000000
-4.000000
-5.000000
-6.000000
-7.000000
-8.000000
-9.000000
-10.000000
-11.000000
-12.000000
-13.000000
-14.000000
-15.000000
-16.000000
-17.000000
-18.000000
-19.000000
-20.000000
-21.000000
-22.000000
-23.000000
-24.000000
-25.000000
-26.000000
-27.000000
-28.000000
-29.000000
-30.000000
-31.000000
-32.000000
-33.000000
-34.000000
-35.000000
-36.000000
-37.000000
-38.000000
-39.000000
-40.000000
-41.000000
-42.000000
-43.000000
-44.000000
-45.000000
-46.000000
-47.000000
-48.000000
-49.000000
-50.000000
-51.000000
-52.000000
-53.000000
-54.000000
-55.000000
-56.000000
-57.000000
-58.000000
-59.000000
-60.000000
-61.000000
-62.000000
-63.000000
-64.000000
-65.000000
-66.000000
-67.000000
-68.000000
-69.000000
-70.000000
-71.000000
-72.000000
-73.000000
-74.000000
-75.000000
-76.000000
-77.000000
-78.000000
-79.000000
-80.000000
-81.000000
-82.000000
-83.000000
-84.000000
-85.000000
-86.000000
-87.000000
-88.000000
-89.000000
-90.000000
-91.000000
-92.000000
-93.000000
-94.000000
-95.000000
-96.000000
-97.000000
-98.000000
-99.000000
-100.000000
-101.000000
-102.000000
-103.000000
-104.000000
-105.000000
-106.000000
-107.000000
-108.000000
-109.000000
-110.000000
-111.000000
-112.000000
-113.000000
-114.000000
-115.000000
-116.000000
-117.000000
-118.000000
-119.000000
-120.000000
-121.000000
-122.000000
-123.000000
-124.000000
-125.000000
-126.000000
-127.000000
-128.000000
-129.000000
-130.000000
-131.000000
-132.000000
-133.000000
-134.000000
-135.000000
-136.000000
-137.000000
-138.000000
-139.000000
-140.000000
-141.000000
-142.000000
-143.000000
-144.000000
-145.000000
-146.000000
-147.000000
-148.000000
-149.000000
-150.000000
-151.000000
-152.000000
-153.000000
-154.000000
-155.000000
-156.000000
-157.000000
-158.000000
-159.000000
-160.000000
-161.000000
-162.000000
-163.000000
-164.000000
-165.000000
-166.000000
-167.000000
-168.000000
-169.000000
-170.000000
-171.000000
-172.000000
-173.000000
-174.000000
-175.000000
-176.000000
-177.000000
-178.000000
-179.000000
-180.000000
-181.000000
-182.000000
-183.000000
-184.000000
-185.000000
-186.000000
-187.000000
-188.000000
-189.000000
-190.000000
-191.000000
-192.000000
-193.000000
-194.000000
-195.000000
-196.000000
-197.000000
-198.000000
-199.000000
-200.000000
-201.000000
-202.000000
-203.000000
-204.000000
-205.000000
-206.000000
-207.000000
-208.000000
-209.000000
-210.000000
-211.000000
-212.000000
-213.000000
-214.000000
-215.000000
-216.000000
-217.000000
-218.000000
-219.000000
-220.000000
-221.000000
-222.000000
-223.000000
-224.000000
-225.000000
-226.000000
-227.000000
-228.000000
-229.000000
-230.000000
-231.000000
-232.000000
-233.000000
-234.000000
-235.000000
-236.000000
-237.000000
-238.000000
-239.000000
-240.000000
-241.000000
-242.000000
-243.000000
-244.000000
-245.000000
-246.000000
-247.000000
-248.000000
-249.000000
-250.000000
-251.000000
-252.000000
-253.000000
-254.000000
-255.000000
-0.000000
-1.000000
-2.000000
-3.000000
-4.000000
-5.000000
-6.000000
-7.000000
-8.000000
-9.000000
-10.000000
-11.000000
-12.000000
-13.000000
-14.000000
-15.000000
-16.000000
-17.000000
-18.000000
-19.000000
-20.000000
-21.000000
-22.000000
-23.000000
-24.000000
-25.000000
-26.000000
-27.000000
-28.000000
-29.000000
-30.000000
-31.000000
-32.000000
-33.000000
-34.000000
-35.000000
-36.000000
-37.000000
-38.000000
-39.000000
-40.000000
-41.000000
-42.000000
-43.000000
-44.000000
-45.000000
-46.000000
-47.000000
-48.000000
-49.000000
-50.000000
-51.000000
-52.000000
-53.000000
-54.000000
-55.000000
-56.000000
-57.000000
-58.000000
-59.000000
-60.000000
-61.000000
-62.000000
-63.000000
-64.000000
-65.000000
-66.000000
-67.000000
-68.000000
-69.000000
-70.000000
-71.000000
-72.000000
-73.000000
-74.000000
-75.000000
-76.000000
-77.000000
-78.000000
-79.000000
-80.000000
-81.000000
-82.000000
-83.000000
-84.000000
-85.000000
-86.000000
-87.000000
-88.000000
-89.000000
-90.000000
-91.000000
-92.000000
-93.000000
-94.000000
-95.000000
-96.000000
-97.000000
-98.000000
-99.000000
-100.000000
-101.000000
-102.000000
-103.000000
-104.000000
-105.000000
-106.000000
-107.000000
-108.000000
-109.000000
-110.000000
-111.000000
-112.000000
-113.000000
-114.000000
-115.000000
-116.000000
-117.000000
-118.000000
-119.000000
-120.000000
-121.000000
-122.000000
-123.000000
-124.000000
-125.000000
-126.000000
-127.000000
-128.000000
-129.000000
-130.000000
-131.000000
-132.000000
-133.000000
-134.000000
-135.000000
-136.000000
-137.000000
-138.000000
-139.000000
-140.000000
-141.000000
-142.000000
-143.000000
-144.000000
-145.000000
-146.000000
-147.000000
-148.000000
-149.000000
-150.000000
-151.000000
-152.000000
-153.000000
-154.000000
-155.000000
-156.000000
-157.000000
-158.000000
-159.000000
-160.000000
-161.000000
-162.000000
-163.000000
-164.000000
-165.000000
-166.000000
-167.000000
-168.000000
-169.000000
-170.000000
-171.000000
-172.000000
-173.000000
-174.000000
-175.000000
-176.000000
-177.000000
-178.000000
-179.000000
-180.000000
-181.000000
-182.000000
-183.000000
-184.000000
-185.000000
-186.000000
-187.000000
-188.000000
-189.000000
-190.000000
-191.000000
-192.000000
-193.000000
-194.000000
-195.000000
-196.000000
-197.000000
-198.000000
-199.000000
-200.000000
-201.000000
-202.000000
-203.000000
-204.000000
-205.000000
-206.000000
-207.000000
-208.000000
-209.000000
-210.000000
-211.000000
-212.000000
-213.000000
-214.000000
-215.000000
-216.000000
-217.000000
-218.000000
-219.000000
-220.000000
-221.000000
-222.000000
-223.000000
-224.000000
-225.000000
-226.000000
-227.000000
-228.000000
-229.000000
-230.000000
-231.000000
-232.000000
-233.000000
-234.000000
-235.000000
-236.000000
-237.000000
-238.000000
-239.000000
-240.000000
-241.000000
-242.000000
-243.000000
-244.000000
-245.000000
-246.000000
-247.000000
-248.000000
-249.000000
-250.000000
-251.000000
-252.000000
-253.000000
-254.000000
-255.000000
-0.000000
-1.000000
-2.000000
-3.000000
-4.000000
-5.000000
-6.000000
-7.000000
-8.000000
-9.000000
-10.000000
-11.000000
-12.000000
-13.000000
-14.000000
-15.000000
-16.000000
-17.000000
-18.000000
-19.000000
-20.000000
-21.000000
-22.000000
-23.000000
-24.000000
-25.000000
-26.000000
-27.000000
-28.000000
-29.000000
-30.000000
-31.000000
-32.000000
-33.000000
-34.000000
-35.000000
-36.000000
-37.000000
-38.000000
-39.000000
-40.000000
-41.000000
-42.000000
-43.000000
-44.000000
-45.000000
-46.000000
-47.000000
-48.000000
-49.000000
-50.000000
-51.000000
-52.000000
-53.000000
-54.000000
-55.000000
-56.000000
-57.000000
-58.000000
-59.000000
-60.000000
-61.000000
-62.000000
-63.000000
-64.000000
-65.000000
-66.000000
-67.000000
-68.000000
-69.000000
-70.000000
-71.000000
-72.000000
-73.000000
-74.000000
-75.000000
-76.000000
-77.000000
-78.000000
-79.000000
-80.000000
-81.000000
-82.000000
-83.000000
-84.000000
-85.000000
-86.000000
-87.000000
-88.000000
-89.000000
-90.000000
-91.000000
-92.000000
-93.000000
-94.000000
-95.000000
-96.000000
-97.000000
-98.000000
-99.000000
-100.000000
-101.000000
-102.000000
-103.000000
-104.000000
-105.000000
-106.000000
-107.000000
-108.000000
-109.000000
-110.000000
-111.000000
-112.000000
-113.000000
-114.000000
-115.000000
-116.000000
-117.000000
-118.000000
-119.000000
-120.000000
-121.000000
-122.000000
-123.000000
-124.000000
-125.000000
-126.000000
-127.000000
-128.000000
-129.000000
-130.000000
-131.000000
-132.000000
-133.000000
-134.000000
-135.000000
-136.000000
-137.000000
-138.000000
-139.000000
-140.000000
-141.000000
-142.000000
-143.000000
-144.000000
-145.000000
-146.000000
-147.000000
-148.000000
-149.000000
-150.000000
-151.000000
-152.000000
-153.000000
-154.000000
-155.000000
-156.000000
-157.000000
-158.000000
-159.000000
-160.000000
-161.000000
-162.000000
-163.000000
-164.000000
-165.000000
-166.000000
-167.000000
-168.000000
-169.000000
-170.000000
-171.000000
-172.000000
-173.000000
-174.000000
-175.000000
-176.000000
-177.000000
-178.000000
-179.000000
-180.000000
-181.000000
-182.000000
-183.000000
-184.000000
-185.000000
-186.000000
-187.000000
-188.000000
-189.000000
-190.000000
-191.000000
-192.000000
-193.000000
-194.000000
-195.000000
-196.000000
-197.000000
-198.000000
-199.000000
-200.000000
-201.000000
-202.000000
-203.000000
-204.000000
-205.000000
-206.000000
-207.000000
-208.000000
-209.000000
-210.000000
-211.000000
-212.000000
-213.000000
-214.000000
-215.000000
-216.000000
-217.000000
-218.000000
-219.000000
-220.000000
-221.000000
-222.000000
-223.000000
-224.000000
-225.000000
-226.000000
-227.000000
-228.000000
-229.000000
-230.000000
-231.000000
-232.000000
-233.000000
-234.000000
-235.000000
-236.000000
-237.000000
-238.000000
-239.000000
-240.000000
-241.000000
-242.000000
-243.000000
-244.000000
-245.000000
-246.000000
-247.000000
-248.000000
-249.000000
-250.000000
-251.000000
-252.000000
-253.000000
-254.000000
-255.000000
+VECTORS attr4 float
+0.000000 0.000000 0.000000 
+1.000000 1.000000 1.000000 
+2.000000 2.000000 2.000000 
+3.000000 3.000000 3.000000 
+4.000000 4.000000 4.000000 
+5.000000 5.000000 5.000000 
+6.000000 6.000000 6.000000 
+7.000000 7.000000 7.000000 
+8.000000 8.000000 8.000000 
+9.000000 9.000000 9.000000 
+10.000000 10.000000 10.000000 
+11.000000 11.000000 11.000000 
+12.000000 12.000000 12.000000 
+13.000000 13.000000 13.000000 
+14.000000 14.000000 14.000000 
+15.000000 15.000000 15.000000 
+16.000000 16.000000 16.000000 
+17.000000 17.000000 17.000000 
+18.000000 18.000000 18.000000 
+19.000000 19.000000 19.000000 
+20.000000 20.000000 20.000000 
+21.000000 21.000000 21.000000 
+22.000000 22.000000 22.000000 
+23.000000 23.000000 23.000000 
+24.000000 24.000000 24.000000 
+25.000000 25.000000 25.000000 
+26.000000 26.000000 26.000000 
+27.000000 27.000000 27.000000 
+28.000000 28.000000 28.000000 
+29.000000 29.000000 29.000000 
+30.000000 30.000000 30.000000 
+31.000000 31.000000 31.000000 
+32.000000 32.000000 32.000000 
+33.000000 33.000000 33.000000 
+34.000000 34.000000 34.000000 
+35.000000 35.000000 35.000000 
+36.000000 36.000000 36.000000 
+37.000000 37.000000 37.000000 
+38.000000 38.000000 38.000000 
+39.000000 39.000000 39.000000 
+40.000000 40.000000 40.000000 
+41.000000 41.000000 41.000000 
+42.000000 42.000000 42.000000 
+43.000000 43.000000 43.000000 
+44.000000 44.000000 44.000000 
+45.000000 45.000000 45.000000 
+46.000000 46.000000 46.000000 
+47.000000 47.000000 47.000000 
+48.000000 48.000000 48.000000 
+49.000000 49.000000 49.000000 
+50.000000 50.000000 50.000000 
+51.000000 51.000000 51.000000 
+52.000000 52.000000 52.000000 
+53.000000 53.000000 53.000000 
+54.000000 54.000000 54.000000 
+55.000000 55.000000 55.000000 
+56.000000 56.000000 56.000000 
+57.000000 57.000000 57.000000 
+58.000000 58.000000 58.000000 
+59.000000 59.000000 59.000000 
+60.000000 60.000000 60.000000 
+61.000000 61.000000 61.000000 
+62.000000 62.000000 62.000000 
+63.000000 63.000000 63.000000 
+64.000000 64.000000 64.000000 
+65.000000 65.000000 65.000000 
+66.000000 66.000000 66.000000 
+67.000000 67.000000 67.000000 
+68.000000 68.000000 68.000000 
+69.000000 69.000000 69.000000 
+70.000000 70.000000 70.000000 
+71.000000 71.000000 71.000000 
+72.000000 72.000000 72.000000 
+73.000000 73.000000 73.000000 
+74.000000 74.000000 74.000000 
+75.000000 75.000000 75.000000 
+76.000000 76.000000 76.000000 
+77.000000 77.000000 77.000000 
+78.000000 78.000000 78.000000 
+79.000000 79.000000 79.000000 
+80.000000 80.000000 80.000000 
+81.000000 81.000000 81.000000 
+82.000000 82.000000 82.000000 
+83.000000 83.000000 83.000000 
+84.000000 84.000000 84.000000 
+85.000000 85.000000 85.000000 
+86.000000 86.000000 86.000000 
+87.000000 87.000000 87.000000 
+88.000000 88.000000 88.000000 
+89.000000 89.000000 89.000000 
+90.000000 90.000000 90.000000 
+91.000000 91.000000 91.000000 
+92.000000 92.000000 92.000000 
+93.000000 93.000000 93.000000 
+94.000000 94.000000 94.000000 
+95.000000 95.000000 95.000000 
+96.000000 96.000000 96.000000 
+97.000000 97.000000 97.000000 
+98.000000 98.000000 98.000000 
+99.000000 99.000000 99.000000 
+100.000000 100.000000 100.000000 
+101.000000 101.000000 101.000000 
+102.000000 102.000000 102.000000 
+103.000000 103.000000 103.000000 
+104.000000 104.000000 104.000000 
+105.000000 105.000000 105.000000 
+106.000000 106.000000 106.000000 
+107.000000 107.000000 107.000000 
+108.000000 108.000000 108.000000 
+109.000000 109.000000 109.000000 
+110.000000 110.000000 110.000000 
+111.000000 111.000000 111.000000 
+112.000000 112.000000 112.000000 
+113.000000 113.000000 113.000000 
+114.000000 114.000000 114.000000 
+115.000000 115.000000 115.000000 
+116.000000 116.000000 116.000000 
+117.000000 117.000000 117.000000 
+118.000000 118.000000 118.000000 
+119.000000 119.000000 119.000000 
+120.000000 120.000000 120.000000 
+121.000000 121.000000 121.000000 
+122.000000 122.000000 122.000000 
+123.000000 123.000000 123.000000 
+124.000000 124.000000 124.000000 
+125.000000 125.000000 125.000000 
+126.000000 126.000000 126.000000 
+127.000000 127.000000 127.000000 
+128.000000 128.000000 128.000000 
+129.000000 129.000000 129.000000 
+130.000000 130.000000 130.000000 
+131.000000 131.000000 131.000000 
+132.000000 132.000000 132.000000 
+133.000000 133.000000 133.000000 
+134.000000 134.000000 134.000000 
+135.000000 135.000000 135.000000 
+136.000000 136.000000 136.000000 
+137.000000 137.000000 137.000000 
+138.000000 138.000000 138.000000 
+139.000000 139.000000 139.000000 
+140.000000 140.000000 140.000000 
+141.000000 141.000000 141.000000 
+142.000000 142.000000 142.000000 
+143.000000 143.000000 143.000000 
+144.000000 144.000000 144.000000 
+145.000000 145.000000 145.000000 
+146.000000 146.000000 146.000000 
+147.000000 147.000000 147.000000 
+148.000000 148.000000 148.000000 
+149.000000 149.000000 149.000000 
+150.000000 150.000000 150.000000 
+151.000000 151.000000 151.000000 
+152.000000 152.000000 152.000000 
+153.000000 153.000000 153.000000 
+154.000000 154.000000 154.000000 
+155.000000 155.000000 155.000000 
+156.000000 156.000000 156.000000 
+157.000000 157.000000 157.000000 
+158.000000 158.000000 158.000000 
+159.000000 159.000000 159.000000 
+160.000000 160.000000 160.000000 
+161.000000 161.000000 161.000000 
+162.000000 162.000000 162.000000 
+163.000000 163.000000 163.000000 
+164.000000 164.000000 164.000000 
+165.000000 165.000000 165.000000 
+166.000000 166.000000 166.000000 
+167.000000 167.000000 167.000000 
+168.000000 168.000000 168.000000 
+169.000000 169.000000 169.000000 
+170.000000 170.000000 170.000000 
+171.000000 171.000000 171.000000 
+172.000000 172.000000 172.000000 
+173.000000 173.000000 173.000000 
+174.000000 174.000000 174.000000 
+175.000000 175.000000 175.000000 
+176.000000 176.000000 176.000000 
+177.000000 177.000000 177.000000 
+178.000000 178.000000 178.000000 
+179.000000 179.000000 179.000000 
+180.000000 180.000000 180.000000 
+181.000000 181.000000 181.000000 
+182.000000 182.000000 182.000000 
+183.000000 183.000000 183.000000 
+184.000000 184.000000 184.000000 
+185.000000 185.000000 185.000000 
+186.000000 186.000000 186.000000 
+187.000000 187.000000 187.000000 
+188.000000 188.000000 188.000000 
+189.000000 189.000000 189.000000 
+190.000000 190.000000 190.000000 
+191.000000 191.000000 191.000000 
+192.000000 192.000000 192.000000 
+193.000000 193.000000 193.000000 
+194.000000 194.000000 194.000000 
+195.000000 195.000000 195.000000 
+196.000000 196.000000 196.000000 
+197.000000 197.000000 197.000000 
+198.000000 198.000000 198.000000 
+199.000000 199.000000 199.000000 
+200.000000 200.000000 200.000000 
+201.000000 201.000000 201.000000 
+202.000000 202.000000 202.000000 
+203.000000 203.000000 203.000000 
+204.000000 204.000000 204.000000 
+205.000000 205.000000 205.000000 
+206.000000 206.000000 206.000000 
+207.000000 207.000000 207.000000 
+208.000000 208.000000 208.000000 
+209.000000 209.000000 209.000000 
+210.000000 210.000000 210.000000 
+211.000000 211.000000 211.000000 
+212.000000 212.000000 212.000000 
+213.000000 213.000000 213.000000 
+214.000000 214.000000 214.000000 
+215.000000 215.000000 215.000000 
+216.000000 216.000000 216.000000 
+217.000000 217.000000 217.000000 
+218.000000 218.000000 218.000000 
+219.000000 219.000000 219.000000 
+220.000000 220.000000 220.000000 
+221.000000 221.000000 221.000000 
+222.000000 222.000000 222.000000 
+223.000000 223.000000 223.000000 
+224.000000 224.000000 224.000000 
+225.000000 225.000000 225.000000 
+226.000000 226.000000 226.000000 
+227.000000 227.000000 227.000000 
+228.000000 228.000000 228.000000 
+229.000000 229.000000 229.000000 
+230.000000 230.000000 230.000000 
+231.000000 231.000000 231.000000 
+232.000000 232.000000 232.000000 
+233.000000 233.000000 233.000000 
+234.000000 234.000000 234.000000 
+235.000000 235.000000 235.000000 
+236.000000 236.000000 236.000000 
+237.000000 237.000000 237.000000 
+238.000000 238.000000 238.000000 
+239.000000 239.000000 239.000000 
+240.000000 240.000000 240.000000 
+241.000000 241.000000 241.000000 
+242.000000 242.000000 242.000000 
+243.000000 243.000000 243.000000 
+244.000000 244.000000 244.000000 
+245.000000 245.000000 245.000000 
+246.000000 246.000000 246.000000 
+247.000000 247.000000 247.000000 
+248.000000 248.000000 248.000000 
+249.000000 249.000000 249.000000 
+250.000000 250.000000 250.000000 
+251.000000 251.000000 251.000000 
+252.000000 252.000000 252.000000 
+253.000000 253.000000 253.000000 
+254.000000 254.000000 254.000000 
+255.000000 255.000000 255.000000 
+0.000000 0.000000 0.000000 
+1.000000 1.000000 1.000000 
+2.000000 2.000000 2.000000 
+3.000000 3.000000 3.000000 
+4.000000 4.000000 4.000000 
+5.000000 5.000000 5.000000 
+6.000000 6.000000 6.000000 
+7.000000 7.000000 7.000000 
+8.000000 8.000000 8.000000 
+9.000000 9.000000 9.000000 
+10.000000 10.000000 10.000000 
+11.000000 11.000000 11.000000 
+12.000000 12.000000 12.000000 
+13.000000 13.000000 13.000000 
+14.000000 14.000000 14.000000 
+15.000000 15.000000 15.000000 
+16.000000 16.000000 16.000000 
+17.000000 17.000000 17.000000 
+18.000000 18.000000 18.000000 
+19.000000 19.000000 19.000000 
+20.000000 20.000000 20.000000 
+21.000000 21.000000 21.000000 
+22.000000 22.000000 22.000000 
+23.000000 23.000000 23.000000 
+24.000000 24.000000 24.000000 
+25.000000 25.000000 25.000000 
+26.000000 26.000000 26.000000 
+27.000000 27.000000 27.000000 
+28.000000 28.000000 28.000000 
+29.000000 29.000000 29.000000 
+30.000000 30.000000 30.000000 
+31.000000 31.000000 31.000000 
+32.000000 32.000000 32.000000 
+33.000000 33.000000 33.000000 
+34.000000 34.000000 34.000000 
+35.000000 35.000000 35.000000 
+36.000000 36.000000 36.000000 
+37.000000 37.000000 37.000000 
+38.000000 38.000000 38.000000 
+39.000000 39.000000 39.000000 
+40.000000 40.000000 40.000000 
+41.000000 41.000000 41.000000 
+42.000000 42.000000 42.000000 
+43.000000 43.000000 43.000000 
+44.000000 44.000000 44.000000 
+45.000000 45.000000 45.000000 
+46.000000 46.000000 46.000000 
+47.000000 47.000000 47.000000 
+48.000000 48.000000 48.000000 
+49.000000 49.000000 49.000000 
+50.000000 50.000000 50.000000 
+51.000000 51.000000 51.000000 
+52.000000 52.000000 52.000000 
+53.000000 53.000000 53.000000 
+54.000000 54.000000 54.000000 
+55.000000 55.000000 55.000000 
+56.000000 56.000000 56.000000 
+57.000000 57.000000 57.000000 
+58.000000 58.000000 58.000000 
+59.000000 59.000000 59.000000 
+60.000000 60.000000 60.000000 
+61.000000 61.000000 61.000000 
+62.000000 62.000000 62.000000 
+63.000000 63.000000 63.000000 
+64.000000 64.000000 64.000000 
+65.000000 65.000000 65.000000 
+66.000000 66.000000 66.000000 
+67.000000 67.000000 67.000000 
+68.000000 68.000000 68.000000 
+69.000000 69.000000 69.000000 
+70.000000 70.000000 70.000000 
+71.000000 71.000000 71.000000 
+72.000000 72.000000 72.000000 
+73.000000 73.000000 73.000000 
+74.000000 74.000000 74.000000 
+75.000000 75.000000 75.000000 
+76.000000 76.000000 76.000000 
+77.000000 77.000000 77.000000 
+78.000000 78.000000 78.000000 
+79.000000 79.000000 79.000000 
+80.000000 80.000000 80.000000 
+81.000000 81.000000 81.000000 
+82.000000 82.000000 82.000000 
+83.000000 83.000000 83.000000 
+84.000000 84.000000 84.000000 
+85.000000 85.000000 85.000000 
+86.000000 86.000000 86.000000 
+87.000000 87.000000 87.000000 
+88.000000 88.000000 88.000000 
+89.000000 89.000000 89.000000 
+90.000000 90.000000 90.000000 
+91.000000 91.000000 91.000000 
+92.000000 92.000000 92.000000 
+93.000000 93.000000 93.000000 
+94.000000 94.000000 94.000000 
+95.000000 95.000000 95.000000 
+96.000000 96.000000 96.000000 
+97.000000 97.000000 97.000000 
+98.000000 98.000000 98.000000 
+99.000000 99.000000 99.000000 
+100.000000 100.000000 100.000000 
+101.000000 101.000000 101.000000 
+102.000000 102.000000 102.000000 
+103.000000 103.000000 103.000000 
+104.000000 104.000000 104.000000 
+105.000000 105.000000 105.000000 
+106.000000 106.000000 106.000000 
+107.000000 107.000000 107.000000 
+108.000000 108.000000 108.000000 
+109.000000 109.000000 109.000000 
+110.000000 110.000000 110.000000 
+111.000000 111.000000 111.000000 
+112.000000 112.000000 112.000000 
+113.000000 113.000000 113.000000 
+114.000000 114.000000 114.000000 
+115.000000 115.000000 115.000000 
+116.000000 116.000000 116.000000 
+117.000000 117.000000 117.000000 
+118.000000 118.000000 118.000000 
+119.000000 119.000000 119.000000 
+120.000000 120.000000 120.000000 
+121.000000 121.000000 121.000000 
+122.000000 122.000000 122.000000 
+123.000000 123.000000 123.000000 
+124.000000 124.000000 124.000000 
+125.000000 125.000000 125.000000 
+126.000000 126.000000 126.000000 
+127.000000 127.000000 127.000000 
+128.000000 128.000000 128.000000 
+129.000000 129.000000 129.000000 
+130.000000 130.000000 130.000000 
+131.000000 131.000000 131.000000 
+132.000000 132.000000 132.000000 
+133.000000 133.000000 133.000000 
+134.000000 134.000000 134.000000 
+135.000000 135.000000 135.000000 
+136.000000 136.000000 136.000000 
+137.000000 137.000000 137.000000 
+138.000000 138.000000 138.000000 
+139.000000 139.000000 139.000000 
+140.000000 140.000000 140.000000 
+141.000000 141.000000 141.000000 
+142.000000 142.000000 142.000000 
+143.000000 143.000000 143.000000 
+144.000000 144.000000 144.000000 
+145.000000 145.000000 145.000000 
+146.000000 146.000000 146.000000 
+147.000000 147.000000 147.000000 
+148.000000 148.000000 148.000000 
+149.000000 149.000000 149.000000 
+150.000000 150.000000 150.000000 
+151.000000 151.000000 151.000000 
+152.000000 152.000000 152.000000 
+153.000000 153.000000 153.000000 
+154.000000 154.000000 154.000000 
+155.000000 155.000000 155.000000 
+156.000000 156.000000 156.000000 
+157.000000 157.000000 157.000000 
+158.000000 158.000000 158.000000 
+159.000000 159.000000 159.000000 
+160.000000 160.000000 160.000000 
+161.000000 161.000000 161.000000 
+162.000000 162.000000 162.000000 
+163.000000 163.000000 163.000000 
+164.000000 164.000000 164.000000 
+165.000000 165.000000 165.000000 
+166.000000 166.000000 166.000000 
+167.000000 167.000000 167.000000 
+168.000000 168.000000 168.000000 
+169.000000 169.000000 169.000000 
+170.000000 170.000000 170.000000 
+171.000000 171.000000 171.000000 
+172.000000 172.000000 172.000000 
+173.000000 173.000000 173.000000 
+174.000000 174.000000 174.000000 
+175.000000 175.000000 175.000000 
+176.000000 176.000000 176.000000 
+177.000000 177.000000 177.000000 
+178.000000 178.000000 178.000000 
+179.000000 179.000000 179.000000 
+180.000000 180.000000 180.000000 
+181.000000 181.000000 181.000000 
+182.000000 182.000000 182.000000 
+183.000000 183.000000 183.000000 
+184.000000 184.000000 184.000000 
+185.000000 185.000000 185.000000 
+186.000000 186.000000 186.000000 
+187.000000 187.000000 187.000000 
+188.000000 188.000000 188.000000 
+189.000000 189.000000 189.000000 
+190.000000 190.000000 190.000000 
+191.000000 191.000000 191.000000 
+192.000000 192.000000 192.000000 
+193.000000 193.000000 193.000000 
+194.000000 194.000000 194.000000 
+195.000000 195.000000 195.000000 
+196.000000 196.000000 196.000000 
+197.000000 197.000000 197.000000 
+198.000000 198.000000 198.000000 
+199.000000 199.000000 199.000000 
+200.000000 200.000000 200.000000 
+201.000000 201.000000 201.000000 
+202.000000 202.000000 202.000000 
+203.000000 203.000000 203.000000 
+204.000000 204.000000 204.000000 
+205.000000 205.000000 205.000000 
+206.000000 206.000000 206.000000 
+207.000000 207.000000 207.000000 
+208.000000 208.000000 208.000000 
+209.000000 209.000000 209.000000 
+210.000000 210.000000 210.000000 
+211.000000 211.000000 211.000000 
+212.000000 212.000000 212.000000 
+213.000000 213.000000 213.000000 
+214.000000 214.000000 214.000000 
+215.000000 215.000000 215.000000 
+216.000000 216.000000 216.000000 
+217.000000 217.000000 217.000000 
+218.000000 218.000000 218.000000 
+219.000000 219.000000 219.000000 
+220.000000 220.000000 220.000000 
+221.000000 221.000000 221.000000 
+222.000000 222.000000 222.000000 
+223.000000 223.000000 223.000000 
+224.000000 224.000000 224.000000 
+225.000000 225.000000 225.000000 
+226.000000 226.000000 226.000000 
+227.000000 227.000000 227.000000 
+228.000000 228.000000 228.000000 
+229.000000 229.000000 229.000000 
+230.000000 230.000000 230.000000 
+231.000000 231.000000 231.000000 
+232.000000 232.000000 232.000000 
+233.000000 233.000000 233.000000 
+234.000000 234.000000 234.000000 
+235.000000 235.000000 235.000000 
+236.000000 236.000000 236.000000 
+237.000000 237.000000 237.000000 
+238.000000 238.000000 238.000000 
+239.000000 239.000000 239.000000 
+240.000000 240.000000 240.000000 
+241.000000 241.000000 241.000000 
+242.000000 242.000000 242.000000 
+243.000000 243.000000 243.000000 
+244.000000 244.000000 244.000000 
+245.000000 245.000000 245.000000 
+246.000000 246.000000 246.000000 
+247.000000 247.000000 247.000000 
+248.000000 248.000000 248.000000 
+249.000000 249.000000 249.000000 
+250.000000 250.000000 250.000000 
+251.000000 251.000000 251.000000 
+252.000000 252.000000 252.000000 
+253.000000 253.000000 253.000000 
+254.000000 254.000000 254.000000 
+255.000000 255.000000 255.000000 
+0.000000 0.000000 0.000000 
+1.000000 1.000000 1.000000 
+2.000000 2.000000 2.000000 
+3.000000 3.000000 3.000000 
+4.000000 4.000000 4.000000 
+5.000000 5.000000 5.000000 
+6.000000 6.000000 6.000000 
+7.000000 7.000000 7.000000 
+8.000000 8.000000 8.000000 
+9.000000 9.000000 9.000000 
+10.000000 10.000000 10.000000 
+11.000000 11.000000 11.000000 
+12.000000 12.000000 12.000000 
+13.000000 13.000000 13.000000 
+14.000000 14.000000 14.000000 
+15.000000 15.000000 15.000000 
+16.000000 16.000000 16.000000 
+17.000000 17.000000 17.000000 
+18.000000 18.000000 18.000000 
+19.000000 19.000000 19.000000 
+20.000000 20.000000 20.000000 
+21.000000 21.000000 21.000000 
+22.000000 22.000000 22.000000 
+23.000000 23.000000 23.000000 
+24.000000 24.000000 24.000000 
+25.000000 25.000000 25.000000 
+26.000000 26.000000 26.000000 
+27.000000 27.000000 27.000000 
+28.000000 28.000000 28.000000 
+29.000000 29.000000 29.000000 
+30.000000 30.000000 30.000000 
+31.000000 31.000000 31.000000 
+32.000000 32.000000 32.000000 
+33.000000 33.000000 33.000000 
+34.000000 34.000000 34.000000 
+35.000000 35.000000 35.000000 
+36.000000 36.000000 36.000000 
+37.000000 37.000000 37.000000 
+38.000000 38.000000 38.000000 
+39.000000 39.000000 39.000000 
+40.000000 40.000000 40.000000 
+41.000000 41.000000 41.000000 
+42.000000 42.000000 42.000000 
+43.000000 43.000000 43.000000 
+44.000000 44.000000 44.000000 
+45.000000 45.000000 45.000000 
+46.000000 46.000000 46.000000 
+47.000000 47.000000 47.000000 
+48.000000 48.000000 48.000000 
+49.000000 49.000000 49.000000 
+50.000000 50.000000 50.000000 
+51.000000 51.000000 51.000000 
+52.000000 52.000000 52.000000 
+53.000000 53.000000 53.000000 
+54.000000 54.000000 54.000000 
+55.000000 55.000000 55.000000 
+56.000000 56.000000 56.000000 
+57.000000 57.000000 57.000000 
+58.000000 58.000000 58.000000 
+59.000000 59.000000 59.000000 
+60.000000 60.000000 60.000000 
+61.000000 61.000000 61.000000 
+62.000000 62.000000 62.000000 
+63.000000 63.000000 63.000000 
+64.000000 64.000000 64.000000 
+65.000000 65.000000 65.000000 
+66.000000 66.000000 66.000000 
+67.000000 67.000000 67.000000 
+68.000000 68.000000 68.000000 
+69.000000 69.000000 69.000000 
+70.000000 70.000000 70.000000 
+71.000000 71.000000 71.000000 
+72.000000 72.000000 72.000000 
+73.000000 73.000000 73.000000 
+74.000000 74.000000 74.000000 
+75.000000 75.000000 75.000000 
+76.000000 76.000000 76.000000 
+77.000000 77.000000 77.000000 
+78.000000 78.000000 78.000000 
+79.000000 79.000000 79.000000 
+80.000000 80.000000 80.000000 
+81.000000 81.000000 81.000000 
+82.000000 82.000000 82.000000 
+83.000000 83.000000 83.000000 
+84.000000 84.000000 84.000000 
+85.000000 85.000000 85.000000 
+86.000000 86.000000 86.000000 
+87.000000 87.000000 87.000000 
+88.000000 88.000000 88.000000 
+89.000000 89.000000 89.000000 
+90.000000 90.000000 90.000000 
+91.000000 91.000000 91.000000 
+92.000000 92.000000 92.000000 
+93.000000 93.000000 93.000000 
+94.000000 94.000000 94.000000 
+95.000000 95.000000 95.000000 
+96.000000 96.000000 96.000000 
+97.000000 97.000000 97.000000 
+98.000000 98.000000 98.000000 
+99.000000 99.000000 99.000000 
+100.000000 100.000000 100.000000 
+101.000000 101.000000 101.000000 
+102.000000 102.000000 102.000000 
+103.000000 103.000000 103.000000 
+104.000000 104.000000 104.000000 
+105.000000 105.000000 105.000000 
+106.000000 106.000000 106.000000 
+107.000000 107.000000 107.000000 
+108.000000 108.000000 108.000000 
+109.000000 109.000000 109.000000 
+110.000000 110.000000 110.000000 
+111.000000 111.000000 111.000000 
+112.000000 112.000000 112.000000 
+113.000000 113.000000 113.000000 
+114.000000 114.000000 114.000000 
+115.000000 115.000000 115.000000 
+116.000000 116.000000 116.000000 
+117.000000 117.000000 117.000000 
+118.000000 118.000000 118.000000 
+119.000000 119.000000 119.000000 
+120.000000 120.000000 120.000000 
+121.000000 121.000000 121.000000 
+122.000000 122.000000 122.000000 
+123.000000 123.000000 123.000000 
+124.000000 124.000000 124.000000 
+125.000000 125.000000 125.000000 
+126.000000 126.000000 126.000000 
+127.000000 127.000000 127.000000 
+128.000000 128.000000 128.000000 
+129.000000 129.000000 129.000000 
+130.000000 130.000000 130.000000 
+131.000000 131.000000 131.000000 
+132.000000 132.000000 132.000000 
+133.000000 133.000000 133.000000 
+134.000000 134.000000 134.000000 
+135.000000 135.000000 135.000000 
+136.000000 136.000000 136.000000 
+137.000000 137.000000 137.000000 
+138.000000 138.000000 138.000000 
+139.000000 139.000000 139.000000 
+140.000000 140.000000 140.000000 
+141.000000 141.000000 141.000000 
+142.000000 142.000000 142.000000 
+143.000000 143.000000 143.000000 
+144.000000 144.000000 144.000000 
+145.000000 145.000000 145.000000 
+146.000000 146.000000 146.000000 
+147.000000 147.000000 147.000000 
+148.000000 148.000000 148.000000 
+149.000000 149.000000 149.000000 
+150.000000 150.000000 150.000000 
+151.000000 151.000000 151.000000 
+152.000000 152.000000 152.000000 
+153.000000 153.000000 153.000000 
+154.000000 154.000000 154.000000 
+155.000000 155.000000 155.000000 
+156.000000 156.000000 156.000000 
+157.000000 157.000000 157.000000 
+158.000000 158.000000 158.000000 
+159.000000 159.000000 159.000000 
+160.000000 160.000000 160.000000 
+161.000000 161.000000 161.000000 
+162.000000 162.000000 162.000000 
+163.000000 163.000000 163.000000 
+164.000000 164.000000 164.000000 
+165.000000 165.000000 165.000000 
+166.000000 166.000000 166.000000 
+167.000000 167.000000 167.000000 
+168.000000 168.000000 168.000000 
+169.000000 169.000000 169.000000 
+170.000000 170.000000 170.000000 
+171.000000 171.000000 171.000000 
+172.000000 172.000000 172.000000 
+173.000000 173.000000 173.000000 
+174.000000 174.000000 174.000000 
+175.000000 175.000000 175.000000 
+176.000000 176.000000 176.000000 
+177.000000 177.000000 177.000000 
+178.000000 178.000000 178.000000 
+179.000000 179.000000 179.000000 
+180.000000 180.000000 180.000000 
+181.000000 181.000000 181.000000 
+182.000000 182.000000 182.000000 
+183.000000 183.000000 183.000000 
+184.000000 184.000000 184.000000 
+185.000000 185.000000 185.000000 
+186.000000 186.000000 186.000000 
+187.000000 187.000000 187.000000 
+188.000000 188.000000 188.000000 
+189.000000 189.000000 189.000000 
+190.000000 190.000000 190.000000 
+191.000000 191.000000 191.000000 
+192.000000 192.000000 192.000000 
+193.000000 193.000000 193.000000 
+194.000000 194.000000 194.000000 
+195.000000 195.000000 195.000000 
+196.000000 196.000000 196.000000 
+197.000000 197.000000 197.000000 
+198.000000 198.000000 198.000000 
+199.000000 199.000000 199.000000 
+200.000000 200.000000 200.000000 
+201.000000 201.000000 201.000000 
+202.000000 202.000000 202.000000 
+203.000000 203.000000 203.000000 
+204.000000 204.000000 204.000000 
+205.000000 205.000000 205.000000 
+206.000000 206.000000 206.000000 
+207.000000 207.000000 207.000000 
+208.000000 208.000000 208.000000 
+209.000000 209.000000 209.000000 
+210.000000 210.000000 210.000000 
+211.000000 211.000000 211.000000 
+212.000000 212.000000 212.000000 
+213.000000 213.000000 213.000000 
+214.000000 214.000000 214.000000 
+215.000000 215.000000 215.000000 
+216.000000 216.000000 216.000000 
+217.000000 217.000000 217.000000 
+218.000000 218.000000 218.000000 
+219.000000 219.000000 219.000000 
+220.000000 220.000000 220.000000 
+221.000000 221.000000 221.000000 
+222.000000 222.000000 222.000000 
+223.000000 223.000000 223.000000 
+224.000000 224.000000 224.000000 
+225.000000 225.000000 225.000000 
+226.000000 226.000000 226.000000 
+227.000000 227.000000 227.000000 
+228.000000 228.000000 228.000000 
+229.000000 229.000000 229.000000 
+230.000000 230.000000 230.000000 
+231.000000 231.000000 231.000000 
+232.000000 232.000000 232.000000 
+233.000000 233.000000 233.000000 
+234.000000 234.000000 234.000000 
+235.000000 235.000000 235.000000 
+236.000000 236.000000 236.000000 
+237.000000 237.000000 237.000000 
+238.000000 238.000000 238.000000 
+239.000000 239.000000 239.000000 
+240.000000 240.000000 240.000000 
+241.000000 241.000000 241.000000 
+242.000000 242.000000 242.000000 
+243.000000 243.000000 243.000000 
+244.000000 244.000000 244.000000 
+245.000000 245.000000 245.000000 
+246.000000 246.000000 246.000000 
+247.000000 247.000000 247.000000 
+248.000000 248.000000 248.000000 
+249.000000 249.000000 249.000000 
+250.000000 250.000000 250.000000 
+251.000000 251.000000 251.000000 
+252.000000 252.000000 252.000000 
+253.000000 253.000000 253.000000 
+254.000000 254.000000 254.000000 
+255.000000 255.000000 255.000000 
+0.000000 0.000000 0.000000 
+1.000000 1.000000 1.000000 
+2.000000 2.000000 2.000000 
+3.000000 3.000000 3.000000 
+4.000000 4.000000 4.000000 
+5.000000 5.000000 5.000000 
+6.000000 6.000000 6.000000 
+7.000000 7.000000 7.000000 
+8.000000 8.000000 8.000000 
+9.000000 9.000000 9.000000 
+10.000000 10.000000 10.000000 
+11.000000 11.000000 11.000000 
+12.000000 12.000000 12.000000 
+13.000000 13.000000 13.000000 
+14.000000 14.000000 14.000000 
+15.000000 15.000000 15.000000 
+16.000000 16.000000 16.000000 
+17.000000 17.000000 17.000000 
+18.000000 18.000000 18.000000 
+19.000000 19.000000 19.000000 
+20.000000 20.000000 20.000000 
+21.000000 21.000000 21.000000 
+22.000000 22.000000 22.000000 
+23.000000 23.000000 23.000000 
+24.000000 24.000000 24.000000 
+25.000000 25.000000 25.000000 
+26.000000 26.000000 26.000000 
+27.000000 27.000000 27.000000 
+28.000000 28.000000 28.000000 
+29.000000 29.000000 29.000000 
+30.000000 30.000000 30.000000 
+31.000000 31.000000 31.000000 
+32.000000 32.000000 32.000000 
+33.000000 33.000000 33.000000 
+34.000000 34.000000 34.000000 
+35.000000 35.000000 35.000000 
+36.000000 36.000000 36.000000 
+37.000000 37.000000 37.000000 
+38.000000 38.000000 38.000000 
+39.000000 39.000000 39.000000 
+40.000000 40.000000 40.000000 
+41.000000 41.000000 41.000000 
+42.000000 42.000000 42.000000 
+43.000000 43.000000 43.000000 
+44.000000 44.000000 44.000000 
+45.000000 45.000000 45.000000 
+46.000000 46.000000 46.000000 
+47.000000 47.000000 47.000000 
+48.000000 48.000000 48.000000 
+49.000000 49.000000 49.000000 
+50.000000 50.000000 50.000000 
+51.000000 51.000000 51.000000 
+52.000000 52.000000 52.000000 
+53.000000 53.000000 53.000000 
+54.000000 54.000000 54.000000 
+55.000000 55.000000 55.000000 
+56.000000 56.000000 56.000000 
+57.000000 57.000000 57.000000 
+58.000000 58.000000 58.000000 
+59.000000 59.000000 59.000000 
+60.000000 60.000000 60.000000 
+61.000000 61.000000 61.000000 
+62.000000 62.000000 62.000000 
+63.000000 63.000000 63.000000 
+64.000000 64.000000 64.000000 
+65.000000 65.000000 65.000000 
+66.000000 66.000000 66.000000 
+67.000000 67.000000 67.000000 
+68.000000 68.000000 68.000000 
+69.000000 69.000000 69.000000 
+70.000000 70.000000 70.000000 
+71.000000 71.000000 71.000000 
+72.000000 72.000000 72.000000 
+73.000000 73.000000 73.000000 
+74.000000 74.000000 74.000000 
+75.000000 75.000000 75.000000 
+76.000000 76.000000 76.000000 
+77.000000 77.000000 77.000000 
+78.000000 78.000000 78.000000 
+79.000000 79.000000 79.000000 
+80.000000 80.000000 80.000000 
+81.000000 81.000000 81.000000 
+82.000000 82.000000 82.000000 
+83.000000 83.000000 83.000000 
+84.000000 84.000000 84.000000 
+85.000000 85.000000 85.000000 
+86.000000 86.000000 86.000000 
+87.000000 87.000000 87.000000 
+88.000000 88.000000 88.000000 
+89.000000 89.000000 89.000000 
+90.000000 90.000000 90.000000 
+91.000000 91.000000 91.000000 
+92.000000 92.000000 92.000000 
+93.000000 93.000000 93.000000 
+94.000000 94.000000 94.000000 
+95.000000 95.000000 95.000000 
+96.000000 96.000000 96.000000 
+97.000000 97.000000 97.000000 
+98.000000 98.000000 98.000000 
+99.000000 99.000000 99.000000 
+100.000000 100.000000 100.000000 
+101.000000 101.000000 101.000000 
+102.000000 102.000000 102.000000 
+103.000000 103.000000 103.000000 
+104.000000 104.000000 104.000000 
+105.000000 105.000000 105.000000 
+106.000000 106.000000 106.000000 
+107.000000 107.000000 107.000000 
+108.000000 108.000000 108.000000 
+109.000000 109.000000 109.000000 
+110.000000 110.000000 110.000000 
+111.000000 111.000000 111.000000 
+112.000000 112.000000 112.000000 
+113.000000 113.000000 113.000000 
+114.000000 114.000000 114.000000 
+115.000000 115.000000 115.000000 
+116.000000 116.000000 116.000000 
+117.000000 117.000000 117.000000 
+118.000000 118.000000 118.000000 
+119.000000 119.000000 119.000000 
+120.000000 120.000000 120.000000 
+121.000000 121.000000 121.000000 
+122.000000 122.000000 122.000000 
+123.000000 123.000000 123.000000 
+124.000000 124.000000 124.000000 
+125.000000 125.000000 125.000000 
+126.000000 126.000000 126.000000 
+127.000000 127.000000 127.000000 
+128.000000 128.000000 128.000000 
+129.000000 129.000000 129.000000 
+130.000000 130.000000 130.000000 
+131.000000 131.000000 131.000000 
+132.000000 132.000000 132.000000 
+133.000000 133.000000 133.000000 
+134.000000 134.000000 134.000000 
+135.000000 135.000000 135.000000 
+136.000000 136.000000 136.000000 
+137.000000 137.000000 137.000000 
+138.000000 138.000000 138.000000 
+139.000000 139.000000 139.000000 
+140.000000 140.000000 140.000000 
+141.000000 141.000000 141.000000 
+142.000000 142.000000 142.000000 
+143.000000 143.000000 143.000000 
+144.000000 144.000000 144.000000 
+145.000000 145.000000 145.000000 
+146.000000 146.000000 146.000000 
+147.000000 147.000000 147.000000 
+148.000000 148.000000 148.000000 
+149.000000 149.000000 149.000000 
+150.000000 150.000000 150.000000 
+151.000000 151.000000 151.000000 
+152.000000 152.000000 152.000000 
+153.000000 153.000000 153.000000 
+154.000000 154.000000 154.000000 
+155.000000 155.000000 155.000000 
+156.000000 156.000000 156.000000 
+157.000000 157.000000 157.000000 
+158.000000 158.000000 158.000000 
+159.000000 159.000000 159.000000 
+160.000000 160.000000 160.000000 
+161.000000 161.000000 161.000000 
+162.000000 162.000000 162.000000 
+163.000000 163.000000 163.000000 
+164.000000 164.000000 164.000000 
+165.000000 165.000000 165.000000 
+166.000000 166.000000 166.000000 
+167.000000 167.000000 167.000000 
+168.000000 168.000000 168.000000 
+169.000000 169.000000 169.000000 
+170.000000 170.000000 170.000000 
+171.000000 171.000000 171.000000 
+172.000000 172.000000 172.000000 
+173.000000 173.000000 173.000000 
+174.000000 174.000000 174.000000 
+175.000000 175.000000 175.000000 
+176.000000 176.000000 176.000000 
+177.000000 177.000000 177.000000 
+178.000000 178.000000 178.000000 
+179.000000 179.000000 179.000000 
+180.000000 180.000000 180.000000 
+181.000000 181.000000 181.000000 
+182.000000 182.000000 182.000000 
+183.000000 183.000000 183.000000 
+184.000000 184.000000 184.000000 
+185.000000 185.000000 185.000000 
+186.000000 186.000000 186.000000 
+187.000000 187.000000 187.000000 
+188.000000 188.000000 188.000000 
+189.000000 189.000000 189.000000 
+190.000000 190.000000 190.000000 
+191.000000 191.000000 191.000000 
+192.000000 192.000000 192.000000 
+193.000000 193.000000 193.000000 
+194.000000 194.000000 194.000000 
+195.000000 195.000000 195.000000 
+196.000000 196.000000 196.000000 
+197.000000 197.000000 197.000000 
+198.000000 198.000000 198.000000 
+199.000000 199.000000 199.000000 
+200.000000 200.000000 200.000000 
+201.000000 201.000000 201.000000 
+202.000000 202.000000 202.000000 
+203.000000 203.000000 203.000000 
+204.000000 204.000000 204.000000 
+205.000000 205.000000 205.000000 
+206.000000 206.000000 206.000000 
+207.000000 207.000000 207.000000 
+208.000000 208.000000 208.000000 
+209.000000 209.000000 209.000000 
+210.000000 210.000000 210.000000 
+211.000000 211.000000 211.000000 
+212.000000 212.000000 212.000000 
+213.000000 213.000000 213.000000 
+214.000000 214.000000 214.000000 
+215.000000 215.000000 215.000000 
+216.000000 216.000000 216.000000 
+217.000000 217.000000 217.000000 
+218.000000 218.000000 218.000000 
+219.000000 219.000000 219.000000 
+220.000000 220.000000 220.000000 
+221.000000 221.000000 221.000000 
+222.000000 222.000000 222.000000 
+223.000000 223.000000 223.000000 
+224.000000 224.000000 224.000000 
+225.000000 225.000000 225.000000 
+226.000000 226.000000 226.000000 
+227.000000 227.000000 227.000000 
+228.000000 228.000000 228.000000 
+229.000000 229.000000 229.000000 
+230.000000 230.000000 230.000000 
+231.000000 231.000000 231.000000 
+232.000000 232.000000 232.000000 
+233.000000 233.000000 233.000000 
+234.000000 234.000000 234.000000 
+235.000000 235.000000 235.000000 
+236.000000 236.000000 236.000000 
+237.000000 237.000000 237.000000 
+238.000000 238.000000 238.000000 
+239.000000 239.000000 239.000000 
+240.000000 240.000000 240.000000 
+241.000000 241.000000 241.000000 
+242.000000 242.000000 242.000000 
+243.000000 243.000000 243.000000 
+244.000000 244.000000 244.000000 
+245.000000 245.000000 245.000000 
+246.000000 246.000000 246.000000 
+247.000000 247.000000 247.000000 
+248.000000 248.000000 248.000000 
+249.000000 249.000000 249.000000 
+250.000000 250.000000 250.000000 
+251.000000 251.000000 251.000000 
+252.000000 252.000000 252.000000 
+253.000000 253.000000 253.000000 
+254.000000 254.000000 254.000000 
+255.000000 255.000000 255.000000 
 SCALARS attr5_0_0 float
 LOOKUP_TABLE default
 0.000000
diff --git a/vtk_points_test.vtk b/vtk_points_test.vtk
new file mode 100644
index 0000000000000000000000000000000000000000..00d7fd84392c0dcf47f0f4745f2768f7e18ae533
--- /dev/null
+++ b/vtk_points_test.vtk
@@ -0,0 +1,1512 @@
+# vtk DataFile Version 3.0
+grids
+ASCII
+DATASET POLYDATA
+POINTS 300 float
+0.191120 0.542772 0.939108
+0.949426 0.657156 0.682034
+0.501548 0.049788 0.030341
+0.213440 0.022536 0.216983
+0.655972 0.611396 0.804149
+0.974139 0.277770 0.467799
+0.261523 0.050127 0.925221
+0.015654 0.653189 0.103735
+0.791857 0.627635 0.049912
+0.538857 0.092245 0.458816
+0.380907 0.744841 0.394940
+0.602576 0.458485 0.248419
+0.574775 0.691995 0.624018
+0.447138 0.034446 0.336361
+0.768817 0.370557 0.222135
+0.553262 0.069753 0.019856
+0.406505 0.310794 0.964282
+0.174942 0.121315 0.711162
+0.565953 0.516379 0.571763
+0.349307 0.095793 0.009830
+0.072481 0.530659 0.511365
+0.046417 0.729395 0.027743
+0.728432 0.572606 0.967157
+0.069202 0.317058 0.540727
+0.496447 0.346735 0.446950
+0.193627 0.047362 0.347666
+0.127910 0.633133 0.172681
+0.833728 0.885522 0.340871
+0.948323 0.688523 0.542344
+0.341156 0.055461 0.699285
+0.693060 0.762384 0.300997
+0.563805 0.325374 0.394492
+0.612276 0.923360 0.322679
+0.058091 0.685765 0.053998
+0.371200 0.759352 0.781539
+0.660425 0.035142 0.765143
+0.532271 0.650615 0.427019
+0.263612 0.057686 0.036218
+0.610656 0.558196 0.905927
+0.309139 0.520642 0.725488
+0.788756 0.031770 0.768161
+0.871355 0.760744 0.282541
+0.320097 0.427809 0.698174
+0.295764 0.469412 0.629959
+0.087016 0.937087 0.686836
+0.284583 0.906924 0.986558
+0.645716 0.397673 0.061998
+0.587394 0.175924 0.362743
+0.833207 0.532904 0.467794
+0.281347 0.824074 0.546790
+0.954834 0.877288 0.061284
+0.491532 0.354675 0.285570
+0.355193 0.506312 0.942161
+0.616374 0.187104 0.404920
+0.030554 0.628880 0.311676
+0.156718 0.760729 0.141402
+0.698422 0.808751 0.341944
+0.664300 0.935124 0.505412
+0.388234 0.624212 0.528491
+0.093412 0.941462 0.879504
+0.634902 0.821160 0.391876
+0.889355 0.395415 0.119756
+0.801600 0.345677 0.057517
+0.643167 0.612905 0.857205
+0.819207 0.406316 0.820094
+0.418597 0.862125 0.286015
+0.524246 0.062171 0.993420
+0.579185 0.061318 0.694960
+0.330818 0.350814 0.420698
+0.834694 0.723200 0.826380
+0.314768 0.591060 0.754526
+0.899907 0.767986 0.540215
+0.002118 0.976632 0.226122
+0.001924 0.402131 0.433484
+0.554102 0.976089 0.585426
+0.025767 0.297417 0.212592
+0.152219 0.066472 0.649750
+0.111935 0.280193 0.111119
+0.574414 0.956562 0.316070
+0.968540 0.075379 0.462334
+0.820820 0.862209 0.998937
+0.552892 0.556047 0.354408
+0.544668 0.750556 0.258386
+0.142147 0.561744 0.760260
+0.941378 0.750693 0.520998
+0.420876 0.664465 0.087848
+0.936441 0.970923 0.509360
+0.240190 0.441355 0.986972
+0.043523 0.356339 0.921028
+0.928134 0.809949 0.546933
+0.229501 0.035890 0.642957
+0.933363 0.551387 0.708064
+0.234039 0.248888 0.650489
+0.100673 0.807461 0.883476
+0.320905 0.033064 0.374076
+0.827332 0.929235 0.717285
+0.098780 0.127755 0.832664
+0.389588 0.095995 0.370678
+0.519389 0.017537 0.082599
+0.594001 0.402170 0.667610
+0.369033 0.299516 0.011738
+0.012592 0.466761 0.355074
+0.440251 0.138601 0.125044
+0.121819 0.297058 0.228985
+0.393916 0.000748 0.374483
+0.103674 0.432636 0.129196
+0.389263 0.483895 0.281595
+0.286854 0.384192 0.011294
+0.171281 0.004546 0.344262
+0.214761 0.304103 0.127791
+0.039747 0.387814 0.498174
+0.059177 0.281705 0.148032
+0.096517 0.444439 0.319880
+0.102706 0.220216 0.398427
+0.373598 0.431982 0.489440
+0.078500 0.072622 0.442990
+0.356018 0.265329 0.079078
+0.332776 0.370145 0.344918
+0.374930 0.200664 0.068603
+0.400562 0.432920 0.326511
+0.368295 0.165614 0.174680
+0.233398 0.076265 0.182871
+0.400996 0.284545 0.224037
+0.193611 0.394407 0.198044
+0.271736 0.230462 0.478873
+0.226998 0.475005 0.495730
+0.148310 0.039411 0.412051
+0.203465 0.358695 0.068829
+0.263621 0.167319 0.159807
+0.475798 0.043409 0.001061
+0.125812 0.402161 0.161913
+0.386069 0.292313 0.190602
+0.120995 0.060446 0.496825
+0.160991 0.119563 0.453344
+0.428020 0.332748 0.243763
+0.270958 0.138588 0.307646
+0.129302 0.310446 0.458532
+0.043890 0.492867 0.089368
+0.213084 0.121459 0.470008
+0.265386 0.087917 0.309426
+0.284067 0.279348 0.280249
+0.336328 0.336547 0.382496
+0.017657 0.391975 0.087630
+0.114968 0.071710 0.115031
+0.104961 0.357467 0.185318
+0.254457 0.025967 0.480016
+0.132774 0.458687 0.432283
+0.201520 0.100892 0.313462
+0.152889 0.247942 0.164514
+0.337315 0.421516 0.489564
+0.231982 0.211471 0.468093
+0.410684 0.119957 0.489855
+0.378918 0.266531 0.324857
+0.033476 0.094819 0.092712
+0.444230 0.016362 0.109667
+0.179136 0.472507 0.241815
+0.140148 0.175650 0.037678
+0.267491 0.302897 0.107858
+0.491886 0.296777 0.467145
+0.175493 0.247079 0.000344
+0.369368 0.436868 0.314950
+0.256143 0.001945 0.217615
+0.360324 0.429870 0.161243
+0.233754 0.313771 0.048560
+0.412573 0.338961 0.158938
+0.146435 0.043423 0.109896
+0.316316 0.361484 0.366767
+0.303545 0.320173 0.092580
+0.206614 0.026207 0.439232
+0.310478 0.240776 0.406808
+0.203500 0.152136 0.332505
+0.050774 0.282897 0.499241
+0.220740 0.060052 0.047883
+0.318917 0.164363 0.010079
+0.163232 0.396470 0.468732
+0.152317 0.417591 0.058421
+0.443308 0.478482 0.030216
+0.378614 0.499183 0.368948
+0.275442 0.177279 0.319310
+0.328696 0.037782 0.172131
+0.182561 0.350569 0.276258
+0.477689 0.255347 0.437823
+0.363589 0.095101 0.239850
+0.248442 0.059726 0.197884
+0.478714 0.359607 0.126861
+0.162554 0.006022 0.305013
+0.069810 0.417159 0.367660
+0.322588 0.275417 0.336846
+0.172379 0.275447 0.010527
+0.321245 0.322947 0.194863
+0.170735 0.286312 0.311646
+0.444912 0.427471 0.284472
+0.287185 0.212159 0.259706
+0.386944 0.345362 0.391552
+0.400277 0.131048 0.489254
+0.050633 0.196649 0.262099
+0.122157 0.134313 0.265303
+0.428336 0.352151 0.385550
+0.174372 0.323212 0.001009
+0.242782 0.129385 0.193780
+0.118551 0.284626 0.040045
+0.204677 0.285263 0.252733
+0.182170 0.079147 0.068534
+0.031040 0.145389 0.112933
+0.084977 0.142546 0.057884
+0.026479 0.155100 0.295120
+0.146042 0.167754 0.184810
+0.137157 0.139288 0.081564
+0.094739 0.225063 0.093941
+0.242503 0.243359 0.200124
+0.034004 0.194536 0.005136
+0.024357 0.166163 0.059699
+0.168763 0.005718 0.235741
+0.120769 0.145667 0.104026
+0.166147 0.222167 0.019446
+0.204178 0.187699 0.142703
+0.181281 0.294405 0.044873
+0.266660 0.263516 0.141758
+0.121189 0.247998 0.053538
+0.097575 0.018617 0.248016
+0.063692 0.080098 0.158029
+0.064470 0.276194 0.090836
+0.248992 0.131633 0.271096
+0.007215 0.096668 0.183536
+0.290740 0.088687 0.071999
+0.269481 0.009191 0.204128
+0.090997 0.011965 0.259923
+0.121253 0.094551 0.267893
+0.209857 0.012846 0.293168
+0.163114 0.287747 0.110535
+0.281883 0.264743 0.072675
+0.175878 0.060813 0.140354
+0.078479 0.202488 0.025674
+0.243824 0.285058 0.089320
+0.131963 0.149175 0.239908
+0.034380 0.026748 0.219178
+0.089901 0.007983 0.271481
+0.143373 0.098100 0.189960
+0.063323 0.226631 0.147892
+0.165465 0.248006 0.118286
+0.059792 0.042445 0.133274
+0.057808 0.007587 0.213985
+0.056494 0.100633 0.174949
+0.143584 0.080243 0.102669
+0.297276 0.219187 0.158450
+0.064201 0.136918 0.163682
+0.170758 0.027377 0.089369
+0.113012 0.048512 0.112520
+0.044373 0.177600 0.173404
+0.175024 0.074831 0.195710
+0.048510 0.152404 0.205957
+0.207263 0.274453 0.054502
+0.114141 0.197499 0.100301
+0.248719 0.112333 0.024942
+0.080402 0.272943 0.225548
+0.181935 0.018645 0.232374
+0.186198 0.240395 0.168249
+0.231339 0.064699 0.231795
+0.134919 0.279736 0.190052
+0.230006 0.156947 0.070012
+0.101847 0.133552 0.109875
+0.261160 0.110426 0.212261
+0.200882 0.119241 0.109415
+0.215972 0.257388 0.255168
+0.225816 0.292236 0.128109
+0.085817 0.024602 0.168374
+0.293151 0.104637 0.093364
+0.247991 0.167530 0.103450
+0.013163 0.243524 0.083591
+0.182480 0.293842 0.133309
+0.085941 0.193266 0.031272
+0.047526 0.073263 0.110689
+0.255080 0.190414 0.166919
+0.213845 0.040455 0.239611
+0.026542 0.265560 0.124469
+0.274028 0.209767 0.006667
+0.114752 0.046770 0.270985
+0.114722 0.268484 0.194247
+0.228159 0.082681 0.252072
+0.010753 0.154337 0.172746
+0.281230 0.233464 0.061016
+0.052572 0.092809 0.223879
+0.234026 0.125142 0.266589
+0.238006 0.135870 0.057597
+0.032419 0.129852 0.239177
+0.020472 0.068352 0.208812
+0.224979 0.186438 0.225718
+0.199372 0.101987 0.269031
+0.244278 0.273894 0.188213
+0.015471 0.061627 0.203962
+0.101571 0.271201 0.032494
+0.004487 0.281645 0.107366
+0.264307 0.029045 0.129854
+0.234825 0.108505 0.081605
+0.086988 0.143946 0.292738
+0.118194 0.165614 0.225017
+0.149953 0.048003 0.215407
+0.242683 0.291911 0.107878
+0.017652 0.251505 0.298075
+0.122995 0.176008 0.004623
+VERTICES 300 600
+1 0
+1 1
+1 2
+1 3
+1 4
+1 5
+1 6
+1 7
+1 8
+1 9
+1 10
+1 11
+1 12
+1 13
+1 14
+1 15
+1 16
+1 17
+1 18
+1 19
+1 20
+1 21
+1 22
+1 23
+1 24
+1 25
+1 26
+1 27
+1 28
+1 29
+1 30
+1 31
+1 32
+1 33
+1 34
+1 35
+1 36
+1 37
+1 38
+1 39
+1 40
+1 41
+1 42
+1 43
+1 44
+1 45
+1 46
+1 47
+1 48
+1 49
+1 50
+1 51
+1 52
+1 53
+1 54
+1 55
+1 56
+1 57
+1 58
+1 59
+1 60
+1 61
+1 62
+1 63
+1 64
+1 65
+1 66
+1 67
+1 68
+1 69
+1 70
+1 71
+1 72
+1 73
+1 74
+1 75
+1 76
+1 77
+1 78
+1 79
+1 80
+1 81
+1 82
+1 83
+1 84
+1 85
+1 86
+1 87
+1 88
+1 89
+1 90
+1 91
+1 92
+1 93
+1 94
+1 95
+1 96
+1 97
+1 98
+1 99
+1 100
+1 101
+1 102
+1 103
+1 104
+1 105
+1 106
+1 107
+1 108
+1 109
+1 110
+1 111
+1 112
+1 113
+1 114
+1 115
+1 116
+1 117
+1 118
+1 119
+1 120
+1 121
+1 122
+1 123
+1 124
+1 125
+1 126
+1 127
+1 128
+1 129
+1 130
+1 131
+1 132
+1 133
+1 134
+1 135
+1 136
+1 137
+1 138
+1 139
+1 140
+1 141
+1 142
+1 143
+1 144
+1 145
+1 146
+1 147
+1 148
+1 149
+1 150
+1 151
+1 152
+1 153
+1 154
+1 155
+1 156
+1 157
+1 158
+1 159
+1 160
+1 161
+1 162
+1 163
+1 164
+1 165
+1 166
+1 167
+1 168
+1 169
+1 170
+1 171
+1 172
+1 173
+1 174
+1 175
+1 176
+1 177
+1 178
+1 179
+1 180
+1 181
+1 182
+1 183
+1 184
+1 185
+1 186
+1 187
+1 188
+1 189
+1 190
+1 191
+1 192
+1 193
+1 194
+1 195
+1 196
+1 197
+1 198
+1 199
+1 200
+1 201
+1 202
+1 203
+1 204
+1 205
+1 206
+1 207
+1 208
+1 209
+1 210
+1 211
+1 212
+1 213
+1 214
+1 215
+1 216
+1 217
+1 218
+1 219
+1 220
+1 221
+1 222
+1 223
+1 224
+1 225
+1 226
+1 227
+1 228
+1 229
+1 230
+1 231
+1 232
+1 233
+1 234
+1 235
+1 236
+1 237
+1 238
+1 239
+1 240
+1 241
+1 242
+1 243
+1 244
+1 245
+1 246
+1 247
+1 248
+1 249
+1 250
+1 251
+1 252
+1 253
+1 254
+1 255
+1 256
+1 257
+1 258
+1 259
+1 260
+1 261
+1 262
+1 263
+1 264
+1 265
+1 266
+1 267
+1 268
+1 269
+1 270
+1 271
+1 272
+1 273
+1 274
+1 275
+1 276
+1 277
+1 278
+1 279
+1 280
+1 281
+1 282
+1 283
+1 284
+1 285
+1 286
+1 287
+1 288
+1 289
+1 290
+1 291
+1 292
+1 293
+1 294
+1 295
+1 296
+1 297
+1 298
+1 299
+POINT_DATA 300
+SCALARS attr0 float
+LOOKUP_TABLE default
+0.852971
+0.142642
+0.513097
+0.739673
+0.418492
+0.608974
+0.932864
+0.704308
+0.190846
+0.032995
+0.299320
+0.096923
+0.971876
+0.250459
+0.708095
+0.615332
+0.597012
+0.018790
+0.931445
+0.405780
+0.776751
+0.368002
+0.515093
+0.797913
+0.899592
+0.206326
+0.786766
+0.147594
+0.421794
+0.397550
+0.467417
+0.759131
+0.083897
+0.372967
+0.244892
+0.395358
+0.695272
+0.285234
+0.741090
+0.482378
+0.747305
+0.645760
+0.631399
+0.580082
+0.044595
+0.781274
+0.838234
+0.695952
+0.765279
+0.444972
+0.023074
+0.284180
+0.292961
+0.240403
+0.344663
+0.674851
+0.700950
+0.401477
+0.954549
+0.680789
+0.452484
+0.525924
+0.036222
+0.041302
+0.868429
+0.378754
+0.410969
+0.366083
+0.416859
+0.862164
+0.472456
+0.550957
+0.735711
+0.669539
+0.478424
+0.573764
+0.736027
+0.425935
+0.011884
+0.418616
+0.554306
+0.259311
+0.490285
+0.800239
+0.862283
+0.087524
+0.479354
+0.459715
+0.983071
+0.196368
+0.849800
+0.214229
+0.125681
+0.035163
+0.514932
+0.850999
+0.743037
+0.678448
+0.511895
+0.220029
+0.587362
+0.298533
+0.327916
+0.436179
+0.194670
+0.186381
+0.623307
+0.202463
+0.270373
+0.264172
+0.179694
+0.966529
+0.694374
+0.512313
+0.470675
+0.457862
+0.672225
+0.660675
+0.440579
+0.487801
+0.816170
+0.755275
+0.471037
+0.804031
+0.453553
+0.948734
+0.653689
+0.102279
+0.021556
+0.777115
+0.901608
+0.851858
+0.278800
+0.961652
+0.852418
+0.871504
+0.776556
+0.725569
+0.611679
+0.994124
+0.825377
+0.095072
+0.792477
+0.913985
+0.160317
+0.262742
+0.250089
+0.743514
+0.682480
+0.972695
+0.602742
+0.455661
+0.403150
+0.064623
+0.060240
+0.427489
+0.544429
+0.509964
+0.188519
+0.901505
+0.541032
+0.174815
+0.214112
+0.222180
+0.105408
+0.982114
+0.847171
+0.922357
+0.450498
+0.850085
+0.897592
+0.625877
+0.136109
+0.560975
+0.220586
+0.735344
+0.808921
+0.375646
+0.694858
+0.952056
+0.705753
+0.069751
+0.684262
+0.467112
+0.255534
+0.510865
+0.300091
+0.108316
+0.126174
+0.690273
+0.606340
+0.010674
+0.055879
+0.782044
+0.790335
+0.017066
+0.659788
+0.264430
+0.264949
+0.021708
+0.297572
+0.874005
+0.374499
+0.173256
+0.522504
+0.413817
+0.740119
+0.636431
+0.647372
+0.738618
+0.212948
+0.171335
+0.517521
+0.001341
+0.304175
+0.531736
+0.287220
+0.674599
+0.340409
+0.507606
+0.056097
+0.096411
+0.047968
+0.363141
+0.680893
+0.004086
+0.142206
+0.447751
+0.112662
+0.131239
+0.182539
+0.660715
+0.629267
+0.951852
+0.612036
+0.435244
+0.933001
+0.152785
+0.459218
+0.437300
+0.858148
+0.512112
+0.554611
+0.643477
+0.062086
+0.201576
+0.132173
+0.918523
+0.434425
+0.979791
+0.090216
+0.281667
+0.010038
+0.914374
+0.559217
+0.082922
+0.521112
+0.280467
+0.157430
+0.854652
+0.013719
+0.005624
+0.323701
+0.958344
+0.300678
+0.177226
+0.787436
+0.470395
+0.699779
+0.972249
+0.766277
+0.578433
+0.273233
+0.958540
+0.015887
+0.543165
+0.970718
+0.442014
+0.911478
+0.101746
+0.131470
+0.222696
+0.894048
+0.664215
+0.940062
+0.467209
+0.325321
+0.365024
+0.622865
+0.838622
+0.020516
+0.681342
+0.994820
+0.254399
+0.335398
+0.813044
+0.326415
+0.353624
+0.538226
+0.141648
+VECTORS attr1 float
+0.974855 0.182712 0.353524 
+0.764398 0.172342 0.522042 
+0.438905 0.976479 0.925580 
+0.039018 0.114608 0.700754 
+0.482578 0.955606 0.502502 
+0.622314 0.739247 0.595426 
+0.796400 0.761720 0.810587 
+0.013873 0.516256 0.082312 
+0.998849 0.617100 0.460162 
+0.262446 0.507718 0.273360 
+0.988605 0.865707 0.434889 
+0.831425 0.560535 0.709626 
+0.465784 0.648266 0.467768 
+0.611095 0.941814 0.546090 
+0.230728 0.072481 0.565806 
+0.764503 0.468990 0.878126 
+0.877432 0.092992 0.950583 
+0.904489 0.644693 0.364891 
+0.328919 0.235864 0.544684 
+0.921693 0.730651 0.339351 
+0.564136 0.245284 0.590949 
+0.414173 0.890974 0.270302 
+0.624194 0.193248 0.903050 
+0.446537 0.325474 0.158925 
+0.292525 0.560025 0.087836 
+0.906036 0.631122 0.057216 
+0.417532 0.052461 0.156114 
+0.589520 0.868026 0.283006 
+0.706947 0.824835 0.768770 
+0.311165 0.943747 0.272178 
+0.342127 0.836699 0.443595 
+0.416966 0.694541 0.174357 
+0.408055 0.094396 0.535770 
+0.274101 0.945915 0.882017 
+0.122680 0.618250 0.020735 
+0.573596 0.938873 0.694895 
+0.370602 0.286122 0.894958 
+0.231222 0.233866 0.057916 
+0.848216 0.439604 0.468825 
+0.580559 0.715504 0.575299 
+0.107476 0.018033 0.122876 
+0.090781 0.002605 0.422395 
+0.346131 0.052840 0.010974 
+0.571784 0.999564 0.972554 
+0.651305 0.230425 0.492935 
+0.801557 0.630477 0.179448 
+0.705078 0.379994 0.184544 
+0.504004 0.034606 0.582476 
+0.546277 0.948538 0.640875 
+0.736613 0.373107 0.164519 
+0.947601 0.872980 0.625842 
+0.682194 0.014407 0.147657 
+0.194138 0.304991 0.071420 
+0.304495 0.841470 0.397971 
+0.085291 0.602616 0.247945 
+0.758341 0.662445 0.308916 
+0.906899 0.806163 0.460717 
+0.882749 0.303071 0.795318 
+0.695218 0.296862 0.341154 
+0.471149 0.860046 0.170877 
+0.472685 0.739292 0.123419 
+0.803564 0.516773 0.989041 
+0.028219 0.071144 0.055409 
+0.217297 0.937954 0.523801 
+0.323874 0.211575 0.086596 
+0.371101 0.245019 0.119228 
+0.676279 0.052267 0.955961 
+0.211858 0.228235 0.653783 
+0.716955 0.307090 0.091221 
+0.636348 0.273147 0.041583 
+0.664002 0.523766 0.503054 
+0.831365 0.249487 0.664893 
+0.787678 0.950612 0.241943 
+0.858346 0.181531 0.903081 
+0.589438 0.839285 0.604777 
+0.296346 0.321069 0.988769 
+0.828303 0.487938 0.932540 
+0.083679 0.503009 0.649996 
+0.751527 0.573463 0.492244 
+0.319990 0.788064 0.050251 
+0.820681 0.222277 0.349471 
+0.348355 0.567217 0.495641 
+0.006410 0.680225 0.338837 
+0.398490 0.414732 0.279156 
+0.085578 0.189775 0.575804 
+0.875843 0.867086 0.899564 
+0.229565 0.590566 0.732354 
+0.679681 0.925488 0.964143 
+0.794528 0.538921 0.197650 
+0.608962 0.291165 0.603858 
+0.450943 0.397533 0.256193 
+0.220038 0.174632 0.494240 
+0.730456 0.826956 0.684406 
+0.940036 0.500931 0.583018 
+0.739235 0.914091 0.750783 
+0.658911 0.593884 0.027948 
+0.632495 0.584216 0.925784 
+0.802297 0.769054 0.496464 
+0.003547 0.386281 0.664759 
+0.915902 0.367099 0.874785 
+0.118846 0.284581 0.498548 
+0.424160 0.110110 0.579035 
+0.964881 0.143517 0.766729 
+0.434735 0.772395 0.968258 
+0.401742 0.475700 0.751419 
+0.318345 0.977538 0.661436 
+0.045112 0.563700 0.563149 
+0.933742 0.233223 0.639992 
+0.282418 0.904891 0.993332 
+0.174619 0.084161 0.756540 
+0.042175 0.670213 0.932599 
+0.977899 0.528286 0.758505 
+0.960596 0.028052 0.874348 
+0.060887 0.881843 0.487926 
+0.824842 0.603229 0.414785 
+0.720892 0.834692 0.175396 
+0.323438 0.181610 0.943831 
+0.498441 0.026450 0.304725 
+0.467788 0.182905 0.610254 
+0.129298 0.940469 0.704494 
+0.107294 0.812279 0.343814 
+0.530184 0.294443 0.777959 
+0.198481 0.584590 0.738716 
+0.732847 0.734187 0.774465 
+0.531300 0.962620 0.919793 
+0.216231 0.413998 0.506112 
+0.589475 0.196202 0.486468 
+0.634684 0.087873 0.177122 
+0.879563 0.454732 0.304395 
+0.369309 0.959553 0.173734 
+0.927040 0.371431 0.926172 
+0.811869 0.944677 0.396396 
+0.264022 0.517509 0.123324 
+0.361365 0.956482 0.772000 
+0.453556 0.381164 0.711844 
+0.184096 0.507541 0.634685 
+0.523343 0.833009 0.632809 
+0.105722 0.748909 0.614543 
+0.848871 0.639915 0.031935 
+0.517156 0.392555 0.685626 
+0.354854 0.992942 0.907113 
+0.027658 0.315680 0.861391 
+0.817653 0.873376 0.003198 
+0.942188 0.180695 0.166925 
+0.832912 0.558700 0.729931 
+0.659516 0.921161 0.068945 
+0.559245 0.144037 0.518508 
+0.670946 0.671558 0.776078 
+0.883971 0.690371 0.125719 
+0.892392 0.683896 0.199377 
+0.563700 0.676302 0.427174 
+0.074566 0.281616 0.156323 
+0.562962 0.749505 0.738472 
+0.159310 0.005303 0.799458 
+0.425689 0.573951 0.639743 
+0.264496 0.946587 0.335915 
+0.002246 0.261469 0.831476 
+0.038603 0.288107 0.756699 
+0.662893 0.297359 0.013792 
+0.328203 0.595168 0.671596 
+0.943018 0.581338 0.696935 
+0.576522 0.914939 0.840163 
+0.594676 0.862921 0.314727 
+0.245130 0.351417 0.117751 
+0.589179 0.594856 0.505365 
+0.336038 0.590367 0.166285 
+0.733240 0.911167 0.240259 
+0.070532 0.732659 0.672963 
+0.665073 0.874086 0.719061 
+0.006115 0.291013 0.179620 
+0.245933 0.664299 0.850463 
+0.980949 0.851828 0.767719 
+0.843937 0.995786 0.769167 
+0.298357 0.024632 0.268835 
+0.336151 0.306898 0.351409 
+0.124083 0.637404 0.953506 
+0.232446 0.337396 0.632253 
+0.260116 0.505058 0.866323 
+0.917290 0.100010 0.427238 
+0.403111 0.874667 0.595547 
+0.947432 0.686777 0.069199 
+0.427959 0.744415 0.254946 
+0.140062 0.153986 0.973494 
+0.273088 0.125344 0.256469 
+0.051542 0.888051 0.786753 
+0.487300 0.787141 0.426864 
+0.038074 0.502347 0.474531 
+0.304055 0.038630 0.538577 
+0.327835 0.041937 0.625999 
+0.516408 0.500537 0.710454 
+0.636053 0.681350 0.433723 
+0.520349 0.229449 0.854270 
+0.319801 0.896802 0.164147 
+0.869711 0.038570 0.214664 
+0.559846 0.019721 0.294496 
+0.959145 0.984060 0.345891 
+0.311664 0.149701 0.531236 
+0.570423 0.532054 0.035400 
+0.075878 0.302394 0.821459 
+0.704236 0.330563 0.687325 
+0.021353 0.610375 0.976363 
+0.465571 0.182496 0.419099 
+0.190246 0.061420 0.373246 
+0.428990 0.791156 0.091101 
+0.196855 0.241516 0.123692 
+0.294766 0.681465 0.666369 
+0.700947 0.003265 0.805367 
+0.545619 0.636195 0.841496 
+0.937100 0.327533 0.058517 
+0.219725 0.133907 0.232030 
+0.376112 0.063649 0.774433 
+0.646745 0.586036 0.006718 
+0.765960 0.214237 0.964508 
+0.902940 0.864735 0.793746 
+0.983048 0.970527 0.799845 
+0.552082 0.354637 0.636676 
+0.322637 0.678556 0.711747 
+0.329992 0.043079 0.688576 
+0.960167 0.668662 0.198033 
+0.776353 0.312394 0.404122 
+0.606851 0.094193 0.144959 
+0.245661 0.865080 0.309431 
+0.317872 0.425277 0.014135 
+0.971788 0.567570 0.642029 
+0.122126 0.636064 0.978777 
+0.183957 0.392644 0.068681 
+0.319363 0.084357 0.354575 
+0.113449 0.009212 0.401778 
+0.730996 0.626259 0.988022 
+0.179741 0.076381 0.691466 
+0.907493 0.264560 0.392798 
+0.813783 0.218629 0.580568 
+0.703697 0.958160 0.315691 
+0.220863 0.792527 0.378005 
+0.720793 0.609140 0.729917 
+0.974146 0.974891 0.624578 
+0.947730 0.857826 0.812930 
+0.624663 0.779967 0.478003 
+0.995347 0.864509 0.237547 
+0.513253 0.182560 0.601200 
+0.166135 0.004309 0.786486 
+0.463795 0.022764 0.119139 
+0.864926 0.042390 0.667640 
+0.191807 0.039373 0.473211 
+0.395710 0.833751 0.824702 
+0.495725 0.435946 0.549780 
+0.393817 0.501517 0.194002 
+0.883201 0.724198 0.772247 
+0.879627 0.032296 0.798059 
+0.709503 0.007746 0.349253 
+0.966658 0.653682 0.742341 
+0.376949 0.876587 0.368549 
+0.722019 0.197292 0.951730 
+0.459049 0.555040 0.089504 
+0.628284 0.929400 0.265548 
+0.593872 0.293519 0.319393 
+0.712090 0.590326 0.026614 
+0.071991 0.826468 0.527642 
+0.737118 0.704073 0.229757 
+0.561835 0.884658 0.788268 
+0.352128 0.201119 0.654392 
+0.588636 0.273513 0.037100 
+0.948497 0.454955 0.054774 
+0.107447 0.064114 0.679502 
+0.293855 0.882991 0.047842 
+0.355947 0.055069 0.166380 
+0.686309 0.098692 0.461792 
+0.659184 0.906727 0.920069 
+0.776539 0.108920 0.168110 
+0.630984 0.501257 0.107291 
+0.704945 0.936809 0.474510 
+0.382113 0.798687 0.728934 
+0.079699 0.589451 0.235358 
+0.434625 0.812213 0.083958 
+0.878477 0.185988 0.213471 
+0.013946 0.513432 0.199538 
+0.277633 0.226506 0.810398 
+0.655486 0.802277 0.100490 
+0.148986 0.781396 0.440101 
+0.165874 0.567948 0.090923 
+0.252003 0.567192 0.715210 
+0.035244 0.718299 0.564634 
+0.342507 0.477295 0.909942 
+0.321142 0.437074 0.047755 
+0.625249 0.881639 0.058276 
+0.260326 0.256132 0.068286 
+0.350061 0.674216 0.630124 
+0.278859 0.079045 0.878789 
+0.944977 0.524101 0.798615 
+0.649526 0.120086 0.171931 
+0.269202 0.107227 0.427176 
+0.991518 0.507013 0.719411 
+0.444768 0.451041 0.509270 
+0.672418 0.275338 0.486372 
+0.328956 0.016674 0.088928 
+0.615448 0.870327 0.132181 
+0.687044 0.052482 0.053722 
+0.607640 0.771956 0.869916 
+0.023322 0.450331 0.476118 
+0.251684 0.943570 0.225473 
+SCALARS domain float
+LOOKUP_TABLE default
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+0.0
+0.0
+0.0
+0.0
+0.0
+0.0
+0.0
+0.0
+0.0
+0.0
+0.0
+0.0
+0.0
+0.0
+0.0
+0.0
+0.0
+0.0
+0.0
+0.0
+0.0
+0.0
+0.0
+0.0
+0.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+0.0
+0.0
+0.0
+0.0
+0.0
+0.0
+0.0
+0.0
+0.0
+0.0
+0.0
+0.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+1.0
+0.0
+0.0
+0.0
+0.0
+0.0
+0.0
+0.0
+0.0
+0.0
+0.0