File: ExtensionData.h

package info (click to toggle)
ray 2.3.1-9
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 6,008 kB
  • sloc: cpp: 49,973; sh: 339; makefile: 281; python: 168
file content (153 lines) | stat: -rw-r--r-- 4,879 bytes parent folder | download | duplicates (5)
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
/*
    Ray -- Parallel genome assemblies for parallel DNA sequencing
    Copyright (C) 2010, 2011, 2012, 2013 Sébastien Boisvert

	http://DeNovoAssembler.SourceForge.Net/

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, version 3 of the License.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You have received a copy of the GNU General Public License
    along with this program (gpl-3.0.txt).  
	see <http://www.gnu.org/licenses/>

*/

#ifndef _ExtensionData
#define _ExtensionData

#include "ExtensionElement.h"

#include <code/SequencesLoader/ReadHandle.h>
#include <code/SequencesIndexer/PairedRead.h>
#include <code/SequencesIndexer/ReadAnnotation.h>
#include <code/SequencesLoader/Read.h>
#include <code/Mock/Parameters.h>
#include <code/Mock/common_functions.h>
#include <code/SeedingData/GraphPath.h>

#include <RayPlatform/structures/SplayTree.h>
#include <RayPlatform/profiling/Profiler.h>

#include <map>
#include <set>
#include <vector>
using namespace std;

/*
 * Stores the information for a seed extension.
 *
 * This class is really just a helper for SeedExtender.
 * There are so many things to store to implement the heuristics
 * correctly.
 *
 * \author Sébastien Boisvert
 */
class ExtensionData{
	SplayTree<ReadHandle,ExtensionElement>*m_database;
	int m_numberOfBins;
	Parameters*m_parameters;
	MyAllocator m_allocator;

	void createStructures();
	void destroyStructures(Profiler*m_profiler);

public:

	int m_readType;
	vector<CoverageDepth> m_EXTENSION_coverages;
	GraphPath m_EXTENSION_extension;
	vector<CoverageDepth> m_extensionCoverageValues;
	vector<int> m_repeatedValues;

	// EXTENSION MODE
	vector<Kmer> m_enumerateChoices_outgoingEdges;
	bool m_doChoice_tips_Detected;
	PairedRead m_EXTENSION_pairedRead;
	bool m_EXTENSION_pairedSequenceRequested;
	bool m_EXTENSION_hasPairedReadAnswer;
	bool m_EXTENSION_pairedSequenceReceived;
	int m_EXTENSION_edgeIterator;
	bool m_EXTENSION_hasPairedReadRequested;
	bool m_EXTENSION_hasPairedReadReceived;
	vector<PathHandle> m_EXTENSION_identifiers;

	/**
	*	bidirectional flow algorithm using Ray's many heuristics
	*/
	/** the number of vertices flowed previously */
	int m_previouslyFlowedVertices;

	/** the current flow number */
	int m_flowNumber;

	/** TODO could be a pointer to the original thing... */
	GraphPath m_EXTENSION_currentSeed;

	int m_EXTENSION_numberOfRanksDone;
	vector<GraphPath> m_EXTENSION_contigs;
	bool m_EXTENSION_checkedIfCurrentVertexIsAssembled;
	bool m_EXTENSION_VertexMarkAssembled_requested;
	bool m_EXTENSION_reverseComplement_requested;
	bool m_EXTENSION_vertexIsAssembledResult;
	bool m_EXTENSION_readLength_requested;
	bool m_EXTENSION_readLength_received;
	bool m_EXTENSION_readLength_done;
	bool m_EXTENSION_read_vertex_received;
	bool m_EXTENSION_read_vertex_requested;
	Kmer m_EXTENSION_receivedReadVertex;
	bool m_EXTENSION_currentRankIsDone;
	bool m_EXTENSION_currentRankIsSet;
	bool m_EXTENSION_currentRankIsStarted;
	int m_EXTENSION_rank;
	bool m_EXTENSION_initiated;
	int m_EXTENSION_currentSeedIndex;
	bool m_EXTENSION_VertexAssembled_received;
	int m_EXTENSION_currentPosition;
	bool m_EXTENSION_VertexMarkAssembled_received;
	bool m_EXTENSION_markedCurrentVertexAsAssembled;
	bool m_EXTENSION_enumerateChoices;
	bool m_EXTENSION_choose;
	bool m_EXTENSION_directVertexDone;
	bool m_EXTENSION_VertexAssembled_requested;
	bool m_EXTENSION_receivedAssembled;
	bool m_EXTENSION_reverseComplement_received;
	vector<ReadAnnotation> m_EXTENSION_receivedReads;
	bool m_EXTENSION_reads_requested;
	bool m_EXTENSION_reads_received;
	vector<ReadHandle> m_sequencesToFree;
	int m_EXTENSION_receivedLength;
	bool m_EXTENSION_reverseVertexDone;
	// reads used so far
	// reads to check (the ones "in range")
	bool m_EXTENSION_singleEndResolution;
	set<ReadHandle>::iterator m_EXTENSION_readIterator;
	map<Kmer,vector<int> > m_EXTENSION_readPositionsForVertices;
	map<Kmer,vector<int> > m_EXTENSION_pairedReadPositionsForVertices;
	map<Kmer,vector<int> > m_EXTENSION_pairedLibrariesForVertices;
	map<Kmer,vector<ReadHandle> > m_EXTENSION_pairedReadsForVertices;
	CoverageDepth m_currentCoverage;

	set<ReadHandle> m_EXTENSION_readsInRange;
	set<ReadHandle> m_pairedReadsWithoutMate;
	map<int,vector<ReadHandle> > m_expirations;

	void lazyDestructor();

	void resetStructures(Profiler*m_profiler);
	ExtensionElement*getUsedRead(ReadHandle a);
	ExtensionElement*addUsedRead(ReadHandle a);
	void removeSequence(ReadHandle a);
	void constructor(Parameters*parameters);

	void destructor();
	MyAllocator*getAllocator();
};

#endif