int main() { std::vector<int> int_vec(1000); std::generate(int_vec.begin(), int_vec.end(), std::rand); // this should pass std::cout << "is_strict_weak_ordering(int_vec): " << is_strict_weak_ordering(int_vec.begin(), int_vec.end(), std::less<int>()) << std::endl; std::vector<float> float_vec(1000); std::generate(float_vec.begin(), float_vec.end(), std::rand); // add a NaN to make the test fail float_vec[5] = std::numeric_limits<float>::quiet_NaN(); // this should fail std::cout << "is_strict_weak_ordering(float_vec): " << is_strict_weak_ordering(float_vec.begin(), float_vec.end(), std::less<float>()) << std::endl; return 0; }
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); }