def plot_profile(self): if not self.canvas_initiated: self.init_profile_canvas() data = {} for station in DB_SESSION.query(Station).with_parent(self.profile).order_by(Station.point.asc()): distance = int(self.profile.interval) * (int(station.point) - 1) for measurement in station.measurements: freq = '%.2f' % measurement.freq if freq not in data: data[freq] = [[], [], []] data[freq][0].append(distance) data[freq][1].append(measurement.in_phase) data[freq][2].append(measurement.quadrature) for f in data: self.axes.plot(data[f][0], data[f][1], label="%.2f kHz IP" % float(f)) self.axes.hold(True) self.axes.plot(data[f][0], data[f][2], label="%.2f kHz OP" % float(f)) self.axes.hold(True) self.axes.hold(False) # Title self.figure.suptitle('Profile #%d' % ( int(self.profile.id) )) self.axes.grid(True, which='both') self.axes.set_xlabel(translate('MeasurementsView', 'Distance')) self.axes.set_ylabel(translate('MeasurementsView', '% HS/HP')) self.axes.legend(loc='upper right', shadow=True)
def lookForCommand(cmd): # before looking up, translate cmd if I can recognize what it is cmd = translate( cmd, twig_command.alias_table) cmd = translate( cmd, twitter_command.alias_table) # first we do some introspect to find methods in module twig_command # a valid function should have a leading 'cmd' valid_function = lambda f: \ inspect.isfunction(f) and \ f.__name__[:3] == 'cmd' and \ f.__name__[3:] != '' func_list = inspect.getmembers( twig_command, valid_function ) # check first if we have the required method # commands are not case sensive for func_name, func in func_list: if func_name[3:].lower() == cmd.lower(): return func # a valid method should begin with 'twiCmd' valid_method = lambda m: \ inspect.ismethod(m) and \ m.__name__[:6] == 'twiCmd' and \ m.__name__[6:] != '' meth_list = inspect.getmembers( twitter_command.TwitterAPIWrapper, valid_method ) # check if required method is inside TwitterAPIWrapper # commands are not case sensive for meth_name, meth in meth_list: if meth_name[6:].lower() == cmd.lower(): return meth return None
def _translate_text(self, source): trans_obj = self.pool.get("ir.translation") trans = trans_obj.search( self.cr, self.uid, [ ("res_id", "=", self.report_id), ("type", "=", "report"), ("src", "=", source), ("lang", "=", self.context["lang"] or self.context["user_lang"]), ], ) if not trans: # trans_obj.create(self.cr, self.uid, {'src':source,'type':'report','lang':self._get_lang(),'res_id':self.report_id,'name':('ir.actions.report.xml,%s' % source)[:128]}) trans_obj.create( self.cr, self.uid, { "src": source, "type": "report", "lang": self._get_lang(), "res_id": self.report_id, "name": "ir.actions.report.xml", }, ) return translate(self.cr, "ir.actions.report.xml", "report", self._get_lang(), source) or source
def checkMessages(phenny, input): #filter through each message in the channel if input.sender in phenny.channels: if input.groups()[0][0] == '.' or ( phenny.nick + ': ' or phenny.nick + ', ') in input.groups()[0].split(' ')[0]: #do not translate if it is a begiak function return translations = {} for i in follows: if caseless_equal(i.nick, input.nick): if (i.nick, i.dir) not in translations: #this user is being followed, translate them direction = '-'.join(i.dir) translations[(i.nick, i.dir)] = translate(phenny, input.group(0), i.dir[0], i.dir[1]) translations[(i.nick, i.dir)] = translations[(i.nick, i.dir)].replace( '*', '') if translations[(i.nick, i.dir)] != input.group(0): #don't bother sending a notice if the input is the same as the output phenny.msg( i.sender, i.nick + ' (' + '-'.join(i.dir) + '): ' + translations[(i.nick, i.dir)])
def cmdAlias(account, params, r): """ # help % get alias of a give command % format: .alias <cmd> % cmd is the command name without leading '.' % e.g.: .alias @ % a list will be returned: % # alias: % A [@,at,mention] % which means '.@' '.at' and '.mention' are all identical * when called as function, return the alias list """ if len( params ) == 0: r.l("!bad argument") return table = {} table.update( twitter_command.alias_table ) table.update( twig_command.alias_table ) cmd = tools.translate( params, table ) alist = [cmd] for k, v in table.iteritems(): if v == cmd: alist.append( k ) alist.sort() r.l( ("cmd", cmd) ) r.l( "alias:" ) r.l( alist ) return alist
def _translate_text(self, source): trans_obj = self.pool.get('ir.translation') trans = trans_obj.search(self.cr,self.uid,[('res_id','=',self.report_id),('type','=','report'),('src','=',source),('lang','=',self.context['lang'] or self.context['user_lang'])]) if not trans: #trans_obj.create(self.cr, self.uid, {'src':source,'type':'report','lang':self._get_lang(),'res_id':self.report_id,'name':('ir.actions.report.xml,%s' % source)[:128]}) trans_obj.create(self.cr, self.uid, {'src':source,'type':'report','lang':self._get_lang(),'res_id':self.report_id,'name':'ir.actions.report.xml'}) return translate(self.cr, 'ir.actions.report.xml', 'report', self._get_lang(), source) or source
def apertium_translate(phenny, input): '''Translates a phrase using APy.''' pairRE = langRE + r'-' + langRE line = strict_check( r'((?:' + pairRE + r'(?:\|' + pairRE + r')*' + r' ?)+)\s+(.*)', input.group(2), apertium_translate) if (len(line.group(2)) > 350) and (not input.admin): raise GrumbleError('Phrase must be under 350 characters.') blocks = line.group(1).split(' ') for block in blocks: pairs = block.split('|') translated = line.group(2) for (input_lang, output_lang) in [pair.split('-') for pair in pairs]: if input_lang == output_lang: raise GrumbleError( 'Stop trying to confuse me! Pick different languages ;)') try: translated = web.decode( translate(phenny, translated, input_lang, output_lang)) except GrumbleError as err: phenny.say('{:s}-{:s}: {:s}'.format(input_lang, output_lang, str(err))) return phenny.reply(web.decode(translated))
def _confirm_box(msg): confirm = QtGui.QMessageBox() confirm.setIcon(QtGui.QMessageBox.Warning) confirm.setWindowTitle(translate('InclinometerView', 'Confirmation')) confirm.setText(msg) confirm.setStandardButtons(QtGui.QMessageBox.No | QtGui.QMessageBox.Yes) confirm.setDefaultButton(QtGui.QMessageBox.No) return confirm.exec()
def _(self, source): """ Handle translations. Because cr and context['lang'] are not available in local context (but in object properties) you can not use c2c_reporting_tools.translation._() in reports Use self._() insead """ frame = inspect.stack()[1][0] filename= frame.f_code.co_filename result = tools.translate(self.cr, filename, 'code', self.lang, source) or source return result
def __call__(self, source): frame = inspect.stack()[1][0] cr = frame.f_locals.get('cr') lang = frame.f_locals.get('context', {}).get('lang', False) filename= frame.f_code.co_filename if not (lang and cr): result = source else: result = tools.translate(cr, filename, 'code', lang, source) or source return result
def measure(self): # Do not run if there is working workers if self.is_measuring(): return # Change measure button self.button_measure.setText(translate("MeasurementsView", 'Working')) self.button_measure.setEnabled(False) self.button_measure.setStyleSheet('color: red;') # Force Qt to change button QtCore.QCoreApplication.processEvents() # Delete old measurements for measurement in self.station.measurements: DB_SESSION.delete(measurement) DB_SESSION.commit() frequencies = self.get_selected_frequencies() for freq in frequencies: Process(target=self.worker, args=(freq, self.worker_count, self.worker_lock, self.tilt_x, self.tilt_y)).start() # Wait for the worker initialization sleep(5) # TODO: Add a timeout to prevent dead lock while True: if not self.is_measuring(): break sleep(1) self.station.time = datetime.now() DB_SESSION.commit() self.model.set_station(self.station) # Set measure button self.button_measure.setText(translate("MeasurementsView", 'Remeasure')) self.button_measure.setEnabled(True) self.button_measure.setStyleSheet('') # Enable next station button self.button_next_station.setEnabled(True)
def __call__(self, source): frame = inspect.stack()[1][0] cr = frame.f_locals.get('cr') lang = frame.f_locals.get('context', {}).get('lang', False) filename = frame.f_code.co_filename if not (lang and cr): result = source else: result = tools.translate(cr, filename, 'code', lang, source) or source return result
def _(self, source): """ Handle translations. Because cr and context['lang'] are not available in local context (but in object properties) you can not use c2c_reporting_tools.translation._() in reports Use self._() insead """ frame = inspect.stack()[1][0] filename = frame.f_code.co_filename result = tools.translate(self.cr, filename, 'code', self.lang, source) or source return result
def set_station(self, station): self.station = station # Set table model self.model.set_station(station) # Current Point self.label_current_point_val.setText(str(self.station.point)) # Distance self.label_distance_val.setText("%d m" % (int(self.profile.interval) * (int(self.station.point) - 1))) # Frames self.label_frames_val.setText(str(self.station.frames)) # Resolution self.label_resolution_val.setText(str(self.station.resolution)) # Disable next button if next station not exist self.button_next_station.setEnabled(bool(self.station.has_measurements())) # Disable prev button if prev station not exist prev_station = self.get_prev_station() self.button_prev_station.setEnabled(bool(prev_station)) # (Re)Measure Button Text self.button_measure.setText( translate("MeasurementsView", 'Remeasure') if self.station.has_measurements() else translate("MeasurementsView", 'Measure') ) # Selected Transmitters for row_id in range(self.tx_model.rowCount()): idx = self.tx_model.index(row_id, 1) if self.tx_model.itemData(idx) in self.get_selected_frequencies(): self.table_tx.selectionModel().select( idx, QtGui.QItemSelectionModel.Select | QtGui.QItemSelectionModel.Rows )
def test(phenny, input): #filter through each message in the channel if input.sender == '#apertium' or input.sender == '#apertium_test': if input.groups()[0][0] == '.' or 'begiak: ' in input.groups()[0].split(' ')[0]: #do not translate if it is a begiak function return for i in follows: if i.nick != '': if i.nick == input.nick: #this user is being followed, translate them direction = '-'.join(i.dir) translation = translate(input.group(0), i.dir[0], i.dir[1]) translation = translation.replace('*', '') if translation != input.group(0): #don't bother sending a notice if the input is the same as the output phenny.write(['NOTICE', i.sender], i.nick + ' (' + '-'.join(i.dir) + '): ' + translation)
def apertium_translate(phenny, input): '''Translates a phrase using APy.''' line = strict_check(r'((?:' + langRE + r'-' + langRE + r' ?)+)\s+(.*)', input.group(2), apertium_translate) if (len(line.group(2)) > 350) and (not input.admin): raise GrumbleError('Phrase must be under 350 characters.') pairs = [tuple(langs.split('-')) for langs in line.group(1).split(' ')] for (input_lang, output_lang) in pairs: if input_lang == output_lang: raise GrumbleError('Stop trying to confuse me! Pick different languages ;)') try: translated = translate(phenny, line.group(2), input_lang, output_lang) phenny.reply(web.decode(translated)) except GrumbleError as err: phenny.say('{:s}-{:s}: {:s}'.format(input_lang, output_lang, str(err)))
def apertium_translate(phenny, input): """Translates a phrase using the apertium API""" line = input.group(2) if not line: raise GrumbleError("Need something to translate!") #line = line.encode('utf-8') pairs = [] guidelines = line.split('|') if len(guidelines) > 1: for guideline in guidelines[1:]: #phenny.say(guideline) pairs.append(guideline.strip().split('-')) guidelines = guidelines[0] #phenny.say("guidelines: "+str(guidelines)) stuff = re.search('(.*) ([a-z]+-[a-z]+)', guidelines) #phenny.say('groups: '+str(stuff.groups())) pairs.insert(0, stuff.group(2).split('-')) translate_me = stuff.group(1) #phenny.say(str(pairs)) #output_lang = line.split(' ')[-1] #input_lang = line.split(' ')[-2] #translate_me = ' '.join(line.split(' ')[:-2]) if (len(translate_me) > 350) and (not input.admin): raise GrumbleError('Phrase must be under 350 characters.') msg = translate_me finalmsg = False translated = "" for (input_lang, output_lang) in pairs: if input_lang == output_lang: raise GrumbleError( 'Stop trying to confuse me! Pick different languages ;)') msg = translate(msg, input_lang, output_lang) if not msg: raise GrumbleError('The %s to %s translation failed, sorry!' % (input_lang, output_lang)) msg = web.decode(msg) # msg.replace(''', "'") this_translated = "(%s-%s) %s" % (input_lang, output_lang, msg) translated = msg #if not finalmsg: # finalmsg = translated #phenny.reply(finalmsg) phenny.reply(translated)
def checkMessages(phenny, input): #filter through each message in the channel if input.sender in phenny.channels: if input.groups()[0][0] == '.' or (phenny.nick + ': ' or phenny.nick + ', ') in input.groups()[0].split(' ')[0]: #do not translate if it is a begiak function return translations = {} for i in follows: if i.nick == input.nick: if (i.nick, i.dir) not in translations: #this user is being followed, translate them direction = '-'.join(i.dir) translations[(i.nick, i.dir)] = translate(phenny, input.group(0), i.dir[0], i.dir[1]) translations[(i.nick, i.dir)] = translations[(i.nick, i.dir)].replace('*', '') if translations[(i.nick, i.dir)] != input.group(0): #don't bother sending a notice if the input is the same as the output phenny.msg(i.sender, i.nick + ' (' + '-'.join(i.dir) + '): ' + translations[(i.nick, i.dir)])
def apertium_translate(phenny, input): """Translates a phrase using the apertium API""" line = input.group(2) if not line: raise GrumbleError("Need something to translate!") #line = line.encode('utf-8') pairs = [] guidelines = line.split('|') if len(guidelines) > 1: for guideline in guidelines[1:]: #phenny.say(guideline) pairs.append(guideline.strip().split('-')) guidelines = guidelines[0] #phenny.say("guidelines: "+str(guidelines)) stuff = re.search('(.*) ([a-z]+-[a-z]+)', guidelines) #phenny.say('groups: '+str(stuff.groups())) pairs.insert(0, stuff.group(2).split('-')) translate_me = stuff.group(1) #phenny.say(str(pairs)) #output_lang = line.split(' ')[-1] #input_lang = line.split(' ')[-2] #translate_me = ' '.join(line.split(' ')[:-2]) if (len(translate_me) > 350) and (not input.admin): raise GrumbleError('Phrase must be under 350 characters.') msg = translate_me finalmsg = False translated = "" for (input_lang, output_lang) in pairs: if input_lang == output_lang: raise GrumbleError('Stop trying to confuse me! Pick different languages ;)') msg = translate(msg, input_lang, output_lang) if not msg: raise GrumbleError('The %s to %s translation failed, sorry!' % (input_lang, output_lang)) msg = web.decode(msg) # msg.replace(''', "'") this_translated = "(%s-%s) %s" % (input_lang, output_lang, msg) translated = msg #if not finalmsg: # finalmsg = translated #phenny.reply(finalmsg) phenny.reply(translated)
def add_row(self, table, point, point_row) : [reference, pack_comment, pack_sampling_comment, J21_comment, metal_weight, organic_weight, date] = point comment = (pack_comment if pack_comment else '') + '\t ' + (pack_sampling_comment if pack_sampling_comment else '') + '\t ' + (J21_comment if J21_comment else '') filtered_comment = '' if comment!='' : dissociated_comment = [translate(information).replace("\n",", ") for information in comment.split("\t")] need_to_be_removed = [] for information in dissociated_comment: if information!="": if "Scan" in information or "#" in information or 'RAS' in information or 'ras' in information: need_to_be_removed.append(information) else : try : int(information) need_to_be_removed.append(information) except ValueError : pass for element in need_to_be_removed: dissociated_comment.remove(element) if len(dissociated_comment): filtered_comment = ', '.join(dissociated_comment) if metal_weight and metal_weight<500: filtered_comment += "Métaux < 500mg" if organic_weight and organic_weight<2500: filtered_comment += "Orga < 2500mg" table.cell(point_row*2+1, 0).width = self.table_width table.cell(point_row*2+1, 0).merge(table.cell(point_row*2+2, 0)).paragraphs[0].add_run(reference).alignment = 1 table.cell(point_row*2+1, 1).width = self.table_width * 0.02 table.cell(point_row*2+1, 1).paragraphs[0].add_run("Mét") table.cell(point_row*2+2, 1).paragraphs[0].add_run("Orga") table.cell(point_row*2+1, 2).width = self.table_width * 0.02 table.cell(point_row*2+1, 2).paragraphs[0].add_run("1" if metal_weight else "0") table.cell(point_row*2+2, 2).paragraphs[0].add_run("1" if organic_weight else "0") table.cell(point_row*2+1, 3).merge(table.cell(point_row*2+2, 3)) table.cell(point_row*2+1, 3).width = self.table_width *0.8 table.cell(point_row*2+1, 4).width = self.table_width * 0.02 table.cell(point_row*2+1, 5).width = self.table_width * 0.6 table.cell(point_row*2+1, 5).merge(table.cell(point_row*2+2, 5)).paragraphs[0].add_run(filtered_comment) table.cell(point_row*2+1, 6).width = self.table_width * 0.02 table.cell(point_row*2+1, 6).merge(table.cell(point_row*2+2, 6))
def on_button_zero_set_clicked(self): ret = self._confirm_box( translate('InclinometerView', 'Do you really want to set the current position to zero?')) if ret == QtGui.QMessageBox.Yes: inclinometer.set_zero()
def create_survie_dataframe(campaigns_dict, chemistry_measurepoint_list, pack_list): ''' Créé une dataframe qui contient les données de l'onglet 'survie' de l'Excel :param head_dataframe: cf initialization.py :param list_campaigns: list des references de campagne :param dict_mp: {'ref_campagne': [mp, ...], ...} :return: ''' global_matrix = [] for campaign_id in campaigns_dict: matrix = [] survival_dict = survival(pack_list) for place_id in campaigns_dict[campaign_id]["place"]: for measurepoint_id in campaigns_dict[campaign_id]["place"][ place_id]["measurepoint"]: if measurepoint_id in chemistry_measurepoint_list: two_chemistry_pack_in_measurepoint = False measurepoint_done = False for pack_id in campaigns_dict[campaign_id]["place"][ place_id]["measurepoint"][measurepoint_id]["pack"]: if campaigns_dict[campaign_id]["place"][place_id][ "measurepoint"][measurepoint_id]["pack"][ pack_id] == 'chemistry': if "duplicate" in campaigns_dict[campaign_id]["place"][ place_id] and "chemistry" in campaigns_dict[ campaign_id]["place"][place_id][ "duplicate"] and len( list( campaigns_dict[campaign_id] ["place"][place_id] ["duplicate"] ["chemistry"].keys())) > 1: number = float( str(campaigns_dict[campaign_id]["place"] [place_id]["number"]) + '.' + str(campaigns_dict[campaign_id]["place"] [place_id]["measurepoint"] [measurepoint_id]["number"])) elif "duplicate" in campaigns_dict[campaign_id][ "place"][ place_id] and "chemistry" in campaigns_dict[ campaign_id]["place"][place_id][ "duplicate"] and len( list(campaigns_dict[ campaign_id]["place"] [place_id] ["duplicate"] ["chemistry"].keys()) ) == 1: number = campaigns_dict[campaign_id]["place"][ place_id]["number"] two_chemistry_pack_in_measurepoint = True else: number = campaigns_dict[campaign_id]["place"][ place_id]["number"] if two_chemistry_pack_in_measurepoint: if measurepoint_done and matrix[-1][-1] == 'ND': matrix[-1] = [ campaigns_dict[campaign_id]["number"], number, translate(campaigns_dict[campaign_id] ["place"][place_id]["name"]), campaigns_dict[campaign_id]["place"] [place_id]["agency"] if "agency" in campaigns_dict[campaign_id]["place"] [place_id] else 'ND', survival_dict[pack_id] if pack_id in survival_dict else 'ND' ] elif not measurepoint_done: measurepoint_done = True matrix.append([ campaigns_dict[campaign_id]["number"], number, translate(campaigns_dict[campaign_id] ["place"][place_id]["name"]), campaigns_dict[campaign_id]["place"] [place_id]["agency"] if "agency" in campaigns_dict[campaign_id]["place"] [place_id] else 'ND', survival_dict[pack_id] if pack_id in survival_dict else 'ND' ]) else: matrix.append([ campaigns_dict[campaign_id]["number"], number, translate(campaigns_dict[campaign_id] ["place"][place_id]["name"]), campaigns_dict[campaign_id]["place"] [place_id]["agency"] if "agency" in campaigns_dict[campaign_id] ["place"][place_id] else 'ND', survival_dict[pack_id] if pack_id in survival_dict else 'ND' ]) global_matrix.append(matrix) if len(global_matrix) > 1: list_dataframe = [] for campaign in global_matrix: df = pd.DataFrame(campaign, columns=[ 'Campagne', 'Numéro', 'Station de mesure', 'Code Agence', 'Survie biotest chimie' ]) list_dataframe.append(df) df_values = pd.concat(list_dataframe) else: df_values = pd.DataFrame(global_matrix[0]) df_values.columns = [ 'Campagne', 'Numéro', 'Station de mesure', 'Code Agence', 'Survie biotest chimie' ] df_survie = df_values.sort_values(['Numéro', 'Campagne']) return df_survie
def load_data(reference): campaigns_dict, measurepoint_list, chemistry_measurepoint_list, chemistry_pack_list, _, _, tox_measurepoint_list, _, agency_code_list, J_dict = initialize( [reference]) agency_data = QueryScript( f"SELECT code, network, hydroecoregion, latitude, longitude FROM {env.DATABASE_RAW}.Agency WHERE code IN {tuple(agency_code_list) if len(agency_code_list)>1 else '('+(str(agency_code_list[0]) if len(agency_code_list) else '0')+')'};" ).execute() context_data = QueryScript( f"SELECT measurepoint_id, recordedAt, temperature, conductivity, ph, oxygen, type, comment, step, barrel FROM {env.DATABASE_RAW}.MeasureExposureCondition WHERE measurepoint_id IN {tuple(measurepoint_list) if len(measurepoint_list)>1 else '('+str(measurepoint_list[0])+')'}" ).execute() temperatures_data = QueryScript( f"SELECT measurepoint_id, sensor1_min, sensor1_average, sensor1_max, sensor2_min, sensor2_average, sensor2_max, sensor3_min, sensor3_average, sensor3_max, all_sensor_average FROM {env.DATABASE_TREATED}.average_temperature WHERE version= {env.CHOSEN_VERSION()} and measurepoint_id IN {tuple(measurepoint_list) if len(measurepoint_list)>1 else '('+str(measurepoint_list[0])+')'}" ).execute() geographic_data = QueryScript( f"SELECT id, latitudeSpotted, longitudeSpotted, lambertX, lambertY, city, zipcode, stream FROM {env.DATABASE_RAW}.Measurepoint WHERE id IN {tuple(measurepoint_list) if len(measurepoint_list)>1 else '('+str(measurepoint_list[0])+')'}" ).execute() place_reference_data = QueryScript( f"SELECT Place.id, Place.reference FROM {env.DATABASE_RAW}.Measurepoint JOIN {env.DATABASE_RAW}.Place ON Place.id= Measurepoint.place_id WHERE Measurepoint.id IN {tuple(measurepoint_list) if len(measurepoint_list)>1 else '('+str(measurepoint_list[0])+')'}" ).execute() conform_threshold = QueryScript( f"SELECT parameter, min, max FROM {env.DATABASE_TREATED}.r1 WHERE version={env.CHOSEN_VERSION()}" ).execute() conform_chemistry_portion_test = QueryScript( f"SELECT Measurepoint.id, sampling_weight, organic_total_weight, (sampling_weight - metal_tare_bottle_weight)>500, (organic_total_weight-organic_tare_bottle_weight)>2500 FROM {env.DATABASE_RAW}.Pack JOIN {env.DATABASE_RAW}.Measurepoint ON Measurepoint.id=Pack.measurepoint_id WHERE Measurepoint.id IN {tuple(measurepoint_list) if len(measurepoint_list)>1 else '('+str(measurepoint_list[0])+')'} and Pack.nature='chemistry'" ).execute() chemistry_survival = survival(chemistry_pack_list) place_dict = {} year = None week_start_number = None week_end_number = None for campaign_id in campaigns_dict: place_dict = campaigns_dict[campaign_id]["place"] for place_id in place_dict: for place, reference in place_reference_data: if place_id == place: place_dict[place_id]["reference"] = reference place_dict[place_id]["reference_photo"] = f"{reference}-01" elif int(place_id) == place: number = round((place_id - int(place_id)) * 10) place_dict[place_id][ "reference_photo"] = f"{reference}-{number if number>9 else '0'+str(number) }" for code, network, hydroecoregion, latitudeTh, longitudeTh in agency_data: if "agency" in place_dict[place_id] and place_dict[place_id][ "agency"] == code: if network: place_dict[place_id]["network"] = network if hydroecoregion: place_dict[place_id]["hydroecoregion"] = hydroecoregion if latitudeTh: place_dict[place_id]["latitudeTh"] = latitudeTh if longitudeTh: place_dict[place_id]["longitudeTh"] = longitudeTh if "condition" not in place_dict[place_id]: place_dict[place_id]["condition"] = { "temperature_min": None, "temperature_max": None, "alimentation_average_temperature_min": None, "alimentation_average_temperature_max": None, "reproduction_average_temperature_min": None, "reproduction_average_temperature_max": None, "chemistry_average_temperature_min": None, "chemistry_average_temperature_max": None, "chemistry_temperature_max": None, "average_temperature": None, "J0": {}, "J7": {}, "J14": {}, "J21": {}, "JN": {} } place_dict[place_id]["not conform"] = [] for measurepoint_id in place_dict[place_id]["measurepoint"]: ### Add chemistry _survival for pack_id in place_dict[place_id]["measurepoint"][ measurepoint_id]["pack"]: if chemistry_survival and pack_id in chemistry_survival: place_dict[place_id][ "chemistry_survival"] = chemistry_survival[pack_id] ### Add temperature data for mp_id, sensor1_min, sensor1_average, sensor1_max, sensor2_min, sensor2_average, sensor2_max, sensor3_min, sensor3_average, sensor3_max, all_sensor_average in temperatures_data: if measurepoint_id == mp_id: if sensor1_average: if place_dict[place_id]["condition"][ "alimentation_average_temperature_min"]: place_dict[place_id]["condition"][ "alimentation_average_temperature_min"] = min( sensor1_average, place_dict[place_id]["condition"] ["alimentation_average_temperature_min"]) else: place_dict[place_id]["condition"][ "alimentation_average_temperature_min"] = sensor1_average if place_dict[place_id]["condition"][ "alimentation_average_temperature_max"]: place_dict[place_id]["condition"][ "alimentation_average_temperature_max"] = max( sensor1_average, place_dict[place_id]["condition"] ["alimentation_average_temperature_max"]) else: place_dict[place_id]["condition"][ "alimentation_average_temperature_max"] = sensor1_average if sensor2_average: if place_dict[place_id]["condition"][ "reproduction_average_temperature_min"]: place_dict[place_id]["condition"][ "reproduction_average_temperature_min"] = min( sensor2_average, place_dict[place_id]["condition"] ["reproduction_average_temperature_min"]) else: place_dict[place_id]["condition"][ "reproduction_average_temperature_min"] = sensor2_average if place_dict[place_id]["condition"][ "reproduction_average_temperature_max"]: place_dict[place_id]["condition"][ "reproduction_average_temperature_max"] = max( sensor2_average, place_dict[place_id]["condition"] ["reproduction_average_temperature_max"]) else: place_dict[place_id]["condition"][ "reproduction_average_temperature_max"] = sensor2_average if sensor3_average: if place_dict[place_id]["condition"][ "chemistry_average_temperature_min"]: place_dict[place_id]["condition"][ "chemistry_average_temperature_min"] = min( sensor3_average, place_dict[place_id]["condition"] ["chemistry_average_temperature_min"]) else: place_dict[place_id]["condition"][ "chemistry_average_temperature_min"] = sensor3_average if place_dict[place_id]["condition"][ "chemistry_average_temperature_max"]: place_dict[place_id]["condition"][ "chemistry_average_temperature_max"] = max( sensor3_average, place_dict[place_id]["condition"] ["chemistry_average_temperature_max"]) else: place_dict[place_id]["condition"][ "chemistry_average_temperature_max"] = sensor3_average if sensor3_max: if place_dict[place_id]["condition"][ "chemistry_temperature_max"]: place_dict[place_id]["condition"][ "chemistry_temperature_max"] = max( sensor3_max, place_dict[place_id] ["condition"]["chemistry_temperature_max"]) else: place_dict[place_id]["condition"][ "chemistry_temperature_max"] = sensor3_max if sensor1_min or sensor2_min or sensor3_min: last_value, sensor1_min, sensor2_min, sensor3_min = [ element if element != None else 100 for element in [ place_dict[place_id]["condition"] ["temperature_min"], sensor1_min, sensor2_min, sensor3_min ] ] place_dict[place_id]["condition"][ "temperature_min"] = round( min(last_value, sensor1_min, sensor2_min, sensor3_min), 1) if sensor1_max or sensor2_max or sensor3_max: last_value, sensor1_max, sensor2_max, sensor3_max = [ element if element != None else -100 for element in [ place_dict[place_id]["condition"] ["temperature_max"], sensor1_max, sensor2_max, sensor3_max ] ] place_dict[place_id]["condition"][ "temperature_max"] = max(last_value, sensor1_max, sensor2_max, sensor3_max) if all_sensor_average and not place_dict[place_id][ "condition"]["average_temperature"]: place_dict[place_id]["condition"][ "average_temperature"] = round( all_sensor_average, 1) ### Add context data for mp_id, recordedAt, temperature, conductivity, ph, oxygen, barrel_type, comment, step, barrel in context_data: not_good_one = False if step == 50: if barrel != "R0": not_good_one = True if measurepoint_id == mp_id and not not_good_one: if barrel_type: place_dict[place_id]["barrel_type"] = barrel_type for J in J_dict[place_id]: if J != "J28" and J != "N" and J_dict[place_id][J][ "full_date"] and J_dict[place_id][J][ "full_date"] == recordedAt: if not week_start_number: week_start_number = J_dict[place_id][J][ "full_date"].isocalendar()[1] elif J_dict[place_id][J]["full_date"].isocalendar( )[1] < week_start_number: week_start_number = J_dict[place_id][J][ "full_date"].isocalendar()[1] if not week_end_number: week_end_number = J_dict[place_id][J][ "full_date"].isocalendar()[1] elif J_dict[place_id][J]["full_date"].isocalendar( )[1] > week_end_number: week_end_number = J_dict[place_id][J][ "full_date"].isocalendar()[1] if conductivity: place_dict[place_id]["condition"][J][ "conductivity"] = conductivity if ph: place_dict[place_id]["condition"][J]["ph"] = ph if oxygen: place_dict[place_id]["condition"][J][ "oxygen"] = oxygen if temperature: place_dict[place_id]["condition"][J][ "temperature"] = temperature if comment: dissociated_comment = [ translate(information).replace("\n", ", ") for information in comment.split("\t") ] need_to_be_removed = [] for information in dissociated_comment: if information != "": if (len(information) >= 10 and information[:10] == "Vandalisme" ) or (len(information) >= 23 and information[:23] == 'Système non récupérable' ) or (len(information) >= 16 and information[:16] == 'Perte du système'): place_dict[place_id][ "vandalism"] = True if information[ -1] == "%" or "Scan" in information or "#" in information or 'RAS' in information: need_to_be_removed.append( information) else: try: int(information) need_to_be_removed.append( information) except ValueError: pass for element in need_to_be_removed: dissociated_comment.remove(element) if len(dissociated_comment): place_dict[place_id]["condition"][J][ "comment"] = '. '.join( dissociated_comment) place_dict[place_id]["condition"][J]["date"] = ( J_dict[place_id][J]["full_date"] ).strftime("%d/%m/%Y %H:%M") if not year: year = J_dict[place_id][J]["full_date"].year ### Add geographic data for mp_id, latitudeSpotted, longitudeSpotted, lambertX, lambertY, city, zipcode, stream in geographic_data: if mp_id == measurepoint_id: if latitudeSpotted and longitudeSpotted and not "latitudeSpotted" in place_dict[ place_id]: place_dict[place_id][ "latitudeSpotted"] = f"{latitudeSpotted}".replace( ',', '.') place_dict[place_id][ "longitudeSpotted"] = f"{longitudeSpotted}".replace( ',', '.') lambertXSpotted, lambertYSpotted = convert_gps_into_lambert( latitudeSpotted, longitudeSpotted) place_dict[place_id][ "lambertXSpotted"] = f"{round(lambertXSpotted,1)}".replace( ',', '.') place_dict[place_id][ "lambertYSpotted"] = f"{round(lambertYSpotted,1)}".replace( ',', '.') if lambertX and lambertY and not "lambertX" in place_dict[ place_id]: place_dict[place_id][ "lambertX"] = f"{lambertX}".replace(',', '.') place_dict[place_id][ "lambertY"] = f"{lambertY}".replace(',', '.') if city: place_dict[place_id]["city"] = translate(city) if zipcode: place_dict[place_id]["zipcode"] = zipcode if stream: place_dict[place_id]["stream"] = f"{stream}".replace( ',', '.') ### Add conformity for parameter, min_treshold, max_threshold in conform_threshold: ### chemistry conformity if measurepoint_id in chemistry_measurepoint_list: if parameter == 'Température moyenne (chimie)': if place_dict[place_id]["condition"][ "chemistry_average_temperature_min"] and min_treshold > place_dict[ place_id]["condition"][ "chemistry_average_temperature_min"]: if not "min_average_temperature_chemistry" in place_dict[ place_id]["not conform"]: place_dict[place_id]["not conform"].append( "min_average_temperature_chemistry") if place_dict[place_id]["condition"][ "chemistry_average_temperature_max"] and place_dict[ place_id]["condition"][ "chemistry_average_temperature_max"] > max_threshold: if not "max_average_temperature_chemistry" in place_dict[ place_id]["not conform"]: place_dict[place_id]["not conform"].append( "max_average_temperature_chemistry") if place_dict[place_id]["condition"][ "chemistry_average_temperature_max"] and place_dict[ place_id]["condition"][ "chemistry_temperature_max"] > 21: if not "max_temperature_chemistry" in place_dict[ place_id]["not conform"]: place_dict[place_id]["not conform"].append( "max_temperature_chemistry") if parameter == 'Oxygène (chimie)': for J in place_dict[place_id]["condition"]: if J[0] == 'J' and place_dict[place_id][ "condition"][J] and "oxygen" in place_dict[ place_id]["condition"][J]: if place_dict[place_id]["condition"][J][ "oxygen"] and min_treshold > place_dict[ place_id]["condition"][J]["oxygen"]: if not "oxygen_chemistry" in place_dict[ place_id]["not conform"]: place_dict[place_id][ "not conform"].append( "oxygen_chemistry") if parameter == 'Conductivité (chimie)': for J in place_dict[place_id]["condition"]: if J[0] == 'J' and place_dict[place_id][ "condition"][ J] and "conductivity" in place_dict[ place_id]["condition"][J]: if place_dict[place_id]["condition"][J][ "conductivity"]: if min_treshold > place_dict[place_id][ "condition"][J]["conductivity"]: if not "min_conductivity_chemistry" in place_dict[ place_id]["not conform"]: place_dict[place_id][ "not conform"].append( "min_conductivity_chemistry" ) if place_dict[place_id]["condition"][J][ "conductivity"] > max_threshold: if not "max_conductivity_chemistry" in place_dict[ place_id]["not conform"]: place_dict[place_id][ "not conform"].append( "max_conductivity_chemistry" ) if parameter == 'pH (chimie)': for J in place_dict[place_id]["condition"]: if J[0] == 'J' and place_dict[place_id][ "condition"][J] and "ph" in place_dict[ place_id]["condition"][J]: if place_dict[place_id]["condition"][J]["ph"]: if min_treshold > place_dict[place_id][ "condition"][J]["ph"]: if not "min_ph_chemistry" in place_dict[ place_id]["not conform"]: place_dict[place_id][ "not conform"].append( "min_ph_chemistry") if place_dict[place_id]["condition"][J][ "ph"] > max_threshold: if not "max_ph_chemistry" in place_dict[ place_id]["not conform"]: place_dict[place_id][ "not conform"].append( "max_ph_chemistry") ### toxicity conformity if measurepoint_id in tox_measurepoint_list: if parameter == 'Température moyenne (toxicité)': if place_dict[place_id]["condition"][ "alimentation_average_temperature_min"]: if min_treshold > place_dict[place_id]["condition"][ "alimentation_average_temperature_min"]: if not "min_temperature_alimentation" in place_dict[ place_id]["not conform"]: place_dict[place_id]["not conform"].append( "min_temperature_alimentation") if place_dict[place_id]["condition"][ "alimentation_average_temperature_max"] > max_threshold: if not "max_temperature_alimentation" in place_dict[ place_id]["not conform"]: place_dict[place_id]["not conform"].append( "max_temperature_alimentation") if place_dict[place_id]["condition"][ "reproduction_average_temperature_min"]: if min_treshold > place_dict[place_id]["condition"][ "reproduction_average_temperature_min"]: if not "min_temperature_reproduction" in place_dict[ place_id]["not conform"]: place_dict[place_id]["not conform"].append( "min_temperature_reproduction") if place_dict[place_id]["condition"][ "reproduction_average_temperature_max"] > max_threshold: if not "max_temperature_reproduction" in place_dict[ place_id]["not conform"]: place_dict[place_id]["not conform"].append( "max_temperature_reproduction") if parameter == 'Oxygène (toxicité)': for J in place_dict[place_id]["condition"]: if J[0] == 'J' and place_dict[place_id][ "condition"][J] and "oxygen" in place_dict[ place_id]["condition"][J]: if place_dict[place_id]["condition"][J][ "oxygen"] and min_treshold > place_dict[ place_id]["condition"][J]["oxygen"]: if not "oxygen_tox" in place_dict[ place_id]["not conform"]: place_dict[place_id][ "not conform"].append("oxygen_tox") if parameter == 'Conductivité (toxicité)': for J in place_dict[place_id]["condition"]: if J[0] == 'J' and place_dict[place_id][ "condition"][ J] and "conductivity" in place_dict[ place_id]["condition"][J]: if place_dict[place_id]["condition"][J][ "conductivity"]: if min_treshold > place_dict[place_id][ "condition"][J]["conductivity"]: if not "min_conductivity_tox" in place_dict[ place_id]["not conform"]: place_dict[place_id][ "not conform"].append( "min_conductivity_tox") if place_dict[place_id]["condition"][J][ "conductivity"] > max_threshold: if not "max_conductivity_tox" in place_dict[ place_id]["not conform"]: place_dict[place_id][ "not conform"].append( "max_conductivity_tox") if parameter == 'pH (toxicité)': for J in place_dict[place_id]["condition"]: if J[0] == 'J' and place_dict[place_id][ "condition"][J] and "ph" in place_dict[ place_id]["condition"][J]: if place_dict[place_id]["condition"][J]["ph"]: if min_treshold > place_dict[place_id][ "condition"][J]["ph"]: if not "min_ph_tox" in place_dict[ place_id]["not conform"]: place_dict[place_id][ "not conform"].append( "min_ph_tox") if place_dict[place_id]["condition"][J][ "ph"] > max_threshold: if not "max_ph_tox" in place_dict[ place_id]["not conform"]: place_dict[place_id][ "not conform"].append( "max_ph_tox") ### Add chemistry portion validation for mp_id, metal_weight, organic_weight, metal_result, organic_result in conform_chemistry_portion_test: if mp_id == measurepoint_id: if metal_weight: place_dict[place_id][ "chemistry metal portion validation"] = metal_result if organic_weight: place_dict[place_id][ "chemistry organic portion validation"] = organic_result return place_dict, year, week_start_number, week_end_number
def getRepoInfo(self): return translate(32023) + ' ' + self.name\ + '\n' + translate(32024) + ' ' + self.ownerName\ + '\n' + translate(32025) + ' ' + self.addonName\ + '\n' + translate(32026) + ' ' + self.getRepoPathToAddon()
def create_tox_dataframe(campaigns_dict, measurepoint_list): list_dataframe = [] data = QueryScript(f"SELECT measurepoint_id, round(male_survival_7_days), round(alimentation, 1), round(neurotoxicity, 1), round(female_survivor), number_days_exposition, number_female_concerned, round(percent_inhibition_fecondite, 1), number_female_analysis, molting_cycle,number_female_concerned_area,endocrine_disruption, molting_cycle_conformity, surface_retard_conformity FROM {env.DATABASE_TREATED}.toxtable WHERE version= {env.CHOSEN_VERSION()} AND measurepoint_id IN {tuple(measurepoint_list) if len(measurepoint_list)>1 else '('+(str(measurepoint_list[0]) if len(measurepoint_list) else '0')+')'};").execute() for campaign_id in campaigns_dict: matrix =[] for place_id in campaigns_dict[campaign_id]["place"]: temp = [None]*20 if "duplicate" in campaigns_dict[campaign_id]["place"][place_id] and ("alimentation" in campaigns_dict[campaign_id]["place"][place_id]["duplicate"] or "neurology" in campaigns_dict[campaign_id]["place"][place_id]["duplicate"] or "reproduction" in campaigns_dict[campaign_id]["place"][place_id]["duplicate"]): for measurepoint_id in campaigns_dict[campaign_id]["place"][place_id]["measurepoint"]: number = float(str(campaigns_dict[campaign_id]["place"][place_id]["number"])+'.'+str(campaigns_dict[campaign_id]["place"][place_id]["measurepoint"][measurepoint_id]["number"])) for mp_id, male_survival_7_days, alimentation, neurotoxicity, female_survivor, number_days_exposition, number_female_concerned, percent_inhibition_fecondite, number_female_analysis, molting_cycle, number_female_concerned_area, endocrine_disruption, molting_cycle_conformity, surface_retard_conformity in data : if measurepoint_id==mp_id and measurepoint_id in measurepoint_list : for index in range(4): temp[index] = [campaigns_dict[campaign_id]["number"], number, translate(campaigns_dict[campaign_id]["place"][place_id]["name"]), campaigns_dict[campaign_id]["place"][place_id]["agency"] if "agency" in campaigns_dict[campaign_id]["place"][place_id] else 'ND'][index] temp[5], temp[6] = male_survival_7_days if male_survival_7_days else 'NA', alimentation if male_survival_7_days else None if neurotoxicity != None: temp[7] = neurotoxicity if male_survival_7_days else None if female_survivor or number_days_exposition: for index in range(9,20): temp[index] = [female_survivor, number_days_exposition, number_female_concerned, percent_inhibition_fecondite if percent_inhibition_fecondite and female_survivor else "NA", number_female_analysis, molting_cycle, number_female_concerned_area, endocrine_disruption if endocrine_disruption else "NA", measurepoint_id, molting_cycle_conformity, surface_retard_conformity][index-9] matrix.append(temp) temp = [None]*20 else : number = campaigns_dict[campaign_id]["place"][place_id]["number"] for measurepoint_id in campaigns_dict[campaign_id]["place"][place_id]["measurepoint"]: for mp_id, male_survival_7_days, alimentation, neurotoxicity, female_survivor, number_days_exposition, number_female_concerned, percent_inhibition_fecondite, number_female_analysis, molting_cycle, number_female_concerned_area, endocrine_disruption, molting_cycle_conformity, surface_retard_conformity in data : if measurepoint_id==mp_id : for index in range(4): temp[index] = [campaigns_dict[campaign_id]["number"], number, translate(campaigns_dict[campaign_id]["place"][place_id]["name"]), campaigns_dict[campaign_id]["place"][place_id]["agency"] if "agency" in campaigns_dict[campaign_id]["place"][place_id] else 'ND'][index] temp[5], temp[6] = male_survival_7_days if male_survival_7_days else 'NA', alimentation if male_survival_7_days else None if neurotoxicity !=None : temp[7] = neurotoxicity if male_survival_7_days else None if female_survivor or number_days_exposition : for index in range(9,20): temp[index] = [female_survivor, number_days_exposition, number_female_concerned, percent_inhibition_fecondite if percent_inhibition_fecondite and female_survivor else "NA" , number_female_analysis, molting_cycle, number_female_concerned_area, endocrine_disruption if endocrine_disruption else "NA", measurepoint_id, molting_cycle_conformity, surface_retard_conformity][index-9] matrix.append(temp) df = pd.DataFrame(matrix) df.columns = ['Campagne', 'Numéro', 'Station de mesure', 'Code Agence','','Survie Male - 7 jours', 'Alimentation', 'Neurotoxicité AChE','', 'Survie Femelle','Nombre jours exposition in situ', 'n','Fécondité','n','Cycle de mue','n','Perturbation endocrinienne','', '', ''] list_dataframe.append(df) df_values = pd.concat(list_dataframe) df_sorted = df_values.sort_values(['Numéro', 'Campagne']) return df_sorted
def create_edi_dataframe(campaign, place_dict, chemistry_measurepoint_list, chemistry_pack_list, chemistry_7j_measurepoint_list, chemistry_21j_measurepoint_list): ''' Créé une dataframe à partir d'un référence de campagne. Les colonnes vides sont supprimées :param place_dict: :return: dataframe: ''' measurepoint_data = QueryScript(f"SELECT id, reference, name, city, zipcode, r0_threshold, r0_sample_taken, r0_aspect, r0_iridescence, r0_foam, r0_leafs, r0_sludge, r0_other_bodies, r0_color, r0_clearness, r0_odor, r0_shadow, r0_weather, r0_hydrological_situation, r0_scale, r0_secchi, r0_air_temperature, r0_oxygen_saturation, r21_threshold, r21_sample_taken, r21_aspect, r21_iridescence, r21_foam, r21_leafs, r21_sludge, r21_other_bodies, r21_color, r21_clearness, r21_odor, r21_shadow, r21_weather, r21_hydrological_situation, r21_scale, r21_secchi, r21_air_temperature, r21_oxygen_saturation FROM {env.DATABASE_RAW}.Measurepoint WHERE id IN {tuple(chemistry_measurepoint_list) if len(chemistry_measurepoint_list)>1 else '('+(str(chemistry_measurepoint_list[0]) if len(chemistry_measurepoint_list) else '0')+')'}").execute() dates_data = QueryScript(f"SELECT measurepoint_id, date_id, date FROM {env.DATABASE_TREATED}.key_dates WHERE measurepoint_id IN {tuple(chemistry_measurepoint_list) if len(chemistry_measurepoint_list)>1 else '('+(str(chemistry_measurepoint_list[0]) if len(chemistry_measurepoint_list) else '0')+')'}").execute() conditions_data = QueryScript(f"SELECT measurepoint_id, recordedAt, temperature, conductivity, ph, oxygen, comment FROM {env.DATABASE_RAW}.MeasureExposureCondition WHERE measurepoint_id IN {tuple(chemistry_measurepoint_list) if len(chemistry_measurepoint_list)>1 else '('+(str(chemistry_measurepoint_list[0]) if len(chemistry_measurepoint_list) else '0')+')'}").execute() pack_data = QueryScript(f"SELECT id, sampling_weight, metal_tare_bottle_weight, organic_tare_bottle_weight, organic_total_weight, sampling_comment FROM {env.DATABASE_RAW}.Pack WHERE id IN {tuple(chemistry_pack_list) if len(chemistry_pack_list)>1 else '('+(str(chemistry_pack_list[0]) if len(chemistry_pack_list) else '0')+')'}").execute() survival_dict = survival(chemistry_pack_list) matrix= [] for place_id in place_dict : temp = [None]*74 start_time = None end_time = None temp[15] = "biomae" temp[41] = "biomae" if "agency" in place_dict[place_id]: temp[1] = place_dict[place_id]["agency"] for measurepoint_id in place_dict[place_id]["measurepoint"]: for mp_id, date_id, date in dates_data: if mp_id==measurepoint_id: if date_id==6 and date and not start_time: start_time=date temp[14] = date.strftime("%d/%m/%Y %H:%M:%S") temp[0] = date if date_id==7 and date and not end_time: end_time=date temp[40] = date.strftime("%d/%m/%Y %H:%M:%S") place_dict[place_id]["measurepoint"][measurepoint_id]["start_time"] = start_time place_dict[place_id]["measurepoint"][measurepoint_id]["end_time"] = end_time if end_time and start_time: # temp[9] = (datetime.datetime.strptime(temp[40], '%d/%m/%Y')-datetime.datetime.strptime(temp[14], '%d/%m/%Y')) time_delay = end_time - start_time minutes = round(time_delay.seconds%3600/60) seconds = time_delay.seconds%60 temp[9] = (str(time_delay.days*24+round(time_delay.seconds/3600)) + ':') + (str(minutes) if minutes>9 else '0' +str(minutes)) + ':' + (str(seconds) if seconds>9 else '0' +str(seconds)) for mp_id, reference, name, city, zipcode, r0_threshold, r0_sample_taken, r0_aspect, r0_iridescence, r0_foam, r0_leafs, r0_sludge, r0_other_bodies, r0_color, r0_clearness, r0_odor, r0_shadow, r0_weather, r0_hydrological_situation, r0_scale, r0_secchi, r0_air_temperature, r0_oxygen_saturation, r21_threshold, r21_sample_taken, r21_aspect, r21_iridescence, r21_foam, r21_leafs, r21_sludge, r21_other_bodies, r21_color, r21_clearness, r21_odor, r21_shadow, r21_weather, r21_hydrological_situation, r21_scale, r21_secchi, r21_air_temperature, r21_oxygen_saturation in measurepoint_data: if mp_id==measurepoint_id: try : int(zipcode) temp[5] = translate(city) except ValueError: temp[5] = translate(zipcode) except TypeError: pass temp[8] = reference temp[6] = translate(name) temp[20] = r0_oxygen_saturation temp[21] = r0_air_temperature temp[22] = r0_threshold temp[23] = r0_sample_taken temp[24] = r0_aspect temp[25] = r0_iridescence temp[26] = r0_foam temp[27] = r0_leafs temp[28] = r0_sludge temp[29] = r0_other_bodies temp[30] = r0_color temp[31] = r0_clearness temp[32] = r0_odor temp[33] = r0_shadow temp[34] = r0_weather temp[35] = r0_hydrological_situation temp[36] = r0_scale temp[37] = r0_secchi temp[46] = r21_oxygen_saturation temp[47] = r21_air_temperature temp[48] = r21_threshold temp[49] = r21_sample_taken temp[50] = r21_aspect temp[51] = r21_iridescence temp[52] = r21_foam temp[53] = r21_leafs temp[54] = r21_sludge temp[55] = r21_other_bodies temp[56] = r21_color temp[57] = r21_clearness temp[58] = r21_odor temp[59] = r21_shadow temp[60] = r21_weather temp[61] = r21_hydrological_situation temp[62] = r21_scale temp[63] = r21_secchi for mp_id, recordedAt, temperature, conductivity, ph, oxygen, comment in conditions_data: if mp_id==measurepoint_id: if mp_id==2788: print(place_dict[place_id]["measurepoint"][measurepoint_id]['end_time']== recordedAt, temperature) if recordedAt == place_dict[place_id]["measurepoint"][measurepoint_id]["start_time"] and not temp[16]: temp[16]=temperature temp[17]=ph temp[18]=conductivity temp[19]=oxygen if recordedAt == place_dict[place_id]["measurepoint"][measurepoint_id]["end_time"] and not temp[42]: temp[42]=temperature temp[43]=ph temp[44]=conductivity temp[45]=oxygen if comment: dissociated_comment = [information.replace("\n",", ") for information in comment.split("\t")] need_to_be_removed = [] for information in dissociated_comment: if information!="": if len(information)>=10 and information[:10]=="Vandalisme": place_dict[place_id]["vandalism"] = True if information[-1]=="%" or "Scan" in information or "#" in information or 'RAS' in information: need_to_be_removed.append(information) else : try : int(information) need_to_be_removed.append(information) except ValueError : pass for element in need_to_be_removed: dissociated_comment.remove(element) if len(dissociated_comment): temp[65] = '. '.join([translate(information) for information in dissociated_comment]) for pack_id in place_dict[place_id]["measurepoint"][measurepoint_id]["pack"]: if place_dict[place_id]["measurepoint"][measurepoint_id]["pack"][pack_id]=='chemistry': if pack_id in survival_dict: temp[64]=survival_dict[pack_id] for pack,sampling_weight, metal_tare_bottle_weight, organic_tare_bottle_weight, organic_total_weight, comment in pack_data: if pack==pack_id: temp[66]= metal_tare_bottle_weight temp[67]= sampling_weight if sampling_weight and metal_tare_bottle_weight : temp[68]= sampling_weight - metal_tare_bottle_weight temp[69]= organic_tare_bottle_weight temp[70]= organic_total_weight if organic_tare_bottle_weight and organic_total_weight : temp[71]= organic_total_weight - organic_tare_bottle_weight if comment : dissociated_comment = [information.replace("\n",", ") for information in comment.split("\t")] need_to_be_removed = [] for information in dissociated_comment: if information!="": if len(information)>=10 and information[:10]=="Vandalisme": place_dict[place_id]["vandalism"] = True if information[-1]=="%" or "Scan" in information or "#" in information or 'RAS' in information: need_to_be_removed.append(information) else : try : int(information) need_to_be_removed.append(information) except ValueError : pass for element in need_to_be_removed: dissociated_comment.remove(element) if len(dissociated_comment): if temp[65]: temp[65] += '. '.join([translate(information) if information else '' for information in dissociated_comment]) else : temp[65] = '. '.join([translate(information) if information else '' for information in dissociated_comment]) matrix.append(temp) df = pd.DataFrame(matrix) df.columns = ["Mois", "Code Agence Station", "Code Plvt EDI", "N° Prélèvement", "Département", "Commune", "Lieu prel", "", "Réfèrence BIOMAE", "Durée du prélèvement","Taux de Lyophylisation (à patir de l'Eppendorf)", "Taux de Lyophylisation (à patir du flacon verre)", "N° Prélèvement Eau Sup Encagement", "", "Date d'encagement", "Préleveur","Température de l'Eau", "Potentiel en Hydrogène (pH)", "Conductivité à 25°C", "Oxygène dissous", "Taux de saturation en oxygène", "Température de l'air", "Seuil", "Type de prélèvement","Aspect","Irisations sur l'eau", "Présence de mousse de détergents à la surface", "Présence de produits ligneux ou herbacés frais", "Boue", "Autres corps", "Couleur", "Clarté", "Odeur", "Ombre", "Conditions météorologiques pendant le prélèvement", "Situation hydrologique apparente", "Echelle", "Secchi", "N° Prélèvement Eau Sup", "", "Date de prélèvement", "Préleveur","Température de l'Eau", "Potentiel en Hydrogène (pH)", "Conductivité à 25°C","Oxygène dissous", "Taux de saturation en oxygène", "Température de l'air", "Seuil", "Type de prélèvement","Aspect","Irisations sur l'eau", "Présence de mousse de détergents à la surface", "Présence de produits ligneux ou herbacés frais", "Boue", "Autres corps", "Couleur", "Clarté", "Odeur", "Ombre", "Conditions météorologiques pendant le prélèvement", "Situation hydrologique apparente", "Echelle", "Secchi", "Taux de survie", "Commentaires", "Tare Eppendorf en mg", "Eppendorf + Echantillon en mg", "Echantillon métaux en mg", "Tare Flacon Verre en mg", "Flacon Verre + Echantillon en mg", "Echantillon organique en mg", "Eppendorf + Echantillon Lyophilisé en mg", "Flacon Verre + Echantillon Lyophilisé en mg"] return df
def create_stations_dataframe(head_dataframe, campaigns_dict, measurepoint_list, agency_code_list): df_renamed = head_dataframe.rename(columns={"Numéro": "#"}) # place_length = len(place_list) campaigns_number = len(list(campaigns_dict.keys())) global_matrix = [] agency_data = QueryScript( f" SELECT code, network, hydroecoregion FROM {env.DATABASE_RAW}.Agency WHERE code IN {tuple(agency_code_list) if len(agency_code_list)>1 else '('+(str(agency_code_list[0]) if len(agency_code_list) else '0')+')'};" ).execute() measurepoint_data = QueryScript( f" SELECT id, stream, zipcode, city, latitude, longitude, lambertY, lambertX, latitudeSpotted, longitudeSpotted FROM {env.DATABASE_RAW}.Measurepoint WHERE id IN {tuple(measurepoint_list) if len(measurepoint_list)>1 else '('+(str(measurepoint_list[0]) if len(measurepoint_list) else '0')+')'};" ).execute() for campaign_id in campaigns_dict: matrix = [] for place_id in campaigns_dict[campaign_id]["place"]: temp = [None] * 8 for code, network, hydroecoregion in agency_data: if "agency" in campaigns_dict[campaign_id]["place"][ place_id] and code == campaigns_dict[campaign_id][ "place"][place_id]["agency"]: temp[0], temp[1] = translate(network), hydroecoregion for measurepoint_id in campaigns_dict[campaign_id]["place"][ place_id]["measurepoint"]: for row in measurepoint_data: [ mp_id, stream, zipcode, city, latitude, longitude, lambertY, lambertX, latitudeSpotted, longitudeSpotted ] = [translate(x) for x in row] if mp_id == measurepoint_id: if not temp[2]: temp[2] = stream if not temp[3]: temp[ 3] = f"{zipcode} {city}" if zipcode and city else None if not temp[4]: temp[ 4] = f"{latitude}, {longitude}" if latitude and longitude else None if not temp[5]: temp[ 5] = f"Y {lambertY}, X {lambertX}" if lambertX and lambertY else None if not temp[6] and latitudeSpotted and longitudeSpotted: temp[6] = f"{latitudeSpotted}, {longitudeSpotted}" lambertXSpotted, lambertYSpotted = convert_gps_into_lambert( latitudeSpotted, longitudeSpotted) temp[ 7] = f"Y {round(lambertYSpotted,1)}, X {round(lambertXSpotted,1)}" matrix.append(temp) global_matrix.append(matrix) # matrix_filled = [[None]*8] # if campaigns_number>1: # for campaign in global_matrix : # for place_number in range(place_length) : # for index, content in enumerate(campaign[place_number]): # if content and not matrix_filled[place_number][index]: # matrix_filled[place_number] = campaign[place_number] # if campaigns_number==1: # matrix_filled=global_matrix[0] # for place_number, place in enumerate(matrix_filled) : # for index, content in enumerate(place) : # if not content : # matrix_filled[place_number][index] = 'ND' columns = [ 'Type de réseau', 'Hydroécorégion', 'Masse d\'eau', 'Adresse', 'Coordonnées de référence', 'Coordonnées de référence (Lambert 93)', 'Coordonnées réelles', 'Coordonnées réelles (Lambert 93)' ] if len(global_matrix) > 1: list_dataframe = [] for matrix in global_matrix: df = pd.DataFrame(matrix, columns=columns) list_dataframe.append(df) df_values = pd.concat(list_dataframe) else: df_values = pd.DataFrame(global_matrix[0], columns=columns) df_concat = pd.concat([df_renamed, df_values], axis=1) df_stations = df_concat.sort_values('#') return df_stations
def on_button_zero_reset_clicked(self): ret = self._confirm_box(translate('InclinometerView', 'Do you really want to reset zero to factory settings?')) if ret == QtGui.QMessageBox.Yes: inclinometer.reset_zero()
def create_chemistry_dataframe(context_data, main_data, analysis_data, chemical_threshold_data, context_threshold_data, agency_data, contract_list=[]): global_matrix = [] report_dict = {} contract_list for contract_key in contract_list : report_dict[contract_key] = { 'count':0, 'survival_under_25_percent' : 0, 'survival_under_50_percent' : 0, 'vandalism' : 0, 'out_of_water' : 0, 'out_of_water_up_50_percent' : 0, 'out_of_water_under_50_percent' : 0, 'survival_under_25_percent_not_conform':0, 'survival_under_25_percent_conform_preferred':0, 'survival_under_25_percent_conform_compulsory':0, 'not_totally_analysed':0, 'survival_null':0 } for agency_id, measurepoint_id, pack_id, reference, start_date, end_date, name, sensor3_min, sensor3_average, sensor3_max, sampling_weight, metal_tare_bottle_weight, organic_tare_bottle_weight, organic_total_weight, quantity,t0_reference, t0_sampling_weight, t0_metal_tare_bottle_weight, t0_organic_tare_bottle_weight, t0_organic_total_weight, t0_quantity, survival_percent in main_data: if end_date and start_date : chemistry_duration = "21j" if (end_date-start_date).days > 14 else "7j" current_network = None current_hydroecoregion = None current_agency_code = None if agency_id : for agency_Id, code, network, hydroecoregion in agency_data : if agency_Id==agency_id : current_agency_code = code current_network = network current_hydroecoregion = hydroecoregion break contract = reference.split('-')[0] + '-' + chemistry_duration if len(contract_list) and contract not in contract_list : continue report_dict[contract]['count'] += 1 context_preferred_exceeded = False context_compulsory_exceeded = False vandalism = False out_of_water = False context_exceeded_list = [] comment_list = [] if sensor3_max and sensor3_max>21 : context_exceeded_list.append('Température haute') context_compulsory_exceeded = True for mp_id, recordedAt, temperature, conductivity, oxygen, pH, barrel, comment in context_data: comment = translate(comment) if mp_id==measurepoint_id and barrel and barrel[0]=='R': if comment : if not comment.find('andalisme')==-1 and 'Vandalisme' not in comment_list : comment_list.append('Vandalisme') vandalism = True if (not comment.find('vol')==-1 or not comment.find('Vol')==-1) and 'Vol' not in comment_list : comment_list.append('Vol') vandalism = True if not comment.find('non récupérable')==-1 and 'Système non récupérable' not in comment_list : comment_list.append('Système non récupérable') vandalism = True if not comment.find("ors d'eau")==-1 and "Hors d'eau" not in comment_list : comment_list.append("Hors d'eau") out_of_water = True if (not comment.find("Crue")==-1 or not comment.find("crue")==-1) and "Crue" not in comment_list : comment_list.append("Crue") out_of_water = True if not comment.find("mbacle")==-1 and "Embacle" not in comment_list : comment_list.append("Embacle") out_of_water = True if temperature : for threshold_name, _min, _max in context_threshold_data : if threshold_name=='Température moyenne (chimie)': if _min > temperature : context_preferred_exceeded = True if _max < temperature : context_preferred_exceeded = True if conductivity : for threshold_name, _min, _max in context_threshold_data : if threshold_name=='Conductivité (chimie)': if 100 > conductivity and not 'Conductivité basse' in context_exceeded_list: if 50 > conductivity : context_exceeded_list.append('Conductivité basse') context_compulsory_exceeded = True else : context_preferred_exceeded = True if _max < conductivity : context_preferred_exceeded = True if pH : for threshold_name, _min, _max in context_threshold_data : if threshold_name=='pH (chimie)': if _min > pH and not 'pH bas' in context_exceeded_list: context_exceeded_list.append('pH bas') context_compulsory_exceeded = True if _max < pH and not 'pH haut' in context_exceeded_list : context_exceeded_list.append('pH haut') context_compulsory_exceeded = True if oxygen : for threshold_name, _min, _max in context_threshold_data : if threshold_name=='Oxygène (chimie)': if 7.5 > oxygen : if 5 > oxygen and not 'Oxygène bas' in context_exceeded_list : context_exceeded_list.append('Oxygène bas') context_compulsory_exceeded = True else : context_preferred_exceeded = True if recordedAt==start_date : temperatureJ0 = temperature oxygenJ0 = oxygen pHJ0 = pH conductivityJ0 = conductivity if recordedAt==end_date : temperatureJ21 = temperature oxygenJ21 = oxygen pHJ21 = pH conductivityJ21 = conductivity metal_element = [] organic_element = [] for packId, value, sandre_analysis, element_name in analysis_data: if pack_id==packId : for sandre_threshold, familly, graduate_50_7j, graduate_50_21j in chemical_threshold_data : if sandre_analysis==sandre_threshold : if chemistry_duration == "21j" and graduate_50_21j and value > graduate_50_21j : metal_element.append(translate(element_name)) if familly == 'Métaux' else organic_element.append(translate(element_name)) if chemistry_duration == "7j" and graduate_50_7j and value > graduate_50_7j : metal_element.append(translate(element_name)) if familly == 'Métaux' else organic_element.append(translate(element_name)) if survival_percent and survival_percent > 1: if survival_percent > 25 : if survival_percent < 50 : report_dict[contract]['survival_under_50_percent'] += 1 if out_of_water : report_dict[contract]['out_of_water_under_50_percent'] += 1 elif out_of_water : report_dict[contract]['out_of_water_up_50_percent'] += 1 else : report_dict[contract]['survival_under_25_percent'] += 1 if not context_preferred_exceeded and not context_compulsory_exceeded: report_dict[contract]['survival_under_25_percent_conform_preferred'] += 1 elif context_preferred_exceeded and not context_compulsory_exceeded: report_dict[contract]['survival_under_25_percent_conform_compulsory'] += 1 else : report_dict[contract]['survival_under_25_percent_not_conform'] += 1 else : report_dict[contract]['survival_null'] += 1 if out_of_water : report_dict[contract]['out_of_water'] += 1 elif vandalism : report_dict[contract]['vandalism'] += 1 if organic_tare_bottle_weight and organic_total_weight : if (organic_total_weight-organic_tare_bottle_weight) <2000 : report_dict[contract]['not_totally_analysed'] += 1 temp = [measurepoint_id, reference, start_date.strftime("%d/%m/%Y") if start_date else None, chemistry_duration, contract.split('-')[0], int(reference.split('-')[1]) if reference.split('-')[1][0]=='0' else int(reference.split('-')[2]), int(reference.split('-')[2]), translate(name), current_agency_code, sensor3_min, sensor3_average, sensor3_max, max([temperatureJ0 if temperatureJ0 else 0, temperatureJ21 if temperatureJ21 else 0]) if temperatureJ0 or temperatureJ21 else 'NA', (str(round(survival_percent))+'%') if survival_percent and survival_percent > 1 else 'Non analysé', ', '.join(context_exceeded_list), ', '.join(comment_list), ', '.join(metal_element),', '.join(organic_element),current_network, current_hydroecoregion, temperatureJ0, temperatureJ21, conductivityJ0, conductivityJ21, oxygenJ0, oxygenJ21, pHJ0, pHJ21, metal_tare_bottle_weight, sampling_weight, (sampling_weight-metal_tare_bottle_weight) if sampling_weight and metal_tare_bottle_weight else "NA", quantity,(sampling_weight-metal_tare_bottle_weight)/quantity if sampling_weight and metal_tare_bottle_weight and quantity else "NA" , organic_tare_bottle_weight, organic_total_weight, (organic_total_weight-organic_tare_bottle_weight) if organic_tare_bottle_weight and organic_total_weight else 'NA', '', t0_reference, t0_metal_tare_bottle_weight, t0_sampling_weight, (t0_sampling_weight-t0_metal_tare_bottle_weight) if t0_metal_tare_bottle_weight and t0_sampling_weight else 'NA', t0_organic_tare_bottle_weight, t0_organic_total_weight, (t0_organic_total_weight-t0_organic_tare_bottle_weight) if t0_organic_tare_bottle_weight and t0_organic_total_weight else 'NA', t0_quantity] global_matrix.append(temp) df = pd.DataFrame(global_matrix, columns=['#', 'Code BIOMÆ', 'Jour de lancement', 'Durée', 'Bassin', 'Contrat', 'Campagne', 'Station de mesure', 'Code Agence', 'Température min sonde (°C)', 'Température Moyenne sonde (°C)', 'Température max sonde (°C)', 'Température max ponctuelle (°C)', 'Taux de survie (exprimé en %)', "Hors domaine d'application", "Problème d'expérimentation", "Métaux (Fort à très fort)", "Composés organiques (Fort à très fort)", 'Type de réseau', 'Hydroécorégion', 'Température T+0 - Encagement sur site', 'Température T+21 - Site > Récupération', 'Conductivité T+0 - Encagement sur site', 'Conductivité T+21 - Site > Récupération', 'Oxygène T+0 - Encagement sur site', 'Oxygène T+21 - Site > Récupération', 'pH T+0 - Encagement sur site', 'pH T+21 - Site > Récupération', 'Tare échantillon métaux (mg)','Masse totale échantillon métaux (mg)', 'Masse Fraiche métaux (mg)', "Nombre de gammares dans l'echantillon", 'Poids moyen (mg)', 'Tare échantillon organiques (mg, sans bouchon)', 'Masse totale échantillon organiques (mg, sans bouchon)', 'Masse fraiche organiques (mg)', 'Poids moyen avant expo (contrôle)', 'Libellé T0', 'Tare échantillon métaux (mg)', 'Masse totale échantillon métaux (mg)', 'Masse Fraiche métaux (mg)', 'Tare échantillon organiques (mg, sans bouchon)', 'Masse totale échantillon organiques (mg, sans bouchon)', 'Masse fraiche organiques (mg)', "Nombre de gammares dans l'echantillon métaux"]) report_dict['TOTAL-7j'] = { 'count':sum([report_dict[key]['count'] if key[-2] == '7' else 0 for key in list(report_dict.keys())]), 'survival_under_25_percent' : sum([report_dict[key]['survival_under_25_percent'] if key[-2] == '7' else 0 for key in list(report_dict.keys())]), 'survival_under_50_percent' : sum([report_dict[key]['survival_under_50_percent'] if key[-2] == '7' else 0 for key in list(report_dict.keys())]), 'vandalism' : sum([report_dict[key]['vandalism'] if key[-2] == '7' else 0 for key in list(report_dict.keys())]), 'out_of_water' : sum([report_dict[key]['out_of_water'] if key[-2] == '7' else 0 for key in list(report_dict.keys())]), 'out_of_water_under_50_percent' : sum([report_dict[key]['out_of_water_under_50_percent'] if key[-2] == '7' else 0 for key in list(report_dict.keys())]), 'out_of_water_up_50_percent' : sum([report_dict[key]['out_of_water_up_50_percent'] if key[-2] == '7' else 0 for key in list(report_dict.keys())]), 'survival_under_25_percent_not_conform':sum([report_dict[key]['survival_under_25_percent_not_conform'] if key[-2] == '7' else 0 for key in list(report_dict.keys())]), 'survival_under_25_percent_conform_preferred':sum([report_dict[key]['survival_under_25_percent_conform_preferred'] if key[-2] == '7' else 0 for key in list(report_dict.keys())]), 'survival_under_25_percent_conform_compulsory':sum([report_dict[key]['survival_under_25_percent_conform_compulsory'] if key[-2] == '7' else 0 for key in list(report_dict.keys())]), 'not_totally_analysed':sum([report_dict[key]['not_totally_analysed'] if key[-2] == '7' else 0 for key in list(report_dict.keys())]), 'survival_null':sum([report_dict[key]['survival_null'] if key[-2] == '7' else 0 for key in list(report_dict.keys())]) } report_dict['TOTAL-21j'] = { 'count':sum([report_dict[key]['count'] if key[-2] == '1' else 0 for key in list(report_dict.keys())]), 'survival_under_25_percent' : sum([report_dict[key]['survival_under_25_percent'] if key[-2] == '1' else 0 for key in list(report_dict.keys())]), 'survival_under_50_percent' : sum([report_dict[key]['survival_under_50_percent'] if key[-2] == '1' else 0 for key in list(report_dict.keys())]), 'vandalism' : sum([report_dict[key]['vandalism'] if key[-2] == '1' else 0 for key in list(report_dict.keys())]), 'out_of_water' : sum([report_dict[key]['out_of_water'] if key[-2] == '1' else 0 for key in list(report_dict.keys())]), 'out_of_water_under_50_percent' : sum([report_dict[key]['out_of_water_under_50_percent'] if key[-2] == '1' else 0 for key in list(report_dict.keys())]), 'out_of_water_up_50_percent' : sum([report_dict[key]['out_of_water_up_50_percent'] if key[-2] == '1' else 0 for key in list(report_dict.keys())]), 'survival_under_25_percent_not_conform':sum([report_dict[key]['survival_under_25_percent_not_conform'] if key[-2] == '1' else 0 for key in list(report_dict.keys())]), 'survival_under_25_percent_conform_preferred':sum([report_dict[key]['survival_under_25_percent_conform_preferred'] if key[-2] == '1' else 0 for key in list(report_dict.keys())]), 'survival_under_25_percent_conform_compulsory':sum([report_dict[key]['survival_under_25_percent_conform_compulsory'] if key[-2] == '1' else 0 for key in list(report_dict.keys())]), 'not_totally_analysed':sum([report_dict[key]['not_totally_analysed'] if key[-2] == '1' else 0 for key in list(report_dict.keys())]), 'survival_null':sum([report_dict[key]['survival_null'] if key[-2] == '1' else 0 for key in list(report_dict.keys())]) } report_matrix = [] report_matrix = add_new_section(report_matrix, "Bilan", report_dict.keys()) survival_under_25_percent_row = ["Survie inférieure à 25%"] for contract in report_dict.values() : survival_under_25_percent_row.append(contract['survival_under_25_percent']) survival_under_25_percent_row.append(contract['survival_under_25_percent']/contract['count']*100 if contract['count'] else 0) survival_under_25_percent_row.append('') report_matrix.append(survival_under_25_percent_row) survival_under_50_percent_row = ["Survie comprise entre 25% à 50%"] for contract in report_dict.values() : survival_under_50_percent_row.append((contract['survival_under_50_percent']-contract['out_of_water_under_50_percent'])) survival_under_50_percent_row.append((contract['survival_under_50_percent']-contract['out_of_water_under_50_percent'])/contract['count']*100 if contract['count'] else 0) survival_under_50_percent_row.append('') report_matrix.append(survival_under_50_percent_row) survival_up_50_percent_row = ["Survie supérieure 50%"] for contract in report_dict.values() : survival_up_50_percent_row.append(contract['count']-contract['survival_under_25_percent']-contract['survival_under_50_percent']-contract['out_of_water_under_50_percent']-contract['out_of_water_up_50_percent']) survival_up_50_percent_row.append((contract['count']-contract['survival_under_25_percent']-contract['survival_under_50_percent']-contract['out_of_water_under_50_percent']-contract['out_of_water_up_50_percent'])/contract['count']*100 if contract['count'] else 0) survival_up_50_percent_row.append('') report_matrix.append(survival_up_50_percent_row) vandalism_row = ["Vandalisme"] for contract in report_dict.values() : vandalism_row.append(contract['vandalism']) vandalism_row.append(contract['vandalism']/contract['count']*100 if contract['count'] else 0) vandalism_row.append('') report_matrix.append(vandalism_row) out_of_water_row = ["Crues - Hors d'eau"] for contract in report_dict.values() : out_of_water_row.append(contract['out_of_water']) out_of_water_row.append(contract['out_of_water']/contract['count']*100 if contract['count'] else 0) out_of_water_row.append('') report_matrix.append(out_of_water_row) out_of_water_under_50_percent_row = ["Partiellement hors d'eau (25%)"] for contract in report_dict.values() : out_of_water_under_50_percent_row.append(contract['out_of_water_under_50_percent']) out_of_water_under_50_percent_row.append(contract['out_of_water_under_50_percent']/contract['count']*100 if contract['count'] else 0) out_of_water_under_50_percent_row.append('') report_matrix.append(out_of_water_under_50_percent_row) out_of_water_up_50_percent_row = ["Partiellement hors d'eau (50%)"] for contract in report_dict.values() : out_of_water_up_50_percent_row.append(contract['out_of_water_up_50_percent']) out_of_water_up_50_percent_row.append(contract['out_of_water_up_50_percent']/contract['count']*100 if contract['count'] else 0) out_of_water_up_50_percent_row.append('') report_matrix.append(out_of_water_up_50_percent_row) total_row = ["Total"] for contract in report_dict.values() : total_row.append(contract['count']) total_row.append(contract['count']/contract['count']*100 if contract['count'] else 0) total_row.append('') report_matrix.append(total_row) report_matrix = add_new_section(report_matrix, "Bilan", report_dict.keys()) survival_under_25_percent_row = ["Survie inférieure à 25%"] for contract in report_dict.values() : survival_under_25_percent_row.append(contract['survival_under_25_percent']) survival_under_25_percent_row.append(contract['survival_under_25_percent']/contract['count']*100 if contract['count'] else 0) survival_under_25_percent_row.append('') report_matrix.append(survival_under_25_percent_row) survival_under_50_percent_row = ["Survie comprise entre 25% à 50%"] for contract in report_dict.values() : survival_under_50_percent_row.append((contract['survival_under_50_percent'])) survival_under_50_percent_row.append((contract['survival_under_50_percent'])/contract['count']*100 if contract['count'] else 0) survival_under_50_percent_row.append('') report_matrix.append(survival_under_50_percent_row) survival_up_50_percent_row = ["Survie supérieure 50%"] for contract in report_dict.values() : survival_up_50_percent_row.append(contract['count']-contract['survival_under_25_percent']-contract['survival_under_50_percent']) survival_up_50_percent_row.append((contract['count']-contract['survival_under_25_percent']-contract['survival_under_50_percent'])/contract['count']*100 if contract['count'] else 0) survival_up_50_percent_row.append('') report_matrix.append(survival_up_50_percent_row) report_matrix.append(vandalism_row) report_matrix.append(out_of_water_row) report_matrix.append(total_row) report_matrix = add_new_section(report_matrix, "Bilan", report_dict.keys()) report_matrix.append(survival_under_25_percent_row) survival_up_25_percent_row = ["Survie supérieure 25%"] for contract in report_dict.values() : survival_up_25_percent_row.append(contract['count']-contract['survival_under_25_percent']) survival_up_25_percent_row.append((contract['count']-contract['survival_under_25_percent'])/contract['count']*100 if contract['count'] else 0) survival_up_25_percent_row.append('') report_matrix.append(survival_up_25_percent_row) report_matrix.append(total_row) report_matrix = add_new_section(report_matrix, "Survie inférieure à 25%", report_dict.keys()) not_conform_row = ["Conditions physico-chimiques non conformes"] for contract in report_dict.values() : not_conform_row.append(contract['survival_under_25_percent_not_conform']) not_conform_row.append((contract['survival_under_25_percent_not_conform'])/contract['count']*100 if contract['count'] else 0) not_conform_row.append('') report_matrix.append(not_conform_row) not_conform_preferred_row = ["Conditions physico-chimiques conformes 'de préférence'"] for contract in report_dict.values() : not_conform_preferred_row.append(contract['survival_under_25_percent_conform_preferred']) not_conform_preferred_row.append((contract['survival_under_25_percent_conform_preferred'])/contract['count']*100 if contract['count'] else 0) not_conform_preferred_row.append('') report_matrix.append(not_conform_preferred_row) not_conform_compulsory_row = ["Conditions physico-chimiques conformes 'obligatoire'"] for contract in report_dict.values() : not_conform_compulsory_row.append(contract['survival_under_25_percent_conform_compulsory']) not_conform_compulsory_row.append((contract['survival_under_25_percent_conform_compulsory'])/contract['count']*100 if contract['count'] else 0) not_conform_compulsory_row.append('') report_matrix.append(not_conform_compulsory_row) survival_under_25_percent_row[0]='Total' report_matrix.append(survival_under_25_percent_row) report_matrix = add_new_section(report_matrix, "Analyses chimiques", report_dict.keys()) survival_null_row = ["Echantillon non analysé : vandalisme, survie nulle"] for contract in report_dict.values() : survival_null_row.append(contract['survival_null']) survival_null_row.append((contract['survival_null'])/contract['count']*100 if contract['count'] else 0) survival_null_row.append('') report_matrix.append(survival_null_row) not_totally_analysed_row = ["Echantillon partiellement analysé : survie faible"] for contract in report_dict.values() : not_totally_analysed_row.append(contract['not_totally_analysed']) not_totally_analysed_row.append((contract['not_totally_analysed'])/contract['count']*100 if contract['count'] else 0) not_totally_analysed_row.append('') report_matrix.append(not_totally_analysed_row) analysed_row = ["Echantillon partiellement analysé : survie faible"] for contract in report_dict.values() : analysed_row.append(contract['count']-contract['not_totally_analysed']-contract['survival_null']) analysed_row.append((contract['count']-contract['not_totally_analysed']-contract['survival_null'])/contract['count']*100 if contract['count'] else 0) analysed_row.append('') report_matrix.append(analysed_row) report_matrix.append(total_row) report_matrix = add_new_section(report_matrix, "Survie inférieure à 25%", report_dict.keys()) report_matrix.append(not_conform_row) conform_row = ["Conditions physico-chimiques conformes"] for contract in report_dict.values() : conform_row.append(contract['survival_under_25_percent']-contract['survival_under_25_percent_not_conform']) conform_row.append((contract['survival_under_25_percent']-contract['survival_under_25_percent_not_conform'])/contract['count']*100 if contract['count'] else 0) conform_row.append('') report_matrix.append(conform_row) report_matrix.append(survival_under_25_percent_row) column_number = 1 + len(list(report_dict.keys()))*3 report_matrix.insert(0,['7j' if index == 1 else '21j' if index == (column_number-1)/2 + 1 else '' for index in range(column_number)]) report_df = pd.DataFrame(report_matrix, columns=[''] * column_number) return df, report_df
def plot(self, data): render_lock.lock() option_lock.lock() if not self.canvas_initiated: self.init_canvas() # Plot ch = SETTINGS.value('spectrum/channels', '1,2') c = 0 for ch in ch.split(','): self.axes.plot( data[c * 2], data[c * 2 + 1], color='r' if ch == '1' else 'b', label='Horizontal' if ch == '1' else 'Vertical' ) c += 1 self.axes.hold(True) self.axes.hold(False) # Title self.figure.suptitle('%s R=%d F=%d AH=%.2f AV=%.2f V=%d' % ( datetime.now().strftime('%c'), SETTINGS.value('spectrum/resolution', 10, int), SETTINGS.value('spectrum/frames', 10, int), self.current_aa_h, self.current_aa_v, get_mic_vol() )) # Grid self.axes.grid(True, which='both') self.axes.set_xlim([SETTINGS.value('spectrum/x_min', 15000, int), SETTINGS.value('spectrum/x_max', 30000, int)]) y_max = SETTINGS.value('spectrum/y_max', 0.1, float) if y_max > 0: self.axes.set_ylim([0, y_max]) # Labels self.axes.set_xlabel(translate('SpectrumView', 'Frequency [kHz]')) self.axes.set_ylabel(translate('SpectrumView', 'Amplitude')) option_lock.unlock() # Transmitter indicators selected = SpectrumOptionsView.get_selected_frequencies() if len(selected): frequencies = [] for tx in TRANSMITTERS: freq = float(tx[0]) if freq in selected: frequencies.append([freq, tx[1]]) # Color Map scalar_color_map = cmx.ScalarMappable( norm=colors.Normalize(vmin=1, vmax=len(frequencies)), cmap=plt.get_cmap('Dark2') ) clr_idx = 0 for freq in frequencies: clr_idx += 1 self.axes.axvline( freq[0] * 1000, linewidth=2, color=scalar_color_map.to_rgba(clr_idx), alpha=0.9, linestyle='-', label="%.2f kHz [%s]" % (freq[0], freq[1]) ) self.axes.legend(prop={'family': 'monospace', 'size': 'small'}) self.axes.xaxis.set_major_formatter(HZ_2_KHZ_FORMATTER) # Refresh canvas self.canvas.draw() render_lock.unlock() # Start the calculation again render_wait.wakeAll()
def create_head_dataframe(campaigns_dict): list_dataframe_normal = [] list_dataframe_filtered = [] matrix_filtered = [] for campaign_id in campaigns_dict: matrix = [] for place_id in campaigns_dict[campaign_id]["place"] : matrix.append([campaigns_dict[campaign_id]["number"], campaigns_dict[campaign_id]["place"][place_id]["number"], translate(campaigns_dict[campaign_id]["place"][place_id]["name"]), campaigns_dict[campaign_id]["place"][place_id]["agency"] if "agency" in campaigns_dict[campaign_id]["place"][place_id] else 'ND']) df_normal = pd.DataFrame(matrix) df_normal.columns = ['Campagne', 'Numéro', 'Station de mesure', 'Code Agence'] list_dataframe_normal.append(df_normal) df_concat_normal = pd.concat(list_dataframe_normal) return df_concat_normal
def create_head_special_dataframe(campaigns_dict, chemistry_measurepoint_list, chemistry_7j_measurepoint_list, chemistry_21j_measurepoint_list): list_dataframe = [] list_dataframe_7j = [] list_dataframe_21j = [] for campaign_id in campaigns_dict: matrix = [] matrix_7j = [] matrix_21j = [] df_normal = None df_7j = None df_21j = None for place_id in campaigns_dict[campaign_id]["place"] : seperate_chemistry = [] if "duplicate" in campaigns_dict[campaign_id]["place"][place_id] : if "chemistry" in campaigns_dict[campaign_id]["place"][place_id]["duplicate"] and len(list(campaigns_dict[campaign_id]["place"][place_id]["duplicate"]["chemistry"].keys()))>1: for measurepoint in campaigns_dict[campaign_id]["place"][place_id]["duplicate"]["chemistry"].values(): if measurepoint not in seperate_chemistry: seperate_chemistry.append(measurepoint) if len(seperate_chemistry): for measurepoint_id in campaigns_dict[campaign_id]["place"][place_id]["measurepoint"]: if measurepoint_id in seperate_chemistry : matrix.append([campaigns_dict[campaign_id]["number"], str(campaigns_dict[campaign_id]["place"][place_id]["number"])+' - '+str(campaigns_dict[campaign_id]["place"][place_id]["measurepoint"][measurepoint_id]["number"]), translate(campaigns_dict[campaign_id]["place"][place_id]["name"]), campaigns_dict[campaign_id]["place"][place_id]["agency"] if "agency" in campaigns_dict[campaign_id]["place"][place_id] else 'ND']) if measurepoint_id in chemistry_7j_measurepoint_list : matrix_7j.append([campaigns_dict[campaign_id]["number"], str(campaigns_dict[campaign_id]["place"][place_id]["number"])+' - '+str(campaigns_dict[campaign_id]["place"][place_id]["measurepoint"][measurepoint_id]["number"]), translate(campaigns_dict[campaign_id]["place"][place_id]["name"]), campaigns_dict[campaign_id]["place"][place_id]["agency"] if "agency" in campaigns_dict[campaign_id]["place"][place_id] else 'ND']) if measurepoint_id in chemistry_21j_measurepoint_list : matrix_21j.append([campaigns_dict[campaign_id]["number"], str(campaigns_dict[campaign_id]["place"][place_id]["number"])+' - '+str(campaigns_dict[campaign_id]["place"][place_id]["measurepoint"][measurepoint_id]["number"]), translate(campaigns_dict[campaign_id]["place"][place_id]["name"]), campaigns_dict[campaign_id]["place"][place_id]["agency"] if "agency" in campaigns_dict[campaign_id]["place"][place_id] else 'ND']) else : in_list = False in_7j_list = False in_21j_list = False for measurepoint_id in campaigns_dict[campaign_id]["place"][place_id]["measurepoint"]: if measurepoint_id in chemistry_measurepoint_list: in_list = True if measurepoint_id in chemistry_7j_measurepoint_list: in_7j_list = True if measurepoint_id in chemistry_21j_measurepoint_list: in_21j_list = True if in_list : matrix.append([campaigns_dict[campaign_id]["number"], campaigns_dict[campaign_id]["place"][place_id]["number"], translate(campaigns_dict[campaign_id]["place"][place_id]["name"]), campaigns_dict[campaign_id]["place"][place_id]["agency"] if "agency" in campaigns_dict[campaign_id]["place"][place_id] else 'ND']) if in_7j_list : matrix_7j.append([campaigns_dict[campaign_id]["number"], campaigns_dict[campaign_id]["place"][place_id]["number"], translate(campaigns_dict[campaign_id]["place"][place_id]["name"]), campaigns_dict[campaign_id]["place"][place_id]["agency"] if "agency" in campaigns_dict[campaign_id]["place"][place_id] else 'ND']) if in_21j_list : matrix_21j.append([campaigns_dict[campaign_id]["number"], campaigns_dict[campaign_id]["place"][place_id]["number"], translate(campaigns_dict[campaign_id]["place"][place_id]["name"]), campaigns_dict[campaign_id]["place"][place_id]["agency"] if "agency" in campaigns_dict[campaign_id]["place"][place_id] else 'ND']) if len(matrix): for row in matrix : df_normal = pd.DataFrame([row], columns=['Campagne', 'Numéro', 'Station de mesure', 'Code Agence']) list_dataframe.append(df_normal) if len(matrix_7j): for row in matrix_7j : df_7j = pd.DataFrame([row], columns=['Campagne', 'Numéro', 'Station de mesure', 'Code Agence']) list_dataframe_7j.append(df_7j) if len(matrix_21j): for row in matrix_21j : df_21j = pd.DataFrame([row], columns=['Campagne', 'Numéro', 'Station de mesure', 'Code Agence']) list_dataframe_21j.append(df_21j) if len(list_dataframe)>1 : df_concat = pd.concat(list_dataframe) elif len(list_dataframe)==1 : df_concat = list_dataframe[0] else : df_concat = None if len(list_dataframe_7j)>1 : df_concat_7j = pd.concat(list_dataframe_7j) elif len(list_dataframe_7j)==1 : df_concat_7j = list_dataframe_7j[0] else : df_concat_7j = None if len(list_dataframe_21j)>1 : df_concat_21j = pd.concat(list_dataframe_21j) elif len(list_dataframe_21j)==1 : df_concat_21j = list_dataframe_21j[0] else : df_concat_21j = None return df_concat, df_concat_7j, df_concat_21j
def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.setupUi(self) # Initiate Channel Buttons self.ch_buttons() # Mic Volume self.bar_volume.setValue(get_mic_vol()) # Resolution self.create_row( title=translate('SpectrumOptions', 'Resolution'), option_key='spectrum/resolution', default=10, min_=5, max_=100, step=5, format_='%d' ) # Measurement Time self.create_row( title=translate('SpectrumOptions', 'Frames'), option_key='spectrum/frames', default=100, min_=10, max_=200, step=10, format_='%d' ) # Y Max self.create_row( title=translate('SpectrumOptions', 'Y Max'), option_key='spectrum/y_max', default=0.1, min_=0, max_=1, step=0.05, format_='%.2f' ) # X Min self.create_row( title=translate('SpectrumOptions', 'X Min'), option_key='spectrum/x_min', default=15000, min_=0, max_=47999, step=1000, format_='%d' ) # X Max self.create_row( title=translate('SpectrumOptions', 'X Max'), option_key='spectrum/x_max', default=30000, min_=1, max_=48000, step=1000, format_='%d' ) # Selected Transmitters self.tx_model = TransmittersTableModel() self.table_tx.setModel(self.tx_model) # Set Row Height v_header = self.table_tx.verticalHeader() v_header.setResizeMode(QtGui.QHeaderView.Fixed) v_header.setDefaultSectionSize(42) selected = self.get_selected_frequencies() for row_id in range(self.tx_model.rowCount()): idx = self.tx_model.index(row_id, 1) if self.tx_model.itemData(idx) in selected: self.table_tx.selectionModel().select( idx, QtGui.QItemSelectionModel.Select | QtGui.QItemSelectionModel.Rows ) self.table_tx.selectionModel().selectionChanged.connect(self.changed_tx)