[update] add min_sample parameter, which controls ne number of samples that have to be of a specific voltage state before counting them as fail-state
This commit is contained in:
		
							parent
							
								
									a30cd8c0d4
								
							
						
					
					
						commit
						f0ae7da2be
					
				@ -7,11 +7,12 @@ channels: ["EX1", "EX2", "EX3", "VEI"]    # Specify SOH channels, currently supp
 | 
			
		||||
stations_blacklist: ["TEST", "EREA"]      # exclude these stations
 | 
			
		||||
networks_blacklist: []                    # exclude these networks
 | 
			
		||||
interval: 60               # Perform checks every x seconds
 | 
			
		||||
n_track: 120               # wait n_track * intervals before performing an action (i.e. send mail/end highlight status)
 | 
			
		||||
n_track: 300               # wait n_track * intervals before performing an action (i.e. send mail/end highlight status)
 | 
			
		||||
timespan: 7                # Check data of the recent x days
 | 
			
		||||
verbosity: 0               # verbosity flag
 | 
			
		||||
track_changes: True        # tracks all changes since GUI startup by text highlighting (GUI only)
 | 
			
		||||
warn_count: False          # show number of warnings and errors in table
 | 
			
		||||
warn_count: False           # show number of warnings and errors in table
 | 
			
		||||
min_sample: 3              # minimum samples for raising Warn/FAIL
 | 
			
		||||
dt_thresh: [300, 1800]     # threshold (s) for timing delay colourisation (yellow/red)
 | 
			
		||||
html_figures: True         # Create html figure directory and links
 | 
			
		||||
reread_parameters: True    # reread parameters file (change parameters on runtime, not for itself/GUI refresh/datapath)
 | 
			
		||||
 | 
			
		||||
@ -6,7 +6,7 @@ ulimit -s 8192
 | 
			
		||||
#$ -cwd
 | 
			
		||||
#$ -pe smp 1
 | 
			
		||||
#$ -N survBot_bg
 | 
			
		||||
#$ -l os=*stretch
 | 
			
		||||
##$ -l os=*stretch
 | 
			
		||||
 | 
			
		||||
source /opt/anaconda3/etc/profile.d/conda.sh
 | 
			
		||||
conda activate py37
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										32
									
								
								survBot.py
									
									
									
									
									
								
							
							
						
						
									
										32
									
								
								survBot.py
									
									
									
									
									
								
							@ -720,9 +720,6 @@ class StationQC(object):
 | 
			
		||||
            self.status_ok(key, detailed_message=f'U={(voltage[-1])}V')
 | 
			
		||||
            return
 | 
			
		||||
 | 
			
		||||
        n_overvolt = 0
 | 
			
		||||
        n_undervolt = 0
 | 
			
		||||
 | 
			
		||||
        warn_message = f'Trace {trace.get_id()}:'
 | 
			
		||||
        if len(overvolt) > 0:
 | 
			
		||||
            # try calculate number of voltage peaks from gaps between indices
 | 
			
		||||
@ -835,8 +832,7 @@ class StationQC(object):
 | 
			
		||||
                        self.status_ok(key)
 | 
			
		||||
                        continue
 | 
			
		||||
                    if volt_lvl > 1:
 | 
			
		||||
                        # try calculate number of voltage peaks from gaps between indices
 | 
			
		||||
                        n_occurrences = len(np.where(np.diff(ind_array) > 1)[0]) + 1
 | 
			
		||||
                        n_occurrences = self.calc_occurrences(ind_array)
 | 
			
		||||
                        self.warn(key=key,
 | 
			
		||||
                                  detailed_message=f'Trace {trace.get_id()}: '
 | 
			
		||||
                                                   f'Found {n_occurrences} occurrence(s) of {volt_lvl}V: {key}: {message}'
 | 
			
		||||
@ -847,6 +843,32 @@ class StationQC(object):
 | 
			
		||||
                    if volt_lvl == last_val or (volt_lvl == -1 and last_val < 1):
 | 
			
		||||
                        self.error(key, detailed_message=f'Last PowBox voltage state {last_val}V: {message}')
 | 
			
		||||
 | 
			
		||||
    def calc_occurrences(self, ind_array):
 | 
			
		||||
        # try calculate number of voltage peaks/plateaus from gaps between indices
 | 
			
		||||
        if len(ind_array) == 0:
 | 
			
		||||
            return 0
 | 
			
		||||
        else:
 | 
			
		||||
            # start index at 1 if there are gaps (n_peaks = n_gaps + 1)
 | 
			
		||||
            n_occurrences = 1
 | 
			
		||||
 | 
			
		||||
        min_samples = self.parameters.get('min_sample')
 | 
			
		||||
        if not min_samples:
 | 
			
		||||
            min_samples = 1
 | 
			
		||||
 | 
			
		||||
        # calculated differences in index array, diff > 1: gap, diff == 1: within peak/plateau
 | 
			
		||||
        diffs = np.diff(ind_array)
 | 
			
		||||
        gap_start_inds = np.where(np.diff(ind_array) > 1)[0]
 | 
			
		||||
        # iterate over all gaps and check "min_samples" before the gap
 | 
			
		||||
        for gsi in gap_start_inds:
 | 
			
		||||
            # right boundary index of peak (gap index - 1)
 | 
			
		||||
            peak_rb_ind = gsi - 1
 | 
			
		||||
            # left boundary index of peak
 | 
			
		||||
            peak_lb_ind = max([0, peak_rb_ind - min_samples])
 | 
			
		||||
            if all(diffs[peak_lb_ind: peak_rb_ind] == 1):
 | 
			
		||||
                n_occurrences += 1
 | 
			
		||||
 | 
			
		||||
        return n_occurrences
 | 
			
		||||
 | 
			
		||||
    def get_trace(self, stream, keys):
 | 
			
		||||
        if not type(keys) == list:
 | 
			
		||||
            keys = [keys]
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user