void IDMapper::getIDDetails_(const PeptideIdentification & id, DoubleReal & rt_pep, DoubleList & mz_values, IntList & charges, bool use_avg_mass) const { mz_values.clear(); charges.clear(); rt_pep = id.getMetaValue("RT"); // collect m/z values of pepId if (param_.getValue("mz_reference") == "precursor") // use precursor m/z of pepId { mz_values.push_back(id.getMetaValue("MZ")); } for (vector<PeptideHit>::const_iterator hit_it = id.getHits().begin(); hit_it != id.getHits().end(); ++hit_it) { Int charge = hit_it->getCharge(); charges.push_back(charge); if (param_.getValue("mz_reference") == "peptide") // use mass of each pepHit (assuming H+ adducts) { DoubleReal mass = use_avg_mass ? hit_it->getSequence().getAverageWeight(Residue::Full, charge) : hit_it->getSequence().getMonoWeight(Residue::Full, charge); mz_values.push_back( mass / (DoubleReal) charge); } } }
IntList ParsedEntity::getIntList() { auto pList = getList(); auto list = *pList; IntList retList = MakeIntList(); for (ParsedEntityPtr pe : list) { if (pe->getType() == ParsedEntity::Int) { retList->push_back(pe->getInt()); } } return retList; }
bool Init() { int nRandom = 0; for (int i = 0; i < g_nMax; ++i) { nRandom = i; g_nSummary += nRandom; g_dInts.push_back(nRandom); g_hmInts.insert(std::make_pair(nRandom, nRandom)); g_hsInts.insert(nRandom); g_lInts.push_back(nRandom); g_mInts.insert(std::make_pair(nRandom, nRandom)); g_mmInts.insert(std::make_pair(nRandom, nRandom)); g_msInts.insert(nRandom); g_sInts.insert(nRandom); g_vInts.push_back(nRandom); } return true; }
int main() { IntList test; test.push_front(5); test.push_front(2); test.push_front(5); test.push_front(7); test.push_front(5); cout << "Should display counting down from five: "; test.display(); cout << endl; test.push_back(6); cout << "Should add zero to the end: "; test.display(); cout << endl; //test.insert_sorted(3); test.select_sort(); cout << "Should be in order now: "; test.display(); cout << endl; test.remove_duplicates(); cout << "Should remove all same digits: "; test.display(); cout << endl; }
// Given a list of lists of possible cage values: // [[1,2,3], [3,4,5]] // Recursively generates tuples of combinations from each of the lists as // follows: // [1,3] // [1,4] // [1,5] // [2,3] // [2,4] // ... etc // Each of these is checked against the target sum, and pushed into a result // vector if they match. // Note: The algorithm assumes that the list of possibles/candidates are // ordered. This allows it to bail out early if it detects there's no point // going further. static void subsetSum(const std::vector<IntList> &possible_lists, const std::size_t p_size, IntList &tuple, unsigned tuple_sum, std::vector<IntList> &subsets, const unsigned target_sum, unsigned list_idx) { for (unsigned p = list_idx; p < p_size; ++p) { for (auto &poss : possible_lists[p]) { // Optimization for small target sums: if the candidate is bigger than // the target itself then it can't be valid, neither can any candidate // after it (ordered). if (target_sum < static_cast<unsigned>(poss)) { break; } // Can't repeat a value inside a cage if (std::find(tuple.begin(), tuple.end(), poss) != tuple.end()) { continue; } // Pre-calculate the new tuple values to avoid spurious // insertions/deletions to the vector. const auto new_tuple_sum = tuple_sum + poss; const auto new_tuple_size = tuple.size() + 1; // If we've added too much then we can bail out (ordered). if (new_tuple_sum > target_sum) { break; } // If there are fewer spots left in the tuple than there are options for // the sum to reach the target, bail. // TODO: This could be more sophisticated (can't have more than one 1, so // it's more like the N-1 sum that it should be greater than. if ((p_size - new_tuple_size) > (target_sum - new_tuple_sum)) { break; } if (new_tuple_size == p_size) { // If we've reached our target size then we can stop searching other // possiblities from this list (ordered). if (new_tuple_sum == target_sum) { tuple.push_back(poss); subsets.push_back(tuple); tuple.pop_back(); break; } // Else, move on to the next candidate in the list. continue; } tuple_sum += poss; tuple.push_back(poss); subsetSum(possible_lists, p_size, tuple, tuple_sum, subsets, target_sum, p + 1); tuple.pop_back(); tuple_sum -= poss; } } }
/*----------------------------------------------------------------------- */ SEXP watershed (SEXP x, SEXP _tolerance, SEXP _ext) { SEXP res; int im, i, j, nx, ny, nz, ext, nprotect = 0; double tolerance; nx = INTEGER ( GET_DIM(x) )[0]; ny = INTEGER ( GET_DIM(x) )[1]; nz = getNumberOfFrames(x,0); tolerance = REAL( _tolerance )[0]; ext = INTEGER( _ext )[0]; PROTECT ( res = Rf_duplicate(x) ); nprotect++; int * index = new int[ nx * ny ]; for ( im = 0; im < nz; im++ ) { double * src = &( REAL(x)[ im * nx * ny ] ); double * tgt = &( REAL(res)[ im * nx * ny ] ); /* generate pixel index and negate the image -- filling wells */ for ( i = 0; i < nx * ny; i++ ) { tgt[ i ] = -src[ i ]; index[ i ] = i; } /* from R includes R_ext/Utils.h */ /* will resort tgt as well */ rsort_with_index( tgt, index, nx * ny ); /* reassign tgt as it was reset above but keep new index */ for ( i = 0; i < nx * ny; i++ ) tgt[ i ] = -src[ i ]; SeedList seeds; /* indexes of all seed starting points, i.e. lowest values */ IntList equals; /* queue of all pixels on the same gray level */ IntList nb; /* seed values of assigned neighbours */ int ind, indxy, nbseed, x, y, topseed = 0; IntList::iterator it; TheSeed newseed; PointXY pt; bool isin; /* loop through the sorted index */ for ( i = 0; i < nx * ny && src[ index[i] ] > BG; ) { /* pool a queue of equally lowest values */ ind = index[ i ]; equals.push_back( ind ); for ( i = i + 1; i < nx * ny; ) { if ( src[ index[i] ] != src[ ind ] ) break; equals.push_back( index[i] ); i++; } while ( !equals.empty() ) { /* first check through all the pixels if we can assign them to * existing objects, count checked and reset counter on each assigned * -- exit when counter equals queue length */ for ( j = 0; j < (int) equals.size(); ) { if ((j%1000)==0) R_CheckUserInterrupt(); ind = equals.front(); equals.pop_front(); /* check neighbours: * - if exists one, assign * - if two or more check what should be combined and assign to the steepest * - if none, push back */ /* reset j to 0 every time we assign another pixel to restart the loop */ nb.clear(); pt = pointFromIndex( ind, nx ); /* determine which neighbour we have, push them to nb */ for ( x = pt.x - ext; x <= pt.x + ext; x++ ) for ( y = pt.y - ext; y <= pt.y + ext; y++ ) { if ( x < 0 || y < 0 || x >= nx || y >= ny || (x == pt.x && y == pt.y) ) continue; indxy = x + y * nx; nbseed = (int) tgt[ indxy ]; if ( nbseed < 1 ) continue; isin = false; for ( it = nb.begin(); it != nb.end() && !isin; it++ ) if ( nbseed == *it ) isin = true; if ( !isin ) nb.push_back( nbseed ); } if ( nb.size() == 0 ) { /* push the pixel back and continue with the next one */ equals.push_back( ind ); j++; continue; } tgt[ ind ] = check_multiple(tgt, src, ind, nb, seeds, tolerance, nx, ny ); /* we assigned the pixel, reset j to restart neighbours detection */ j = 0; } /* now we have assigned all that we could */ if ( !equals.empty() ) { /* create a new seed for one pixel only and go back to assigning neighbours */ topseed++; newseed.index = equals.front(); newseed.seed = topseed; equals.pop_front(); tgt[ newseed.index ] = topseed; seeds.push_back( newseed ); } } // assigning equals } // sorted index /* now we need to reassign indexes while some seeds could be removed */ double * finseed = new double[ topseed ]; for ( i = 0; i < topseed; i++ ) finseed[ i ] = 0; i = 0; while ( !seeds.empty() ) { newseed = seeds.front(); seeds.pop_front(); finseed[ newseed.seed - 1 ] = i + 1; i++; } for ( i = 0; i < nx * ny; i++ ) { j = (int) tgt[ i ]; if ( 0 < j && j <= topseed ) tgt[ i ] = finseed[ j - 1 ]; } delete[] finseed; } // loop through images delete[] index; UNPROTECT (nprotect); return res; }
TestList() { typedef List<char, DebugAllocator<int> > IntList; IntList a; a.push_back('1'); a.push_back('2'); a.push_back('3'); LIST_ASSERT(*a.begin() == '1'); LIST_ASSERT(*++a.begin() == '2'); LIST_ASSERT(*++++a.begin() == '3'); LIST_ASSERT(++++++a.begin() == a.end()); IntList b; b.push_back('a'); b.push_back('b'); b.push_back('c'); LIST_ASSERT(*b.begin() == 'a'); LIST_ASSERT(*++b.begin() == 'b'); LIST_ASSERT(*++++b.begin() == 'c'); LIST_ASSERT(++++++b.begin() == b.end()); // swap full lists a.swap(b); LIST_ASSERT(*a.begin() == 'a'); LIST_ASSERT(*++a.begin() == 'b'); LIST_ASSERT(*++++a.begin() == 'c'); LIST_ASSERT(++++++a.begin() == a.end()); LIST_ASSERT(*b.begin() == '1'); LIST_ASSERT(*++b.begin() == '2'); LIST_ASSERT(*++++b.begin() == '3'); LIST_ASSERT(++++++b.begin() == b.end()); // swap to/from empty list IntList c; c.swap(b); LIST_ASSERT(b.empty()); LIST_ASSERT(*c.begin() == '1'); LIST_ASSERT(*++c.begin() == '2'); LIST_ASSERT(*++++c.begin() == '3'); LIST_ASSERT(++++++c.begin() == c.end()); c.swap(b); LIST_ASSERT(c.empty()); LIST_ASSERT(*b.begin() == '1'); LIST_ASSERT(*++b.begin() == '2'); LIST_ASSERT(*++++b.begin() == '3'); LIST_ASSERT(++++++b.begin() == b.end()); IntList d; c.swap(d); LIST_ASSERT(c.empty()); LIST_ASSERT(d.empty()); c.splice(c.end(), d); LIST_ASSERT(c.empty()); LIST_ASSERT(d.empty()); // splice full with empty b.splice(b.end(), c); LIST_ASSERT(c.empty()); LIST_ASSERT(*b.begin() == '1'); LIST_ASSERT(*++b.begin() == '2'); LIST_ASSERT(*++++b.begin() == '3'); LIST_ASSERT(++++++b.begin() == b.end()); // splice empty with full c.splice(c.end(), b); LIST_ASSERT(b.empty()); LIST_ASSERT(*c.begin() == '1'); LIST_ASSERT(*++c.begin() == '2'); LIST_ASSERT(*++++c.begin() == '3'); LIST_ASSERT(++++++c.begin() == c.end()); // splice full with full c.splice(c.end(), a); LIST_ASSERT(a.empty()); LIST_ASSERT(*c.begin() == '1'); LIST_ASSERT(*++c.begin() == '2'); LIST_ASSERT(*++++c.begin() == '3'); LIST_ASSERT(*++++++c.begin() == 'a'); LIST_ASSERT(*++++++++c.begin() == 'b'); LIST_ASSERT(*++++++++++c.begin() == 'c'); LIST_ASSERT(++++++++++++c.begin() == c.end()); c.pop_back(); LIST_ASSERT(!c.empty()); c.pop_back(); LIST_ASSERT(!c.empty()); c.pop_back(); LIST_ASSERT(!c.empty()); c.pop_back(); LIST_ASSERT(!c.empty()); c.pop_back(); LIST_ASSERT(!c.empty()); c.pop_back(); LIST_ASSERT(c.empty()); }
int main() { IntList temp; temp.display(); cout << endl; temp.push_front(5); temp.display(); cout << endl; temp.push_front(15); temp.push_front(45); temp.display(); cout << endl; temp.pop_front(); temp.display(); cout << endl; temp.push_back(32); temp.display(); cout << endl; IntList temp2; temp2.push_back(32); temp2.display(); cout << endl; temp2.push_back(45); temp2.display(); cout << endl; temp.select_sort(); temp.display(); cout << endl; IntList temp3; temp3.select_sort(); temp3.display(); cout << endl; temp.display(); cout << endl; temp.insert_sorted(10); temp.display(); cout << endl; temp.insert_sorted(33); temp.display(); cout << endl; temp.insert_sorted(4); temp.display(); cout << endl; temp.insert_sorted(2); temp.display(); cout << endl; IntList temp4; temp4.push_back(249); temp4.push_back(346); temp4.push_back(366); temp4.push_back(374); temp4.push_back(462); temp4.push_back(484); temp4.push_back(600); temp4.push_back(686); temp4.push_back(715); temp4.push_back(799); temp4.push_back(949); temp4.display(); cout << endl; temp4.insert_sorted(800); temp4.display(); cout << endl; IntList temp5; temp5.push_back(249); temp5.push_back(346); temp5.push_back(715); temp5.push_back(799); temp5.push_back(949); temp5.push_back(949); temp5.push_back(366); temp5.push_back(374); temp5.push_back(462); temp5.push_back(462); temp5.push_back(484); temp5.push_back(600); temp5.push_back(249); temp5.push_back(686); temp5.display(); cout << endl; temp5.select_sort(); temp5.display(); cout << endl; temp5.remove_duplicates(); temp5.display(); cout << endl; IntList temp6; temp6.push_back(667); temp6.push_back(314); temp6.push_back(895); temp6.push_back(63); temp6.push_back(462); temp6.display(); cout << endl; temp6.remove_duplicates(); temp6.display(); cout << endl; cout << "End" << endl; }
int main() { IntList theList; IntList theOtherList; IntList theFinalList; theList.display(); cout << endl; theList.push_front(133); theList.display(); cout << endl; theList.push_front(250); theList.display(); cout << endl; theList.push_front(550); theList.display(); cout << endl; theList.pop_front(); theList.display(); cout << endl; theList.push_back(13); theList.display(); cout << endl; theList.select_sort(); theList.display(); cout << endl; theList.insert_sorted(10); theList.display(); cout << endl; theList.insert_sorted(225); theList.display(); cout << endl; theList.pop_front(); theList.display(); cout << endl; theList.pop_front(); theList.display(); cout << endl; theList.pop_front(); theList.display(); cout << endl; theList.push_back(45); theList.display(); cout << endl; cout << "The other list shit:\n"; theOtherList.insert_sorted(225); theOtherList.display(); cout << endl; theOtherList.insert_sorted(12); theOtherList.display(); cout << endl; theOtherList.insert_sorted(13); theOtherList.display(); cout << endl; theOtherList.insert_sorted(13); theOtherList.display(); cout << endl; theOtherList.insert_sorted(12); theOtherList.display(); cout << endl; theOtherList.insert_sorted(5000); theOtherList.display(); cout << endl; theOtherList.remove_duplicates(); theOtherList.display(); cout << endl; cout << "The other list shit:\n"; theFinalList.push_front(10); theFinalList.display(); cout << endl; theFinalList.push_front(10); theFinalList.display(); cout << endl; theFinalList.push_front(30); theFinalList.display(); cout << endl; theFinalList.push_front(5); theFinalList.display(); cout << endl; theFinalList.push_front(20); theFinalList.display(); cout << endl; theFinalList.push_front(10); theFinalList.display(); cout << endl; theFinalList.push_back(30); theFinalList.display(); cout << endl; theFinalList.remove_duplicates(); theFinalList.display(); cout << endl; return 0; }
int main() { IntList a; IntList b; string divider = string(68, '-'); cout << divider << endl; // testing push_front function a.push_front(1); a.push_front(4); a.push_front(412); // tests display cout << "IntList 1: testing push_front function" << endl; cout << "(should display 412 4 1): "; a.display(); cout << endl; cout << "IntList 2: testing empty list" << endl; cout << "(should display nothing): "; b.display(); cout << endl; cout << divider << endl; // tests pop_front; a.pop_front(); cout << "IntList 1: testing pop_front function" << endl; cout << "(should display 4 1): "; a.display(); cout << endl; cout << "IntList 2: testing pop_front on empty" << endl; cout << "(should do nothing): "; b.pop_front(); b.display(); cout << endl; b.push_front(4); cout << "IntList 2: testing pop_front on 1 element" << endl; cout << "(should see nothing): "; b.pop_front(); b.display(); cout << endl; cout << divider << endl; a.push_back(3); a.push_back(213); a.push_back(61); // testing select_sort cout << "IntList 1: testing select_sort function" << endl; cout << "(should display 1 3 4 61 213): "; a.select_sort(); a.display(); cout << endl; cout << "IntList 2: testing empty list" << endl; b.select_sort(); b.display(); cout << endl; cout << divider << endl; // testing insert_sorted() cout << "IntList 1: testing insert_sorted function" << endl; cout << "(should display 1 2 3 4 61 213 400): "; a.insert_sorted(2); a.insert_sorted(400); a.display(); cout << endl; cout << "IntList 2: testing_sorted on empty list" << endl; cout << "(should display 4): "; b.insert_sorted(4); b.display(); cout << endl; cout << divider << endl; return 0; }