def handle(self, *args, **options):
     print("Working on file {}".format(options['pdb_file']))
     
     frag_sp = FragmentSuperpose(options['pdb_file'])
     superposed_fragments = frag_sp.superpose_fragments(use_similar=True)
     if superposed_fragments == []:
         print("No fragments were aligned.")
     else:
         print("{} fragments were aligned.".format(len(superposed_fragments)))
         io = PDBIO()
         zipf = zipfile.ZipFile(options['pdb_file'].replace('.pdb', '.zip'), 'a', zipfile.ZIP_DEFLATED)
         for fragment, pdb_data in superposed_fragments:
             io.set_structure(pdb_data)
             tmp = StringIO()
             io.save(tmp)
             zipf.writestr("all_fragments/{!s}".format(fragment.generate_filename()), tmp.getvalue())
         zipf.close()
    def handle(self, *args, **options):
        print("Working on file {}".format(options['pdb_file']))

        frag_sp = FragmentSuperpose(options['pdb_file'])
        superposed_fragments = frag_sp.superpose_fragments(use_similar=True)
        if superposed_fragments == []:
            print("No fragments were aligned.")
        else:
            print("{} fragments were aligned.".format(
                len(superposed_fragments)))
            io = PDBIO()
            zipf = zipfile.ZipFile(options['pdb_file'].replace('.pdb', '.zip'),
                                   'a', zipfile.ZIP_DEFLATED)
            for fragment, pdb_data in superposed_fragments:
                io.set_structure(pdb_data)
                tmp = StringIO()
                io.save(tmp)
                zipf.writestr(
                    "all_fragments/{!s}".format(fragment.generate_filename()),
                    tmp.getvalue())
            zipf.close()
Example #3
0
    def post (self, request, *args, **kwargs):
        
        frag_sp = FragmentSuperpose(StringIO(request.FILES['pdb_file'].file.read().decode('UTF-8', 'ignore')),request.FILES['pdb_file'].name)
        superposed_fragments = []
        superposed_fragments_repr = []
        if request.POST['similarity'] == 'identical':
            if request.POST['representative'] == 'any':
                superposed_fragments = frag_sp.superpose_fragments()
            else:
                superposed_fragments_repr = frag_sp.superpose_fragments(representative=True, state=request.POST['state'])
                superposed_fragments = frag_sp.superpose_fragments()
        else:
            if request.POST['representative'] == 'any':
                superposed_fragments = frag_sp.superpose_fragments(use_similar=True)
            else:
                superposed_fragments_repr = frag_sp.superpose_fragments(representative=True, use_similar=True, state=request.POST['state'])
                superposed_fragments = frag_sp.superpose_fragments(use_similar=True)
        if superposed_fragments == []:
            self.message = "No fragments were aligned."
        else:
            io = PDBIO()
            out_stream = BytesIO()
            zipf = zipfile.ZipFile(out_stream, 'a')
            for fragment, pdb_data in superposed_fragments:
                io.set_structure(pdb_data)
                tmp = StringIO()
                io.save(tmp)
                if request.POST['representative'] == 'any':
                    zipf.writestr(fragment.generate_filename(), tmp.getvalue())
                else:
                    zipf.writestr("all_fragments//{!s}".format(fragment.generate_filename()), tmp.getvalue())
            if superposed_fragments_repr != []:
                for fragment, pdb_data in superposed_fragments_repr:
                    io.set_structure(pdb_data)
                    tmp = StringIO()
                    io.save(tmp)
                    zipf.writestr("representative_fragments//{!s}".format(fragment.generate_filename()), tmp.getvalue())
            zipf.close()
            if len(out_stream.getvalue()) > 0:
                request.session['outfile'] = { 'interacting_moiety_residue_fragments.zip' : out_stream, }
                self.outfile = 'interacting_moiety_residue_fragments.zip'
                self.success = True
                self.zip = 'zip'
                self.message = '{:n} fragments were superposed.'.format(len(superposed_fragments))

        context = super(FragmentSuperpositionResults, self).get_context_data(**kwargs)
        attributes = inspect.getmembers(self, lambda a:not(inspect.isroutine(a)))
        for a in attributes:
            if not(a[0].startswith('__') and a[0].endswith('__')):
                context[a[0]] = a[1]

        return render(request, self.template_name, context)