File: correlation.cpp

package info (click to toggle)
odin 2.0.5-8
  • links: PTS, VCS
  • area: main
  • in suites: forky
  • size: 9,196 kB
  • sloc: cpp: 62,638; sh: 4,541; makefile: 779
file content (67 lines) | stat: -rw-r--r-- 1,690 bytes parent folder | download | duplicates (7)
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
#include "correlation.h"


fmriResult fmri_eval(const Data<float,1>& timecourse, const Data<float,1>& designvec) {
  Log<OdinData> odinlog("","fmri_eval");
  fmriResult result;

  if( !same_shape(timecourse, designvec) ) {
    ODINLOG(odinlog,errorLog) << "design file size mismatch" << STD_endl;
    return result;
  }

  int nrep=timecourse.numElements();

  float maxdesign=max(designvec);
  float mindesign=min(designvec);

  // Calculate baseline
  int nbaseline=0;
  for(int i=0; i<nrep; i++) {
    if(designvec(i)) break;
    nbaseline++;
  }
  if(nbaseline) result.Sbaseline=mean(timecourse(Range(0,nbaseline-1)));

  // calculate fMRI contrast
  int nrest=0;
  int nstim=0;
  for(int i=0; i<nrep; i++) {
    if(designvec(i)==mindesign) nrest++;
    if(designvec(i)==maxdesign)  nstim++;
  }

  Array<float,1> restdata(nrest);
  Array<float,1> stimdata(nstim);

  int irest=0;
  int istim=0;

  for(int i=0; i<nrep; i++) {
    if(designvec(i)==mindesign) {restdata(irest)=timecourse(i); irest++;}
    if(designvec(i)==maxdesign)  {stimdata(istim)=timecourse(i); istim++;}
  }


  statisticResult reststat=statistics(restdata);
  statisticResult stimstat=statistics(stimdata);


  result.Srest=reststat.mean;
  result.Sstim=stimstat.mean;

  result.rel_diff=secureDivision(stimstat.mean-reststat.mean,reststat.mean);
  result.rel_err=secureDivision(stimstat.meandev+reststat.meandev,reststat.mean);

  return result;
}

//////////////////////////////////////////////////////////////////////////////////


// instantiate one special template for checking at compile time
#ifdef ODIN_DEBUG
template correlationResult correlation(const Array<float,1>&, const Array<float,1>&);
#endif