File: threshold-transform.cc

package info (click to toggle)
rumba-utils 1.0.1-2
  • links: PTS
  • area: main
  • in suites: woody
  • size: 1,764 kB
  • ctags: 414
  • sloc: sh: 7,541; cpp: 6,037; makefile: 1,127; xml: 605; perl: 70
file content (94 lines) | stat: -rw-r--r-- 1,919 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include "../matrixutils/mask.h"
#include <rumba/arghandler.h>


using namespace RUMBA;

void usage()
{
	std::cerr << "Usage: threshold-transform (--upper|-u) n1"
		" (--lower|-l) n2" << std::endl;
}


Argument myArgs [] = {
	Argument( "lower", RUMBA::NUMERIC, 'l' ),
	Argument( "upper", RUMBA::NUMERIC, 'u' ),
	Argument()

};


int main(int argc,char** argv)
{
	ArgHandler::setRequiredDefaultArg("infile");
	ArgHandler::setRequiredDefaultArg("outfile");
	double upper=0,lower=0;
	bool have_lower=true, have_upper=true;
	std::string infile,outfile;

	try {
		RUMBA::ArgHandler argh ( argc , argv, myArgs );
		if ( argh.arg("help") )
		{
			usage();
			exit(0);
		}

		argh.arg("infile",infile);
		argh.arg("outfile",outfile);

		try {
			argh.arg ( "upper", upper );
		}catch(...) { have_upper = false; } 
		try { 
			argh.arg ( "lower", lower);
		}catch(...) { have_lower = false; }

		if ( !have_lower && !have_upper )
		{
			std::cerr << "Need to provide a max or a min" << std::endl;
			exit(1);
		}

		if ( have_lower && have_upper && lower > upper )
		{
			std::cerr << 
				"Error: lower bound exceeds upper bound" << std::endl;
			exit(1);
		}

	}
	catch ( RUMBA::InvalidArgumentException& s)
	{
		std::cerr << "Invalid argument: " << s.error() << std::endl;
	}
    catch (RUMBA::DuplicateArgumentException& s)
    {
		std::cerr << "Duplicate argument: " << s.error() << std::endl;
	}
	catch (RUMBA::ArgHandlerException& s)
	{
		std::cerr << "Error: " << s.error() << std::endl;
	}
	catch (Exception& s)
	{
		std::cerr << "Exception:" << s.error() << std::endl;
	}


	RUMBA::ManifoldFile* mf = ManifoldFile::construct(infile.c_str());
	RUMBA::BaseManifold* M = mf->get(intPoint(0,0,0,0),mf->extent());
	delete mf;

	Threshold T( have_lower? &lower:0, have_upper? &upper:0, &lower,0, &upper);

	for ( int i = 0; i < M->size(); ++i ) 
		(*M)[i] = T((*M)[i]);

	M->save(outfile.c_str());

	delete M;

	return 0;
}