package cz.cuni.lf1.lge.ThunderSTORM.util; import cz.cuni.lf1.lge.ThunderSTORM.estimators.PSF.Molecule; import cz.cuni.lf1.lge.ThunderSTORM.estimators.PSF.MoleculeDescriptor; import cz.cuni.lf1.lge.ThunderSTORM.estimators.PSF.MoleculeDescriptor.Units; import static cz.cuni.lf1.lge.ThunderSTORM.estimators.PSF.MoleculeDescriptor.LABEL_ID; import static cz.cuni.lf1.lge.ThunderSTORM.estimators.PSF.PSFModel.Params.LABEL_X; import static cz.cuni.lf1.lge.ThunderSTORM.estimators.PSF.PSFModel.Params.LABEL_Y; import java.util.*; import org.junit.Test; import static org.junit.Assert.*; public class MoleculeMatcherTest { /** * Test of matchMolecules method, of class MoleculeMatcher. */ @Test public void testMatchMolecules() { System.out.println("matchMolecules"); // // Initialize the input data: MoleculeDescriptor desc = new MoleculeDescriptor(new String[] { LABEL_ID, LABEL_X, LABEL_Y }, new Units[] { Units.UNITLESS, Units.PIXEL, Units.PIXEL }); Molecule gt1 = new Molecule(desc, new double[] { 1.0, 0.7710453838725644, 0.3536005585780880 }); Molecule gt2 = new Molecule(desc, new double[] { 2.0, 0.7586700850084991, 0.4702063366092425 }); Molecule gt3 = new Molecule(desc, new double[] { 3.0, 0.7208816979938985, 0.5172187710065674 }); Molecule det1 = new Molecule(desc, new double[] { 1.0, 0.6171594495632347, 0.4949343818140205 }); Molecule det2 = new Molecule(desc, new double[] { 2.0, 0.3748525177688802, 0.3864459210533293 }); Molecule det3 = new Molecule(desc, new double[] { 3.0, 0.1256085534772942, 0.5591895052957198 }); List<Molecule> gt = Arrays.asList(gt1, gt2, gt3); List<Molecule> det = Arrays.asList(det1, det2, det3); // // Initialize the correct results: List<Pair<Molecule, Molecule>> TP_correct = new ArrayList<Pair<Molecule, Molecule>>(); List<Molecule> FP_correct = new ArrayList<Molecule>(); List<Molecule> FN_correct = new ArrayList<Molecule>(); TP_correct.add(new Pair<Molecule, Molecule>(gt1, det1)); TP_correct.add(new Pair<Molecule, Molecule>(gt2, det2)); TP_correct.add(new Pair<Molecule, Molecule>(gt3, det3)); // // Run the procedure: List<Pair<Molecule, Molecule>> TP = new ArrayList<Pair<Molecule, Molecule>>(); List<Molecule> FP = new ArrayList<Molecule>(); List<Molecule> FN = new ArrayList<Molecule>(); MoleculeMatcher matcher = new MoleculeMatcher(true, 1.0, Units.PIXEL); matcher.matchMolecules(det, gt, TP, FP, FN); // // Validate the results: // 1) TP pairs Map<Molecule, Molecule> gtTP = new HashMap<Molecule, Molecule>(); for(Pair<Molecule, Molecule> pair : TP_correct) { gtTP.put(pair.first, pair.second); } for(Pair<Molecule, Molecule> pair : TP) { assertEquals(gtTP.get(pair.first), pair.second); } // 2) FP & FN lists assertTrue(new HashSet<Molecule>(FP_correct).containsAll(FP)); assertTrue(new HashSet<Molecule>(FN_correct).containsAll(FN)); } }