/** * Prepare histogram data. * * @param x first data * @param wv weight data * @return max. index value or -1, if index empty */ INT32 CGEN_PROTECTED CHistogram::Prepare(CData* x, CData* wv) { INT32 imax = 1, i, n; if (m_hist == NULL) m_hist = data_create("hist"); m_nhist = data_nblock(m_hist); if (data_empty(m_indexlist) != TRUE) { imax = CHistogram_max_index(m_indexlist, 0) + 1; if (imax > m_nhist) m_nhist = imax; } if (data_empty(wv) != TRUE) { imax = data_ndim(wv); if (imax > m_nhist) m_nhist = imax; } if (m_nhist == 0) m_nhist = 1; if (data_empty(m_hist) != TRUE) { data_realloc (m_hist, m_nhist * m_bins); set_data_nrec (m_hist, m_nhist * m_bins); m_hdim = data_dim(m_hist); } else { data_reset(m_hist); n = data_dim(x); m_hdim = 0; for (i = 0; i < n; i++) if (comp_type(x,i) > 256 && i != m_icomp) { comp_def(m_hist, comp_text(x,i),T_DOUBLE); m_hdim++; } data_arr_alloc (m_hist, m_bins * m_nhist); } set_data_descr(m_hist, DESCR1, (FLOAT64)m_hmode); set_data_descr(m_hist, DESCR2, (FLOAT64)m_bins); set_data_nblock(m_hist, m_nhist); return (m_nhist); }
/** * Check consistency between histogram and minmax data. */ INT16 CGEN_PROTECTED CHistogram::CheckConsist() { INT16 ierr, mode; INT32 nhist; mode = HIS_MODE; nhist = data_nblock(m_hist); mode = CheckMinmax(); if (mode == -1) return (NOT_EXEC); if ((ierr = CheckHisto()) != O_K) return (ierr); switch (mode) { case 1: if (data_nrec(m_minmax) != 2 || data_dim (m_minmax) != 1) return IERROR(this,HIS_INCONS,0,0,0); break; case 2: if (data_nrec(m_minmax) != 2) return IERROR(this,HIS_INCONS,0,0,0); if (data_dim(m_minmax) != data_dim(m_hist)) return IERROR(this,HIS_INCONS,0,0,0); break; case 3: if (data_nrec(m_minmax) < 2 * nhist) return IERROR(this,HIS_INCONS,0,0,0); if (data_dim(m_minmax) != data_dim(m_hist)) return IERROR(this,HIS_INCONS,0,0,0); break; default: return IERROR(this,HIS_INCONS,0,0,0); } return (O_K); }
/** * Check minmax data, return mode. */ INT16 CGEN_PROTECTED CHistogram::CheckMinmax() { if (data_empty (m_minmax) == TRUE) return IERROR(this,HIS_EMPTY,0,0,0); if (data_chtype (m_minmax, T_DOUBLE) != TRUE) return IERROR(this,HIS_TYPE,0,0,0); if (data_nrec(m_minmax) == 2 && data_dim(m_minmax) == 1) return (1); if (data_nrec(m_minmax) == 2) return (2); if (data_nrec(m_minmax) > 2) return (3); return (-1); }
int RegionalSummary::readH5(hid_t group_id) { // Read all the data hid_t dataset_id; vector<unsigned int> region_origin(2,0); dataset_id = H5Dopen2(group_id,"region_origin",H5P_DEFAULT); H5Dread(dataset_id, H5T_NATIVE_UINT, H5S_ALL, H5S_ALL, H5P_DEFAULT, ®ion_origin[0]); H5Dclose (dataset_id); vector<unsigned int> region_dim(2,0); dataset_id = H5Dopen2(group_id,"region_dim",H5P_DEFAULT); H5Dread(dataset_id, H5T_NATIVE_UINT, H5S_ALL, H5S_ALL, H5P_DEFAULT, ®ion_dim[0]); H5Dclose (dataset_id); vector<unsigned int> data_dim(2,0); dataset_id = H5Dopen2(group_id,"data_dim",H5P_DEFAULT); H5Dread(dataset_id, H5T_NATIVE_UINT, H5S_ALL, H5S_ALL, H5P_DEFAULT, &data_dim[0]); H5Dclose (dataset_id); Initialize(data_dim[1],data_dim[0],region_origin,region_dim); dataset_id = H5Dopen2(group_id,"n_err",H5P_DEFAULT); H5Dread(dataset_id, H5T_NATIVE_UINT_LEAST64, H5S_ALL, H5S_ALL, H5P_DEFAULT, &n_err_); H5Dclose (dataset_id); dataset_id = H5Dopen2(group_id,"n_aligned",H5P_DEFAULT); H5Dread(dataset_id, H5T_NATIVE_UINT_LEAST64, H5S_ALL, H5S_ALL, H5P_DEFAULT, &n_aligned_); H5Dclose (dataset_id); unsigned int n_data = data_dim[0] * data_dim[1]; vector<uint64_t> hp_count(n_data,0); dataset_id = H5Dopen2(group_id,"hp_count",H5P_DEFAULT); H5Dread(dataset_id, H5T_NATIVE_UINT_LEAST64, H5S_ALL, H5S_ALL, H5P_DEFAULT, &hp_count[0]); H5Dclose (dataset_id); vector<uint64_t> hp_err(n_data,0); dataset_id = H5Dopen2(group_id,"hp_err",H5P_DEFAULT); H5Dread(dataset_id, H5T_NATIVE_UINT_LEAST64, H5S_ALL, H5S_ALL, H5P_DEFAULT, &hp_err[0]); H5Dclose (dataset_id); uint64_t *countStart = &hp_count[0]; uint64_t *errStart = &hp_err[0]; for(unsigned int i_flow=0; i_flow <n_flow_; ++i_flow) { uint64_t *countEnd = countStart + max_hp_; uint64_t *errEnd = errStart + max_hp_; hp_count_[i_flow].assign(countStart, countEnd); hp_err_[i_flow].assign(errStart, errEnd); countStart = countEnd; errStart = errEnd; } return(EXIT_SUCCESS); }
/** * Compute minmax data of pooled histogram. The blocks of hist are added. * * @param minmax minmax data * @param mm pooled minmax data * @return O_K if ok, NOT_EXEC if not executed */ static INT16 CHistogram_minmax_poole(CData* minmax, CData* mm) { FLOAT64 d, dmi, dmx; INT16 i, j; if (mm == NULL) return (NOT_EXEC); if (data_empty(minmax) == TRUE) return (NOT_EXEC); if (data_nrec(minmax) == 2) { data_copy (minmax,mm); return (O_K); } data_reset (mm); data_scopy (minmax, mm); data_arr_alloc (mm, 2); for (j = 0; j < data_dim(minmax); j++) { dmi = dfetch(minmax,0,j); dmx = dfetch(minmax,1,j); for (i = 1; i < data_nrec(minmax) / 2; i++) { d = dfetch(minmax,2*i,j); if (d < dmi) dmi = d; d = dfetch(minmax,2*i+1,j); if (d > dmx) dmx = d; } dstore (dmi, mm, 0, j); dstore (dmx, mm, 1, j); } return (O_K); }
/** * Select histogram block i, store to ihist. * * @param ihist histogram i * @param i histogram block index * @param j histogram component index (select only a component); * -1 to select complete block * @return O_K if ok, NOT_EXEC if not executed */ INT16 CGEN_PUBLIC CHistogram::SelectBlock(CData* ihist, INT32 i, INT32 j) { INT32 l, rl; if (CheckHisto() != O_K) return (NOT_EXEC); if (ihist == NULL) return (NOT_EXEC); if (i < 0 || i >= m_nhist) return (NOT_EXEC); rl = BytesPerBlock(); data_reset (ihist); if (j < 0) { data_scopy (m_hist, ihist); data_arr_alloc (ihist,m_bins); copy_data_descr (m_hist, ihist); set_data_nblock (ihist, 1); dl_memmove ( (char*)data_ptr(ihist), (char*)xaddr(m_hist,i*m_bins,0), rl); return (O_K); } if (j > -1 && j < data_dim(m_hist)) { comp_mdef (ihist,1,T_DOUBLE); data_arr_alloc (ihist,m_bins); copy_comp_text (m_hist, j, ihist, 0, 1); copy_data_descr(m_hist, ihist); set_data_nblock (ihist, 1); for (l = 0; l < m_bins; l++) dstore (dfetch(m_hist,i*m_bins+l,j), ihist,l,0); return (O_K); } return (NOT_EXEC); }