-
Notifications
You must be signed in to change notification settings - Fork 196
Expand file tree
/
Copy pathconnectomeedit.cpp
More file actions
77 lines (63 loc) · 2.17 KB
/
connectomeedit.cpp
File metadata and controls
77 lines (63 loc) · 2.17 KB
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
/* Copyright (c) 2008-2025 the MRtrix3 contributors.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* Covered Software is provided under this License on an "as is"
* basis, without warranty of any kind, either expressed, implied, or
* statutory, including, without limitation, warranties that the
* Covered Software is free of defects, merchantable, fit for a
* particular purpose or non-infringing.
* See the Mozilla Public License v. 2.0 for more details.
*
* For more details, see http://www.mrtrix.org/.
*/
#include "command.h"
#include "connectome/enhance.h"
#include "file/matrix.h"
using namespace MR;
using namespace MR::Connectome;
using namespace MR::Math;
using namespace App;
const std::vector<std::string> operations = {
"to_symmetric", "upper_triangular", "lower_triangular", "transpose", "zero_diagonal"};
// clang-format off
void usage() {
AUTHOR = "Matteo Frigo (matteo.frigo@inria.fr)";
SYNOPSIS = "Perform basic operations on a connectome";
ARGUMENTS
+ Argument ("input", "the input connectome.").type_file_in()
+ Argument ("operation", "the operation to apply,"
" one of: " + join(operations, ", ") + ".").type_choice (operations)
+ Argument ("output", "the output connectome.").type_file_out();
}
// clang-format on
void run() {
MR::Connectome::matrix_type connectome = File::Matrix::load_matrix(argument[0]);
MR::Connectome::check(connectome);
const int op = argument[1];
const std::string &output_path = argument[2];
INFO("Applying \'" + str(operations[op]) + "\' transformation to the input connectome.");
switch (op) {
case 0:
MR::Connectome::to_symmetric(connectome);
break;
case 1:
MR::Connectome::to_upper(connectome);
break;
case 2:
MR::Connectome::to_upper(connectome);
connectome.transposeInPlace();
break;
case 3:
connectome.transposeInPlace();
break;
case 4:
connectome.matrix().diagonal().setZero();
break;
default:
assert(0);
}
File::Matrix::save_matrix(connectome, output_path);
}