Example of working with data in files and using filters.
Contents
This example demonstrates:
- Reading data into a vector from a text file
- Using Persistence1D class to extract features
- Filtering features according to their persistence.
- Automatic reset of output variables - reused output variables are reset.
Expected Output
Output reference file: [persistence_base_dir]\src\examples\FilesAndFilters\FilesAndFiltersRes.ref with contents:
Persistence: 4.0834 minimum index: 24 maximum index: 26
Persistence: 5.0702 minimum index: 4 maximum index: 3
Persistence: 6.0453 minimum index: 8 maximum index: 7
Persistence: 7.23711 minimum index: 16 maximum index: 18
Persistence: 11.4078 minimum index: 12 maximum index: 10
Persistence: 14.191 minimum index: 1 maximum index: 13
Persistence: 17.2486 minimum index: 28 maximum index: 22
Global minimum value: -8.1518 index: 21
Filtered results with persistence > 10.666
Persistence: 11.4078 minimum index: 12 maximum index: 10
Persistence: 14.191 minimum index: 1 maximum index: 13
Persistence: 17.2486 minimum index: 28 maximum index: 22
Global minimum value: -8.1518 index: 21
PrintResults(filterThreshold) results:
Persistence: 11.4078 minimum index: 12 maximum index: 10
Persistence: 14.191 minimum index: 1 maximum index: 13
Persistence: 17.2486 minimum index: 28 maximum index: 22
Global minimum value: -8.1518 index: 21
Filtered results with persistence > 18.2486
Number of found paired extrema: 0
PrintPairs(pairs) start
PrintPairs(pairs) end
Global minimum value: -8.1518 index: 21
Code Documentation
#include "..\..\persistence1d\persistence1d.hpp"
#include <fstream>
using namespace std;
using namespace p1d;
{
vector<float> data;
float currdata;
ifstream datafile;
char * filename = "data.txt";
vector<TPairedExtrema> pairs;
vector<int> min, max;
int globalMinIndex;
float globalMinValue;
datafile.open(filename);
if (!datafile)
{
cout << "Cannot open data file for reading: " << filename << endl;
return -1;
}
while(datafile >> currdata)
{
data.push_back(currdata);
}
datafile.close();
cout << endl;
float filterThreshold = (pairs.front().Persistence + pairs.back().Persistence)/2;
cout << "Filtered results with persistence > " << filterThreshold << endl;
cout << "Global minimum value: " << globalMinValue
<< " index: " << globalMinIndex << endl << endl;
cout << "PrintResults(filterThreshold) results:" << endl;
cout << endl;
filterThreshold = pairs.back().Persistence + 1;
cout << "Filtered results with persistence > " << filterThreshold << endl;
cout << "Number of found paired extrema: " << pairs.size() << endl;
cout << "PrintPairs(pairs) start" << endl;
cout << "PrintPairs(pairs) end" << endl << endl;
return 0;
}