File: MemorySML.cpp

package info (click to toggle)
libmems 1.6.0%2B4725-9
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye
  • size: 2,120 kB
  • sloc: cpp: 21,579; ansic: 4,312; xml: 115; makefile: 103; sh: 26
file content (96 lines) | stat: -rw-r--r-- 2,526 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
/*******************************************************************************
 * $Id: MemorySML.cpp,v 1.8 2004/03/01 02:40:08 darling Exp $
 * This file is copyright 2002-2007 Aaron Darling and authors listed in the AUTHORS file.
 * Please see the file called COPYING for licensing, copying, and modification
 * Please see the file called COPYING for licensing details.
 * **************
 ******************************************************************************/

#ifdef HAVE_CONFIG_H
#include "config.h"
#endif

#include "libMems/MemorySML.h"
#include <algorithm>

using namespace std;
using namespace genome;
namespace mems {

MemorySML::MemorySML(const uint8* table, const uint32 alpha_bits ){
	header.alphabet_bits = alpha_bits;
	memcpy(header.translation_table, table, UINT8_MAX);
	header.version = 0;
}

MemorySML::MemorySML(const MemorySML& msa){
	*this = msa;
}

MemorySML& MemorySML::operator=(const MemorySML& msa ) {
 	SortedMerList::operator=( msa );
 	positions = msa.positions;
 	return *this;
}

MemorySML* MemorySML::Clone() const{
	return new MemorySML(*this);
}

void MemorySML::Clear(){
	SortedMerList::Clear();
	positions.clear();
}

void MemorySML::Create(const gnSequence& seq, const uint64 seed ){
	SortedMerList::Create(seq, seed);

	vector<bmer> sml_array;
	boolean is_spaced_seed = header.seed_length != header.seed_weight;
	if( is_spaced_seed )
		FillDnaSeedSML( seq, sml_array );
	else
		FillSML( seq, sml_array );
	sort( sml_array.begin(), sml_array.end(), &bmer_lessthan );
	positions.reserve( sml_array.size() );
	for(gnSeqI merI = 0; merI < sml_array.size(); merI++ ){
		positions.push_back( sml_array[merI].position );
	}

}

boolean MemorySML::Read(vector<bmer>& readVector, gnSeqI size, gnSeqI offset )
{
	readVector.clear();
	if( offset > positions.size() )
		return false;

	gnSeqI last_mer = offset + size;
	boolean success = true;
	if( last_mer > positions.size() ){
		last_mer = positions.size();
		success = false;
	}

	bmer cur_mer;
	for(gnSeqI merI = offset; merI < last_mer; merI++){
		cur_mer.position = positions[merI];
		cur_mer.mer = GetSeedMer( cur_mer.position );
		readVector.push_back( cur_mer );
	}
	return success;
}

void MemorySML::Merge(SortedMerList& sa, SortedMerList& sa2){

}

bmer MemorySML::operator[](gnSeqI index)
{
	bmer cur_mer;
	cur_mer.position = positions[index];
	cur_mer.mer = GetSeedMer( cur_mer.position );
	return cur_mer;
}

} // namespace mems