Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
M
melodic
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
FSL
melodic
Commits
0402db99
Commit
0402db99
authored
16 years ago
by
Christian Beckmann
Browse files
Options
Downloads
Patches
Plain Diff
initial checkin
parent
b5bbe9bf
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
fsl_sbca.cc
+258
-0
258 additions, 0 deletions
fsl_sbca.cc
with
258 additions
and
0 deletions
fsl_sbca.cc
0 → 100644
+
258
−
0
View file @
0402db99
/* fsl_glm -
Christian F. Beckmann, FMRIB Image Analysis Group
Copyright (C) 2008 University of Oxford */
/* CCOPYRIGHT */
#include
"libvis/miscplot.h"
#include
"miscmaths/miscmaths.h"
#include
"miscmaths/miscprob.h"
#include
"utils/options.h"
#include
<vector>
#include
<time.h>
#include
"newimage/newimageall.h"
#include
"melhlprfns.h"
using
namespace
MISCPLOT
;
using
namespace
MISCMATHS
;
using
namespace
Utilities
;
using
namespace
std
;
// The two strings below specify the title and example usage that is
// printed out as the help or usage message
string
title
=
string
(
"fsl_sbca (Version 1.0)"
)
+
string
(
"
\n
Copyright(c) 2008, University of Oxford (Christian F. Beckmann)
\n
"
)
+
string
(
"
\n
Performs seed-based correlation analysis on FMRI data
\n
"
)
+
string
(
" using either a single seed coordinate or a seed mask "
);
string
examples
=
"fsl_sbca -i <input> -o <basename> [options]"
;
//Command line Options {
Option
<
string
>
fnin
(
string
(
"-i,--in"
),
string
(
""
),
string
(
" input file name (4D image file)"
),
true
,
requires_argument
);
Option
<
string
>
fnout
(
string
(
"-o,--out"
),
string
(
""
),
string
(
"output file base name"
),
true
,
requires_argument
);
Option
<
string
>
fnseed
(
string
(
"-s,--seed"
),
string
(
""
),
string
(
"seed voxel coordinate or file name of seed mask (3D file)"
),
false
,
requires_argument
);
Option
<
string
>
fntarget
(
string
(
"-t,--target"
),
string
(
""
),
string
(
"file name of target mask(s) (3D or 4D file)"
),
false
,
requires_argument
);
Option
<
string
>
fnconf
(
string
(
"--conf"
),
string
(
""
),
string
(
" file name (or comma-separated list of file name) for confound ascii txt files"
),
false
,
requires_argument
);
Option
<
bool
>
map_bin
(
string
(
"--bin"
),
false
,
string
(
" binarise spatial maps prior to calculation of time courses"
),
false
,
no_argument
);
Option
<
bool
>
verbose
(
string
(
"-v,--verbose"
),
false
,
string
(
"switch on diagnostic messages"
),
false
,
no_argument
);
Option
<
bool
>
tc_mean
(
string
(
"--mean"
),
false
,
string
(
" use mean instead of Eigenvariates for calculation of time courses"
),
false
,
no_argument
);
Option
<
int
>
tc_order
(
string
(
"--mean"
),
1
,
string
(
" number of Eigenvariates (default 1)"
),
false
,
requires_argument
);
Option
<
int
>
help
(
string
(
"-h,--help"
),
0
,
string
(
"display this help text"
),
false
,
no_argument
);
/*
}
*/
//Globals {
Matrix
data
,
confounds
;
volume4D
<
float
>
orig_data
;
volume
<
float
>
mask
;
volumeinfo
volinf
;
int
voxels
=
0
;
Matrix
seeds
,
corrs
;
vector
<
Matrix
>
ttcs
;
/*
}
*/
////////////////////////////////////////////////////////////////////////////
// Local functions
void
save4D
(
Matrix
what
,
string
fname
){
if
(
what
.
Ncols
()
==
data
.
Ncols
()
||
what
.
Nrows
()
==
data
.
Nrows
()){
volume4D
<
float
>
tempVol
;
if
(
what
.
Nrows
()
>
what
.
Ncols
())
tempVol
.
setmatrix
(
what
.
t
(),
mask
);
else
tempVol
.
setmatrix
(
what
,
mask
);
save_volume4D
(
tempVol
,
fname
,
volinf
);
}
}
bool
isimage
(
Matrix
what
){
if
((
voxels
>
0
)
&&
(
what
.
Ncols
()
==
voxels
||
what
.
Nrows
()
==
voxels
))
return
TRUE
;
else
return
FALSE
;
}
void
saveit
(
Matrix
what
,
string
fname
){
if
(
isimage
(
what
))
save4D
(
what
,
fname
);
else
write_ascii_matrix
(
what
,
fname
);
}
ReturnMatrix
create_confs
(
string
what
){
Matrix
res
;
char
*
p
;
char
t
[
1024
];
const
char
*
discard
=
","
;
strcpy
(
t
,
what
.
c_str
());
p
=
strtok
(
t
,
discard
);
res
=
remmean
(
read_ascii_matrix
(
string
(
p
)),
1
);
do
{
p
=
strtok
(
NULL
,
discard
);
if
(
p
){
res
|=
remmean
(
read_ascii_matrix
(
string
(
p
)),
1
);
}
}
while
(
p
);
res
.
Release
();
return
res
;
}
ReturnMatrix
calc_ttc
(
volume
<
float
>&
in
){
Matrix
res
,
tmp
,
scales
;
volume
<
float
>
tmp1
;
volume4D
<
float
>
tmp2
;
tmp1
=
in
;
tmp1
.
binarise
(
1e-8
);
tmp2
.
addvolume
(
in
);
scales
=
tmp2
.
matrix
(
tmp1
);
tmp
=
remmean
(
orig_data
.
matrix
(
tmp1
),
1
);
if
(
!
map_bin
.
value
())
tmp
=
SP
(
tmp
,
ones
(
tmp
.
Nrows
(),
1
)
*
scales
);
if
(
tc_mean
.
value
())
res
=
mean
(
tmp
,
2
);
else
{
SymmetricMatrix
Corr
;
Corr
<<
tmp
*
tmp
.
t
()
/
tmp
.
Ncols
();
DiagonalMatrix
tmpD
;
EigenValues
(
Corr
,
tmpD
,
res
);
res
=
fliplr
(
res
.
Columns
(
res
.
Ncols
()
-
tc_order
.
value
()
+
1
,
res
.
Ncols
()))
*
std
::
sqrt
(
tmp
.
Nrows
());
}
res
.
Release
();
return
res
;
}
void
create_target_tcs
(){
volume4D
<
float
>
tmptarg
;
read_volume4D
(
tmptarg
,
fntarget
.
value
());
for
(
int
ctr
=
0
;
ctr
<
tmptarg
.
tsize
();
ctr
++
){
ttcs
.
push_back
(
calc_ttc
(
tmptarg
[
ctr
]));
}
}
int
setup
(){
if
(
fsl_imageexists
(
fnin
.
value
())){
//read data
//input is 3D/4D vol
read_volume4D
(
orig_data
,
fnin
.
value
(),
volinf
);
}
if
(
fnconf
.
value
()
>
""
)
confounds
=
create_confs
(
fnconf
.
value
());
if
(
fnseed
.
value
()
>
""
){
read_volume
(
mask
,
fnseed
.
value
());
if
(
!
samesize
(
orig_data
[
0
],
mask
)){
cerr
<<
"ERROR: Seed mask image does not match input image"
<<
endl
;
return
1
;
};
volume4D
<
float
>
tmp_mask
;
tmp_mask
.
addvolume
(
mask
);
mask
.
binarise
(
1e-8
);
Matrix
scales
=
tmp_mask
.
matrix
(
mask
);
seeds
=
remmean
(
orig_data
.
matrix
(
mask
),
1
);
if
(
!
map_bin
.
value
())
seeds
=
SP
(
seeds
,
ones
(
seeds
.
Nrows
(),
1
)
*
scales
);
}
create_target_tcs
();
voxels
=
seeds
.
Ncols
();
return
0
;
}
void
calc_res
(){
}
void
write_res
(){
}
int
do_work
(
int
argc
,
char
*
argv
[])
{
double
tmptime
=
time
(
NULL
);
srand
((
unsigned
int
)
tmptime
);
cerr
<<
(
unsigned
int
)
tmptime
<<
endl
<<
endl
;
cerr
<<
unifrnd
(
2
,
2
)
<<
endl
;
exit
(
1
);
if
(
setup
())
exit
(
1
);
calc_res
();
write_res
();
return
0
;
}
////////////////////////////////////////////////////////////////////////////
int
main
(
int
argc
,
char
*
argv
[]){
Tracer
tr
(
"main"
);
OptionParser
options
(
title
,
examples
);
try
{
// must include all wanted options here (the order determines how
// the help message is printed)
options
.
add
(
fnin
);
options
.
add
(
fnout
);
options
.
add
(
fnseed
);
options
.
add
(
fntarget
);
options
.
add
(
fnconf
);
options
.
add
(
map_bin
);
options
.
add
(
tc_mean
);
options
.
add
(
tc_order
);
options
.
add
(
verbose
);
options
.
add
(
help
);
options
.
parse_command_line
(
argc
,
argv
);
// line below stops the program if the help was requested or
// a compulsory option was not set
if
(
(
help
.
value
())
||
(
!
options
.
check_compulsory_arguments
(
true
))
){
options
.
usage
();
exit
(
EXIT_FAILURE
);
}
else
{
// Call the local functions
return
do_work
(
argc
,
argv
);
}
}
catch
(
X_OptionError
&
e
)
{
options
.
usage
();
cerr
<<
endl
<<
e
.
what
()
<<
endl
;
exit
(
EXIT_FAILURE
);
}
catch
(
std
::
exception
&
e
)
{
cerr
<<
e
.
what
()
<<
endl
;
}
}
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment