107
107
// ===============================================
108
108
// Convenience method for reporting merged blocks
109
109
// ================================================
110
void BedMerge::Report(string chrom, int start, int end,
111
const vector<string> &names, const vector<string> &scores, int mergeCount)
110
void BedMerge::Report(string chrom, int start,
111
int end, const vector<string> &names,
112
const vector<string> &scores, int mergeCount)
113
114
// ARQ: removed to force all output to be zero-based, BED format, reagrdless of input type
114
115
//if (_bed->isZeroBased == false) {start++;}
116
117
printf("%s\t%d\t%d", chrom.c_str(), start, end);
117
118
// just the merged intervals
118
if (_numEntries == false && _reportNames == false && _reportScores == false) {
119
if (_numEntries == false && _reportNames == false &&
120
_reportScores == false) {
121
123
// merged intervals and counts
122
else if (_numEntries == true && _reportNames == false && _reportScores == false) {
124
else if (_numEntries == true && _reportNames == false &&
125
_reportScores == false) {
123
126
printf("\t%d\n", mergeCount);
125
128
// merged intervals, counts, and scores
126
else if (_numEntries == true && _reportNames == false && _reportScores == true) {
129
else if (_numEntries == true && _reportNames == false &&
130
_reportScores == true) {
127
131
printf("\t%d", mergeCount);
128
132
ReportMergedScores(scores);
131
135
// merged intervals, counts, and names
132
else if (_numEntries == true && _reportNames == true && _reportScores == false) {
136
else if (_numEntries == true && _reportNames == true &&
137
_reportScores == false) {
133
138
ReportMergedNames(names);
134
139
printf("\t%d\n", mergeCount);
136
141
// merged intervals, counts, names, and scores
137
else if (_numEntries == true && _reportNames == true && _reportScores == true) {
142
else if (_numEntries == true && _reportNames == true &&
143
_reportScores == true) {
138
144
ReportMergedNames(names);
139
145
ReportMergedScores(scores);
140
146
printf("\t%d\n", mergeCount);
142
148
// merged intervals and names
143
else if (_numEntries == false && _reportNames == true && _reportScores == false) {
149
else if (_numEntries == false && _reportNames == true &&
150
_reportScores == false) {
144
151
ReportMergedNames(names);
147
154
// merged intervals and scores
148
else if (_numEntries == false && _reportNames == false && _reportScores == true) {
155
else if (_numEntries == false && _reportNames == false &&
156
_reportScores == true) {
149
157
ReportMergedScores(scores);
152
160
// merged intervals, names, and scores
153
else if (_numEntries == false && _reportNames == true && _reportScores == true) {
161
else if (_numEntries == false && _reportNames == true &&
162
_reportScores == true) {
154
163
ReportMergedNames(names);
155
164
ReportMergedScores(scores);
161
170
// =========================================================
162
171
// Convenience method for reporting merged blocks by strand
163
172
// =========================================================
164
void BedMerge::ReportStranded(string chrom, int start, int end,
165
const vector<string> &names, const vector<string> &scores,
166
int mergeCount, string strand)
173
void BedMerge::ReportStranded(string chrom, int start,
174
int end, const vector<string> &names,
175
const vector<string> &scores, int mergeCount,
168
178
// ARQ: removed to force all output to be zero-based, BED format, reagrdless of input type
169
179
//if (_bed->isZeroBased == false) {start++;}
171
181
printf("%s\t%d\t%d", chrom.c_str(), start, end);
172
182
// just the merged intervals
173
if (_numEntries == false && _reportNames == false && _reportScores == false) {
183
if (_numEntries == false && _reportNames == false &&
184
_reportScores == false) {
174
185
printf("\t%s\n", strand.c_str());
176
187
// merged intervals and counts
177
else if (_numEntries == true && _reportNames == false && _reportScores == false) {
188
else if (_numEntries == true && _reportNames == false &&
189
_reportScores == false) {
178
190
printf("\t%d\t%s\n", mergeCount, strand.c_str());
180
192
// merged intervals, counts, and scores
181
else if (_numEntries == true && _reportNames == false && _reportScores == true) {
193
else if (_numEntries == true && _reportNames == false &&
194
_reportScores == true) {
182
195
printf("\t%d", mergeCount);
183
196
ReportMergedScores(scores);
184
197
printf("\t%s\n", strand.c_str());
186
199
// merged intervals, counts, and names
187
else if (_numEntries == true && _reportNames == true && _reportScores == false) {
200
else if (_numEntries == true && _reportNames == true &&
201
_reportScores == false) {
188
202
ReportMergedNames(names);
189
203
printf("\t%d\t%s", mergeCount, strand.c_str());
192
206
// merged intervals, counts, names, and scores
193
else if (_numEntries == true && _reportNames == true && _reportScores == true) {
207
else if (_numEntries == true && _reportNames == true &&
208
_reportScores == true) {
194
209
ReportMergedNames(names);
195
210
ReportMergedScores(scores);
196
211
printf("\t%s\t%d", strand.c_str(), mergeCount);
199
214
// merged intervals and names
200
else if (_numEntries == false && _reportNames == true && _reportScores == false) {
215
else if (_numEntries == false && _reportNames == true &&
216
_reportScores == false) {
201
217
ReportMergedNames(names);
202
218
printf("\t%s\n", strand.c_str());
204
220
// merged intervals and scores
205
else if (_numEntries == false && _reportNames == false && _reportScores == true) {
221
else if (_numEntries == false && _reportNames == false &&
222
_reportScores == true) {
206
223
ReportMergedScores(scores);
207
224
printf("\t%s\n", strand.c_str());
209
226
// merged intervals, names, and scores
210
else if (_numEntries == false && _reportNames == true && _reportScores == true) {
227
else if (_numEntries == false && _reportNames == true &&
228
_reportScores == true) {
211
229
ReportMergedNames(names);
212
230
ReportMergedScores(scores);
213
231
printf("\t%s\n", strand.c_str());
302
322
// is not on the current strand.
303
323
if (bedItr->strand != strands[s]) { continue; }
304
324
else { numOnStrand++; }
305
if ( (((int) bedItr->start - end) > _maxDistance) || (end < 0)) {
325
if ( (((int) bedItr->start - end) > _maxDistance) ||
306
328
if (start >= 0) {
307
ReportStranded(chrom, start, end, names, scores, mergeCount, strands[s]);
329
ReportStranded(chrom, start, end, names,
330
scores, mergeCount, strands[s]);