void SaveISISNexus::sample() { NXmakegroup(handle, "sample", "NXsample"); NXopengroup(handle, "sample", "NXsample"); saveChar("name", m_isisRaw->spb.e_name, 40); saveFloat("height", &m_isisRaw->spb.e_height, 1); saveFloat("width", &m_isisRaw->spb.e_width, 1); saveFloat("thickness", &m_isisRaw->spb.e_thick, 1); saveString("id", " "); float tmp(0.0); saveFloat("distance", &tmp, 1); std::string shape[] = {"cylinder", "flat plate", "HRPD slab", "unknown"}; int i = m_isisRaw->spb.e_geom - 1; if (i < 0 || i > 3) i = 3; saveString("shape", shape[i]); std::string type[] = {"sample+can", "empty can", "vanadium", "absorber", "nothing", "sample, no can", "unknown"}; i = m_isisRaw->spb.e_type - 1; if (i < 0 || i > 6) i = 6; saveString("type", type[i]); NXclosegroup(handle); // sample }
Magic3D::XMLElement* Magic3D::TextData::save(XMLElement* root) { if (root) { saveString(root, M3D_TEXT_XML_TEXT, text); if (font) { saveString(root, M3D_TEXT_XML_FONT, font->getName()); } else { saveString(root, M3D_TEXT_XML_FONT, M3D_DEFAULT_FONT); } saveInt(root, M3D_TEXT_XML_ALIGNMENT, textAlignment); saveColorRGBA(root, M3D_TEXT_XML_COLOR, textColor); saveFloat(root, M3D_TEXT_XML_SIZE, textSize); } return root; }
void SaveISISNexus::detector_1() { NXmakegroup(handle, "detector_1", "NXdata"); NXopengroup(handle, "detector_1", "NXdata"); for (int i = 0; i < nmon; ++i) { int si = int(std::distance( m_isisRaw->spec, std::find(m_isisRaw->spec, m_isisRaw->spec + nsp, m_isisRaw->mdet[i]))); monitor_index[si] = i; } // write counts int dim[3]; dim[0] = nper; dim[1] = nsp - nmon; dim[2] = ntc; NXmakedata(handle, "counts", NX_INT32, 3, dim); NXopendata(handle, "counts"); putAttr("units", "counts"); putAttr("signal", 1); putAttr("axes", "period_index,spectrum_index,time_of_flight"); int size[] = {1, 1, ntc}; int index = 0; for (int p = 0; p < nper; ++p) { int ispec = 0; m_isisRaw->skipData(rawFile, index++); for (int si = 0; si < nsp; ++si) { if (monitor_index.find(si) != monitor_index.end()) { m_isisRaw->readData(rawFile, index); monitorData.insert(monitorData.end(), m_isisRaw->dat1 + 1, m_isisRaw->dat1 + ntc + 1); } else { m_isisRaw->readData(rawFile, index); int start[] = {p, ispec, 0}; NXputslab(handle, m_isisRaw->dat1 + 1, start, size); ++ispec; } ++index; } } NXgetdataID(handle, &counts_link); NXclosedata(handle); NXmakelink(handle, &period_index_link); std::vector<int> spec_minus_monitors(nsp - nmon); std::generate(spec_minus_monitors.begin(), spec_minus_monitors.end(), getWithoutMonitors<int>(this, m_isisRaw->spec)); saveIntOpen("spectrum_index", &spec_minus_monitors[0], nsp - nmon); NXgetdataID(handle, &spectrum_index_link); close(); NXmakelink(handle, &time_of_flight_link); NXmakelink(handle, &time_of_flight_raw_link); std::vector<float> float_vec(ndet - nmon); std::generate(float_vec.begin(), float_vec.end(), getWithoutMonitors<float>(this, m_isisRaw->delt)); saveFloat("delt", &float_vec[0], ndet - nmon); saveFloat("source_detector_distance", &m_isisRaw->ivpb.i_sddist, 1); // using the same float_vec, size unchanged ndet-nmon std::generate(float_vec.begin(), float_vec.end(), getWithoutMonitors<float>(this, m_isisRaw->len2)); saveFloatOpen("distance", &float_vec[0], ndet - nmon); putAttr("units", "metre"); close(); // using the same float_vec, size unchanged ndet-nmon std::generate(float_vec.begin(), float_vec.end(), getWithoutMonitors<float>(this, m_isisRaw->tthe)); saveFloatOpen("polar_angle", &float_vec[0], ndet - nmon); putAttr("units", "degree"); close(); NXclosegroup(handle); }
/// Write isis_vms_compat void SaveISISNexus::write_isis_vms_compat() { NXmakegroup(handle, "isis_vms_compat", "IXvms"); NXopengroup(handle, "isis_vms_compat", "IXvms"); int ndet = m_isisRaw->i_det; int nmon = m_isisRaw->i_mon; saveInt("ADD", &m_isisRaw->add, 9); saveInt("CODE", m_isisRaw->code, ndet); saveInt("CRAT", m_isisRaw->crat, ndet); write_rpb(); write_spb(); write_vpb(); saveInt("DAEP", &m_isisRaw->daep, 64); saveInt("DELT", m_isisRaw->delt, ndet); saveInt("FORM", &m_isisRaw->data_format); saveChar("HDR", &m_isisRaw->hdr, 80); saveFloat("LEN2", m_isisRaw->len2, ndet); saveInt("MDET", m_isisRaw->mdet, nmon); saveInt("MODN", m_isisRaw->modn, ndet); saveInt("MONP", m_isisRaw->monp, nmon); saveInt("MPOS", m_isisRaw->mpos, ndet); saveChar("NAME", m_isisRaw->i_inst, 8); saveInt("NDET", &ndet); saveInt("NFPP", &m_isisRaw->t_nfpp); saveInt("NMON", &nmon); saveInt("NPER", &m_isisRaw->t_nper); saveInt("NSER", &m_isisRaw->e_nse); saveInt("NSP1", &m_isisRaw->t_nsp1); saveInt("NTC1", &m_isisRaw->t_ntc1); saveInt("NTRG", &m_isisRaw->t_ntrg); saveInt("NUSE", &m_isisRaw->i_use); saveInt("PMAP", &m_isisRaw->t_pmap, 256); saveInt("PRE1", &m_isisRaw->t_pre1); saveInt("RUN", &m_isisRaw->r_number); saveInt("SPEC", m_isisRaw->spec, ndet); saveInt("TCM1", &m_isisRaw->t_tcm1); saveFloat("TCP1", m_isisRaw->t_tcp1, 20); saveInt("TIMR", m_isisRaw->timr, ndet); saveChar("TITL", m_isisRaw->r_title, 80); saveFloat("TTHE", m_isisRaw->tthe, ndet); saveInt("UDET", m_isisRaw->udet, ndet); saveInt("ULEN", &m_isisRaw->u_len); std::string user_info(160, ' '); if (m_isisRaw->u_len > 0) { std::copy(reinterpret_cast<char *>(&m_isisRaw->user), reinterpret_cast<char *>(&m_isisRaw->user) + m_isisRaw->u_len, user_info.begin()); } saveString("USER", user_info); saveInt("VER1", &m_isisRaw->frmt_ver_no); saveInt("VER2", &m_isisRaw->ver2); saveInt("VER3", &m_isisRaw->ver3); saveInt("VER4", &m_isisRaw->ver4); saveInt("VER5", &m_isisRaw->ver5); saveInt("VER6", &m_isisRaw->ver6); saveInt("VER7", &m_isisRaw->ver7); saveInt("VER8", &m_isisRaw->ver8); int tmp_int(0); saveInt("VER9", &tmp_int); int n = m_isisRaw->logsect.nlines; log_notes.resize(n); for (int i = 0; i < n; ++i) { log_notes[i].assign(m_isisRaw->logsect.lines[i].data, m_isisRaw->logsect.lines[i].len); } int ll = saveStringVectorOpen("NOTE", log_notes); saveInt("NTNL", &n); saveInt("NTLL", &ll); NXclosegroup(handle); // isis_vms_compat }