RGDirectory :: RGDirectory (const RGString& fullName) : direct (NULL) {

    DWORD dwAttr;

#ifdef FILENAME_MAX

		if (fullName.Length () > FILENAME_MAX) {

			cout << "Full path name too long:  name = " << fullName.GetData () << endl;
			return;
		}

#endif

    // Must be a valid name 
	if( (fullName.Length () == 0) ||
		(dwAttr = GetFileAttributes(fullName.GetData ())) == INVALID_FILE_ATTRIBUTES) {

        errno = ENOENT;
    }

    // Must be a directory 

    else if (!(dwAttr & FILE_ATTRIBUTE_DIRECTORY)) {

        errno = ENOTDIR;
    }

    else {

        direct = new DIR;   //(DIR*)malloc(sizeof(DIR));

        if (direct == NULL) {

            errno = ENOMEM;
        }

        else {

			direct->hFind = findfile_directory (fullName.GetData (), &direct->find_data);

            if (direct->hFind == INVALID_HANDLE_VALUE) {

                //free(directory);
				delete direct;
                direct = NULL;
            }

            else {

                // Save the directory, in case of rewind.
                lstrcpyA(direct->directory, fullName.GetData ());
                lstrcpyA(direct->dirent.d_name, direct->find_data.cFileName);
            }
        }
    }
}
示例#2
0
LocusData :: LocusData (const RGString& locusName, const RGString& alleleString) : mLocusName (locusName) {

	RGStringArray alleles;
	RGStringArray delimiters;

	if (alleleString.Length () == 0)
		return;

	RGString alleleStr = alleleString;
	RGStringTokenizer alleleJoin (alleleStr);
	alleleJoin.AddDelimiter (",");
	alleleJoin.Split (alleles, delimiters);
	int n = alleles.Length ();

	if (n == 0)
		return;

	int i;
	RGString* newAllele;
	cout << "Locus Name = " << (char*)mLocusName.GetData () << " with allele(s) ";

	for (i=0; i<n; i++) {

		newAllele = new RGString (alleles [i]);
		cout << (char*)newAllele->GetData () << "   ";
		mAlleleList.append (newAllele);
	}

	cout << endl;
}
示例#3
0
STRAlleleName :: STRAlleleName (const RGString& name) {

	size_t position;
	RGString repeats;
	RGString variant;
	size_t len;

	if (name.FindNextSubstring (0, ".", position)) {

		repeats = name.ExtractSubstring (0, position - 1);
		mRepeats = repeats.ConvertToInteger ();
		len = name.Length () - 1;

		if (position <= len) {

			variant = name.ExtractSubstring (position + 1, len);
			mMicroVariant = variant.ConvertToInteger ();
		}

		else
			mMicroVariant = 0;
	}

	else {

		mRepeats = name.ConvertToInteger ();
		mMicroVariant = 0;
	}
}
Boolean RGDirectory :: MakeDirectory (const RGString& fullName) {

	if (fullName.Length () == 0)
		return FALSE;

    // Must not already exist 
	
	if (FileOrDirectoryExists (fullName)) {

		cout << "File or directory " << fullName << " already exists" << endl;
		return FALSE;
	}

	return CreateDirectory (fullName, NULL);
}
bool DirectoryManager :: TestForExtension (const RGString& fileName) {

	RGString Extension;
	int length = fileName.Length ();
//	size_t position;
//	RGString localFileName (fileName);
//	localFileName.ToLower ();

	if (length > 4)
		Extension = fileName.ExtractSubstring (length-4, length-1);
	
	if ((length > 4) && (Extension == DirectoryManager::DataFileTypeWithDot))
		return true;

	return false;
}
Boolean DirectoryManager :: TestForPositiveControl (const RGString& fileName) {

	int length = (int)fileName.Length ();
	RGString Extension;
	Boolean FoundPosControl;
	Boolean FoundLadder;

	if (length > 4)
		Extension = fileName.ExtractSubstring (length-4, length-1);

	FoundPosControl = mPServer->PosControlDoesTargetStringContainASynonymCaseIndep (fileName);
	FoundLadder = mPServer->LadderDoesTargetStringContainASynonymCaseIndep (fileName);
	
	if ((length > 4) && (Extension == DirectoryManager::DataFileTypeWithDot) && FoundPosControl && !FoundLadder)		//old = if ((length > 4) && (Extension == ".fsa") && FoundPosControl && !FoundLadder)
		return TRUE;

	return FALSE;
}
Boolean DirectoryManager :: TestForNonLadder (const RGString& fileName) {

	int length = (int)fileName.Length ();
	RGString Extension;
	Boolean FoundControl;
//	size_t position;
//	RGString localFileName (fileName);
//	localFileName.ToLower ();

	if (length > 4)
		Extension = fileName.ExtractSubstring (length-4, length-1);

//	FoundControl = localFileName.FindSubstring ("ladder", position);
	FoundControl = mPServer->LadderDoesTargetStringContainASynonymCaseIndep (fileName);
	
	if ((length > 4) && (Extension == DirectoryManager::DataFileTypeWithDot) && !FoundControl)		//old = if ((length > 4) && (Extension == ".fsa") && !FoundControl)
		return TRUE;

	return FALSE;
}
示例#8
0
void DataSignal :: WriteSmartTableArtifactInfoToXML (RGTextOutput& text, RGTextOutput& tempText, const RGString& indent, const RGString& bracketTag, const RGString& locationTag) {

	int peak;
	Endl endLine;
	RGString suffix;
	RGString label;
	SmartMessageReporter* notice;
	int i;
	RGString virtualAllele;
	SmartMessageReporter* nextNotice;
	text.SetOutputLevel (1);
	int msgNum;

	smAcceptedOLLeft acceptedOLLeft;
	smAcceptedOLRight acceptedOLRight;

	int reportedMessageLevel = GetHighestMessageLevelWithRestrictionSM ();
	//bool hasThreeLoci;
	//bool needLocus0;

	if ((!DontLook ()) && (NumberOfSmartNoticeObjects () != 0)) {
	
		bool firstNotice = true;
		peak = (int) floor (Peak () + 0.5);
		virtualAllele = GetVirtualAlleleName ();

		text << indent << "<" << bracketTag << ">" << endLine;  // Should be <Artifact>
		text << indent << "\t<Id>" << GetSignalID () << "</Id>" << endLine;
		text << indent << "\t<Level>" << reportedMessageLevel << "</Level>" << endLine;
		text << indent << "\t<RFU>" << peak << "</RFU>" << endLine;
		text << indent << "\t<" << locationTag << ">" << GetApproximateBioID () << "</" << locationTag << ">" << endLine;
		text << indent << "\t<PeakArea>" << TheoreticalArea () << "</PeakArea>" << endLine;
		text << indent << "\t<Time>" << GetMean () << "</Time>" << endLine;
		text << indent << "\t<Fit>" << GetCurveFit () << "</Fit>" << endLine;

		if (!mAllowPeakEdit)
			text << indent << "\t<AllowPeakEdit>false</AllowPeakEdit>" << endLine;
		
		RGDListIterator it (*mSmartMessageReporters);
		i = 0;

		while (notice = (SmartMessageReporter*) it ()) {

			if (!notice->GetDisplayOsirisInfo ())
				continue;

			if (firstNotice) {

				label = indent + "\t<Label>";
				firstNotice = false;
			}

			if (i > 0)
				label << "&#10;";

			label += notice->GetMessage ();
			label += notice->GetMessageData ();
			i++;
		}

		if (i > 0) {

			label << "</Label>";
			text << label << endLine;
		}

		// Now add list of notices...

		it.Reset ();

		while (nextNotice = (SmartMessageReporter*) it ()) {

			msgNum = Notice::GetNextMessageNumber ();
			nextNotice->SetMessageCount (msgNum);
			text << indent << "\t<MessageNumber>" << msgNum << "</MessageNumber>" << endLine;
			tempText << "\t\t<Message>\n";
			tempText << "\t\t\t<MessageNumber>" << msgNum << "</MessageNumber>\n";
			tempText << "\t\t\t<Text>" << nextNotice->GetMessage () << nextNotice->GetMessageData () << "</Text>\n";

			if (nextNotice->HasViableExportInfo ()) {

				if (nextNotice->IsEnabled ())
					tempText << "\t\t\t<Hidden>false</Hidden>\n";

				else
					tempText << "\t\t\t<Hidden>true</Hidden>\n";

				if (!nextNotice->IsCritical ())
					tempText << "\t\t\t<Critical>false</Critical>\n";

				if (nextNotice->IsEnabled ())
					tempText << "\t\t\t<Enabled>true</Enabled>\n";

				else
					tempText << "\t\t\t<Enabled>false</Enabled>\n";

				if (!nextNotice->IsEditable ())
					tempText << "\t\t\t<Editable>false</Editable>\n";

				if (nextNotice->GetDisplayExportInfo ())
					tempText << "\t\t\t<DisplayExportInfo>true</DisplayExportInfo>\n";

				else
					tempText << "\t\t\t<DisplayExportInfo>false</DisplayExportInfo>\n";

				if (!nextNotice->GetDisplayOsirisInfo ())
					tempText << "\t\t\t<DisplayOsirisInfo>false</DisplayOsirisInfo>\n";

				tempText << "\t\t\t<MsgName>" << nextNotice->GetMessageName () << "</MsgName>\n";

				//tempText << "\t\t\t<ExportProtocolList>";
				//tempText << "\t\t\t" << nextNotice->GetExportProtocolInformation ();
				//tempText << "\t\t\t</ExportProtocolList>\n";
			}

			tempText << "\t\t</Message>\n";
		}

		// Now add list of alleles

		//hasThreeLoci = (mLocus != NULL) && (mLeftLocus != NULL) && (mRightLocus != NULL);

		//if (mLocus != NULL) {

		//	if ((mLeftLocus == NULL) && (mRightLocus == NULL))
		//		needLocus0 = true;

		//	else
		//		needLocus0 = false;
		//}

		//else
		//	needLocus0 = false;

		//needLocus0 = (!hasThreeLoci) && ((mLocus != mLeftLocus) || (mLocus != mRightLocus));

		if (mLocus != NULL) {

			//testing
			RGString locusName = mLocus->GetLocusName ();
			suffix = GetAlleleName (0);

			if ((suffix.Length () > 0) || (virtualAllele.Length () > 0)) {

				text << indent << "\t<Allele>" << endLine;

				if (suffix.Length () > 0)
					text << indent << "\t\t<Name>" << suffix << "</Name>" << endLine;

				else
					text << indent << "\t\t<Name>" << virtualAllele << "</Name>" << endLine;

				if (mOffGrid)
					suffix = "true";

				else if (mAcceptedOffGrid)
					suffix = "accepted";

				else
					suffix = "false";

				text << indent << "\t\t<OffLadder>" << suffix << "</OffLadder>" << endLine;
				text << indent << "\t\t<BPS>" << GetBioID (0) << "</BPS>" << endLine;
				text << indent << "\t\t<Locus>" << mLocus->GetLocusName () << "</Locus>" << endLine;
				text << indent << "\t\t<Location>0</Location>" << endLine;
				text << indent << "\t</Allele>" << endLine;
			}
		}

		if ((mLeftLocus != NULL) && (mLeftLocus != mLocus)) {

			if (mAlleleNameLeft.Length () > 0) {

				text << indent << "\t<Allele>" << endLine;
				text << indent << "\t\t<Name>" << mAlleleNameLeft << "</Name>" << endLine;

				if (mIsOffGridLeft)
					suffix = "true";

				else if (GetMessageValue (acceptedOLLeft))
					suffix = "accepted";

				else
					suffix = "false";

				text << indent << "\t\t<OffLadder>" << suffix << "</OffLadder>" << endLine;
				text << indent << "\t\t<BPS>" << GetBioID (-1) << "</BPS>" << endLine;
				text << indent << "\t\t<Locus>" << mLeftLocus->GetLocusName () << "</Locus>" << endLine;
				text << indent << "\t\t<Location>-1</Location>" << endLine;
				text << indent << "\t</Allele>" << endLine;
			}
		}

		if ((mRightLocus != NULL) && (mRightLocus != mLocus)) {

			if (mAlleleNameRight.Length () > 0) {

				text << indent << "\t<Allele>" << endLine;
				text << indent << "\t\t<Name>" << mAlleleNameRight << "</Name>" << endLine;

				if (mIsOffGridRight)
					suffix = "true";

				else if (GetMessageValue (acceptedOLRight))
					suffix = "accepted";

				else
					suffix = "false";

				text << indent << "\t\t<OffLadder>" << suffix << "</OffLadder>" << endLine;
				text << indent << "\t\t<BPS>" << GetBioID (1) << "</BPS>" << endLine;
				text << indent << "\t\t<Locus>" << mRightLocus->GetLocusName () << "</Locus>" << endLine;
				text << indent << "\t\t<Location>1</Location>" << endLine;
				text << indent << "\t</Allele>" << endLine;
			}
		}

		text << indent << "</" + bracketTag << ">" << endLine;
	}

	text.ResetOutputLevel ();
}
示例#9
0
void DataSignal :: WriteSmartArtifactInfoToXML (RGTextOutput& text, const RGString& indent, const RGString& bracketTag, const RGString& locationTag) {

	int peak;
	Endl endLine;
	RGString suffix;
	RGString label;
	SmartMessageReporter* notice;
	int i;
	RGString virtualAllele;
	int reportedMessageLevel;

	reportedMessageLevel = GetHighestMessageLevelWithRestrictionSM ();
	bool thisIsFirstNotice = true;

	if ((!DontLook ()) && (NumberOfSmartNoticeObjects () != 0)) {
	
		peak = (int) floor (Peak () + 0.5);

		if (mOffGrid)
			suffix = " OL";

		virtualAllele = GetVirtualAlleleName ();

		RGDListIterator it (*mSmartMessageReporters);
		i = 0;

		while (notice = (SmartMessageReporter*) it ()) {

			if (!notice->GetDisplayOsirisInfo ())
				continue;

			if (thisIsFirstNotice) {

				text << indent << "<" << bracketTag << ">" << endLine;
				text << indent << "\t<level>" << reportedMessageLevel << "</level>" << endLine;
				text << indent << "\t<mean>" << GetMean () << "</mean>" << endLine;
				text << indent << "\t<height>" << peak << "</height>" << endLine;
//				text << indent << "\t<" << locationTag << ">" << (int) floor (GetApproximateBioID () + 0.5) << "</" << locationTag << ">" << endLine;
				text << indent << "\t<" << locationTag << ">" << GetApproximateBioID () << "</" << locationTag << ">" << endLine;
				text << indent << "\t<PeakArea>" << TheoreticalArea () << "</PeakArea>" << endLine;

				if (virtualAllele.Length () > 0)
					text << indent << "\t<equivAllele>" << virtualAllele << suffix << "</equivAllele>" << endLine;

				text << indent << "\t<width>" << 4.0 * GetStandardDeviation () << "</width>" << endLine;
				text << indent << "\t<fit>" << GetCurveFit () << "</fit>" << endLine;
				label = indent + "\t<label>";
				thisIsFirstNotice = false;
			}

			if (i > 0)
				label << "&#10;";

			label += notice->GetMessage ();
			label += notice->GetMessageData ();
			i++;
		}

		RGString temp = GetVirtualAlleleName () + suffix;

		if (temp.Length () > 0) {

			if (i > 0)
				label << "&#10;";

			label += "Allele " + temp;
		}

		if (i > 0) {

			label << "</label>";
			text << label << endLine;
			text << indent << "</" + bracketTag << ">" << endLine;
		}

		/*if ((signalLink != NULL) && (!signalLink->xmlArtifactInfoWritten)) {

			signalLink->xmlArtifactInfoWritten = true;
			peak = signalLink->height;

			text << indent << "<" << bracketTag << ">" << endLine;
			text << indent << "\t<mean>" << signalLink->mean << "</mean>" << endLine;
			text << indent << "\t<height>" << peak << "</height>" << endLine;
			text << indent << "\t<" << locationTag << ">" << signalLink->bioID << "</" << locationTag << ">" << endLine;
			text << indent << "\t<fit>" << GetCurveFit () << "</fit>" << endLine;
			label = indent + "\t<label>";
			mNoticeObjectIterator.Reset ();
			i = 0;

			while (notice = (Notice*) mNoticeObjectIterator ()) {

				if (i > 0)
					label << "&#10;";

				label += notice->GetLabel ();
				i++;
			}

			if (temp.Length () > 0) {

				if (i > 0)
					label << "&#10;";

				label += "Allele " + temp;
			}

			label << "</label>";
			text << label << endLine;
			text << indent << "</" + bracketTag << ">" << endLine;
		}*/
	}
}
示例#10
0
STRBaseLaneStandard :: STRBaseLaneStandard (const RGString& xmlString) : BaseLaneStandard (xmlString),
    mCharacteristicArray (NULL), mDifferenceArray (NULL), mUnnormalizedDifferenceArray(0),
    mNormsLeft (NULL), mNormsRight (NULL), mRelativeSizes (NULL),
    mSize (0), mDifferenceSize (0), mOmissionSize (0), mOmissionArray (NULL), mNumberOfLargePeaks (0),
    mLargeCharacteristicArray (NULL), mLargeDifferenceArray (NULL), mNumberOfLargeDifferences (0),
    mFirstIntervalFraction (-1.0), mSmallestIntervalFraction (-1.0), mMaxRelativeHeight (-1),
    mCorrelationAcceptanceThreshold (0.993), mCorrelationAutoAcceptanceThreshold (0.9975)
//
//, mLastHalfSize (0), mLastHalfCharacteristicArray (NULL), mLastHalfUnnormalizedDifferenceArray (NULL),
//mLastHalfRelativeSizes (NULL), mLastHalfDifferenceSize (0), mLastHalfNormsLeft (NULL), mLastHalfNormsRight (NULL)
{

    RGString TextInput (xmlString);
    RGBracketStringSearch CharacteristicsToken ("<Characteristics>", "</Characteristics>", TextInput);
    RGString CharacteristicsString;
    RGString HeightString;
    RGBracketStringSearch HeightToken ("<RelativeHeights>", "</RelativeHeights>", TextInput);
    RGBracketStringSearch OmissionSearch ("<Omissions>", "</Omissions>", TextInput);
    RGBracketStringSearch AcceptanceThresholdSearch ("<CorrelationAcceptanceThreshold>", "</CorrelationAcceptanceThreshold>", TextInput);
    RGBracketStringSearch AutoAcceptanceThresholdSearch ("<CorrelationAutoAcceptanceThreshold>", "</CorrelationAutoAcceptanceThreshold>", TextInput);
    RGString OmissionString;
    size_t endPosition;
    RGString token;
    RGString delim;
    RGString numberString;

    double minChar;
    double maxChar;
    RGDList tokens;
    double value;
    RGPDouble* valuePtr;

    double previous;
    double next;
    double cumulative;
    int i = 0;
    double temp;
    int k;
    int j;

    if (!CharacteristicsToken.FindNextBracketedString (0, endPosition, CharacteristicsString)) {

        Msg << "Internal Lane Standard named " << Name << " could not find Characteristics token from string\n";
        Msg << TextInput << "\n";
        Valid = FALSE;
    }

    else {

        RGStringTokenizer data (CharacteristicsString);
        data.AddDelimiter (' ');
        data.AddDelimiter ("  ");
        data.AddDelimiter ("   ");
        data.AddDelimiter ("    ");
        data.AddDelimiter ("     ");
        data.AddRemoveItem (',');
        data.AddDelimiter ('\t');
        data.AddDelimiter ('\n');

        while (data.NextToken (token, delim)) {

            if (token.Length () > 0) {

                value = token.ConvertToDouble ();
                valuePtr = new RGPDouble (value);

                if (tokens.Entries () == 0) {

                    minChar = maxChar = value;
                    tokens.Append (valuePtr);
                }

                else if (value < minChar) {

                    minChar = value;
                    tokens.Prepend (valuePtr);
                }

                else if (value > maxChar) {

                    maxChar = value;
                    tokens.Append (valuePtr);
                }

                else
                    tokens.Insert (valuePtr);
            }
        }

        mSize = (int)tokens.Entries ();
        NCharacteristics = mSize;
        mCharacteristicArray = new double [mSize];
        mDifferenceSize = mSize - 1;
        mDifferenceArray = new double [mDifferenceSize];
        mUnnormalizedDifferenceArray = new double [mDifferenceSize];
        mNormsLeft = new double [mDifferenceSize];
        mNormsRight = new double [mDifferenceSize];

        //mLastHalfSize = mSize / 2;

        //if (2 * mLastHalfSize < mSize)
        //	mLastHalfSize += 1;

        //mLastHalfDifferenceSize = mLastHalfSize - 1;
        //mLastHalfCharacteristicArray = new double [mLastHalfSize];
        //mLastHalfUnnormalizedDifferenceArray = new double [mLastHalfDifferenceSize];
        //mLastHalfNormsLeft = new double [mLastHalfDifferenceSize];
        //mLastHalfNormsRight = new double [mLastHalfDifferenceSize];

        while (valuePtr = (RGPDouble*)tokens.GetFirst ()) {

            mCharacteristicArray [i] = valuePtr->GetDouble ();
            delete valuePtr;
            i++;
        }

        //int displacement = mSize - mLastHalfSize;	// +0, +1, -1?????

        //for (i=0; i<mLastHalfSize; i++)
        //	mLastHalfCharacteristicArray [i] = mCharacteristicArray [i + displacement];

        previous = mCharacteristicArray [0];

        for (i=0; i<mDifferenceSize; i++) {

            next = mCharacteristicArray [i+1];
            mUnnormalizedDifferenceArray [i] = mDifferenceArray [i] = next - previous;
            previous = next;
        }

        //for (i=0; i<mLastHalfSize; i++)
        //	mLastHalfUnnormalizedDifferenceArray [i] = mUnnormalizedDifferenceArray [i + displacement];

        double norm = 0.0;

        for (i=0; i<mDifferenceSize; i++)
            norm += mDifferenceArray [i] * mDifferenceArray [i];

        norm = sqrt (norm);

        if (norm > 0.0) {

            for (i=0; i<mDifferenceSize; i++)
                mDifferenceArray [i] /= norm;
        }

        cumulative = 0.0;

        for (i=0; i<mDifferenceSize; i++) {

            temp = mUnnormalizedDifferenceArray [i];
            cumulative += temp * temp;
            mNormsLeft [i] = cumulative;
        }

        cumulative = 0.0;

        for (i=mDifferenceSize-1; i>=0; i--) {

            temp = mUnnormalizedDifferenceArray [i];
            cumulative += temp * temp;
            mNormsRight [i] = cumulative;
        }

        //cumulative = 0.0;

        //for (i=0; i<mLastHalfDifferenceSize; i++) {

        //	temp = mLastHalfUnnormalizedDifferenceArray [i];
        //	cumulative += temp * temp;
        //	mLastHalfNormsLeft [i] = cumulative;
        //}

        //cumulative = 0.0;

        //for (i=mLastHalfDifferenceSize-1; i>=0; i--) {

        //	temp = mLastHalfUnnormalizedDifferenceArray [i];
        //	cumulative += temp * temp;
        //	mLastHalfNormsRight [i] = cumulative;
        //}

        MaxCharacteristic = maxChar;
        MinCharacteristic = minChar;
        double width = mCharacteristicArray [mSize - 1] - mCharacteristicArray [0];

        if (width > 0.0)
            mFirstIntervalFraction = mUnnormalizedDifferenceArray [0] / width;

        else
            mFirstIntervalFraction = 1.0;

        double temp = mUnnormalizedDifferenceArray [0];
        double value;

        for (i=0; i<mDifferenceSize; i++) {

            value = mUnnormalizedDifferenceArray [i];

            if (value < temp)
                temp = value;
        }

        if (width > 0.0)
            mSmallestIntervalFraction = temp / width;

        else
            mSmallestIntervalFraction = 1.0;

        if (!HeightToken.FindNextBracketedString (0, endPosition, HeightString)) {

            mRelativeSizes = NULL;
//			mLastHalfRelativeSizes = NULL;
        }

        else {

            RGStringTokenizer data2 (HeightString);
            data2.AddDelimiter (' ');
            data2.AddDelimiter ("  ");
            data2.AddDelimiter ("   ");
            data2.AddDelimiter ("    ");
            data2.AddDelimiter ("     ");
            data2.AddRemoveItem (',');
            data2.AddDelimiter ('\t');
            data2.AddDelimiter ('\n');

            mRelativeSizes = new int [mSize];

            for (k=0; k<mSize; k++)
                mRelativeSizes [k] = -1;

            k = 0;

            while (data2.NextToken (token, delim)) {

                if (token.Length () > 0) {

                    token.ToUpper ();
                    char first = token.GetFirstCharacter ();

                    switch (first) {

                    case 'H':
                        mRelativeSizes [k] = 5;
                        break;

                    case 'L':
                        mRelativeSizes [k] = 1;
                        break;

                    case 'M':
                        if (token.Length () == 1)
                            mRelativeSizes [k] = 3;

                        else if (token.GetLastCharacter () == 'H')
                            mRelativeSizes [k] = 4;

                        else
                            mRelativeSizes [k] = 2;

                        break;

                    default:
                        mRelativeSizes [k] = -1;
                    }
                }

                k++;

                if (k >= mSize)
                    break;
            }

            //mLastHalfRelativeSizes = new int [mLastHalfSize];

            //for (i=0; i<mLastHalfSize; i++)
            //	mLastHalfRelativeSizes [i] = mRelativeSizes [i + displacement];

            int maxRelativeSize = 0;
            int relativeSize;

            for (j=0; j<mSize; j++) {

                relativeSize = mRelativeSizes [j];

                if (relativeSize > maxRelativeSize)
                    maxRelativeSize = relativeSize;
            }

            int numberOfHighsInILS = 0;
            mMaxRelativeHeight = maxRelativeSize;

            for (j=0; j<mSize; j++) {

                if (mRelativeSizes [j] == maxRelativeSize)
                    numberOfHighsInILS++;
            }

            mNumberOfLargePeaks = numberOfHighsInILS;
            mNumberOfLargeDifferences = numberOfHighsInILS - 1;
            mLargeCharacteristicArray = new double [numberOfHighsInILS];

            if (mNumberOfLargeDifferences > 0)
                mLargeDifferenceArray = new double [mNumberOfLargeDifferences];

            k = 0;

            for (j=0; j<mSize; j++) {

                if (mRelativeSizes [j] == maxRelativeSize) {

                    mLargeCharacteristicArray [k] = mCharacteristicArray [j];
                    k++;
                }
            }

            if (mLargeDifferenceArray != NULL) {

                for (j=0; j<mNumberOfLargeDifferences; j++)
                    mLargeDifferenceArray [j] = mLargeCharacteristicArray [j + 1] - mLargeCharacteristicArray [j];
            }
        }

        if (OmissionSearch.FindNextBracketedString (0, endPosition, OmissionString)) {

            RGStringTokenizer omissionData (OmissionString);
            omissionData.AddDelimiter (' ');
            omissionData.AddDelimiter ("  ");
            omissionData.AddDelimiter ("   ");
            omissionData.AddDelimiter ("    ");
            omissionData.AddDelimiter ("     ");
            omissionData.AddRemoveItem (',');
            omissionData.AddDelimiter ('\t');
            omissionData.AddDelimiter ('\n');

            while (omissionData.NextToken (token, delim)) {

                if (token.Length () > 0) {

                    value = token.ConvertToDouble ();
                    valuePtr = new RGPDouble (value);

                    if (tokens.Entries () == 0) {

                        minChar = maxChar = value;
                        tokens.Append (valuePtr);
                    }

                    else if (value < minChar) {

                        minChar = value;
                        tokens.Prepend (valuePtr);
                    }

                    else if (value > maxChar) {

                        maxChar = value;
                        tokens.Append (valuePtr);
                    }

                    else
                        tokens.Insert (valuePtr);
                }
            }

            mOmissionSize = (int)tokens.Entries ();

            if (mOmissionSize == 0)
                return;

            mOmissionArray = new double [mOmissionSize];

            i = 0;

            while (valuePtr = (RGPDouble*)tokens.GetFirst ()) {

                mOmissionArray [i] = valuePtr->GetDouble ();
                delete valuePtr;
                i++;
            }
        }
    }

    cout << "ILS Name = " << Name.GetData () << endl;

    if (!AcceptanceThresholdSearch.FindNextBracketedString (0, endPosition, numberString))
        cout << "\tCould not find ILS acceptance threshold...using " << mCorrelationAcceptanceThreshold << endl;

    else {

        mCorrelationAcceptanceThreshold = numberString.ConvertToDouble ();
        cout << "\tFrom ILS settings...ILS acceptance threshold = " << mCorrelationAcceptanceThreshold << endl;
    }

    if (!AutoAcceptanceThresholdSearch.FindNextBracketedString (0, endPosition, numberString))
        cout << "\tCould not find ILS auto acceptance threshold...using default value = " << mCorrelationAutoAcceptanceThreshold << endl << endl;

    else {

        mCorrelationAutoAcceptanceThreshold = numberString.ConvertToDouble ();
        cout << "\tFrom ILS settings...ILS auto acceptance threshold = " << mCorrelationAutoAcceptanceThreshold << endl << endl;
    }
}
示例#11
0
void CoreBioComponent :: ReportXMLSmartSampleTableRowWithLinks (RGTextOutput& text, RGTextOutput& tempText) {

	RGString type;

	if (mIsNegativeControl)
		type = "-Control";

	else if (mIsPositiveControl)
		type = "+Control";

	else
		type = "Sample";

	RGString pResult;

	RGString SimpleFileName (mName);
	size_t startPos = 0;
	size_t endPos;
	size_t length = SimpleFileName.Length ();
	
	if (SimpleFileName.FindLastSubstringCaseIndependent (DirectoryManager::GetDataFileType (), startPos, endPos)) {

		if (endPos == length - 1)
			SimpleFileName.ExtractAndRemoveLastCharacters (4);
	}

	SimpleFileName.FindAndReplaceAllSubstrings ("\\", "/");
	startPos = endPos = 0;

	if (SimpleFileName.FindLastSubstring ("/", startPos, endPos)) {

		SimpleFileName.ExtractAndRemoveSubstring (0, startPos);
	}
	
	text << CLevel (1) << "\t\t<Sample>\n";
	text << "\t\t\t<Name>" << xmlwriter::EscAscii (SimpleFileName, &pResult) << "</Name>\n";
	text << "\t\t\t<SampleName>" << xmlwriter::EscAscii (mSampleName, &pResult) << "</SampleName>\n";
	text << "\t\t\t<RunStart>" << mRunStart.GetData () << "</RunStart>\n";
	text << "\t\t\t<Type>" << type.GetData () << "</Type>\n" << PLevel ();

	int trigger = Notice::GetMessageTrigger ();
//	int channelHighestLevel;
//	bool channelAlerts = false;
	int cbcHighestMsgLevel = GetHighestMessageLevelWithRestrictionSM ();
	RGDListIterator it (*mSmartMessageReporters);
	SmartMessageReporter* nextNotice;
	bool includesExportInfo = false;

	while (nextNotice = (SmartMessageReporter*) it ()) {

		if (nextNotice->HasViableExportInfo ()) {

			includesExportInfo = true;
			break;
		}
	}

	if (((cbcHighestMsgLevel > 0) && (cbcHighestMsgLevel <= trigger)) || includesExportInfo) {

//		text << CLevel (1) << "\t\t\t<SampleAlerts>\n" << PLevel ();

		// get message numbers and report
		ReportXMLSmartNoticeObjects (text, tempText, " ");

//		text << CLevel (1) << "\t\t\t</SampleAlerts>\n" << PLevel ();
	}

	mDataChannels [mLaneStandardChannel]->ReportXMLILSSmartNoticeObjects (text, tempText, " ");
	int i;

	//for (i=1; i<=mNumberOfChannels; i++) {

	//	//if (i == mLaneStandardChannel)
	//	//	continue;

	//	channelHighestLevel = mDataChannels [i]->GetHighestMessageLevelWithRestrictionSM ();

	//	if ((channelHighestLevel > 0) && (channelHighestLevel <= trigger)) {

	//		channelAlerts = true;
	//		break;
	//	}
	//}

//	if (channelAlerts) {

		text << CLevel (1) << "\t\t\t<ChannelAlerts>\n" << PLevel ();

		for (i=1; i<=mNumberOfChannels; i++) {

			if (i == mLaneStandardChannel)
				continue;

			mDataChannels [i]->ReportXMLSmartNoticeObjects (text, tempText, " ");
		}

		text << CLevel (1) << "\t\t\t</ChannelAlerts>\n" << PLevel ();
//	}

	mMarkerSet->ResetLocusList ();
	Locus* nextLocus;

	while (nextLocus = mMarkerSet->GetNextLocus ()) {

		nextLocus->ReportXMLSmartSampleTableRowWithLinks (text, tempText, " ");
	}

	if (mIsPositiveControl)
		text << CLevel (1) << "\t\t\t<PositiveControl>" << mPositiveControlName << "</PositiveControl>\n";

	text << CLevel (1) << "\t\t</Sample>\n" << PLevel ();
}
示例#12
0
Locus* Bins :: AssembleLocusFromLineStrings () {
	
	// uses current values in mLocusLineStrings

	Locus* newLocus = new Locus ();
	int nLines = mLocusLineStrings.Length ();
	SplitLocusLine (mLocusLineStrings [0]);  // This should give us the name field
	RGString name = mLocusLineFieldString [1];
	cout << "Locus name = " << name.GetData () << endl;

	//cout << "Bins locus line 1:  ";
	int i;
	int len = mLocusLineFieldString.Length ();

	//for (i=0; i<len; i++) {

	//	cout << mLocusLineFieldString [i].GetData ();

	//	if (i < len - 1)
	//		cout << ", ";
	//}

	//cout << endl;

	RGString firstAlleleName;
	int firstLocusBP;
	double firstILSBP;
	double lastILSBP;
	RGString firstExtendedAlleleName;
	RGString lastExtendedAlleleName;
	int lineForFirstAllele = 0;

	for (i=1; i<nLines; i++) {

		SplitLocusLine (mLocusLineStrings [i]);

		if (mLocusLineFieldString.Length () < 4) {

			cout << "Could not find first allele for locus " << name.GetData () << endl;
			delete newLocus;
			return NULL;
		}

		if (mLocusLineFieldString.Length () >= 5) {

			if (mLocusLineFieldString [4] == "virtual") {

				if (i == 1) {

					firstExtendedAlleleName = mLocusLineFieldString [0];
				}

				continue;
			}
		}

		firstAlleleName = mLocusLineFieldString [0];
		firstILSBP = mLocusLineFieldString [1].ConvertToDouble ();
		firstLocusBP = (int) floor (firstILSBP + 0.5);
		lineForFirstAllele = i;
		break;
	}

	if (firstExtendedAlleleName.Length () == 0)
		firstExtendedAlleleName = firstAlleleName;

	bool foundLastExtendedAllele = false;

	for (i=nLines-1; i>lineForFirstAllele; i--) {
	
		SplitLocusLine (mLocusLineStrings [i]);

		if (mLocusLineFieldString.Length () < 4)
			continue;

		if (!foundLastExtendedAllele) {
		
			lastExtendedAlleleName = mLocusLineFieldString [0];
			foundLastExtendedAllele = true;
		}

		if ((mLocusLineFieldString.Length () >= 5) && (mLocusLineFieldString [4] == "virtual"))
			continue;

		lastILSBP = mLocusLineFieldString [1].ConvertToDouble ();
		break;
	}

	if (lastExtendedAlleleName.Length () == 0) {

		cout << "Could not locate last extended allele name for locus:  " << name.GetData () << endl;
		delete newLocus;
		return NULL;
	}

	newLocus->SetFirstCoreAllele (firstAlleleName);
	newLocus->SetFirstExtendedAllele (firstExtendedAlleleName);
	newLocus->SetLastExtendedAllele (lastExtendedAlleleName);
	newLocus->SetMinMaxSearchILSBP (firstILSBP, lastILSBP);  // These will have to be adjusted later when core repeat number is known
	newLocus->SetFirstCoreLocusBP (firstLocusBP);
	newLocus->SetName (name);

	//  Need to add to Locus ability to compute first and last extended bp

	return newLocus;
}