def test_on_case(self, case, mesValues, micSn = None): ''' test algorithm on Case ''' loc = mesValues.location mes = mesValues.measurement assert((case.case['location'] == loc and\ case.case['measurement'] == mes)) mID = case.case['mID'] mic = case.case['mic'] self.currentauthor = case.case['author'] quality = case.case['quality'] if micSn == None: micSn = MicSignal.from_measurement(mesValues, mID, mic) else: assert((case.case['mID'] == micSn.ID and\ case.case['mic'] == micSn.mic)) #output = self.func(micSn) micSn.calc_kg(self) output= micSn.get_KG_results(self)['result'] # compare case and alg results comparation, disc = case.compare(output['result'], output['t'],sum =True) #fill test cases # todo: if ROC evaluation # todo: addr BPR vector to case_tests masked in Te Tb # todo: add TF vectors self.case_tests[str(case)] = {'mic':mic,'mID':mID,'location':loc,\ 'measurement':mes,'author':self.currentauthor, \ 'quality':quality, 'disc':disc, 'te':case.get_bounds()[1], 'tb':case.get_bounds()[0]} #export for R if self.Rexport: for i in range(0,len(disc)): self.forR.append({'mic':mic, 'mID':mID, 'location':loc, 'author':self.currentauthor,'quality':quality, 'BPR':output['BPR'][i], 'time':output['t'][i], 'disc':disc[i], 'NoiseT':self.noiseType, 'Alg':"Z2", 'AlgProp': self.stringsummary()}) self.case_tests[str(case)].update(output) self.case_tests[str(case)].update(comparation) # add rates self.case_tests[str(case)].update(rates(**comparation)) return(micSn)
# read the signal try: mS = measuredSignal(ID,mic) except: print('element avoided') else: if mS.is_initialized(): y, t, sR = mS.get_signal(mic) ch_info = mS.channel_info(mic) # get the values from measuredValues to initiate MicSignal and Case var = ['Tb','Te','Tp_b','Tp_e','LAEQ'] micValues = mesVal.get_variables_values(ID, mic, var) if micValues: micValues.update(ch_info) # initiate MicSignal micSn = MicSignal(ID,mic,y,t,sR, micValues) # test if signal is clipped, skip it if True if micSn.clippedtest(): clipped.add((ID,mic)) print('clipped') continue for alg in algorithms: # calc KG micSn.calc_kg(alg, complete=False) # set results in mesVal mesVal.set_kg_values(alg,**micSn.get_KG_results(alg)) else: print('\n'+str(ID)+'_'+str(mic)+' was mistakenly taken as mbbmtested\n') else: try: print('ignoring '+str(ID)+', '+str(mic))
# caseDict to fill caseDict={} # select randomly a case mic tuple case_n = np.random.randint(len(IDxMic)) ID , mic = IDxMic.pop(case_n) print('('+ID+', '+str(mic)+')', end = '; ') # read the signal mS = measuredSignal(ID,mic) y, t, sR = mS.get_signal(mic) ch_info = mS.channel_info(mic) # get the values from measuredValues to initiate MicSignal and Case var = ['Tb','Te','Tp_b','Tp_e','LAEQ'] micValues = mesVal.get_variables_values(ID, mic, var) micValues.update(ch_info) # initiate MicSignal micSn = MicSignal(ID,mic,y,t,sR, micValues) # test if signal is clipped, skipü it if True if micSn.clippedtest(): clipped.add((ID,mic)) print('clipped') continue # create Wav and add path to caseDict caseDict['wavPath'] = str(micSn.export_to_Wav(mesPath)) # initialize empty Case with None author caseDict['case'] = {'measurement' : measurement, 'location': location, 'mID':ID, 'mic':mic,\ 'Tb': micValues['Tb'], 'Te': micValues['Te'], 'author' : None} #add tmin tmax caseDict['tmin'] = float(t.min()) caseDict['tmax'] = float(t.max()) # Add data to plot ; key:[t,y] , #key is label of plot
#collect cases cases = [] for authP in casePath.iterdir(): if authP.is_dir(): print(authP) cases.extend([Case.from_JSON(cp) for cp in authP.iterdir()\ if cp.match('case_**.json') ]) notfound=[] print('Case cases:') print('----------------------') for case in cases: print(str(case)) mID = case.case['mID'] mic = case.case['mic'] # initaite mic signal micSn, mesVal = MicSignal.from_measurement(mID, mic, Paths=Paths) if micSn: for alg in algorithms: print(str(alg),end = ', ') alg.test_on_case(case, mesVal, micSn) print('.') else: notfound.append(mID) print(mID+" not found. Pass.") #calc global Rates print('Calculate global Rates') for alg in algorithms: alg.calc_rates() # save print('save to json')
jsonpath=mesPath.joinpath(pathlib.Path('measurements_example/MBBMZugExample')) mesVal = measuredValues.from_json(jsonpath) location = mesVal.location measurement = mesVal.measurement # setup measured signal measuredSignal.setup(jsonpath) # todo: if necessary serialize on mesVal mesValues = measuredValues.from_json(jsonpath) casePath1 = mesValues.path.joinpath('test_cases/luc/case_m_1656_4_luc.json') case1 = Case.from_JSON(casePath1) casePath2 = mesValues.path.joinpath('test_cases/luc/case_m_2791_1_luc.json') case2 = Case.from_JSON(casePath2) ## case = case2 micSn, mesVal = MicSignal.from_measurement(case.case['mID'],case.case['mic'], Paths) micSn.calc_kg(algorithms[0]) ## if 2<1: f,axes = plt.subplots(2,sharex = True) ax = axes[0] micSn.plot_triggers(ax,color = '#272822',lw=1) micSn.plot_BPR(algorithm, ax, color = '#272822', linewidth=1) case.plot(ax) ax.set_xlim(-0.5,8) ymin,ymax = ax.get_ylim() ax=axes[1] alg_res = micSn.get_KG_results(algorithm)['result'] micSn.plot_BPR(algorithms[0], ax, color = '#272822', lw=1) case.plot_compare(ax,alg_res['result'], alg_res['t']) plt.show()