def set_best_hit_values_for_proteins(self, OrganismDB):

        '''
        Iterate through all proteins in the DB,
        drop duplicates in the hit_dataframe, then store the maximum
        hit information as protein attributes.
        '''

        for org in OrganismDB.organisms:
            print 'setting best hit values for', org.name
            for prot in org.proteins:
                if len(prot.hmm_hit_list) > 0:
                    try:
                        dd_df = prot.hit_dataframe.drop_duplicates(subset='bitscore')
                        try:
                            prot.hit_name_best = dd_df.bitscore.idxmax()
                            prot.hit_evalue_best = dd_df.ix[prot.hit_name_best].evalue
                            prot.hit_bitscore_best = dd_df.ix[prot.hit_name_best].bitscore
                            prot.hit_bias_best = dd_df.ix[prot.hit_name_best].bias
                            prot.hit_start_best = dd_df.ix[prot.hit_name_best].hsp_start
                            prot.hit_end_best = dd_df.ix[prot.hit_name_best].hsp_end
                        except:
                            print 'could not set best hit values for ', org.name

                    except AttributeError:
                        pass
Iterate through all proteins in the DB,
        drop duplicates in the hit_dataframe, then store the maximum
        hit information as protein attributes.