Пример #1
0
def IsotropicFitSegmentOutlierRejection(chain, frag_id1, frag_id2):
    segment = chain[frag_id1:frag_id2]
    atoms = list(segment.iter_all_atoms())

    orig_num_atoms = len(atoms)
    rejected = 0

    while True:
        tls_analyzer = tlsmdmodule.TLSModelAnalyzer()
        xlist = atom_selection.chain_to_xmlrpc_list(iter(atoms))
        tls_analyzer.set_xmlrpc_chain(xlist)

        tlsdict = tls_analyzer.isotropic_fit_segment(frag_id1, frag_id2)
        IT, IL, IS, IOrigin = tls_calcs.isotlsdict2tensors(tlsdict)

        num_atoms = 0
        msd_sum = 0.0
        atm_deltab = []

        for atm, uiso in TLS.iter_itls_uiso(iter(atoms), IT, IL, IS, IOrigin):
            num_atoms += 1
            deltab = atm.temp_factor - (Constants.U2B * uiso)
            msd_sum += deltab**2
            atm_deltab.append((deltab, atm))

        sigma = math.sqrt((msd_sum / num_atoms))
        sigma2 = 2.0 * sigma

        outliers = 0
        for deltab, atm in atm_deltab:
            if abs(deltab) > sigma2:
                atoms.remove(atm)
                outliers += 1

        rejected += outliers

        if outliers == 0 or (num_atoms - outliers) < 10:
            console.stdoutln("SEGMENT %s-%s %d->%d" %
                             (frag_id1, frag_id2, orig_num_atoms,
                              orig_num_atoms - rejected))
            return IT, IL, IS, IOrigin
Пример #2
0
    def fit_tls_parameters(self, chain):
        """Use the non-linear TLS model to calculate tensor values.
        """
        tls_group = self.tls_group

        ## anisotropic model
        tlsdict = chain.tls_analyzer.constrained_anisotropic_fit(self.segment_ranges)
        T, L, S, origin = tls_calcs.tlsdict2tensors(tlsdict)
        tls_group.T = T
        tls_group.L = L
        tls_group.S = S
        tls_group.origin = origin

        ## isotropic model
        itlsdict = chain.tls_analyzer.constrained_isotropic_fit(self.segment_ranges)
        IT, IL, IS, IOrigin = tls_calcs.isotlsdict2tensors(itlsdict)
        tls_group.itls_T = IT
        tls_group.itls_L = IL
        tls_group.itls_S = IS

        assert numpy.allclose(tls_group.origin, IOrigin)
Пример #3
0
    def fit_tls_parameters(self, chain):
        """Use the non-linear TLS model to calculate tensor values.
        """
        tls_group = self.tls_group
        
        ## anisotropic model
        tlsdict = chain.tls_analyzer.constrained_anisotropic_fit(self.segment_ranges)
        T, L, S, origin = tls_calcs.tlsdict2tensors(tlsdict)
        tls_group.T = T
        tls_group.L = L
        tls_group.S = S
        tls_group.origin = origin

        ## isotropic model
        itlsdict = chain.tls_analyzer.constrained_isotropic_fit(self.segment_ranges)
        IT, IL, IS, IOrigin = tls_calcs.isotlsdict2tensors(itlsdict)
        tls_group.itls_T = IT
        tls_group.itls_L = IL
        tls_group.itls_S = IS

        assert numpy.allclose(tls_group.origin, IOrigin)
Пример #4
0
def IsotropicFitSegmentOutlierRejection(chain, frag_id1, frag_id2):
    segment = chain[frag_id1:frag_id2]
    atoms = list(segment.iter_all_atoms())

    orig_num_atoms = len(atoms)
    rejected = 0

    while True:
        tls_analyzer = tlsmdmodule.TLSModelAnalyzer()
        xlist = atom_selection.chain_to_xmlrpc_list(iter(atoms))
        tls_analyzer.set_xmlrpc_chain(xlist)

        tlsdict = tls_analyzer.isotropic_fit_segment(frag_id1, frag_id2)
        IT, IL, IS, IOrigin = tls_calcs.isotlsdict2tensors(tlsdict)

        num_atoms = 0
        msd_sum = 0.0
        atm_deltab = []

        for atm, uiso in TLS.iter_itls_uiso(iter(atoms), IT, IL, IS, IOrigin):
            num_atoms += 1;
            deltab = atm.temp_factor - (Constants.U2B * uiso)
            msd_sum += deltab**2
            atm_deltab.append((deltab, atm))

        sigma = math.sqrt((msd_sum / num_atoms))
        sigma2 = 2.0 * sigma

        outliers = 0
        for deltab, atm in atm_deltab:
            if abs(deltab) > sigma2:
                atoms.remove(atm)
                outliers += 1

        rejected += outliers

        if outliers == 0 or (num_atoms - outliers) < 10:
            console.stdoutln("SEGMENT %s-%s %d->%d" % (
                frag_id1, frag_id2, orig_num_atoms, orig_num_atoms - rejected))
            return IT, IL, IS, IOrigin