def test_getBeadsVolForAllSamples(self, mock_loadIndividualSettings): self.prep_createBeadsVolSettings(1) param = 'Initial sample volume' self.prep_settingsFile(param, [100, 29, 50, 0, 0, -1, -1, -1, -1, -1, -1, -1]) s = ponec.settings(self.mock_csv_path) s.cutoffs = s.returnProtocolParameter('Number of cutoffs') s.initial_sample_vol_list = s._returnSampleParameterList('Initial sample volume') v_list = s._getBeadsVolForAllSamples(1) self.assertEqual(v_list[0], 15) self.assertEqual(v_list[1], 31) self.assertEqual(v_list[2], 22) self.prep_createBeadsVolSettings(2) param = 'Initial sample volume' self.prep_settingsFile(param, [100, 29, 50, 0, 0, -1, -1, -1, -1, -1, -1, -1]) s = ponec.settings(self.mock_csv_path) s.cutoffs = s.returnProtocolParameter('Number of cutoffs') s.initial_sample_vol_list = s._returnSampleParameterList('Initial sample volume') v_list = s._getBeadsVolForAllSamples(1) self.assertEqual(v_list[0], 30) self.assertEqual(v_list[1], 20) self.assertEqual(v_list[2], 25) v_list = s._getBeadsVolForAllSamples(2) self.assertEqual(v_list[0], 15) self.assertEqual(v_list[1], 31) self.assertEqual(v_list[2], 22)
def test_getBeadsVolDirectly(self, mock_loadIndividualSettings): self.prep_createBeadsVolSettings(2) s = ponec.settings(self.mock_csv_path) s.cutoffs = s.returnProtocolParameter('Number of cutoffs') v = s._getBeadsVolDirectly(0, 1) self.assertEqual(30, v) v = s._getBeadsVolDirectly(1, 1) self.assertEqual(20, v) v = s._getBeadsVolDirectly(2, 1) self.assertEqual(25, v) v = s._getBeadsVolDirectly(0, 2) self.assertEqual(15, v) v = s._getBeadsVolDirectly(1, 2) self.assertEqual(31, v) v = s._getBeadsVolDirectly(2, 2) self.assertEqual(22, v) self.delTempSettingsFile() del s self. prep_createBeadsVolSettings(1) s = ponec.settings(self.mock_csv_path) s.cutoffs = s.returnProtocolParameter('Number of cutoffs') v = s._getBeadsVolDirectly(0, 1) self.assertEqual(15, v) v = s._getBeadsVolDirectly(1, 1) self.assertEqual(31, v) v = s._getBeadsVolDirectly(2, 1) self.assertEqual(22, v)
def test_getRackName(self, mock_loadIndividualSettings): logging.disable(logging.CRITICAL) beads = 'Beads tube rack' waste = 'Waste tube rack' eluent = 'Eluent tube rack' ethanol = 'Ethanol tube rack' self.prep_settingsFile(beads, ['reagents']) self.prep_settingsFile(waste, ['reagents']) self.prep_settingsFile(eluent, ['reagents']) self.prep_settingsFile(ethanol, ['reagents']) s = ponec.settings(self.mock_csv_path) val = s._getRackName('Beads') self.assertEqual('reagents', val) val = s._getRackName('Waste') self.assertEqual('reagents', val) val = s._getRackName('Eluent') self.assertEqual('reagents', val) val = s._getRackName('Ethanol') self.assertEqual('reagents', val) self.delTempSettingsFile() self.prep_settingsFile(beads, ['samples']) s = ponec.settings(self.mock_csv_path) val = s._getRackName('Beads') self.assertEqual('samples', val) self.delTempSettingsFile() self.prep_settingsFile(beads, ['asdf']) s = ponec.settings(self.mock_csv_path) val = s._getRackName('Beads') self.assertEqual(None, val) self.delTempSettingsFile()
def test__getBeadsVolume_1stage(self, mock_loadIndividualSettings): self.prep_createBeadsVolSettings(1) param = 'Initial sample volume' self.prep_settingsFile(param, [100, 29, 50, 0, 0, -1, -1, -1, -1, -1, -1, -1]) s = ponec.settings(self.mock_csv_path) s.cutoffs = s.returnProtocolParameter('Number of cutoffs') s.initial_sample_vol_list = s._returnSampleParameterList('Initial sample volume') v = s._getBeadsVolume(0, 1) self.assertEqual(v, 15) v = s._getBeadsVolume(1, 1) self.assertEqual(v, 31) v = s._getBeadsVolume(2, 1) self.assertEqual(v, 22) # Rewriting the settings file. # Now the function should calculate volume from the initial volume and fraction param = 'Beads volume' self.prep_settingsFile(param, [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]) s = ponec.settings(self.mock_csv_path) s.cutoffs = s.returnProtocolParameter('Number of cutoffs') s.initial_sample_vol_list = s._returnSampleParameterList('Initial sample volume') v = s._getBeadsVolume(0, 1) self.assertEqual(v, 100) v = s._getBeadsVolume(1, 1) self.assertEqual(v, 29*0.9) v = s._getBeadsVolume(2, 1) self.assertEqual(v, 50*1.5) # Rewriting the settings file. # Now the function should calculate volume from the DNA cutoff value param = 'Fraction' self.prep_settingsFile(param, [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]) s = ponec.settings(self.mock_csv_path) s.cutoffs = s.returnProtocolParameter('Number of cutoffs') s.initial_sample_vol_list = s._returnSampleParameterList('Initial sample volume') a,b,c = bl.getBeadsVolumeCoef() expected_dna_cutoff = 150 f_expected = a + b / expected_dna_cutoff + c / expected_dna_cutoff ** 2 v_expected = 100 * f_expected v = s._getBeadsVolume(0, 1) self.assertEqual(v, v_expected) expected_dna_cutoff = 300 f_expected = a + b / expected_dna_cutoff + c / expected_dna_cutoff ** 2 v_expected = 29 * f_expected v = s._getBeadsVolume(1, 1) self.assertEqual(v, v_expected) expected_dna_cutoff = 100 f_expected = a + b / expected_dna_cutoff + c / expected_dna_cutoff ** 2 v_expected = 50 * f_expected v = s._getBeadsVolume(2, 1) self.assertEqual(v, v_expected)
def setUp(self, mock_serial, mock_sleep, mock_sleep2, mock_sleep3, mock_writeAndWait): logging.disable(logging.CRITICAL) self.test_samplesheet_path = r'.\tests\samplesheet_protocol_test.csv' self.test_samplesheet_path_2 = r'.\tests\samplesheet_2stages_protocol_test.csv' copyfile(r'.\factory_default\samplesheet.csv', self.test_samplesheet_path) copyfile(r'.\factory_default\samplesheet_2stages.csv', self.test_samplesheet_path_2) self.ber = ponec.bl.robot(cartesian_port_name='COM1', loadcell_port_name='COM2') self.settings = ponec.settings(self.test_samplesheet_path) self.settings2 = ponec.settings(self.test_samplesheet_path_2) # 11/12/2021 - default pipetting speed is 2500.0 self.default_pipetting_speed = self.ber.getSpeedPipette()
def test_getTubePositionInRack(self, mock_loadIndividualSettings): self.prep_settingsFile('Beads tube column', [0]) self.prep_settingsFile('Beads tube well', [4]) s = ponec.settings(self.mock_csv_path) col, row = s._getTubePositionInRack('Beads') self.assertEqual(col, 0) self.assertEqual(row, 4)
def test__beadsVolNotValid(self, mock_loadIndividualSettings): self.createTempSettingsFile() s = ponec.settings(self.mock_csv_path) self.assertFalse(s._beadsVolNotValid(100)) self.assertFalse(s._beadsVolNotValid(947)) self.assertTrue(s._beadsVolNotValid(0)) self.assertTrue(s._beadsVolNotValid(None))
def test_getBeadsVolUsingDNACutoff(self, mock_loadIndividualSettings): self.prep_createBeadsVolSettings(1) param = 'Initial sample volume' self.prep_settingsFile(param, [100, 29, 50, 0, 0, -1, -1, -1, -1, -1, -1, -1]) s = ponec.settings(self.mock_csv_path) s.cutoffs = s.returnProtocolParameter('Number of cutoffs') s.initial_sample_vol_list = s._returnSampleParameterList('Initial sample volume') a,b,c = bl.getBeadsVolumeCoef() f_expected = a + b / 150 + c / 150 ** 2 v = s._getBeadsVolUsingDNACutoff(0, 1) self.assertEqual(v, f_expected*100) self.assertFalse(v == 0) f_expected = a + b / 300 + c / 300 ** 2 v = s._getBeadsVolUsingDNACutoff(1, 1) self.assertEqual(v, f_expected*29) f_expected = a + b / 100 + c / 100 ** 2 v = s._getBeadsVolUsingDNACutoff(2, 1) self.assertEqual(v, f_expected*50) self.delTempSettingsFile() del s self.prep_createBeadsVolSettings(2) param = 'Initial sample volume' self.prep_settingsFile(param, [100, 29, 50, 0, 0, -1, -1, -1, -1, -1, -1, -1]) s = ponec.settings(self.mock_csv_path) s.cutoffs = s.returnProtocolParameter('Number of cutoffs') s.initial_sample_vol_list = s._returnSampleParameterList('Initial sample volume') f_expected = a + b / 900 + c / 900 ** 2 v = s._getBeadsVolUsingDNACutoff(0, 1) self.assertEqual(v, f_expected*100) f_expected = a + b / 800 + c / 800 ** 2 v = s._getBeadsVolUsingDNACutoff(1, 1) self.assertEqual(v, f_expected*29) f_expected = a + b / 700 + c / 700 ** 2 v = s._getBeadsVolUsingDNACutoff(2, 1) self.assertEqual(v, f_expected*50)
def test_init(self, mock_loadIndividualSettings): self.createTempSettingsFile() s = ponec.settings(self.mock_csv_path) for row in s.settings: self.assertTrue('Parameters' in row) self.assertTrue('0' in row) param = row['Parameters'] if param == 'Number of cutoffs': self.assertEqual(row['0'], '1')
def test_positionsToPurify2ndStage(self, mock_loadIndividualSettings): self.prep_settingsFile('Initial sample volume', [100, 29, 50, 0, 0, -1, -1, -1, -1, -1, -1, -1]) s = ponec.settings(self.mock_csv_path) positions = s.positionsToPurify2ndStage() self.assertEqual(positions, [6, 7, 8]) s.cleanups = 2 positions = s.positionsToPurify2ndStage() self.assertEqual(positions, [3, 4, 5]) self.delTempSettingsFile()
def test_calcBeadsVolFromFrac(self, mock_loadIndividualSettings): param = 'Initial sample volume' self.prep_settingsFile(param, [100, 29, 50, 0, 0, -1, -1, -1, -1, -1, -1, -1]) s = ponec.settings(self.mock_csv_path) s.cutoffs = s.returnProtocolParameter('Number of cutoffs') s.initial_sample_vol_list = s._returnSampleParameterList('Initial sample volume') v = s._calcBeadsVolFromFrac(0, 0.5) self.assertEqual(v, 50) v = s._calcBeadsVolFromFrac(2, 0.5) self.assertEqual(v, 25)
def test_getBeadsSetting(self, mock_loadIndividualSettings): self. prep_createBeadsVolSettings(1) s = ponec.settings(self.mock_csv_path) s.cutoffs = s.returnProtocolParameter('Number of cutoffs') v = s._getBeadsSetting(0, 1, 'Beads volume') self.assertEqual(15, v) v = s._getBeadsSetting(1, 1, 'Beads volume') self.assertEqual(31, v) v = s._getBeadsSetting(2, 1, 'Beads volume') self.assertEqual(22, v)
def test_returnPort(self, mock_loadIndividualSettings): ls_param = 'Load cells controller port' crt_param = 'Cartesian controller port' self.prep_settingsFile(ls_param, ['auto']) self.prep_settingsFile(crt_param, ['auto']) s = ponec.settings(self.mock_csv_path) ls_port = s.returnPort(kind=ls_param) crt_port = s.returnPort(kind=crt_param) self.assertEqual(ls_port, None) self.assertEqual(crt_port, None) self.delTempSettingsFile() self.prep_settingsFile(ls_param, ['COM1']) self.prep_settingsFile(crt_param, ['COM2']) s = ponec.settings(self.mock_csv_path) ls_port = s.returnPort(kind=ls_param) crt_port = s.returnPort(kind=crt_param) self.assertEqual(ls_port, 'COM1') self.assertEqual(crt_port, 'COM2') self.delTempSettingsFile()
def test_positionsToPurify(self, mock_loadIndividualSettings): self.prep_settingsFile('Initial sample volume', [100, 29, 50, 0, 0, -1, -1, -1, -1, -1, -1, -1]) s = ponec.settings(self.mock_csv_path) positions = s.positionsToPurify() self.assertEqual(positions, [0, 1, 2]) self.delTempSettingsFile() self.prep_settingsFile('Initial sample volume', [-1, -1, 60, 20, 30, -1, -1, -1, 0, -1, -1, -1]) s = ponec.settings(self.mock_csv_path) positions = s.positionsToPurify() self.assertEqual(positions, [2, 3, 4]) self.delTempSettingsFile() self.prep_settingsFile('Initial sample volume', [0, 0, 0, 0, 0, -1, -1, -1, 0, -1, -1, -1]) s = ponec.settings(self.mock_csv_path) positions = s.positionsToPurify() self.assertEqual(positions, []) self.delTempSettingsFile()
def test_getBeadsSetting_2stages(self, mock_loadIndividualSettings): self. prep_createBeadsVolSettings(2) s = ponec.settings(self.mock_csv_path) s.cutoffs = s.returnProtocolParameter('Number of cutoffs') v = s._getBeadsSetting(0, 1, 'Beads volume') self.assertEqual(30, v) v = s._getBeadsSetting(1, 1, 'Beads volume') self.assertEqual(20, v) v = s._getBeadsSetting(2, 1, 'Beads volume') self.assertEqual(25, v) self.delTempSettingsFile()
def test_getBeadsVolUsingFraction(self, mock_loadIndividualSettings): self.prep_createBeadsVolSettings(1) param = 'Initial sample volume' self.prep_settingsFile(param, [100, 29, 50, 0, 0, -1, -1, -1, -1, -1, -1, -1]) s = ponec.settings(self.mock_csv_path) s.cutoffs = s.returnProtocolParameter('Number of cutoffs') s.initial_sample_vol_list = s._returnSampleParameterList('Initial sample volume') v = s._getBeadsVolUsingFraction(0, 1) self.assertEqual(v, 100) v = s._getBeadsVolUsingFraction(1, 1) self.assertEqual(v, 29*0.9) v = s._getBeadsVolUsingFraction(2, 1) self.assertEqual(v, 50*1.5) self.prep_createBeadsVolSettings(2) param = 'Initial sample volume' self.prep_settingsFile(param, [100, 29, 50, 0, 0, -1, -1, -1, -1, -1, -1, -1]) s = ponec.settings(self.mock_csv_path) s.cutoffs = s.returnProtocolParameter('Number of cutoffs') s.initial_sample_vol_list = s._returnSampleParameterList('Initial sample volume') v = s._getBeadsVolUsingFraction(0, 1) self.assertEqual(v, 100*0.5) v = s._getBeadsVolUsingFraction(1, 1) self.assertEqual(v, 29*0.6) v = s._getBeadsVolUsingFraction(2, 1) self.assertEqual(v, 50*0.55) v = s._getBeadsVolUsingFraction(0, 2) self.assertEqual(v, 100*(1.0-0.5)) v = s._getBeadsVolUsingFraction(1, 2) self.assertEqual(v, 29*(0.9-0.6)) v = s._getBeadsVolUsingFraction(2, 2) self.assertEqual(v, 50*(1.5-0.55))
def test_getBeadsSetting_2stages_both(self, mock_loadIndividualSettings): self. prep_createBeadsVolSettings(2) s = ponec.settings(self.mock_csv_path) s.cutoffs = s.returnProtocolParameter('Number of cutoffs') # 1st stage v = s._getBeadsSetting(0, 1, 'Beads volume') self.assertEqual(30, v) v = s._getBeadsSetting(1, 1, 'Beads volume') self.assertEqual(20, v) v = s._getBeadsSetting(2, 1, 'Beads volume') self.assertEqual(25, v) f = s._getBeadsSetting(0, 1, 'Fraction') self.assertEqual(0.5, f) f = s._getBeadsSetting(1, 1, 'Fraction') self.assertEqual(0.6, f) f = s._getBeadsSetting(2, 1, 'Fraction') self.assertEqual(0.55, f) dnasize = s._getBeadsSetting(0, 1, 'DNA size') self.assertEqual(900, dnasize) dnasize = s._getBeadsSetting(1, 1, 'DNA size') self.assertEqual(800, dnasize) dnasize = s._getBeadsSetting(2, 1, 'DNA size') self.assertEqual(700, dnasize) # 2nd stage v = s._getBeadsSetting(0, 2, 'Beads volume') self.assertEqual(15, v) v = s._getBeadsSetting(1, 2, 'Beads volume') self.assertEqual(31, v) v = s._getBeadsSetting(2, 2, 'Beads volume') self.assertEqual(22, v) f = s._getBeadsSetting(0, 2, 'Fraction') self.assertEqual(1.0, f) f = s._getBeadsSetting(1, 2, 'Fraction') self.assertEqual(0.9, f) f = s._getBeadsSetting(2, 2, 'Fraction') self.assertEqual(1.5, f) dnasize = s._getBeadsSetting(0, 2, 'DNA size') self.assertEqual(150, dnasize) dnasize = s._getBeadsSetting(1, 2, 'DNA size') self.assertEqual(300, dnasize) dnasize = s._getBeadsSetting(2, 2, 'DNA size') self.assertEqual(100, dnasize)
def test_calcBeadVolFractionFromDNACutoff(self, mock_loadIndividualSettings): param = 'Initial sample volume' self.prep_settingsFile(param, [100, 29, 50, 0, 0, -1, -1, -1, -1, -1, -1, -1]) s = ponec.settings(self.mock_csv_path) s.cutoffs = s.returnProtocolParameter('Number of cutoffs') s.initial_sample_vol_list = s._returnSampleParameterList('Initial sample volume') f = s._calcBeadVolFractionFromDNACutoff(1000) a,b,c = bl.getBeadsVolumeCoef() f_expected = a + b / 1000 + c / 1000 ** 2 self.assertEqual(f, f_expected) f = s._calcBeadVolFractionFromDNACutoff(160) a,b,c = bl.getBeadsVolumeCoef() f_expected = a + b / 160 + c / 160 ** 2 self.assertEqual(f, f_expected)
def test_returnProtocolParameter(self, mock_loadIndividualSettings): self.createTempSettingsFile() s = ponec.settings(self.mock_csv_path) val = s.returnProtocolParameter('Number of cutoffs') self.assertEqual(val, 1)
def test_getRowWithParameter(self, mock_loadIndividualSettings): self.createTempSettingsFile() s = ponec.settings(self.mock_csv_path) row = s.getRowWithParameter('Number of cutoffs') self.assertEqual(row['0'], '1')
def setUp(self, mock_serial, mock_sleep, mock_sleep2, mock_sleep3, mock_writeAndWait): logging.disable(logging.CRITICAL) self.ber = ponec.bl.robot(cartesian_port_name='COM1', loadcell_port_name='COM2') csv_path = r'.\factory_default\samplesheet.csv' self.settings = ponec.settings(csv_path)
def test__getBeadsVolume_2stage(self, mock_loadIndividualSettings): self.prep_createBeadsVolSettings(2) param = 'Initial sample volume' self.prep_settingsFile(param, [100, 29, 50, 0, 0, -1, -1, -1, -1, -1, -1, -1]) s = ponec.settings(self.mock_csv_path) s.cutoffs = s.returnProtocolParameter('Number of cutoffs') s.initial_sample_vol_list = s._returnSampleParameterList('Initial sample volume') v = s._getBeadsVolume(0, 1) self.assertEqual(v, 30) v = s._getBeadsVolume(1, 1) self.assertEqual(v, 20) v = s._getBeadsVolume(2, 1) self.assertEqual(v, 25) v = s._getBeadsVolume(0, 2) self.assertEqual(v, 15) v = s._getBeadsVolume(1, 2) self.assertEqual(v, 31) v = s._getBeadsVolume(2, 2) self.assertEqual(v, 22) # Rewriting the settings file. # Now the function should calculate volume from the initial volume and fraction param = 'Beads volume' self.prep_settingsFile(param, [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]) param = 'Beads volume upper cutoff' self.prep_settingsFile(param, [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]) s = ponec.settings(self.mock_csv_path) s.cutoffs = s.returnProtocolParameter('Number of cutoffs') s.initial_sample_vol_list = s._returnSampleParameterList('Initial sample volume') v = s._getBeadsVolume(0, 1) self.assertEqual(v, 100*0.5) v = s._getBeadsVolume(1, 1) self.assertEqual(v, 29*0.6) v = s._getBeadsVolume(2, 1) self.assertEqual(v, 50*0.55) v = s._getBeadsVolume(0, 2) self.assertEqual(v, 100*(1.0-0.5)) v = s._getBeadsVolume(1, 2) self.assertEqual(v, 29*(0.9-0.6)) v = s._getBeadsVolume(2, 2) self.assertEqual(v, 50*(1.5-0.55)) # Rewriting the settings file. # Now the function should calculate volume from the initial volume and DNA cutoff param = 'Fraction' self.prep_settingsFile(param, [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]) param = 'Fraction upper cutoff' self.prep_settingsFile(param, [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]) s = ponec.settings(self.mock_csv_path) s.cutoffs = s.returnProtocolParameter('Number of cutoffs') s.initial_sample_vol_list = s._returnSampleParameterList('Initial sample volume') a,b,c = bl.getBeadsVolumeCoef() expected_dna_cutoff = 900 f_expected = a + b / expected_dna_cutoff + c / expected_dna_cutoff ** 2 v_expected = 100 * f_expected v = s._getBeadsVolume(0, 1) self.assertEqual(v, v_expected) exp_dna_cutoff_2 = 150 f_expected_2 = a + b / exp_dna_cutoff_2 + c / exp_dna_cutoff_2 ** 2 v_expected_2 = 100 * (f_expected_2 - f_expected) v = s._getBeadsVolume(0, 2) self.assertEqual(v, v_expected_2) expected_dna_cutoff = 800 f_expected = a + b / expected_dna_cutoff + c / expected_dna_cutoff ** 2 v_expected = 29 * f_expected v = s._getBeadsVolume(1, 1) self.assertEqual(v, v_expected) exp_dna_cutoff_2 = 300 f_expected_2 = a + b / exp_dna_cutoff_2 + c / exp_dna_cutoff_2 ** 2 v_expected_2 = 29 * (f_expected_2 - f_expected) v = s._getBeadsVolume(1, 2) self.assertEqual(v, v_expected_2) expected_dna_cutoff = 700 f_expected = a + b / expected_dna_cutoff + c / expected_dna_cutoff ** 2 v_expected = 50 * f_expected v = s._getBeadsVolume(2, 1) self.assertEqual(v, v_expected) exp_dna_cutoff_2 = 100 f_expected_2 = a + b / exp_dna_cutoff_2 + c / exp_dna_cutoff_2 ** 2 v_expected_2 = 50 * (f_expected_2 - f_expected) v = s._getBeadsVolume(2, 2) self.assertEqual(v, v_expected_2)
def test_positionsToPurify2ndStage(self, mock_loadIndividualSettings): param = 'Initial sample volume' self.prep_settingsFile(param, [100, 29, 50, 0, 0, -1, -1, -1, -1, -1, -1, -1]) s = ponec.settings(self.mock_csv_path) values = s._returnSampleParameterList(param) self.assertEqual(values, [100, 29, 50])