Пример #1
0
    def displace_model(self, model, tls, phase):
        """Displace the given model by the tls. 
        """
        tls_info = tls.model_tls_info
        cor = tls_info["COR"]

        for n, Lx_rmsd, Lx_vec, Lx_rho, Lx_pitch in [
            (1, "L1_rmsd", "L1_eigen_vec", "L1_rho", "L1_pitch"),
            (2, "L2_rmsd", "L2_eigen_vec", "L2_rho", "L2_pitch"),
            (3, "L3_rmsd", "L3_eigen_vec", "L3_rho", "L3_pitch")
        ]:

            Lrmsd = tls_info[Lx_rmsd]
            Lvec = tls_info[Lx_vec]
            Lrho = tls_info[Lx_rho]
            Lpitch = tls_info[Lx_pitch]

            ## pre-calculations for screw displacement
            Lorigin = cor + Lrho
            Lrot = Gaussian.GAUSS3C[settings.ADP_PROB] * Lrmsd * phase
            D = AtomMath.dmatrixu(Lvec, Lrot)
            d_screw = (Lrot * Lpitch) * Lvec

            if n == 1:
                chain_id = self.L1_chain.chain_id
            elif n == 2:
                chain_id = self.L2_chain.chain_id
            elif n == 3:
                chain_id = self.L3_chain.chain_id

            chain = model.get_chain(chain_id)

            for frag_id1, frag_id2 in tls.iter_segment_ranges():
                for frag in Structure.iter_fragments(chain.iter_fragments(),
                                                     frag_id1, frag_id2):
                    for atm in frag.iter_atoms():
                        d = numpy.dot(D, atm.position - Lorigin) + d_screw
                        atm.position += d
Пример #2
0
    def displace_model(self, model, tls, phase):
        """Displace the given model by the tls. 
        """
        tls_info  = tls.model_tls_info
        cor       = tls_info["COR"]

        for n, Lx_rmsd, Lx_vec, Lx_rho, Lx_pitch in [
            (1, "L1_rmsd", "L1_eigen_vec", "L1_rho", "L1_pitch"),
            (2, "L2_rmsd", "L2_eigen_vec", "L2_rho", "L2_pitch"),
            (3, "L3_rmsd", "L3_eigen_vec", "L3_rho", "L3_pitch") ]:

            Lrmsd  = tls_info[Lx_rmsd]
            Lvec   = tls_info[Lx_vec]
            Lrho   = tls_info[Lx_rho]
            Lpitch = tls_info[Lx_pitch]

            ## pre-calculations for screw displacement
            Lorigin = cor + Lrho
            Lrot = Gaussian.GAUSS3C[settings.ADP_PROB] * Lrmsd * phase
            D = AtomMath.dmatrixu(Lvec, Lrot)
            d_screw = (Lrot * Lpitch) * Lvec
            
            if n==1:
                chain_id = self.L1_chain.chain_id
            elif n==2:
                chain_id = self.L2_chain.chain_id
            elif n==3:
                chain_id = self.L3_chain.chain_id

            chain = model.get_chain(chain_id)

            for frag_id1, frag_id2 in tls.iter_segment_ranges():
                for frag in Structure.iter_fragments(chain.iter_fragments(), frag_id1, frag_id2):
                    for atm in frag.iter_atoms():
                        d = numpy.dot(D, atm.position - Lorigin) + d_screw
                        atm.position += d
Пример #3
0
    def displace_model(self, model, tls, phase, which_ntls, raw_r3d_file):
        """Displace the given model by the tls.
        """
        tls_info  = tls.model_tls_info
        cor       = tls_info["COR"]

        ## figure out which libration eigenvalue is the largest and
        ## use that value in the animation. Christoph Champ, 2008-08-15
        L1_val = float(tls_info["L1_eigen_val"]) * Constants.RAD2DEG2
        L2_val = float(tls_info["L2_eigen_val"]) * Constants.RAD2DEG2
        L3_val = float(tls_info["L3_eigen_val"]) * Constants.RAD2DEG2
        max_libration = 0.00
        for val in L1_val, L2_val, L3_val:
            if val >= max_libration:
                max_libration = val

        for n, Lx_rmsd, Lx_val, Lx_vec, Lx_rho, Lx_pitch in [
            (1, "L1_rmsd", "L1_eigen_val", "L1_eigen_vec", "L1_rho", "L1_pitch"),
            (2, "L2_rmsd", "L2_eigen_val", "L2_eigen_vec", "L2_rho", "L2_pitch"),
            (3, "L3_rmsd", "L3_eigen_val", "L3_eigen_vec", "L3_rho", "L3_pitch") ]:

            Lrmsd  = tls_info[Lx_rmsd]
            Lvec   = tls_info[Lx_vec]
            Lrho   = tls_info[Lx_rho]
            Lpitch = tls_info[Lx_pitch]
            Lval   = tls_info[Lx_val] * Constants.RAD2DEG2

            ## pre-calculations for screw displacement
            Lorigin = cor + Lrho
            Lrot = Gaussian.GAUSS3C[conf.ADP_PROB] * Lrmsd * phase
            D = AtomMath.dmatrixu(Lvec, Lrot)
            d_screw = (Lrot * Lpitch) * Lvec

            ## TODO: Add max(L) chain_id to ANIMATE.txt, 2009-08-06
            if n == 1:
                chain_id = self.L1_chain.chain_id
            elif n == 2:
                chain_id = self.L2_chain.chain_id
            elif n == 3:
                chain_id = self.L3_chain.chain_id

            chain = model.get_chain(chain_id)

            for frag_id1, frag_id2 in tls.iter_segment_ranges():
                for frag in Structure.iter_fragments(chain.iter_fragments(), frag_id1, frag_id2):
                    for atm in frag.iter_atoms():
                        d = numpy.dot(D, atm.position - Lorigin) + d_screw
                        atm.position += d

                        atm.temp_factor = float(which_ntls)
                        atm.element = str(model.model_id)

                        ## raw input file for tlsanim2r3d->Raster3D
                        ## E.g., "1 0 A 0 0 7.069 -24.991 -2.991"
                        if Lval == max_libration:
                            raw_r3d_file.write("1 ")
                        else:
                            raw_r3d_file.write("0 ")

                        raw_r3d_file.write("%s %s %s %s %.3f %.3f %.3f\n" % (
                            model.model_id, self.L1_chain.chain_id,
                            which_ntls, n,
                            atm.position[0], atm.position[1], atm.position[2]))