def dMutAdd(project, mutID, mutparent,kind, name='', descr='', color=None): ''' Check and add a mutant ''' org = Organism(project) if org.isOrg(mutID): logger.warning('Organism %s is already present'%mutID) logger.warning('Remove it before addition') return False if not org.isOrg(mutparent): logger.error('Parent organism %s not present!'%mutparent) return False elif org.isMutant(mutparent): logger.error('Parent organism %s cannot be a mutant!'%mutparent) return False parents = len(org) - org.howManyMutants() if parents != 1: logger.error('Only one parent is allowed!') return False if not color: org.addOrg(mutID, name=name, description=descr, mutant=True, reference=mutparent, mkind=kind) else: org.addOrg(mutID, name=name, description=descr, mutant=True, reference=mutparent, mkind=kind, color=color) logger.info('Mutant %s (%s) added' %(mutID, org.getOrg(mutID).mkind)) return True
def dGenomeRemove(project, organisms): ''' Remove all the genomic data about specific organism ID(s) ''' gen = Genome(project) oCheck = Organism(project) for org in organisms: if not oCheck.isOrg(org): logger.warning('Genome %s is not present: skipping'%org) continue gen.delProteome(org) logger.info('Successfully removed genome %s'%org) return True
def dPhenomeRemove(project, organisms): ''' Remove all the phenomic data about specific organism ID(s) ''' biolog = Biolog(project) oCheck = Organism(project) for org in organisms: if not oCheck.isOrg(org): logger.warning('Phenome %s is not present: skipping'%org) continue biolog.delOrg(org) logger.info('Successfully removed phenome %s'%org) if biolog.atLeastOneParameter(): logger.warning('The activity must be recalculated') return True
def dRemove(project, organisms): ''' Remove all the organism info regarding a particular organism ID(s) ''' org = Organism(project) for orgID in organisms: if not org.isOrg(orgID): logger.warning('Organism %s is not present: skipping'%orgID) continue muts = [mutID for mutID in org.getOrgMutants(orgID)] org.delOrg(orgID, True) logger.info('Successfully removed organism %s'%orgID) if len(muts) > 0: logger.info('Removed also %d %s mutant(s)'%(len(muts),orgID)) return True
def dGenomeMutAdd(project, mutID, mutfasta): ''' Check and add a mutant ''' if not os.path.exists(mutfasta): logger.error('Fasta file %s may not be present'%(mutfasta)) return False org = Organism(project) if not org.isOrg(mutID): logger.warning('Organism %s is not present yet!'%mutID) return False gen = Genome(project) gen.addProteome(mutID, mutfasta) logger.info('Mutant %s (%s) added, having %d mutated genes' %(mutID, org.getOrg(mutID).mkind,gen.howMany(mutID))) return True
def dGenomeAdd(project, orgID, filename): ''' Add a single genome ''' if not os.path.exists(filename): logger.error('Fasta file %s may not be present'%(filename)) return False filename = os.path.abspath(filename) org = Organism(project) if not org.isOrg(orgID): logger.warning('Organism %s is not present yet!'%orgID) return False gen = Genome(project) gen.addProteome(orgID, filename) logger.info('Added genome %s, having %d proteins'% (orgID, gen.howMany(orgID))) return True
def dAdd(project, orgID, name='', descr='', color=None): ''' Add a single organism ''' org = Organism(project) # If trying to override a present organism, throw an error if org.isOrg(orgID): logger.warning('Organism %s is already present'%orgID) logger.warning('Remove it before addition') return False if not color: org.addOrg(orgID, name=name, description=descr) else: org.addOrg(orgID, name=name, description=descr, color=color) logger.info('Added organism %s'%orgID) return True
def dGenomeDirAdd(project, folder, extension): ''' Add a series of genomes contained in a directory ''' if not os.path.exists(folder): logger.error('Fasta folder %s may not be present'%(folder)) return False logger.info('Looking for files with extension %s'%extension) org = Organism(project) added = 0 for infile in os.listdir(folder): if infile.split('.')[-1] != extension: logger.debug('Skipping file %s'%infile) continue orgID = infile.split('.')[0] filename = os.path.join(folder, infile) if os.path.isdir(filename): continue if not org.isOrg(orgID): logger.warning('Organism %s is not present yet! Skipping...'%orgID) continue if not org.isMutant(orgID): if not dGenomeAdd(project, orgID, filename): logger.error('Could not add genome %s'%infile) return False else: if not dGenomeMutAdd(project, orgID, filename): logger.error('Could not add genome %s'%infile) return False added += 1 if added > 0: logger.info('Added %d genomes from %s'% (added, folder)) else: logger.warning('No genomes were added from %s'%folder) return True
def dPhenomeAdd(project, orgID, filename): ''' Add a single phenome ''' if not os.path.exists(filename): logger.error('Phenomic file %s may not be present'%(filename)) return False org = Organism(project) if not org.isOrg(orgID): logger.warning('Organism %s is not present yet!'%orgID) return False filename = os.path.abspath(filename) bparser = BiologParser(filename) bparser.parse() if len(bparser.plates) == 0: logger.warning('No biolog data was found!') return False # Check the organisms id inside the biolog files strainNumbers = set([plate.strainNumber for plate in bparser.plates]) strainNames = set([plate.strainName for plate in bparser.plates]) samples = set([plate.sample for plate in bparser.plates]) if orgID not in samples: logger.debug('No sign of %s in sample field'%orgID) if orgID not in strainNames: logger.debug('No sign of %s in strainName field'%orgID) if orgID not in strainNumbers: logger.debug('No sign of %s in strainNumber field'%orgID) # TODO: regular expression search if orgID in samples: if len(samples) > 1: logger.warning('''More than one organism ID may be present in this phenomic data file!''') logger.warning('''%s'''%' '.join(samples)) return False for plate in bparser.plates: plate.strain = plate.sample elif orgID in strainNames: if len(strainNames) > 1: logger.warning('''More than one organism ID may be present in this phenomic data file!''') logger.warning('''%s'''%' '.join(strainNames)) return False for plate in bparser.plates: plate.strain = plate.strainName elif orgID in strainNumbers: if len(strainNumbers) > 1: logger.warning('''More than one organism ID may be present in this phenomic data file!''') logger.warning('''%s'''%' '.join(strainNumbers)) return False for plate in bparser.plates: plate.strain = plate.strainNumber else: logger.warning('''The organism ID you provided was not found inside the phenomic data file''') logger.info('''Using it anyway to add this data''') # Prepare a series of Plate objects to catch the replicas dPlates={} for plate in bparser.plates: if plate.plate_id not in dPlates: dPlates[plate.plate_id] = Plate(plate.plate_id) dPlates[plate.plate_id].addData(plate.strain, plate) # Grep the wells wells = [w for plate in dPlates.itervalues() for w in plate.getWells()] # Add to the project biolog = Biolog(project) biolog.addWells(wells, clustered=False) logger.info('Added phenome %s, having %d biolog plates (%d wells)'% (orgID, len(dPlates), len(wells))) return True
def dPhenomeMultiAdd(project, filename): ''' Add a single phenomic file with multiple organisms in it ''' if not os.path.exists(filename): logger.error('Phenomic file %s may not be present'%(filename)) return False filename = os.path.abspath(filename) bparser = BiologParser(filename) bparser.parse() if len(bparser.plates) == 0: logger.warning('No biolog data was found!') return False # Check the organism ids inside the biolog files # Assuming the names are correct AND stored inside the strainName field logger.debug('Assuming organism IDs are correct and inside the field strainName') strainNames = set([plate.strainName for plate in bparser.plates]) strainNames.discard(None) strainNames.discard('') if len(strainNames) == 0: logger.warning('''Field strainName doesn't contain any value (%s)'''%filename) return False logger.info('Found the following organism IDs: %s'%' '.join(strainNames)) for plate in bparser.plates: plate.strain = plate.strainName # TODO: regular expressions verification orgs = strainNames for orgID in orgs: org = Organism(project) if not org.isOrg(orgID): logger.warning('Organism %s is not present yet! Skipping...'%orgID) continue # Prepare a series of Plate objects to catch the replicas dPlates={} for plate in bparser.plates: if plate.strain == orgID: if plate.plate_id not in dPlates: dPlates[plate.plate_id] = Plate(plate.plate_id) dPlates[plate.plate_id].addData(plate.strain, plate) # Grep the wells wells = [w for plate in dPlates.itervalues() for w in plate.getWells()] # Add to the project biolog = Biolog(project) biolog.addWells(wells, clustered=False) logger.info('Added phenome %s, having %d biolog plates (%d wells)'% (orgID, len(dPlates), len(wells))) return True