virtual void end(Voxel& voxel,MatFile& mat_writer) { mat_writer.add_matrix("free_water_quantity",&voxel.qa_scaling,1,1); mat_writer.add_matrix("jdet",&*jdet.begin(),1,jdet.size()); double trans_to_mni[16]; std::fill(trans_to_mni,trans_to_mni+16,0.0); trans_to_mni[0] = scale[0]; trans_to_mni[5] = scale[1]; trans_to_mni[10] = scale[2]; trans_to_mni[3] = bounding_box_lower[0]-scale[0]; trans_to_mni[7] = bounding_box_lower[1]-scale[1]; trans_to_mni[11] = bounding_box_lower[2]-scale[2]; mat_writer.add_matrix("mni",&*trans_to_mni,4,3); mat_writer.add_matrix("R2",&R2,1,1); }
virtual void end(Voxel& voxel,MatFile& mat_writer) { for (unsigned int index = 0;index < voxel.max_fiber_number;++index) { std::ostringstream out; out << index; std::string num = out.str(); std::string index_str = "dir"; index_str += num; set_title(index_str.c_str()); mat_writer.add_matrix(index_str.c_str(),&*dir[index].begin(),1,dir[index].size()); } }
virtual void end(Voxel& voxel,MatFile& mat_writer) { if (voxel.need_odf) { set_title("output odfs"); for (unsigned int index = 0;index < voxel.template_odfs.size();++index) { std::ostringstream out; out << "odf" << index; mat_writer.add_matrix(out.str().c_str(),&*voxel.template_odfs[index].begin(), voxel.ti.half_vertices_count, voxel.template_odfs[index].size()/(voxel.ti.half_vertices_count)); } } }
virtual void end(Voxel& voxel,MatFile& mat_writer) { if (!voxel.need_odf) return; { set_title("output odfs"); for (unsigned int index = 0;index < odf_data.size();++index) { if (!voxel.odf_deconvolusion) std::for_each(odf_data[index].begin(),odf_data[index].end(),boost::lambda::_1 /= voxel.qa_scaling); std::ostringstream out; out << "odf" << index; mat_writer.add_matrix(out.str().c_str(),&*odf_data[index].begin(), voxel.ti.half_vertices_count, odf_data[index].size()/(voxel.ti.half_vertices_count)); } odf_data.clear(); } }
virtual void end(Voxel& voxel,MatFile& mat_writer) { set_title("output gfa"); mat_writer.add_matrix("gfa",&*gfa.begin(),1,gfa.size()); if(!voxel.odf_deconvolusion) { voxel.qa_scaling = *std::max_element(iso.begin(),iso.end()); // scaled to 1mm cubic if(voxel.vs[0] != 0.0 && voxel.vs[1] != 0.0 && voxel.vs[2] != 0.0) { voxel.qa_scaling /= voxel.vs[0]; voxel.qa_scaling /= voxel.vs[1]; voxel.qa_scaling /= voxel.vs[2]; } mat_writer.add_matrix("qa_scaling",&voxel.qa_scaling,1,1); std::for_each(iso.begin(),iso.end(),boost::lambda::_1 /= voxel.qa_scaling); mat_writer.add_matrix("iso",&*iso.begin(),1,iso.size()); if (voxel.qa_scaling != 0.0) for (unsigned int i = 0;i < voxel.max_fiber_number;++i) std::for_each(fa[i].begin(),fa[i].end(),boost::lambda::_1 /= voxel.qa_scaling); // cellularity int max_fa_index = std::max_element(fa[0].begin(),fa[0].end())-fa[0].begin(); float ratio = iso[max_fa_index]/fa[0][max_fa_index]; for(unsigned int index = 0;index < iso.size();++index) iso[index] -= fa[0][index]*ratio; mat_writer.add_matrix("cell",&*iso.begin(),1,iso.size()); } for (unsigned int index = 0;index < voxel.max_fiber_number;++index) { std::ostringstream out; out << index; std::string num = out.str(); std::string fa_str = "fa"; fa_str += num; set_title(fa_str.c_str()); mat_writer.add_matrix(fa_str.c_str(),&*fa[index].begin(),1,fa[index].size()); } // output normalized qa { float max_qa = 0.0; for (unsigned int i = 0;i < voxel.max_fiber_number;++i) max_qa = std::max<float>(*std::max_element(fa[i].begin(),fa[i].end()),max_qa); if(max_qa != 0.0) for (unsigned int index = 0;index < voxel.max_fiber_number;++index) { std::for_each(fa[index].begin(),fa[index].end(),boost::lambda::_1 /= max_qa); std::ostringstream out; out << index; std::string num = out.str(); std::string fa_str = "nqa"; fa_str += num; set_title(fa_str.c_str()); mat_writer.add_matrix(fa_str.c_str(),&*fa[index].begin(),1,fa[index].size()); } } }