ae1ef6aa226d4436d4dc9e2b9b28120d802ab8a5 jcasper Thu Jul 25 11:57:53 2024 -0700 Dropping new straw library files into place, refs #33225 diff --git src/hg/lib/straw/new_straw.h src/hg/lib/straw/new_straw.h deleted file mode 100644 index feb1228..0000000 --- src/hg/lib/straw/new_straw.h +++ /dev/null @@ -1,132 +0,0 @@ -/* - The MIT License (MIT) - - Copyright (c) 2011-2016 Broad Institute, Aiden Lab - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. -*/ -#ifndef STRAW_H -#define STRAW_H - -#include <fstream> -#include <set> -#include <vector> -#include <map> - -// pointer structure for reading blocks or matrices, holds the size and position -struct indexEntry { - int64_t size; - int64_t position; -}; - -// sparse matrixType entry -struct contactRecord { - int32_t binX; - int32_t binY; - float counts; -}; - -// chromosome -struct chromosome { - std::string name; - int32_t index; - int64_t length; -}; - -// this is for creating a stream from a byte array for ease of use -// see https://stackoverflow.com/questions/41141175/how-to-implement-seekg-seekpos-on-an-in-memory-buffer -struct membuf : std::streambuf { - membuf(char *begin, int32_t l) { - setg(begin, begin, begin + l); - } -}; - -struct memstream : virtual membuf, std::istream { - memstream(char *begin, int32_t l) : - membuf(begin, l), - std::istream(static_cast<std::streambuf*>(this)) { - } - - std::istream::pos_type seekpos(std::istream::pos_type sp, std::ios_base::openmode which) override { - return seekoff(sp - std::istream::pos_type(std::istream::off_type(0)), std::ios_base::beg, which); - } - - std::istream::pos_type seekoff(std::istream::off_type off, - std::ios_base::seekdir dir, - std::ios_base::openmode which = std::ios_base::in) override { - if (dir == std::ios_base::cur) - gbump(off); - else if (dir == std::ios_base::end) - setg(eback(), egptr() + off, egptr()); - else if (dir == std::ios_base::beg) - setg(eback(), eback() + off, egptr()); - return gptr() - eback(); - } -}; - -// for holding data from URL call -struct MemoryStruct { - char *memory; - size_t size; -}; - -std::map<int32_t, indexEntry> -readMatrixZoomData(std::istream &fin, const std::string &myunit, int32_t mybinsize, float &mySumCounts, - int32_t &myBlockBinCount, - int32_t &myBlockColumnCount, bool &found); - -std::map<int32_t, indexEntry> -readMatrix(std::istream &fin, int32_t myFilePosition, std::string unit, int32_t resolution, float &mySumCounts, - int32_t &myBlockBinCount, int32_t &myBlockColumnCount); - -std::vector<double> readNormalizationVector(std::istream &fin, indexEntry entry); - -std::vector<contactRecord> -straw(const std::string& matrixType, const std::string& norm, const std::string& fname, const std::string& chr1loc, - const std::string& chr2loc, const std::string &unit, int32_t binsize); - -std::vector<std::vector<float>> -strawAsMatrix(const std::string &matrixType, const std::string &norm, const std::string &fileName, - const std::string &chr1loc, const std::string &chr2loc, const std::string &unit, int32_t binsize); - -int64_t getNumRecordsForFile(const std::string& filename, int32_t binsize, bool interOnly); - -int64_t getNumRecordsForChromosomes(const std::string& filename, int32_t binsize, bool interOnly); - -/* Added at UCSC */ -void getHeaderFields(const std::string &filename, std::string &genome, std::vector<std::string> &chromNames, - std::vector<int> &chromSizes, std::vector<int> &bpResolutions, std::vector<int> &fragResolutions, - std::vector<std::string> &attributes); -/* Fill in the provided fields with information from the header of the hic file in the supplied filename. - * fragResolutions is left empty for now, as we're not making use of it. */ - -class strawException : public std::runtime_error { -/* Simple exception wrapper class */ - public: - strawException(const std::string& error): - std::runtime_error(error) { - } -}; - -std::set<std::string> getNormOptions(); -/* Return the set of normalization options that have been encountered through footer parsing. - * The result will be empty unless at least one straw() request has been made. - */ - -#endif