BitMagic-C++: xsample03.cpp File Reference

BitMagic-C++

Typedefs | Functions | Variables
xsample03.cpp File Reference

Example: SNP search in human genome. More...

`#include <iostream>`
`#include <sstream>`
`#include <chrono>`
`#include <regex>`
`#include <time.h>`
`#include <stdio.h>`
`#include <vector>`
`#include <map>`
`#include <utility>`
`#include "bm.h"`
`#include "bmalgo.h"`
`#include "bmserial.h"`
`#include "bmrandom.h"`
`#include "bmsparsevec.h"`
`#include "bmsparsevec_compr.h"`
`#include "bmsparsevec_algo.h"`
`#include "bmsparsevec_serial.h"`
`#include "bmalgo_similarity.h"`
`#include "bmsparsevec_util.h"`
`#include "bmdbg.h"`
`#include "bmtimer.h"`
Include dependency graph for xsample03.cpp:

Go to the source code of this file.

## Typedefs
typedef bm::sparse_vector< unsigned, bm::bvector<> > | sparse_vector_u32
typedef bm::rsc_sparse_vector< unsigned, sparse_vector_u32 > | rsc_sparse_vector_u32
typedef std::vector< std::pair< unsigned, unsigned > > | vector_pairs

## Functions
static void | show_help ()
static int | parse_args (int argc, char *argv[])
static int | load_snp_report (const std::string &fname, sparse_vector_u32 &sv)
static void | generate_random_subset (const sparse_vector_u32 &sv, std::vector< unsigned > &vect, unsigned count)
static void | build_vector_pairs (const sparse_vector_u32 &sv, vector_pairs &vp)
static bool | search_vector_pairs (const vector_pairs &vp, unsigned rs_id, unsigned &pos)
static void | run_benchmark (const sparse_vector_u32 &sv, const rsc_sparse_vector_u32 &csv)
int | main (int argc, char *argv[])

## Variables
std::string | sv_out_name
std::string | rsc_out_name
std::string | sv_in_name
std::string | rsc_in_name
std::string | isnp_name
bool | is_diag = false
bool | is_timing = false
bool | is_bench = false
bm::chrono_taker::duration_map_type | timing_map

## Detailed Description

Example: SNP search in human genome.

Brief description of used method:

1. Parse SNP chromosome report and extract information about SNP number and location in the chromosome
2. Use this information to build bit-transposed sparse_vector<> where vector position matches chromosome position and SNP ids (aka rsid) is kept as a bit-transposed matrix
3. Build rank-select compressed sparse vector, dropping all NULL columns (this data format is pretty sparse, since number of SNPs is significantly less than number of chromosome bases (1:5 or less) Use memory report to understand memory footprint for each form of storage
4. Run benchmarks searching for 500 randomly selected SNPs using
   - bm::sparse_vector<>
   - bm::rsc_sparse_vector<>
   - std::vector<pair<unsigned, unsigned> >

This example should be useful for construction of compressed columnar tables with parallel search capabilities.

Definition in file xsample03.cpp.

## Typedef Documentation

## ◆ rsc_sparse_vector_u32

typedef bm::rsc_sparse_vector<unsigned, sparse_vector_u32 > rsc_sparse_vector_u32

Examples
  xsample03.cpp.

Definition at line 204 of file xsample03.cpp.

## ◆ sparse_vector_u32

typedef bm::sparse_vector<unsigned, bm::bvector<> > sparse_vector_u32

Examples
  xsample03.cpp.

Definition at line 203 of file xsample03.cpp.

## ◆ vector_pairs

typedef std::vector<std::pair<unsigned, unsigned> > vector_pairs

Examples
  xsample03.cpp.

Definition at line 205 of file xsample03.cpp.

## Function Documentation

## ◆ build_vector_pairs()

static void build_vector_pairs | ( | const sparse_vector_u32 & | sv,
|  | vector_pairs & | vp
| ) |  |
| static

Examples
  xsample03.cpp.

Definition at line 311 of file xsample03.cpp.

References bm::sparse_vector< Val, BV >::begin(), bm::sparse_vector< Val, BV >::const_iterator, and bm::sparse_vector< Val, BV >::end().

Referenced by run_benchmark().

## ◆ generate_random_subset()

static void generate_random_subset | ( | const sparse_vector_u32 & | sv,
|  | std::vector< unsigned > & | vect,
|  | unsigned | count
| ) |  |
| static

Examples
  xsample03.cpp.

Definition at line 291 of file xsample03.cpp.

References bm::bvector< Alloc >::first(), bm::base_sparse_vector< Val, BV, MAX_SIZE >::get_null_bvector(), bm::sparse_vector< Val, BV >::push_back(), bm::random_subset< BV >::sample(), and bm::bvector< Alloc >::iterator_base::valid().

Referenced by run_benchmark().

## ◆ load_snp_report()

static int load_snp_report | ( | const std::string & | fname,
|  | sparse_vector_u32 & | sv
| ) |  |
| static

Examples
  xsample03.cpp.

Definition at line 217 of file xsample03.cpp.

References bm::bvector< Alloc >::init(), bm::sparse_vector< Val, BV >::set(), bm::bvector< Alloc >::set_bit_no_check(), bm::bvector< Alloc >::test(), and timing_map.

Referenced by main().

## ◆ main()

int main | ( | int | argc,
|  | char * | argv[]
| ) |  |

Examples
  xsample03.cpp.

Definition at line 459 of file xsample03.cpp.

References bm::chrono_taker::ct_ops_per_sec, bm::rsc_sparse_vector< Val, SV >::empty(), bm::sparse_vector< Val, BV >::empty(), bm::sparse_vector< Val, BV >::equal(), is_bench, is_diag, is_timing, isnp_name, bm::rsc_sparse_vector< Val, SV >::load_from(), load_snp_report(), bm::rsc_sparse_vector< Val, SV >::load_to(), bm::rsc_sparse_vector< Val, SV >::optimize(), bm::sparse_vector< Val, BV >::optimize(), parse_args(), bm::chrono_taker::print_duration_map(), rsc_in_name, rsc_out_name, run_benchmark(), show_help(), sv_in_name, sv_out_name, timing_map, and bm::use_null.

## ◆ parse_args()

static int parse_args | ( | int | argc,
|  | char * | argv[]
| ) |  |
| static

Examples
  xsample03.cpp.

Definition at line 109 of file xsample03.cpp.

References is_bench, is_diag, is_timing, isnp_name, rsc_in_name, rsc_out_name, show_help(), sv_in_name, and sv_out_name.

Referenced by main().

## ◆ run_benchmark()

static void run_benchmark | ( | const sparse_vector_u32 & | sv,
|  | const rsc_sparse_vector_u32 & | csv
| ) |  |
| static

Examples
  xsample03.cpp.

Definition at line 348 of file xsample03.cpp.

References build_vector_pairs(), bm::bvector< Alloc >::compare(), bm::rsc_sparse_vector< Val, SV >::empty(), bm::sparse_vector< Val, BV >::empty(), bm::sparse_vector_scanner< SV >::find_eq(), generate_random_subset(), bm::bvector< Alloc >::init(), search_vector_pairs(), bm::bvector< Alloc >::set_bit_no_check(), and timing_map.

Referenced by main().

## ◆ search_vector_pairs()

static bool search_vector_pairs | ( | const vector_pairs & | vp,
|  | unsigned | rs_id,
|  | unsigned & | pos
| ) |  |
| static

Examples
  xsample03.cpp.

Definition at line 329 of file xsample03.cpp.

Referenced by run_benchmark().

## ◆ show_help()

static void show_help | ( |  | ) |
| static

Examples
  xsample03.cpp.

Definition at line 80 of file xsample03.cpp.

Referenced by main(), and parse_args().

## Variable Documentation

## ◆ is_bench

bool is_bench = false

Examples
  xsample03.cpp.

Definition at line 106 of file xsample03.cpp.

Referenced by main(), and parse_args().

## ◆ is_diag

bool is_diag = false

Examples
  xsample03.cpp.

Definition at line 104 of file xsample03.cpp.

Referenced by main(), and parse_args().

## ◆ is_timing

bool is_timing = false

Examples
  xsample03.cpp.

Definition at line 105 of file xsample03.cpp.

Referenced by main(), and parse_args().

## ◆ isnp_name

std::string isnp_name

Examples
  xsample03.cpp.

Definition at line 103 of file xsample03.cpp.

Referenced by main(), and parse_args().

## ◆ rsc_in_name

std::string rsc_in_name

Examples
  xsample03.cpp.

Definition at line 102 of file xsample03.cpp.

Referenced by main(), and parse_args().

## ◆ rsc_out_name

std::string rsc_out_name

Examples
  xsample03.cpp.

Definition at line 100 of file xsample03.cpp.

Referenced by main(), and parse_args().

## ◆ sv_in_name

std::string sv_in_name

Examples
  xsample03.cpp.

Definition at line 101 of file xsample03.cpp.

Referenced by main(), and parse_args().

## ◆ sv_out_name

std::string sv_out_name

Examples
  xsample03.cpp.

Definition at line 99 of file xsample03.cpp.

Referenced by main(), and parse_args().

## ◆ timing_map

bm::chrono_taker::duration_map_type timing_map

Examples
  xsample03.cpp.

Definition at line 209 of file xsample03.cpp.

Referenced by load_snp_report(), main(), and run_benchmark().