void testUpdateDistanceMatrix() { PeakListCollection PLC = SamplePeakListCollection(); DistanceMatrix DM = PLC.buildDistanceMatrix_(200., 0.5, 0, 0.); DistanceMatrix Ref = PLC.buildDistanceMatrix_(200., 0.5, 0, 0.); DM.addElement(99.); //Add a dummy element, we will delete it again unsigned int merged_lower = 4; //last two elements unsigned int merged_upper = 5; PLC.plContent_.clear(); PLC.plContent_.resize(6,1); PLC.updateDistanceMatrix_(DM, merged_lower, merged_upper, 200., 0.5, 0, 0.); //Size should still be 5 shouldEqual((int)DM.size(),5); //Matrix should be the same as the original matrix Ref for(unsigned int i = 0; i < 5; i++){ for(unsigned int j = 0; j < i; j++){ shouldEqualTolerance(DM(i,j),Ref(i,j),TOL); } } return; }
//build a distance matrix out of all PeakLists DistanceMatrix PeakListCollection::buildDistanceMatrix_(double drt, double dmz, double dz, double dint = 0.) { //number of Peaklists unsigned int numPl = c_.size(); DistanceMatrix DM; //Add new elements to the Distance Matrix for(unsigned int i = 0; i<numPl; i++){ DM.addElement(); //Calculate distance to the other elements / the cost of merging them for(unsigned int j = 0; j<i; j++){ StableMarriage sm(c_[i],c_[j],drt,dmz,dz,dint); sm.setLimit(1.); DM(i,j) = sm.getCost(); } } return DM; }
//Update the Distance Matrix void PeakListCollection::updateDistanceMatrix_(DistanceMatrix& D, unsigned int merged_lower, unsigned int merged_upper, double drt, double dmz, double dz, double dint = 0.) { //remove distances of merged PeakLists from distance matrix D.deleteElement(merged_upper); D.deleteElement(merged_lower); //add a new column for the merged PeakList D.addElement(); //fill distances unsigned int sz = D.size(); for(unsigned int i = 0; i<sz-1; i++){ StableMarriage sm(c_[i],c_[sz-1],drt,dmz,dz,dint); sm.setLimit(1.); D(i,sz-1) = sm.getCost(); } return; }