bool ContextBase::determineOutputType() { if (_outputTypeDetermined) { return true; } //test whether output should be BED or BAM. //If the user explicitly requested BED, then it's BED. if (getExplicitBedOutput()) { setOutputFileType(FileRecordTypeChecker::SINGLE_LINE_DELIM_TEXT_FILE_TYPE); _outputTypeDetermined = true; return true; } //Otherwise, if the input is BAM, then the output is BAM if (getFile(0)->getFileType() == FileRecordTypeChecker::BAM_FILE_TYPE) { setOutputFileType(FileRecordTypeChecker::BAM_FILE_TYPE); return true; } //Okay, it's bed. setOutputFileType(FileRecordTypeChecker::SINGLE_LINE_DELIM_TEXT_FILE_TYPE); _outputTypeDetermined = true; return true; }
bool ContextBase::determineOutputType() { if (_outputTypeDetermined) { return true; } //test whether output should be BED or BAM. //If the user explicitly requested BED, then it's BED. if (getExplicitBedOutput()) { setOutputFileType(FileRecordTypeChecker::SINGLE_LINE_DELIM_TEXT_FILE_TYPE); _outputTypeDetermined = true; return true; } //Otherwise, if there are any BAM files in the input, //then the output should be BAM. for (_i = 0; _i < (int)_files.size(); _i++) { if (_files[_i]->getFileType() == FileRecordTypeChecker::BAM_FILE_TYPE) { setOutputFileType(FileRecordTypeChecker::BAM_FILE_TYPE); _bamHeaderAndRefIdx = _i; _outputTypeDetermined = true; return true; } } //Okay, it's bed. setOutputFileType(FileRecordTypeChecker::SINGLE_LINE_DELIM_TEXT_FILE_TYPE); _outputTypeDetermined = true; return true; }
bool ContextIntersect::determineOutputType() { if (_outputTypeDetermined) { return true; } //determine the maximum number of database fields. for (int i=0; i < getNumDatabaseFiles(); i++) { int numFields = getDatabaseFile(i)->getNumFields(); if ( numFields > _maxNumDatabaseFields) { _maxNumDatabaseFields = numFields; } } //If the query is BAM, and bed output wasn't specified, then the output is BAM. if (getQueryFileType() == FileRecordTypeChecker::BAM_FILE_TYPE && !getExplicitBedOutput()) { setOutputFileType(FileRecordTypeChecker::BAM_FILE_TYPE); _outputTypeDetermined = true; return true; } return ContextBase::determineOutputType(); }
bool ContextIntersect::isValidState() { if (!ContextBase::isValidState()) { return false; } if (_queryFileIdx == -1 || _dbFileIdxs.size() == -0) { _errorMsg = "\n***** ERROR: query and database files not specified. *****"; return false; } if (getAnyHit() && getNoHit()) { _errorMsg = "\n***** ERROR: request either -u for anyHit OR -v for noHit, not both. *****"; return false; } if (getWriteCount()) { if (getAnyHit()) { _errorMsg = "\n***** ERROR: request either -c for writeCount OR -u for anyHit, not both. *****"; return false; } else if (getWriteB()) { _errorMsg = "\n***** ERROR: request either -c for writeCount OR -wb for writeB, not both. *****"; return false; } else if (getQueryFileType() == FileRecordTypeChecker::BAM_FILE_TYPE && !getExplicitBedOutput()) { _errorMsg = "\n***** ERROR: writeCount option is not valid with BAM query input, unless bed output is specified with -bed option. *****"; return false; } } if (_haveFraction && (_overlapFraction <= 0.0 || _overlapFraction > 1.0)) { _errorMsg = "\n***** ERROR: _overlapFraction must be in the range (0.0, 1.0]. *****"; return false; } if (getUseDBnameTags() && _dbNameTags.size() != _dbFileIdxs.size()) { _errorMsg = "\n***** ERROR: Number of database name tags given does not match number of databases. *****"; return false; } if (getWriteOverlap()) { if (getWriteA()) { _errorMsg = "\n***** ERROR: request either -wa for writeA OR -wo for writeOverlap, not both. *****"; return false; } else if (getWriteB()) { _errorMsg = "\n***** ERROR: request either -wb for writeB OR -wo for writeOverlap, not both. *****"; return false; } else if (getWriteCount()) { _errorMsg = "\n***** ERROR: request either -c for writeCount OR -wo for writeOverlap, not both. *****"; return false; } else if (getAnyHit()) { _errorMsg = "\n***** ERROR: request either -u for anyHit OR -wo for writeOverlap, not both. *****"; return false; } else if (getQueryFileType() == FileRecordTypeChecker::BAM_FILE_TYPE && !getExplicitBedOutput()) { _errorMsg = "\n***** ERROR: writeAllOverlap option is not valid with BAM query input, unless bed output is specified with -bed option. *****"; return false; } } if (getWriteB() || getLeftJoin()) { if (getQueryFileType() == FileRecordTypeChecker::BAM_FILE_TYPE && !getExplicitBedOutput()) { cerr << endl << "*****" << endl << "*****WARNING: -wb and -loj are ignored with bam input, unless bed output is specified with -bed option." << endl << "*****" << endl; } } if (getSameStrand() && getDiffStrand()) { _errorMsg = "\n***** ERROR: request -s for sameStrand, or -S for diffStrand, not both. *****"; return false; } if (getQueryFileType() == FileRecordTypeChecker::BAM_FILE_TYPE && getPrintHeader()) { cerr << endl << "*****" << endl << "*****WARNING: -header option is not valid for BAM input." << endl << "*****" << endl; setPrintHeader(false); } if (getAnyHit() || getNoHit() || getWriteCount()) { setPrintable(false); } if (_files.size() < 2 ) { return false; } return true; }