This file is indexed.

/usr/share/pyshared/cogent/app/msms.py is in python-cogent 1.5.1-2.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#!/usr/bin/env python 
"""Application controller and utility functions for MSMS (molecular surface
calculation)."""
import os
import tempfile
from cogent.app.util import CommandLineApplication, ResultPath
from cogent.app.parameters import FlagParameter, ValuedParameter
from cogent.format.xyzrn import XYZRNWriter
from cogent.parse.msms import parse_VertFile


__author__ = "Marcin Cieslik"
__copyright__ = "Copyright 2007-2011, The Cogent Project"
__contributors__ = ["Marcin Cieslik"]
__license__ = "GPL"
__version__ = "1.5.1"
__maintainer__ = "Marcin Cieslik"
__email__ = "mpc4p@virginia.edu"
__status__ = "Development"


class Msms(CommandLineApplication):
    """Application controller for MSMS. The default input is a ``Entity`` 
    instance.
    
    Supported parameters:
      
      - probe_radius float : probe sphere radius, [1.5]
      - density float      : surface points density, [1.0]
      - hdensity float     : surface points high density, [3.0]
      - surface <tses,ases>: triangulated or Analytical SES, [tses]
      - no_area            : turns off the analytical surface area computation
      - noh                : ignore atoms with radius 1.2
      - no_rest_on_pbr     : no restart if pb. during triangulation
      - no_rest            : no restart if pb. are encountered
      - if filename        : sphere input file
      - of filename        : output for triangulated surface
      - af filename        : area file
      - no_header         : do not add comment line to the output
      - free_vertices      : turns on computation for isolated RS vertices
      - all_components     : compute all the surfaces components
    """

    _parameters = {
    #  -probe_radius float : probe sphere radius, [1.5]
    '-probe_radius':ValuedParameter(Prefix='-', Name='probe_radius', Delimiter=' '),
    #  -density float      : surface points density, [1.0]
    '-density':ValuedParameter(Prefix='-', Name='density', Delimiter=' '),
    #  -hdensity float     : surface points high density, [3.0]
    '-hdensity':ValuedParameter(Prefix='-', Name='hdensity', Delimiter=' '),
    #  -surface <tses,ases>: triangulated or Analytical SES, [tses]
    '-surface':ValuedParameter(Prefix='-', Name='surface', Delimiter=' '),
    #  -no_area            : turns off the analytical surface area computation
    '-no_area':FlagParameter(Prefix='-', Name='no_area', Value=False),
    #  -noh                : ignore atoms with radius 1.2      
    '-noh':FlagParameter(Prefix='-', Name='noh', Value=False),
    #  -no_rest_on_pbr     : no restart if pb. during triangulation
    '-no_rest_on_pbr':FlagParameter(Prefix='-', Name='no_rest_on_pbr', Value=False),
    #  -no_rest            : no restart if pb. are encountered
    '-no_rest':FlagParameter(Prefix='-', Name='no_rest', Value=False),
    #  -if filename        : sphere input file
    '-if':ValuedParameter(Prefix='-', Name='if', Delimiter=' ', IsPath=True),
    #  -of filename        : output for triangulated surface
    '-of':ValuedParameter(Prefix='-', Name='of', Delimiter=' ', IsPath=True),
    #  -af filename        : area file
    '-af':ValuedParameter(Prefix='-', Name='af', Delimiter=' ', IsPath=True),
    #  -no_header         : do not add comment line to the output
    '-no_header':FlagParameter(Prefix='-', Name='no_header', Value=False),
    #  -free_vertices      : turns on computation for isolated RS vertices
    '-free_vertices':FlagParameter(Prefix='-', Name='free_vertices', Value=False),
    #  -all_components     : compute all the surfaces components
    '-all_components':FlagParameter(Prefix='-', Name='all_components', Value=False),
    #######################
    #  -one_cavity #atoms at1 [at2][at3] : Compute the surface for an internal  
    # cavity for which at least one atom is specified
    #######################               
    #  -socketName servicename : socket connection from a client
    #  -socketPort portNumber : socket connection from a client
    #  -xdr                : use xdr encoding over socket
    #  -sinetd             : inetd server connectio
    }

    _command = "msms"
    _input_handler = '_input_from_entity'

    def _input_from_entity(self, data):
        """This allows to feed entities to msms."""
        if data:
            # create temporary files and names.
            fd, self._input_filename = tempfile.mkstemp()
            os.close(fd)
            # write XYZR data
            fh = open(self._input_filename, 'wb')
            XYZRNWriter(fh, data)
            fh.close()
            #
            self.Parameters['-if'].on(self._input_filename)
            self.Parameters['-of'].on(self._input_filename) # msms appends .vert .face
            self.Parameters['-af'].on(self._input_filename) # msms appends .area
        if (not self.Parameters['-if'].isOn()) or \
           (not self.Parameters['-of'].isOn()) or \
           (not self.Parameters['-af'].isOn()):
            raise ValueError('All of -if, -of and -af have to be specified.')
        return ""

    def _get_result_paths(self, data):
        result = {}
        vert_file = self.Parameters['-of'].Value + '.vert'
        result['VertFile'] = ResultPath(Path=vert_file, IsWritten=True)
        face_file = self.Parameters['-of'].Value + '.face'
        result['FaceFile'] = ResultPath(Path=face_file, IsWritten=True)
        if not self.Parameters['-no_area'].Value:
            area_file = self.Parameters['-af'].Value + '.area'
            result['AreaFile'] = ResultPath(Path=area_file, IsWritten=True)
        return result
    
    
def surface_xtra(entity, **kwargs):
    """Runs the MSMS application to create the molecular surface, which is an
    a numpy array of 3D-coordinates.
    
    Arguments:
    
        * entity - an ``Entity`` instance.
    
    Additional keyworded arguments are for the ``Msms`` application controller.
    Returns the numpy array and put it into entity.xtra['MSMS_SURFACE'].  
    """
    msms = Msms(**kwargs)
    res = msms(entity)
    surface = parse_VertFile(res['VertFile'])
    entity.xtra['MSMS_SURFACE'] = surface
    res.cleanUp()   # remove all temporary files
    return surface