File: filter_merge.cpp

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


bool FilterMerge::process(FileIO::ProtocolDataMap& pdmap) const {
  Log<Filter> odinlog(c_label(),"process");

  Range all=Range::all();

  STD_map<double,FileIO::ProtocolDataMap> acqstartmap; // Create a temporary protocol-data pair for each AcquisitionStart
  TinyVector<int,4> shape=0;
  for(FileIO::ProtocolDataMap::const_iterator it=pdmap.begin();it!=pdmap.end();it++) {
    const Protocol& prot=it->first;
    const Data<float,4>& data=it->second;
    shape(timeDim)+=data.extent(timeDim);
    for(int idim=sliceDim; idim<n_dataDim; idim++) shape(idim)=STD_max(shape(idim),data.extent(idim));
    acqstartmap[prot.seqpars.get_AcquisitionStart()][prot].reference(data);
  }
  ODINLOG(odinlog,normalDebug) << "shape" << shape << STD_endl;
  pdmap.clear();


  Data<float,4> result(shape);
  int repoffset=0;
  Protocol prot;
  bool prot_set=false;
  for(STD_map<double,FileIO::ProtocolDataMap>::const_iterator acqit=acqstartmap.begin();acqit!=acqstartmap.end();acqit++) {
    ODINLOG(odinlog,normalDebug) << "acqstart=" << acqit->first << STD_endl;
    const FileIO::ProtocolDataMap& acqpdmap=acqit->second;
    for(FileIO::ProtocolDataMap::const_iterator it=acqpdmap.begin();it!=acqpdmap.end();it++) {
      if(!prot_set) {prot=it->first; prot_set=true;} // Use first protocol for dataset
      Data<float,4> oneset(it->second);
      TinyVector<int,4> newshape(shape);
      int nrep=oneset.extent(timeDim);
      newshape(timeDim)=nrep;
      oneset.congrid(newshape);
      ODINLOG(odinlog,normalDebug) << "newshape" << newshape << STD_endl;
      result(Range(repoffset,repoffset+nrep-1),all,all,all)=oneset;
      repoffset+=nrep;
    }
  }

  pdmap[prot].reference(result);

  return true;
}