Example #1
0
def test_aa():
    print '\n START TEST AMINO-ACIDS'
    print ' **********************\n\n'
    errors = []
    data  = '/home/francisco/Box/utils/pmodeltest/examples/protein.phy'
    models = ['LG', 'WAG', 'JTT', 'MtREV', 'Dayhoff', 'DCMut',
              'RtREV', 'CpREV', 'VT', 'Blosum62', 'MtMam',
              'MtArt', 'HIVw', 'HIVb']
    job_list = pmt.get_job_list(data, models, speed=True, protein=True,
                            verbose=False) # here verbose prints all command lines
    job_list = pmt.run_jobs(job_list, nprocs=2, refresh=0.01)
    job_list = pmt.parse_jobs(job_list, data)
    pmt.clean_all (job_list, data)
    job_list, ord_aic = pmt.aic_calc(job_list, True, verbose=True)
    if not ord_aic == ['Dayhoff+G','DCMut+G','Dayhoff+I+G','DCMut+I+G',
                       'Dayhoff+I','DCMut+I','Dayhoff+G+F','DCMut+G+F',
                       'LG+G+F','Dayhoff+I+G+F','DCMut+I+G+F','LG+I+G+F',
                       'Dayhoff+I+F','DCMut+I+F','LG+I+F','WAG+G','WAG+I+G',
                       'WAG+I','Dayhoff','DCMut','WAG+G+F','RtREV+G+F','LG+G',
                       'WAG+I+G+F','WAG+I+F','RtREV+I+G+F','LG+I+G','RtREV+I+F',
                       'JTT+G+F','JTT+I+G+F','LG+I','JTT+I+F','JTT+G','JTT+I+G',
                       'Dayhoff+F','DCMut+F','CpREV+G+F','LG+F','JTT+I',
                       'CpREV+I+G+F','CpREV+I+F','WAG','WAG+F','MtArt+G+F',
                       'MtArt+I+G+F','RtREV+F','MtREV+G+F','JTT+F','MtREV+I+G+F',
                       'LG','HIVb+G+F','HIVb+I+G+F','MtREV+I+F','Blosum62+G+F',
                       'MtArt+I+F','JTT','Blosum62+I+G+F','Blosum62+I+F','CpREV+F',
                       'RtREV+G','HIVb+I+F','RtREV+I+G','CpREV+G','Blosum62+G',
                       'VT+G','RtREV+I','CpREV+I+G','Blosum62+I+G','VT+G+F',
                       'VT+I+G','CpREV+I','Blosum62+I','VT+I+G+F','VT+I','VT+I+F',
                       'MtMam+G+F','MtMam+I+G+F','Blosum62+F','MtREV+F','Blosum62',
                       'RtREV','MtMam+I+F','VT+F','VT','CpREV','MtArt+F','HIVb+F',
                       'HIVb+G','HIVb+I+G','HIVb+I','HIVw+G+F','HIVw+I+G+F',
                       'MtMam+F','HIVw+I+F','HIVb','MtREV+G','MtREV+I+G','MtArt+G','MtArt+I+G','MtREV+I','HIVw+F','MtArt+I','MtMam+G','MtMam+I+G','MtREV','HIVw+G','HIVw+I+G','MtMam+I','HIVw+I','MtArt','HIVw','MtMam']:
        print 'Test ordering models: ERROR'
        errors.append('ordering models')
    else:
        print 'Test ordering models: OK'
    job_list = pmt.re_run(job_list, data, cutoff=0.95, refresh=0.01, nprocs=2, verbose=True)
    job_list = pmt.parse_jobs(job_list, data)
    pmt.clean_all (job_list, data)
    if sorted(job_list.keys()) == sorted(['Dayhoff+G', 'DCMut+I+G', 'DCMut+G', 'Dayhoff+I+G']):
        print 'Test better models: OK'
    else:
        print 'Test better models: ERROR'
        errors.append('better models')
    job_list, ord_aic = pmt.aic_calc(job_list, False)
    if ord_aic == ['Dayhoff+G', 'DCMut+G', 'Dayhoff+I+G', 'DCMut+I+G']:
        print 'Test ordering better models: OK'
    else:
        print 'Test ordering better models: ERROR'
        errors.append('ordering better models')

    expected = {'DCMut+G'    : 3389.69506,
                'DCMut+I+G'  : 3391.46964,
                'Dayhoff+G'  : 3389.14838,
                'Dayhoff+I+G': 3390.9257}
    for j in expected:
        if not round(expected[j],2) == round(job_list[j]['AIC'],2):
            print 'Test AIC values: ERROR'
            print j, job_list[j]['AIC'], round(job_list[j]['AIC'],2)
            errors.append('AIC values')
            break
    else:
        print 'Test AIC values: OK'
    
    tree = pmt.re_run_best(ord_aic[0], job_list[ord_aic[0]]['cmd'], data, verbose=True)
    pmt.clean_all ({ord_aic[0]: job_list[ord_aic[0]]}, data)

    expected_tree = '((human:0.0563158672,(rat:0.2056794657,rabbit:0.0839307491)0.7670000000:0.0369524233)0.6450000000:0.0289065340,marsupial:0.2993530194,cow:0.1082479462);\n'
    expected_tree = sub('(:[0-9]+\.[0-9]{3})[0-9]*','\\1', expected_tree)
    expected_tree = sub('(\))[0-9]+\.[0-9]*','\\1', expected_tree)
    tree = sub('(:[0-9]+\.[0-9]{3})[0-9]*','\\1', tree)
    tree = sub('(\))[0-9]+\.[0-9]*','\\1', tree)
    if expected_tree == tree:
        print 'Testing final topology: OK'
    else:
        print 'Testing final topology: ERROR'
        errors.append('Different final trees')
        print expected_tree
        print tree

    print '\n\n\n TEST PROTEIN FINISHED\n\n'
    if errors:
        print 'ERROR founds:'
        for e in errors:
            print e
    else:
        print '  -> ALL TEST OK'
    
    print '\n\nas last check, have a look to jmodeltest result in test folder'
Example #2
0
def test_aa():
    print('\n START TEST AMINO-ACIDS')
    print(' **********************\n\n')
    errors = []
    data = 'examples/protein.phy'
    models = [
        'LG', 'WAG', 'JTT', 'MtREV', 'Dayhoff', 'DCMut', 'RtREV', 'CpREV',
        'VT', 'Blosum62', 'MtMam', 'MtArt', 'HIVw', 'HIVb'
    ]
    job_list = pmt.get_job_list(
        data, models, speed=True, protein=True,
        verbose=False)  # here verbose prints all command lines
    job_list = pmt.run_jobs(job_list, nprocs=2, refresh=0.01)
    job_list = pmt.parse_jobs(job_list, data)
    pmt.clean_all(job_list, data)
    job_list, ord_aic = pmt.aic_calc(job_list, True, verbose=True)
    if not ord_aic == [
            'Dayhoff+G', 'DCMut+G', 'Dayhoff+I+G', 'DCMut+I+G', 'Dayhoff+I',
            'DCMut+I', 'Dayhoff+G+F', 'DCMut+G+F', 'LG+G+F', 'Dayhoff+I+G+F',
            'DCMut+I+G+F', 'LG+I+G+F', 'Dayhoff+I+F', 'DCMut+I+F', 'LG+I+F',
            'WAG+G', 'WAG+I+G', 'WAG+I', 'Dayhoff', 'DCMut', 'WAG+G+F',
            'RtREV+G+F', 'LG+G', 'WAG+I+G+F', 'WAG+I+F', 'RtREV+I+G+F',
            'LG+I+G', 'RtREV+I+F', 'JTT+G+F', 'JTT+I+G+F', 'LG+I', 'JTT+I+F',
            'JTT+G', 'JTT+I+G', 'Dayhoff+F', 'DCMut+F', 'CpREV+G+F', 'LG+F',
            'JTT+I', 'CpREV+I+G+F', 'CpREV+I+F', 'WAG', 'WAG+F', 'MtArt+G+F',
            'MtArt+I+G+F', 'RtREV+F', 'MtREV+G+F', 'JTT+F', 'MtREV+I+G+F',
            'LG', 'HIVb+G+F', 'HIVb+I+G+F', 'MtREV+I+F', 'Blosum62+G+F',
            'MtArt+I+F', 'JTT', 'Blosum62+I+G+F', 'Blosum62+I+F', 'CpREV+F',
            'RtREV+G', 'HIVb+I+F', 'RtREV+I+G', 'CpREV+G', 'Blosum62+G',
            'VT+G', 'RtREV+I', 'CpREV+I+G', 'Blosum62+I+G', 'VT+G+F', 'VT+I+G',
            'CpREV+I', 'Blosum62+I', 'VT+I+G+F', 'VT+I', 'VT+I+F', 'MtMam+G+F',
            'MtMam+I+G+F', 'Blosum62+F', 'MtREV+F', 'Blosum62', 'RtREV',
            'MtMam+I+F', 'VT+F', 'VT', 'CpREV', 'MtArt+F', 'HIVb+F', 'HIVb+G',
            'HIVb+I+G', 'HIVb+I', 'HIVw+G+F', 'HIVw+I+G+F', 'MtMam+F',
            'HIVw+I+F', 'HIVb', 'MtREV+G', 'MtREV+I+G', 'MtArt+G', 'MtArt+I+G',
            'MtREV+I', 'HIVw+F', 'MtArt+I', 'MtMam+G', 'MtMam+I+G', 'MtREV',
            'HIVw+G', 'HIVw+I+G', 'MtMam+I', 'HIVw+I', 'MtArt', 'HIVw', 'MtMam'
    ]:
        print('Test ordering models: ERROR')
        errors.append('ordering models')
    else:
        print('Test ordering models: OK')
    job_list = pmt.re_run(job_list,
                          data,
                          cutoff=0.95,
                          refresh=0.01,
                          nprocs=2,
                          verbose=True)
    job_list = pmt.parse_jobs(job_list, data)
    pmt.clean_all(job_list, data)
    if sorted(job_list.keys()) == sorted(
        ['Dayhoff+G', 'DCMut+I+G', 'DCMut+G', 'Dayhoff+I+G']):
        print('Test better models: OK')
    else:
        print('Test better models: ERROR')
        errors.append('better models')
    job_list, ord_aic = pmt.aic_calc(job_list, False)
    if ord_aic == ['Dayhoff+G', 'DCMut+G', 'Dayhoff+I+G', 'DCMut+I+G']:
        print('Test ordering better models: OK')
    else:
        print('Test ordering better models: ERROR')
        errors.append('ordering better models')

    expected = {
        'DCMut+G': 3389.69506,
        'DCMut+I+G': 3391.46964,
        'Dayhoff+G': 3389.14838,
        'Dayhoff+I+G': 3390.9257
    }
    for j in expected:
        if not round(expected[j], 2) == round(job_list[j]['AIC'], 2):
            print('Test AIC values: ERROR')
            print(j, job_list[j]['AIC'], round(job_list[j]['AIC'], 2))
            errors.append('AIC values')
            break
    else:
        print('Test AIC values: OK')

    tree = pmt.re_run_best(ord_aic[0],
                           job_list[ord_aic[0]]['cmd'],
                           data,
                           verbose=True)
    pmt.clean_all({ord_aic[0]: job_list[ord_aic[0]]}, data)

    expected_tree = '((human:0.0563158672,(rat:0.2056794657,rabbit:0.0839307491)0.7670000000:0.0369524233)0.6450000000:0.0289065340,marsupial:0.2993530194,cow:0.1082479462);\n'
    expected_tree = sub('(:[0-9]+\.[0-9]{3})[0-9]*', '\\1', expected_tree)
    expected_tree = sub('(\))[0-9]+\.[0-9]*', '\\1', expected_tree)
    tree = sub('(:[0-9]+\.[0-9]{3})[0-9]*', '\\1', tree)
    tree = sub('(\))[0-9]+\.[0-9]*', '\\1', tree)
    if expected_tree == tree:
        print('Testing final topology: OK')
    else:
        print('Testing final topology: ERROR')
        errors.append('Different final trees')
        print(expected_tree)
        print(tree)

    print('\n\n\n TEST PROTEIN FINISHED\n\n')
    if errors:
        print('ERROR founds:')
        for e in errors:
            print(e)
    else:
        print('  -> ALL TEST OK')

    print('\n\nas last check, have a look to jmodeltest result in test folder')
Example #3
0
def test_nt():
    print '\n START TEST NUCLEOTIDS'
    print ' *********************\n\n'
    errors = []
    data  = '/home/francisco/Box/utils/pmodeltest/examples/dna.phy'
    models = ['JC', 'K80', 'TrNef', 'TPM1', 'TPM2', 'TPM3',
              'TIM1ef', 'TIM2ef', 'TIM3ef', 'TVMef', 'SYM',
              'F81', 'HKY', 'TrN', 'TPM1uf', 'TPM2uf', 'TPM3uf',
              'TIM1', 'TIM2', 'TIM3', 'TVM', 'GTR']
    job_list = pmt.get_job_list(data, models, speed=True, protein=False,
                            verbose=False)
    job_list = pmt.run_jobs(job_list, nprocs=2, refresh=0.01)
    job_list = pmt.parse_jobs(job_list, data)
    pmt.clean_all (job_list, data)
    job_list, ord_aic = pmt.aic_calc(job_list, True, verbose=True)
    if not ord_aic == ['TPM1uf+G+F','TPM3uf+G+F','TIM1+G+F','TPM1uf+I+G+F',
                       'TIM3+G+F','HKY+G+F','TPM3uf+I+G+F','TVM+G+F',
                       'TIM1+I+G+F','TrN+G+F','TIM3+I+G+F','HKY+I+G+F',
                       'TPM2uf+G+F','GTR+G+F','TVM+I+G+F','TPM1uf+I+F',
                       'TPM3uf+I+F','TrN+I+G+F','TIM2+G+F','TPM2uf+I+G+F',
                       'GTR+I+G+F','TIM1+I+F','TIM3+I+F','HKY+I+F','TIM2+I+G+F',
                       'TVM+I+F','TrN+I+F','TPM2uf+I+F','GTR+I+F','TIM2+I+F',
                       'TPM3uf+F','TPM1uf+F','HKY+F','TIM3+F','TIM1+F','TVM+F',
                       'TrN+F','TPM2uf+F','GTR+F','TIM2+F','F81+G+F',
                       'F81+I+G+F','SYM+G','SYM+I+G','TVMef+G','TVMef+I+G',
                       'SYM+I','TIM2ef+G','TIM2ef+I+G','TVMef+I','TPM2+G',
                       'TPM2+I+G','TIM3ef+G','TIM2ef+I','TIM1ef+G','TIM3ef+I+G',
                       'TIM1ef+I+G','TPM2+I','TPM3+G','TPM1+G','TIM3ef+I',
                       'TPM3+I+G','TPM1+I+G','TIM1ef+I','TrNef+G','TrNef+I+G',
                       'F81+I+F','TPM3+I','TPM1+I','K80+G','TrNef+I','K80+I+G',
                       'K80+I','F81+F','SYM','TIM2ef','TVMef','TIM3ef','TIM1ef',
                       'TPM2','TrNef','TPM3','TPM1','K80','JC+G','JC+I+G','JC+I','JC']:
        print 'Test ordering models: ERROR'
        errors.append('ordering models')
    else:
        print 'Test ordering models: OK'
    job_list = pmt.re_run(job_list, data, cutoff=0.95, refresh=0.01, nprocs=2,
                          verbose=True)
    job_list = pmt.parse_jobs(job_list, data)
    pmt.clean_all (job_list, data)
    if sorted(job_list.keys()) == sorted(['GTR+G+F','HKY+G+F','HKY+I+G+F','TIM1+G+F',
                                          'TIM1+I+G+F','TIM3+G+F','TIM3+I+G+F',
                                          'TPM1uf+G+F','TPM1uf+I+F','TPM1uf+I+G+F',
                                          'TPM2uf+G+F','TPM3uf+G+F','TPM3uf+I+F',
                                          'TPM3uf+I+G+F','TVM+G+F','TVM+I+G+F',
                                          'TrN+G+F','TrN+I+G+F']):
        print 'Test better models: OK'
    else:
        print 'Test better models: ERROR'
        errors.append('better models')
    job_list, ord_aic = pmt.aic_calc(job_list, False)
    if ord_aic == ['TPM1uf+G+F','TPM3uf+G+F','TIM1+G+F','TPM1uf+I+G+F','TIM3+G+F',
                   'HKY+G+F','TPM3uf+I+G+F','TVM+G+F','TIM1+I+G+F','TrN+G+F',
                   'TIM3+I+G+F','HKY+I+G+F','TPM2uf+G+F','GTR+G+F','TVM+I+G+F',
                   'TPM1uf+I+F','TPM3uf+I+F','TrN+I+G+F']:
        print 'Test ordering better models: OK'
    else:
        print 'Test ordering better models: ERROR'
        errors.append('ordering better models')
    
    expected = {'TrN+I+G+F'    : 6051.92212,
                'TPM1uf+I+G+F' : 6047.98258,
                'TVM+I+G+F'    : 6051.17612,
                'TIM1+I+G+F'   : 6049.6176 ,
                'TVM+G+F'      : 6049.37942,
                'HKY+G+F'      : 6048.42828,
                'TPM3uf+G+F'   : 6046.7577 ,
                'TIM3+G+F'     : 6048.40978,
                'TPM3uf+I+G+F' : 6048.5627 ,
                'TIM3+I+G+F'   : 6050.20106,
                'GTR+G+F'      : 6051.01224,
                'TrN+G+F'      : 6050.122  ,
                'TPM2uf+G+F'   : 6050.421  ,
                'TPM1uf+G+F'   : 6046.19414,
                'TPM3uf+I+F'   : 6051.40916,
                'TIM1+G+F'     : 6047.84258,
                'HKY+I+G+F'    : 6050.24122,
                'TPM1uf+I+F'   : 6051.35094}
    for j in expected:
        if not round(expected[j],2) == round(job_list[j]['AIC'],2):
            print 'Test AIC values: ERROR'
            errors.append('AIC values')
            break
    else:
        print 'Test AIC values: OK'


    tree = pmt.re_run_best(ord_aic[0], job_list[ord_aic[0]]['cmd'], data, verbose=True) 
    job_list = pmt.parse_jobs({ord_aic[0]: job_list[ord_aic[0]]}, data)
    pmt.clean_all ({ord_aic[0]: job_list[ord_aic[0]]}, data)
    
    expected_tree = '((((((Macaca_mulatta:0.0117313526,(Alouata_seniculus:0.0190656000,(Pongo_pygmaeus_old_3:0.0030481589,Gorilla_gorilla:0.0020294397)0.9770000000:0.0075362735)0.0000000000:0.0004306512)0.9960000000:0.0172550253,Pan_troglodytes:0.0223821735)0.8640000000:0.0093079991,Trachypithecus_johnii:0.0229373226)1.0000000000:0.0776907115,Procolobus_badius:0.1966057310)0.9970000000:0.0650031999,Trachypithecus_geii:0.0048258029)0.8290000000:0.0030733844,Semnopithecus_entellus:0.0052455542,Callithrix_jacchus:0.0081475480);\n'
    expected_tree = sub('(:[0-9]+\.[0-9]{3})[0-9]*','\\1', expected_tree)
    expected_tree = sub('(\))[0-9]+\.[0-9]*','\\1', expected_tree)
    tree = sub('(:[0-9]+\.[0-9]{3})[0-9]*','\\1', tree)
    tree = sub('(\))[0-9]+\.[0-9]*','\\1', tree)
    if expected_tree == tree:
        print 'Testing final topology: OK'
    else:
        print 'Testing final topology: ERROR'
        errors.append('Different final trees')
        print expected_tree
        print tree

    print '\n\n\n TEST NUCLEOTIDES FINISHED\n\n'
    if errors:
        print 'ERROR founds:'
        for e in errors:
            print e
    else:
        print '  -> ALL TEST OK'

    print '\n\nas last check, have a look to jmodeltest result in test folder'
Example #4
0
def test_nt():
    print('\n START TEST NUCLEOTIDS')
    print(' *********************\n\n')
    errors = []
    data = 'examples/dna.phy'
    models = [
        'JC', 'K80', 'TrNef', 'TPM1', 'TPM2', 'TPM3', 'TIM1ef', 'TIM2ef',
        'TIM3ef', 'TVMef', 'SYM', 'F81', 'HKY', 'TrN', 'TPM1uf', 'TPM2uf',
        'TPM3uf', 'TIM1', 'TIM2', 'TIM3', 'TVM', 'GTR'
    ]
    job_list = pmt.get_job_list(data,
                                models,
                                speed=True,
                                protein=False,
                                verbose=False)
    job_list = pmt.run_jobs(job_list, nprocs=2, refresh=0.01)
    job_list = pmt.parse_jobs(job_list, data)
    pmt.clean_all(job_list, data)
    job_list, ord_aic = pmt.aic_calc(job_list, True, verbose=True)
    if not ord_aic == [
            'TPM1uf+G+F', 'TPM3uf+G+F', 'TIM1+G+F', 'TPM1uf+I+G+F', 'TIM3+G+F',
            'HKY+G+F', 'TPM3uf+I+G+F', 'TVM+G+F', 'TIM1+I+G+F', 'TrN+G+F',
            'TIM3+I+G+F', 'HKY+I+G+F', 'TPM2uf+G+F', 'GTR+G+F', 'TVM+I+G+F',
            'TPM1uf+I+F', 'TPM3uf+I+F', 'TrN+I+G+F', 'TIM2+G+F',
            'TPM2uf+I+G+F', 'GTR+I+G+F', 'TIM1+I+F', 'TIM3+I+F', 'HKY+I+F',
            'TIM2+I+G+F', 'TVM+I+F', 'TrN+I+F', 'TPM2uf+I+F', 'GTR+I+F',
            'TIM2+I+F', 'TPM3uf+F', 'TPM1uf+F', 'HKY+F', 'TIM3+F', 'TIM1+F',
            'TVM+F', 'TrN+F', 'TPM2uf+F', 'GTR+F', 'TIM2+F', 'F81+G+F',
            'F81+I+G+F', 'SYM+G', 'SYM+I+G', 'TVMef+G', 'TVMef+I+G', 'SYM+I',
            'TIM2ef+G', 'TIM2ef+I+G', 'TVMef+I', 'TPM2+G', 'TPM2+I+G',
            'TIM3ef+G', 'TIM2ef+I', 'TIM1ef+G', 'TIM3ef+I+G', 'TIM1ef+I+G',
            'TPM2+I', 'TPM3+G', 'TPM1+G', 'TIM3ef+I', 'TPM3+I+G', 'TPM1+I+G',
            'TIM1ef+I', 'TrNef+G', 'TrNef+I+G', 'F81+I+F', 'TPM3+I', 'TPM1+I',
            'K80+G', 'TrNef+I', 'K80+I+G', 'K80+I', 'F81+F', 'SYM', 'TIM2ef',
            'TVMef', 'TIM3ef', 'TIM1ef', 'TPM2', 'TrNef', 'TPM3', 'TPM1',
            'K80', 'JC+G', 'JC+I+G', 'JC+I', 'JC'
    ]:
        print('Test ordering models: ERROR')
        errors.append('ordering models')
    else:
        print('Test ordering models: OK')
    job_list = pmt.re_run(job_list,
                          data,
                          cutoff=0.95,
                          refresh=0.01,
                          nprocs=2,
                          verbose=True)
    job_list = pmt.parse_jobs(job_list, data)
    pmt.clean_all(job_list, data)
    if sorted(job_list.keys()) == sorted([
            'GTR+G+F', 'HKY+G+F', 'HKY+I+G+F', 'TIM1+G+F', 'TIM1+I+G+F',
            'TIM3+G+F', 'TIM3+I+G+F', 'TPM1uf+G+F', 'TPM1uf+I+F',
            'TPM1uf+I+G+F', 'TPM2uf+G+F', 'TPM3uf+G+F', 'TPM3uf+I+F',
            'TPM3uf+I+G+F', 'TVM+G+F', 'TVM+I+G+F', 'TrN+G+F', 'TrN+I+G+F'
    ]):
        print('Test better models: OK')
    else:
        print('Test better models: ERROR')
        errors.append('better models')
    job_list, ord_aic = pmt.aic_calc(job_list, False)
    if ord_aic == [
            'TPM1uf+G+F', 'TPM3uf+G+F', 'TIM1+G+F', 'TPM1uf+I+G+F', 'TIM3+G+F',
            'HKY+G+F', 'TPM3uf+I+G+F', 'TVM+G+F', 'TIM1+I+G+F', 'TrN+G+F',
            'TIM3+I+G+F', 'HKY+I+G+F', 'TPM2uf+G+F', 'GTR+G+F', 'TVM+I+G+F',
            'TPM1uf+I+F', 'TPM3uf+I+F', 'TrN+I+G+F'
    ]:
        print('Test ordering better models: OK')
    else:
        print('Test ordering better models: ERROR')
        errors.append('ordering better models')

    expected = {
        'TrN+I+G+F': 6051.92212,
        'TPM1uf+I+G+F': 6047.98258,
        'TVM+I+G+F': 6051.17612,
        'TIM1+I+G+F': 6049.6176,
        'TVM+G+F': 6049.37942,
        'HKY+G+F': 6048.42828,
        'TPM3uf+G+F': 6046.7577,
        'TIM3+G+F': 6048.40978,
        'TPM3uf+I+G+F': 6048.5627,
        'TIM3+I+G+F': 6050.20106,
        'GTR+G+F': 6051.01224,
        'TrN+G+F': 6050.122,
        'TPM2uf+G+F': 6050.421,
        'TPM1uf+G+F': 6046.19414,
        'TPM3uf+I+F': 6051.40916,
        'TIM1+G+F': 6047.84258,
        'HKY+I+G+F': 6050.24122,
        'TPM1uf+I+F': 6051.35094
    }
    for j in expected:
        if not round(expected[j], 2) == round(job_list[j]['AIC'], 2):
            print('Test AIC values: ERROR')
            errors.append('AIC values')
            break
    else:
        print('Test AIC values: OK')

    tree = pmt.re_run_best(ord_aic[0],
                           job_list[ord_aic[0]]['cmd'],
                           data,
                           verbose=True)
    job_list = pmt.parse_jobs({ord_aic[0]: job_list[ord_aic[0]]}, data)
    pmt.clean_all({ord_aic[0]: job_list[ord_aic[0]]}, data)

    expected_tree = '((((((Macaca_mulatta:0.0117313526,(Alouata_seniculus:0.0190656000,(Pongo_pygmaeus_old_3:0.0030481589,Gorilla_gorilla:0.0020294397)0.9770000000:0.0075362735)0.0000000000:0.0004306512)0.9960000000:0.0172550253,Pan_troglodytes:0.0223821735)0.8640000000:0.0093079991,Trachypithecus_johnii:0.0229373226)1.0000000000:0.0776907115,Procolobus_badius:0.1966057310)0.9970000000:0.0650031999,Trachypithecus_geii:0.0048258029)0.8290000000:0.0030733844,Semnopithecus_entellus:0.0052455542,Callithrix_jacchus:0.0081475480);\n'
    expected_tree = sub('(:[0-9]+\.[0-9]{3})[0-9]*', '\\1', expected_tree)
    expected_tree = sub('(\))[0-9]+\.[0-9]*', '\\1', expected_tree)
    tree = sub('(:[0-9]+\.[0-9]{3})[0-9]*', '\\1', tree)
    tree = sub('(\))[0-9]+\.[0-9]*', '\\1', tree)
    if expected_tree == tree:
        print('Testing final topology: OK')
    else:
        print('Testing final topology: ERROR')
        errors.append('Different final trees')
        print(expected_tree)
        print(tree)

    print('\n\n\n TEST NUCLEOTIDES FINISHED\n\n')
    if errors:
        print('ERROR founds:')
        for e in errors:
            print(e)
    else:
        print('  -> ALL TEST OK')

    print('\n\nas last check, have a look to jmodeltest result in test folder')