source: trunk/mzcms/models.py @ 56

Last change on this file since 56 was 56, checked in by j@…, 10 years ago

Added update method for proteins folder

File size: 2.7 KB
Line 
1"""Models for mzcms.
2
3"""
4from persistent import Persistent
5from repoze.folder import Folder
6
7from parsers import parse_dats
8
9class Experiment(Folder):
10    __parent__ = __name__ = None
11    def __init__(self):
12        super(Experiment, self).__init__()
13
14class Proteins(Folder):
15    """A protein container"""
16    def update(self, protein_container):
17        """Updates the protein container so that if the protein is
18           already in the container only the peptide references are
19           added.
20        """
21        for prot_id, prot in protein_container.items():
22            if prot_id in self:
23                self[prot_id].pep_refs.extend(prot.pep_refs)
24            else:
25                self[prot_id] = prot
26
27
28class Protein(Persistent):
29    """A Protein"""
30    def __init__(self, native_id, sequence, pep_refs):
31        self.native_id = str(native_id)
32        self.sequence = str(sequence)
33        self.pep_refs = pep_refs
34
35class Peptide(Persistent):
36    """A peptide"""
37    def __init__(self, sequence, mass):
38        self.sequence = str(sequence)
39        self.mass = float(mass)
40        self.length = len(sequence)
41
42class Spectrum(Persistent):
43    """A Spectrum"""
44    def __init__(self, scan, run, peaks, prec_mz, prec_charge):
45        self.scan = int(scan)
46        self.run = str(run)
47        self.peaks = tuple(peaks)
48        self.prec_mz = float(prec_mz)
49        self.prec_charge = int(prec_charge)
50
51class Psm(Persistent):
52    """A Peptide to Spectrum Match"""
53    def __init__(self, score, rank, delta_mass, pep_ref, spec_ref):
54        self.score = float(score)
55        self.rank = int(rank)
56        self.delta_mass = float(delta_mass)
57        #self.delta_score = float(delta_score)
58        #self.sequence_rank2 = str(sequence_rank2)
59        self.pep_ref = pep_ref
60        self.spec_ref = spec_ref
61
62def appmaker(zodb_root):
63    if not 'app_root' in zodb_root:
64        app_root = Experiment()
65        proteins = Proteins()
66        peptides = Folder()
67        spectra = Folder()
68        psms = Folder()
69        zodb_root['app_root'] = app_root
70        app_root['proteins'] = proteins
71        app_root['peptides'] = peptides
72        app_root['spectra'] = spectra
73        app_root['psms'] = psms
74        folders = parse_dats('./dats',
75                             proteins_container=proteins,
76                             peptides_container=peptides,
77                             spectra_container=spectra,
78                             psms_container=psms,
79                             protein_factory=Protein,
80                             peptide_factory=Peptide,
81                             spectrum_factory=Spectrum,
82                             psm_factory=Psm,
83                             )
84        import transaction
85        transaction.commit()
86
87    return zodb_root['app_root']
Note: See TracBrowser for help on using the repository browser.