/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package test.digitize; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.das2.qds.QDataSet; import static org.das2.qds.ops.Ops.*; /** * I need to port some of Sebastian's routines into Java so I can debug them. * * @author jbf */ public class FrankenApp { public static Map edgeDetection( QDataSet spectra_trim, List time_index, List freq_index ) { int r = 0; int t = time_index.get(0); QDataSet span = spectra_trim.slice(0); //[0,:]; List tags= new ArrayList(); double low = total( span.trim( freq_index.get(r)-2, freq_index.get(r)+1 ) ); double high = total( span.trim( freq_index.get(r)+1, freq_index.get(r)+2+1 ) ); double threshold = (float)( (high+low)/2. ); System.err.println( "low=" + low ); System.err.println( "high=" + high ); System.err.println( "thresh=" + threshold ); for ( int islice=0; islice< spectra_trim.length(); islice++ ) { QDataSet s= spectra_trim.slice(islice); List collect = new ArrayList(); collect.add( freq_index.get(r) ); for ( int i=0; i<10; i++ ) { if ( log10( s.value(freq_index.get(r)+i+1) ) >= log10( s.value(freq_index.get(r)+i) ) ) { collect.add( freq_index.get(r)+i+1 ); } else { break; } } for ( int i=-9; i<1; i++ ) { if ( log10( s.value(freq_index.get(r)+i-1) ) <= log10( s.value(freq_index.get(r)+i) ) ) { collect.add( freq_index.get(r)+i+1 ); } else { break; } } int avg_freq = (int)( round( divide( total(collect), collect.size() ) ).value() ); low = total( s.trim( freq_index.get(r)-2, freq_index.get(r)+1 ) ); high = total( s.trim( freq_index.get(r)+1, freq_index.get(r)+2+1 ) ); double ratio = (double)( (high+low)/2. ); if ( ratio > threshold ) { if ( freq_index.get(r)-1 != avg_freq ) { int avg = (int)( (freq_index.get(r)-1+avg_freq)/2. ); freq_index.add(avg); } else { freq_index.add(avg_freq); } } else { if ( freq_index.get(r)+1 != avg_freq ) { int avg = (int)( (freq_index.get(r)+1+avg_freq)/2. ); freq_index.add(avg); } else { freq_index.add(avg_freq); } } time_index.add(t); tags.add( "fpe"); tags.add( "edit"); r+= 1; t+= 1; } time_index= time_index.subList(0,time_index.size()); freq_index= freq_index.subList(0,time_index.size()); Map result= new HashMap(); result.put( "time_index", time_index ); result.put( "freq_index", freq_index ); result.put( "tags", tags ); return result; } }