Boolean STRBaseLocus :: ExtractGridSignals (RGDList& channelSignalList, const LaneStandard* ls, RGDList& locusDataSignalList, ChannelData* lsData, Locus* locus) { int lsSize = ls->GetNumberOfCharacteristics (); int i1; int i2; double c1; double c2; Notice* newNotice; if (lsSize < 0) { Msg << "Number of characteristics not available for Locus named " << LocusName << "\n"; newNotice = new SetupErrorNumberPeaksUnavailableForLocus; locus->AddNoticeToList (newNotice); return FALSE; } if (LowerBoundGridLSBasePair < 0.0) { i1 = (int) floor (LowerBoundGridLSIndex); if (i1 < 0) { Msg << "Internal Lane Standard lower bound index for Grid is out of bounds for Locus named " << LocusName << "\n"; return FALSE; } i2 = i1 + 1; c2 = LowerBoundGridLSIndex - i1; c1 = 1.0 - c2; MinimumGridTime = c1 * ls->GetLaneStandardTimeForCharacteristicNumber (i1) + c2 * ls->GetLaneStandardTimeForCharacteristicNumber (i2); // cout << "Not using base pairs for minimum of locus " << LocusName << endl; } else MinimumGridTime = lsData->GetTimeForSpecifiedID (LowerBoundGridLSBasePair); if (UpperBoundGridLSBasePair < 0.0) { i1 = (int) floor (UpperBoundGridLSIndex); if (i1 < 0) { Msg << "Internal Lane Standard upper bound index for Grid is out of bounds for Locus named " << LocusName << "\n"; return FALSE; } i2 = i1 + 1; c2 = UpperBoundGridLSIndex - i1; c1 = 1.0 - c2; MaximumGridTime = c1 * ls->GetLaneStandardTimeForCharacteristicNumber (i1) + c2 * ls->GetLaneStandardTimeForCharacteristicNumber (i2); // cout << "Not using base pairs for maximum of locus " << LocusName << endl; } else MaximumGridTime = lsData->GetTimeForSpecifiedID (UpperBoundGridLSBasePair); RGDListIterator it (channelSignalList); DataSignal* nextSignal; double nextMean; locusDataSignalList.Clear (); // Assume channelSignalList is in increasing order by signal means while (nextSignal = (DataSignal*) it ()) { nextMean = nextSignal->GetMean (); if (nextMean >= MinimumGridTime) { if (nextMean <= MaximumGridTime) { it.RemoveCurrentItem (); locusDataSignalList.Append (nextSignal); } else break; } } if (locusDataSignalList.Entries () < mLocusSize) { Msg << "Locus named " << LocusName << " could not find the required number of unanalyzed peaks in range\n"; newNotice = new LocusHasTooFewPeaks; locus->AddNoticeToList (newNotice); return FALSE; } return TRUE; }
void RGHashTable :: ResizeTable (int size) { RGPersistent* next; unsigned hash; unsigned index; int i; if (NumberOfLists < size) { RGDList** NewArray = new RGDList* [size]; for (i=0; i<size; i++) { if (i < NumberOfLists) NewArray [i] = ListArray [i]; else NewArray [i] = new RGDList; } delete[] ListArray; ListArray = NewArray; for (i=0; i<NumberOfLists; i++) { if (ListArray [i]->Entries() > 0) { RGDListIterator* it = new RGDListIterator (*ListArray [i]); while (next = (*it)()) { hash = next->HashNumber (size); index = hash%size; if (index != i) { it->RemoveCurrentItem (); ListArray [index]->Insert (next); } } delete it; } } NumberOfLists = size; } else if ((NumberOfLists > size) && (size > 0)) { RGDList** NewArray = new RGDList* [size]; for (int i=0; i<NumberOfLists; i++) { if (i < size) NewArray [i] = ListArray [i]; if (ListArray [i]->Entries() > 0) { RGDListIterator* it = new RGDListIterator (*ListArray [i]); while (next = (*it)()) { hash = next->HashNumber (size); index = hash%size; if (index != i) { it->RemoveCurrentItem (); ListArray [index]->Insert (next); } } delete it; } if (i >= size) delete ListArray [i]; } delete[] ListArray; ListArray = NewArray; NumberOfLists = size; } }