/** ** Copyright (c) 2007-2010 Illumina, Inc. ** ** This software is covered by the "Illumina Genome Analyzer Software ** License Agreement" and the "Illumina Source Code License Agreement", ** and certain third party copyright/licenses, and any user of this ** source file is bound by the terms therein (see accompanying files ** Illumina_Genome_Analyzer_Software_License_Agreement.pdf and ** Illumina_Source_Code_License_Agreement.pdf and third party ** copyright/license notices). ** ** This file is part of the Consensus Assessment of Sequence And VAriation ** (CASAVA) software package. ** **/ #include #include "smallRna/TrimmerResult.h" char CTrimmerResult::ms_PrefixString[MAX_READ_SIZE]; void CTrimmerResult::Print(char * readString, int threshold, char * preString) { if (m_Status != OKAY) { printf(">ERROR STATUS=%d\n", m_Status); if (preString) printf("%s\t", preString); printf("%s\n", readString); } else { memcpy(ms_PrefixString, readString, m_SuffixPosition); ms_PrefixString[m_SuffixPosition] = 0; printf(">%s-%s:%d:%d:%s\n", ms_PrefixString, readString + m_SuffixPosition, m_Count, m_Score, m_Matcher); if (preString) printf("%s\t", preString); if (m_Score > threshold) printf("%s\n", ms_PrefixString); else printf("%s\n", readString); } } void CTrimmerResult::PrintFastq(char * readString, int threshold, char * name1, char * name2, char * qualityString, int nPadLen, int nExtraBases, TrimmerReport & report ) { if (m_Status != OKAY) { printf(">ERROR STATUS=%d\n", m_Status); printf("%s\t", name1); printf("%s\n", readString); } else { // Three possibilities: // 0.) nPadLen == -1 means do not pad with Ns, just trim // 1.) m_suffixPosition <= nPadLen // then, add (nPadLen - m_suffixPosition) N's to readString // 2.) m_suffixPosition > nPadLen // then, m_suffixPosition == nPadLen int readLength = strlen( readString ); int cutPosition; if ( m_Score > threshold ) { cutPosition = m_SuffixPosition; if ( cutPosition >= 1 ) { cutPosition -= nExtraBases; } } else { cutPosition = readLength; } if (cutPosition > nPadLen && nPadLen != -1 ) { cutPosition = nPadLen; } if (report.Flag()) { report.Add( cutPosition, readLength ); } memcpy(ms_PrefixString, readString, cutPosition); char prefixQualityString[MAX_READ_SIZE]; memcpy(prefixQualityString, qualityString, cutPosition); ms_PrefixString[cutPosition] = 0; prefixQualityString[cutPosition] = 0; // Pad out with N's if required if ( nPadLen != -1 ) { // -1 value for nPadLen means do not pad, just trim. for (int ii = cutPosition; ii < nPadLen; ii++) { ms_PrefixString[ii] = 'N'; prefixQualityString[ii] = 'h'; } ms_PrefixString[nPadLen] = 0; prefixQualityString[nPadLen] = 0; } // Print Fastq record printf("%s\n", name1); printf("%s\n", ms_PrefixString); printf("%s\n", name2); printf("%s\n", prefixQualityString); } } void CTrimmerResult::Print(FILE * & fpWrite, char * readString, int threshold, char * preString) { if (m_Status != OKAY) { fprintf(fpWrite, ">ERROR STATUS=%d\n", m_Status); if (preString) fprintf(fpWrite, "%s\t", preString); fprintf(fpWrite, "%s\n", readString); } else { memcpy(ms_PrefixString, readString, m_SuffixPosition); ms_PrefixString[m_SuffixPosition] = 0; fprintf(fpWrite, ">%s-%s:%d:%d:%s\n", ms_PrefixString, readString + m_SuffixPosition, m_Count, m_Score, m_Matcher); if (preString) fprintf(fpWrite, "%s\t", preString); if (m_Score > threshold) fprintf(fpWrite, "%s\n", ms_PrefixString); else fprintf(fpWrite, "%s\n", readString); } }