def dPhenomeZero(project, blankfile=None): ''' Takes all the biolog data available and performs the signals zero subtraction If blankfile is provided, "blank plates" are parsed and then may be used for zero subtraction ''' if blankfile: logger.info('Going to use a blank file for zero subtraction') if not os.path.exists(blankfile): logger.error('Blank file %s may not be present'%(blankfile)) return False bparser = BiologParser(blankfile) bparser.parse() if len(bparser.plates) == 0: logger.warning('The blank file contains no plates!') return False biolog = Biolog(project) # Fetch the signals to be subtracted, then convert them # to appropriate objects sigs = [s for s in biolog.getZeroSubtractableSignals()] plates = [] discarded = set() for p in getSinglePlates(sigs): if p.plate_id in zeroPlates: if blankfile: for zp in bparser.plates: if zp.plate_id == p.plate_id: plates.append(p) else: plates.append(p) else: discarded.add(p.plate_id) if len(plates) == 0: logger.warning('No plates can be zero subtracted!') logger.warning('Found these plates: %s'%' '.join(discarded)) return False if blankfile: zsub = BiologZero(plates, blank = True, blankData=bparser.plates) else: zsub = BiologZero(plates) if not zsub.zeroSubTract(): logger.warning('Zero subtraction failed!') return False # Grep the wells wells = [w for plate in zsub.plates for w in plate.getWells()] # Add to the project biolog = Biolog(project) biolog.addWells(wells, clustered=False) logger.info('Zero subtraction done on %d plates'%len(plates)) if biolog.atLeastOneParameter(): logger.warning('The activity must be recalculated') 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