
mds.wave.WaveInterface Maven / Gradle / Ivy
package mds.wave;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import mds.jscope.SignalBox;
public class WaveInterface
{
public static SignalBox sig_box = new SignalBox();
static final int MAX_NUM_SHOT = 30;
static public boolean auto_color_on_expr = false;
public static boolean brief_error = true;
protected static String AddNewLineCode(String s)
{
String s_new = new String();
int new_pos = 0, old_pos = 0;
if (s == null)
return null;
while ((new_pos = s.indexOf("\n", old_pos)) != -1)
{
s_new = s_new.concat(s.substring(old_pos, new_pos));
old_pos = new_pos + "\n".length();
s_new += "|||";
}
s_new = s_new.concat(s.substring(old_pos, s.length()));
return s_new;
}
public static long[] GetShotArray(String in_shots, String exp, DataProvider dp) throws IOException
{
long shot_list[] = null;
String error;
if (in_shots == null || in_shots.trim().length() == 0 || dp == null)
return null;
String shotExpr = in_shots;
if (exp != null)
shotExpr = processShotExpression(in_shots, exp);
shot_list = dp.getShots(shotExpr, exp);
if (shot_list == null || shot_list.length == 0 || shot_list.length > MAX_NUM_SHOT)
{
if (shot_list != null && shot_list.length > MAX_NUM_SHOT)
error = "Too many shots. Max shot list elements " + MAX_NUM_SHOT + "\n";
else
{
if (dp.getError() != null)
{
error = dp.getError();
if (error.indexOf("_jScopeMainShots") != -1)
error = "Undefined main shot value";
}
else
error = "Shot syntax error\n";
}
throw (new IOException(error));
}
return shot_list;
}
static String processShotExpression(String shotExpr, String exp)
{
String outStr = "";
int idx = 0;
int prevIdx = 0;
shotExpr = shotExpr.trim();
if (exp == null || exp.length() == 0)
return shotExpr;
while ((idx = shotExpr.indexOf('0', prevIdx)) != -1)
{
if ((idx > 0 && Character.isLetterOrDigit(shotExpr.charAt(idx - 1)))
|| (idx < (shotExpr.length() - 1) && Character.isLetterOrDigit(shotExpr.charAt(idx + 1))))
{
outStr += shotExpr.substring(prevIdx, idx + 1);
}
else
{
outStr += shotExpr.substring(prevIdx, idx) + "current_shot(\"" + exp + "\")";
}
prevIdx = idx + 1;
}
if (outStr.length() == 0)
return shotExpr;
else
outStr += (prevIdx < shotExpr.length() ? shotExpr.substring(prevIdx, shotExpr.length()) : "");
return outStr;
}
protected static String RemoveNewLineCode(String s)
{
String y_new = new String();
int new_pos = 0, old_pos = 0;
while ((new_pos = s.indexOf("|||", old_pos)) != -1)
{
y_new = y_new.concat(s.substring(old_pos, new_pos));
old_pos = new_pos + "|||".length();
y_new += '\n';
}
y_new = y_new.concat(s.substring(old_pos, s.length()));
return y_new;
}
static String TrimString(String s)
{
String s_new = new String();
int new_pos = 0, old_pos = 0;
while ((new_pos = s.indexOf(" ", old_pos)) != -1)
{
s_new = s_new.concat(s.substring(old_pos, new_pos));
old_pos = new_pos + " ".length();
}
s_new = s_new.concat(s.substring(old_pos, s.length()));
return s_new;
}
public static void WriteLine(PrintWriter out, String prompt, String value)
{
if (value != null && value.length() != 0)
{
out.println(prompt + value);
}
}
public Waveform wave;
public int num_waves;
public boolean x_log, y_log;
public String in_label[], in_x[], in_y[], in_up_err[], in_low_err[];
// Prameter used to evaluate waveform
public String in_xmin, in_xmax, in_ymax, in_ymin, in_timemax, in_timemin;
public String in_title, in_xlabel, in_ylabel;
public String in_def_node;
public boolean in_upd_limits = true;
public String experiment;
public int in_grid_mode;
public int height;
public boolean isContinuousUpdate = false;
public String in_shot;
public int num_shot = 1;
private boolean modified = true;
// Used by GetShotArray methods to define
// if required shots must be evaluate
// private String shot_str_eval = null;
// private long shot_list[] = null;
public boolean reversed = false;
public boolean show_legend = false;
public double legend_x;
public double legend_y;
public int markers_step[];
public int markers[];
public int colors_idx[];
public boolean interpolates[];
public int mode2D[];
public int mode1D[];
public long shots[];
public String error;
private String curr_error;
public String provider;
public String w_error[];
public Signal signals[];
public double xmax, xmin, ymax, ymin, timemax, timemin;
public String title, xlabel, ylabel, zlabel;
public DataProvider dp;
// Used for asynchronous Update
public boolean asynch_update = true;
Signal wave_signals[];
protected boolean evaluated[];
public boolean is_image = false;
public boolean keep_ratio = true;
public boolean horizontal_flip = false;
public boolean vertical_flip = false;
public int signal_select = -1;
private Frames frames;
// True when a signal is added
protected boolean add_signal = false;
protected boolean is_signal_added = false;
public ColorMap colorMap = new ColorMap();
boolean xLimitsLong;
long xminLong = 0;
long xmaxLong = 0;
public WaveInterface()
{
CreateWaveInterface(null, null);
}
public WaveInterface(DataProvider dp)
{
CreateWaveInterface(null, dp);
}
public WaveInterface(Waveform wave)
{
CreateWaveInterface(wave, null);
}
public WaveInterface(Waveform wave, DataProvider dp)
{
CreateWaveInterface(wave, dp);
}
public void AddFrames(String frames)
{
AddFrames(frames, null);
}
public void AddFrames(String frames, String frames_time)
{
SetAsImage(true);
in_x = new String[1];
in_y = new String[1];
in_x[0] = frames_time;
in_y[0] = frames;
}
public boolean AddSignal(String y_expr)
{
return AddSignal("", y_expr);
}
public boolean AddSignal(String x_expr, String y_expr)
{
final String x[] = new String[1];
final String y[] = new String[1];
x[0] = x_expr;
y[0] = y_expr;
return AddSignals(x, y);
}
public boolean AddSignals(String x_expr[], String y_expr[])
{
if (x_expr.length != y_expr.length || x_expr.length == 0)
return false;
int new_num_waves;
int num_sig = x_expr.length;
boolean is_new[] = null;
if (num_waves != 0)
{
is_new = new boolean[x_expr.length];
for (int j = 0; j < x_expr.length; j++)
{
is_new[j] = true;
for (int i = 0; i < num_waves; i++)
{
if (y_expr[j].equals(in_y[i]) && (in_x[i] != null && x_expr[j].equals(in_x[i])))
{
/*
* if(evaluated != null && evaluated[i]) return true; else return false;
*/
is_new[j] = false;
num_sig--;
}
}
}
if (num_sig == 0)
return true;
new_num_waves = num_waves + (num_shot != 0 ? num_shot : 1) * num_sig;
}
else
new_num_waves = x_expr.length;
final String new_in_label[] = new String[new_num_waves];
final String new_in_x[] = new String[new_num_waves];
final String new_in_y[] = new String[new_num_waves];
final String new_in_up_err[] = new String[new_num_waves];
final String new_in_low_err[] = new String[new_num_waves];
final int new_markers[] = new int[new_num_waves];
final int new_markers_step[] = new int[new_num_waves];
final int new_colors_idx[] = new int[new_num_waves];
final boolean new_interpolates[] = new boolean[new_num_waves];
final int new_mode2D[] = new int[new_num_waves];
final int new_mode1D[] = new int[new_num_waves];
long new_shots[] = null;
if (shots != null)
new_shots = new long[new_num_waves];
final boolean new_evaluated[] = new boolean[new_num_waves];
final Signal new_signals[] = new Signal[new_num_waves];
final String new_w_error[] = new String[new_num_waves];
for (int i = 0; i < num_waves; i++)
{
new_in_label[i] = in_label[i];
new_in_x[i] = in_x[i];
new_in_y[i] = in_y[i];
new_in_up_err[i] = in_up_err[i];
new_in_low_err[i] = in_low_err[i];
new_markers[i] = markers[i];
new_markers_step[i] = markers_step[i];
new_colors_idx[i] = colors_idx[i];
new_interpolates[i] = interpolates[i];
new_mode2D[i] = mode2D[i];
new_mode1D[i] = mode1D[i];
if (shots != null)
new_shots[i] = shots[i];
if (evaluated != null)
new_evaluated[i] = evaluated[i];
else
new_evaluated[i] = false;
if (signals != null)
new_signals[i] = signals[i];
if (w_error != null)
new_w_error[i] = w_error[i];
}
for (int i = 0, k = num_waves; i < x_expr.length; i++)
{
if (is_new != null && !is_new[i])
continue;
for (int j = 0; j < num_shot; j++)
{
new_in_label[k] = "";
new_in_x[k] = new String(x_expr[i]);
new_in_y[k] = new String(y_expr[i]);
new_in_up_err[k] = "";
new_in_low_err[k] = "";
new_markers[k] = 0;
new_markers_step[k] = 1;
if (auto_color_on_expr)
new_colors_idx[k] = (k - j) % Waveform.colors.length;
else
new_colors_idx[k] = j % Waveform.colors.length;
new_interpolates[k] = true;
new_evaluated[k] = false;
new_mode2D[k] = Signal.MODE_XZ;
new_mode1D[k] = Signal.MODE_LINE;
if (shots != null && shots.length != 0 && num_shot > 0)
new_shots[k] = shots[j];
k++;
}
}
in_label = new_in_label;
in_x = new_in_x;
in_y = new_in_y;
in_up_err = new_in_up_err;
in_low_err = new_in_low_err;
markers = new_markers;
markers_step = new_markers_step;
colors_idx = new_colors_idx;
interpolates = new_interpolates;
mode2D = new_mode2D;
mode1D = new_mode1D;
shots = new_shots;
num_waves = new_num_waves;
evaluated = new_evaluated;
signals = new_signals;
w_error = new_w_error;
add_signal = true;
return true;
}
public boolean allEvaluated()
{
if (evaluated == null)
return false;
for (int curr_wave = 0; curr_wave < num_waves; curr_wave++)
if (!evaluated[curr_wave])
{
modified = true;
return false;
}
modified = false;
return true;
}
private void CreateNewFramesClass(int image_type) throws IOException
{
if (image_type == FrameData.JAI_IMAGE)
{
try
{
final Class> cl = Class.forName("jScope.FrameJAI");
frames = (Frames) cl.newInstance();
}
catch (final Exception e)
{
throw (new IOException("Java Advanced Imaging must be installed to show this type of image"));
}
}
else
{
frames = new Frames();
frames.setColorMap(colorMap);
}
}
private void CreateWaveInterface(Waveform wave, DataProvider dp)
{
this.wave = wave;
this.dp = dp;
if (dp == null)
experiment = null;
shots = null;
in_xmin = in_xmax = in_ymin = in_ymax = in_title = null;
in_xlabel = in_ylabel = in_timemax = in_timemin = null;
markers = null;
interpolates = null;
mode2D = null;
mode1D = null;
x_log = y_log = false;
in_upd_limits = true;
show_legend = false;
reversed = false;
}
public void Erase()
{
num_waves = 0;
in_label = null;
in_x = null;
in_y = null;
in_up_err = null;
in_low_err = null;
in_xmin = null;
in_xmax = null;
in_ymax = null;
in_ymin = null;
in_timemax = null;
in_timemin = null;
in_title = null;
in_xlabel = null;
in_ylabel = null;
experiment = null;
in_shot = null;
num_shot = 1;
modified = true;
markers_step = null;
markers = null;
colors_idx = null;
interpolates = null;
mode2D = null;
mode1D = null;
shots = null;
error = null;
curr_error = null;
w_error = null;
signals = null;
title = null;
xlabel = null;
ylabel = null;
is_image = false;
keep_ratio = true;
horizontal_flip = false;
vertical_flip = false;
frames = null;
show_legend = false;
wave_signals = null;
evaluated = null;
}
public synchronized boolean EvaluateOthers()
{
int curr_wave;
if (is_image)
{
if (!evaluated[0])
{
InitializeFrames();
if (frames != null)
frames.SetViewRect((int) xmin, (int) ymin, (int) xmax, (int) ymax);
error = curr_error;
}
return false;
}
if (evaluated == null)
{
signals = null;
return true;
}
boolean retStatus = true;
for (curr_wave = 0; curr_wave < num_waves; curr_wave++)
{
if (!evaluated[curr_wave] && !(!interpolates[curr_wave] && this.markers[curr_wave] == Signal.NONE))
{
w_error[curr_wave] = null;
try
{
signals[curr_wave] = GetSignal(curr_wave, xmin, xmax);
evaluated[curr_wave] = true;
}
catch (final Exception exc)
{
signals[curr_wave] = null;
curr_error = exc.getMessage();
retStatus = false;
}
if (signals[curr_wave] == null)
{
w_error[curr_wave] = curr_error;
evaluated[curr_wave] = false;
}
else
{
sig_box.AddSignal(in_x[curr_wave], in_y[curr_wave]);
try
{
setLimits(signals[curr_wave]);
}
catch (final Exception exc)
{
signals[curr_wave] = null;
w_error[curr_wave] = exc.getMessage();
retStatus = false;
}
}
}
}
modified = false;
return retStatus;
}
public synchronized void EvaluateShot(long shot) throws Exception
{
int curr_wave;
if (is_image)
return;
// dp.enableAsyncUpdate(false);
for (curr_wave = 0; curr_wave < num_waves; curr_wave++)
{
if ((shot == 0) || (shots[curr_wave] == shot && !evaluated[curr_wave]
&& (interpolates[curr_wave] || markers[curr_wave] != Signal.NONE)))
{
w_error[curr_wave] = null;
try
{
signals[curr_wave] = GetSignal(curr_wave, -Double.MAX_VALUE, Double.MAX_VALUE);
evaluated[curr_wave] = true;
}
catch (final Exception exc)
{
signals[curr_wave] = null;
w_error[curr_wave] = exc.getMessage();
}
if (signals[curr_wave] == null)
{
w_error[curr_wave] = curr_error;
evaluated[curr_wave] = false;
}
else
{
sig_box.AddSignal(in_x[curr_wave], in_y[curr_wave]);
setLimits(signals[curr_wave]);
}
}
}
// dp.enableAsyncUpdate(true);
}
public ColorMap getColorMap()
{ return colorMap; }
public DataProvider getDataProvider()
{ return dp; }
// Try to convert the passed string to a date. Return the converted time in long
// format if it succeeds, -1 otherwise
long getDate(String inVal)
{
try
{
final Calendar cal = Calendar.getInstance();
// cal.setTimeZone(TimeZone.getTimeZone("GMT+00"));
// DateFormat df = new SimpleDateFormat("d-MMM-yyyy HH:mm z");
final DateFormat df = new SimpleDateFormat("d-MMM-yyyy HH:mm");
// Date date = df.parse(inVal + " GMT");
final Date date = df.parse(inVal);
cal.setTime(date);
final long javaTime = cal.getTime().getTime();
return javaTime;
}
catch (final Exception exc)
{
return -1;
}
}
public String getErrorTitle()
{ return getErrorTitle(brief_error); }
public String getErrorTitle(boolean brief)
{
int n_error = 0;
String er = error;
if (num_waves == 0 || (is_image && frames == null))
{
if (error != null)
if (brief)
er = GetFirstLine(new String(error));
return er;
}
for (int ii = 0; ii < num_waves; ii++)
{
if (w_error != null && w_error[ii] != null)
n_error++;
}
if (error == null && n_error > 1 && n_error == num_waves)
{
er = "Evaluation error on all signals";
}
else
{
if (error != null)
er = error;
else
{
if (n_error == 1 && num_waves == 1)
{
er = w_error[0];
}
else if (n_error > 0)
er = "< Evaluation error on " + n_error + " signal" + (n_error > 1 ? "s" : "") + " >";
}
}
if (er != null && brief)
{
final int idx = (er.indexOf('\n') == -1 ? er.length() : er.indexOf('\n'));
er = er.substring(0, idx);
}
return er;
}
private String GetFirstLine(String str)
{
final int idx = str.indexOf("\n");
if (idx != -1)
return str.substring(0, idx);
else
return str;
}
public Frames getFrames()
{ return frames; }
public boolean getModified()
{ return modified; }
public int GetNumEvaluatedSignal()
{
if (signals == null)
return 0;
int i, n = 0;
for (i = 0; i < signals.length; i++)
if (signals[i] != null)
n++;
return n;
}
public long[] GetShotArray(String in_shots) throws IOException
{
final long curr_shots[] = GetShotArray(in_shots, experiment, dp);
return curr_shots;
}
private Signal GetSignal(int curr_wave, double xmin, double xmax) throws IOException
{
Signal out_signal = null;
final int mode = this.wave.GetMode();
try
{
this.wave.SetMode(Waveform.MODE_WAIT);
if (in_y[curr_wave] == null)
{
curr_error = "Missing Y value";
this.wave.SetMode(mode);
return null;
}
synchronized (dp)
{
out_signal = GetSignalFromProvider(curr_wave, xmin, xmax);
}
if (out_signal != null)
{
if (xmin > xmax)
xmin = xmax;
if (ymin > ymax)
ymin = ymax;
out_signal.setXLimits(xmin, xmax, Signal.AT_CREATION | Signal.FIXED_LIMIT);
if (in_ymax != null && (in_ymax.trim()).length() != 0 && in_upd_limits)
out_signal.setYmax(ymax, Signal.AT_CREATION | Signal.FIXED_LIMIT);
if (in_ymin != null && (in_ymin.trim()).length() != 0 && in_upd_limits)
out_signal.setYmin(ymin, Signal.AT_CREATION | Signal.FIXED_LIMIT);
}
this.wave.SetMode(mode);
}
catch (final IOException exc)
{
this.wave.SetMode(mode);
throw (exc);
}
return out_signal;
}
private Signal GetSignalFromProvider(int curr_wave, double xmin, double xmax) throws IOException
{
WaveData up_err = null, low_err = null;
WaveData wd = null;
WaveData xwd = null;
int xDimension = 1;
// final int yDimension = 1;
Signal out_signal;
String xlabel = null, ylabel = null, title = null;
if (shots != null && shots.length != 0)
dp.update(experiment, shots[curr_wave]);
else
dp.update(null, 0);
if (dp.getError() != null)
{
error = dp.getError();
return null;
}
if (in_def_node != null && in_def_node.length() > 0)
{
dp.setEnvironment("__default_node = " + in_def_node);
}
else
{
dp.setEnvironment("__default_node = " + experiment + "::TOP");
}
if (dp.getError() != null)
{
error = dp.getError();
return null;
}
if (in_x[curr_wave] != null && (in_x[curr_wave].trim()).length() != 0)
{
wd = dp.getWaveData(in_y[curr_wave], in_x[curr_wave], wave.getRow(), wave.getColumn(), wave.getIndex());
if (wd != null)
{
xlabel = wd.GetXLabel();
ylabel = wd.GetYLabel();
}
if (wd != null && in_up_err != null && in_up_err[curr_wave] != null
&& (in_up_err[curr_wave].trim()).length() != 0)
{
up_err = dp.getWaveData(in_up_err[curr_wave], wave.getRow(), wave.getColumn(), wave.getIndex());
}
if (in_low_err != null && in_low_err[curr_wave] != null && (in_low_err[curr_wave].trim()).length() != 0)
{
low_err = dp.getWaveData(in_low_err[curr_wave], wave.getRow(), wave.getColumn(), wave.getIndex());
}
}
else // X field not defined
{
if (wd == null)
wd = dp.getWaveData(in_y[curr_wave], wave.getRow(), wave.getColumn(), wave.getIndex());
// if (yDimension == 1)
{
if (in_up_err != null && in_up_err[curr_wave] != null && (in_up_err[curr_wave].trim()).length() != 0)
{
up_err = dp.getWaveData(in_up_err[curr_wave], wave.getRow(), wave.getColumn(), wave.getIndex());
}
if (in_low_err != null && in_low_err[curr_wave] != null && (in_low_err[curr_wave].trim()).length() != 0)
{
low_err = dp.getWaveData(in_low_err[curr_wave], wave.getRow(), wave.getColumn(), wave.getIndex());
}
}
}
if (wd == null)
{
curr_error = dp.getError();
return null;
}
// Check for 2-dimensional X axis
if (in_x[curr_wave] != null)
{
xwd = dp.getWaveData(in_x[curr_wave], wave.getRow(), wave.getColumn(), wave.getIndex());
if ((xDimension = xwd.getNumDimension()) == 1)
xwd = null; // xwd is different from null ONLY for bidimensional X axis
}
if (xDimension == 1)
{
if (xLimitsLong)
out_signal = new Signal(wd, xwd, xminLong, xmaxLong, low_err, up_err);
else
out_signal = new Signal(wd, xwd, xmin, xmax, low_err, up_err);
}
else
{
if (xLimitsLong)
out_signal = new Signal(wd, xwd, xminLong, xmaxLong);
else
out_signal = new Signal(wd, xwd, xmin, xmax);
}
// if (yDimension > 1) out_signal.setMode2D(mode2D[curr_wave]); else
out_signal.setMode1D(mode1D[curr_wave]);
if (wd != null)
{
try
{
title = wd.GetTitle();
}
catch (final Exception exc)
{}
}
if (up_err != null && low_err != null)
out_signal.AddAsymError(up_err, low_err);
else if (up_err != null)
out_signal.AddError(up_err);
if (wd != null)
{
try
{
xlabel = wd.GetXLabel();
ylabel = wd.GetYLabel();
}
catch (final Exception exc)
{}
}
out_signal.setLabels(title, xlabel, ylabel, null);
return out_signal;
}
public String[] GetSignalsName()
{
String name[] = null, s;
if (num_waves != 0)
{
final int ns = (num_shot > 0 ? num_shot : 1);
name = new String[num_waves / ns];
for (int i = 0, j = 0; i < num_waves; i += ns)
{
s = (in_label[i] != null && in_label[i].length() != 0) ? in_label[i] : in_y[i];
name[j++] = s;
}
}
return name;
}
public boolean[] GetSignalsState()
{
boolean state[] = null;
if (num_waves != 0)
{
final int ns = (num_shot > 0 ? num_shot : 1);
state = new boolean[num_waves / ns];
for (int i = 0, j = 0; i < num_waves; i += ns)
state[j++] = (interpolates[i] || (markers[i] != Signal.NONE));
}
return state;
}
public boolean GetSignalState(int i)
{
boolean state = false;
// int idx = i * (num_shot > 0 ? num_shot : 1);
if (i < num_waves)
state = (interpolates[i] || (markers[i] != Signal.NONE));
return state;
}
private void InitializeFrames()
{
curr_error = null;
WaveformEvent we;
final int mode = this.wave.GetMode();
this.wave.SetMode(Waveform.MODE_WAIT);
if (in_y[0] == null)
{
curr_error = "Missing Y value";
return;
}
if (shots != null && shots.length != 0)
dp.update(experiment, shots[0]);
else
dp.update(null, 0);
try
{
we = new WaveformEvent(wave, "Loading single or multi frame image");
wave.dispatchWaveformEvent(we);
final FrameData fd = dp.getFrameData(in_y[0], in_x[0], (float) timemin, (float) timemax);
if (fd != null)
{
CreateNewFramesClass(fd.getFrameType());
/*
* frames.setHorizontalFlip(horizontal_flip);
* frames.setVerticalFlip(vertical_flip);
*/
frames.SetFrameData(fd);
if (in_label != null && in_label[0] != null && in_label[0].length() != 0)
frames.setName(in_label[0]);
else
frames.setName(in_y[0]);
evaluated[0] = true;
}
else
{
frames = null;
curr_error = dp.getError();
evaluated[0] = false;
}
// frames.WaitLoadFrame();
this.wave.SetMode(mode);
}
catch (final Throwable e)
{
// e.printStackTrace();
this.wave.SetMode(mode);
frames = null;
curr_error = " Load Frames error " + e.getMessage();
}
}
public boolean isAddSignal()
{ return add_signal; }
public boolean IsSignalAdded()
{
return is_signal_added;
}
public void setAddSignal(boolean add_signal)
{ this.add_signal = add_signal; }
public void SetAsImage(boolean is_image)
{
this.is_image = is_image;
}
public void setColorMap(ColorMap colorMap)
{ this.colorMap = colorMap; }
public void SetDataProvider(DataProvider _dp)
{
dp = _dp;
error = null;
curr_error = null;
w_error = null;
signals = null;
modified = true;
// When change data provide
// shot variable is reset to
// assure shot avaluation
// shot_str_eval = null;
// shot_list = null;
}
public void setExperiment(String experiment)
{ this.experiment = experiment; }
public void setFrames(Frames f)
{ frames = f; }
public void SetIsSignalAdded(boolean is_signal_added)
{
this.is_signal_added = is_signal_added;
}
public void SetLegendPosition(double x, double y)
{
legend_x = x;
legend_y = y;
show_legend = true;
}
public void setLimits()
{
try
{
for (final Signal signal : signals)
if (signal != null)
setLimits(signal);
}
catch (final Exception e)
{}
}
public void setLimits(Signal s) throws Exception
{
s.setXLimits(xmin, xmax, Signal.AT_CREATION);
s.setYmin(ymin, Signal.AT_CREATION);
s.setYmax(ymax, Signal.AT_CREATION);
}
public void setModified(boolean state)
{ modified = state; }
public void setShotArray(String in_shot) throws IOException
{
this.in_shot = in_shot;
final long curr_shots[] = GetShotArray(in_shot);
UpdateShot(curr_shots);
}
public void setSignalState(String name, boolean state)
{
if (num_waves != 0)
{
final int ns = (num_shot == 0) ? 1 : num_shot;
for (int i = 0; i < num_waves; i++)
if (name.equals(in_y[i]) || name.equals(in_label[i]))
{
for (int j = i; j < i + ns; j++)
{
interpolates[j] = state;
markers[i] = Signal.NONE;
}
return;
}
}
}
public void ShowLegend(boolean state)
{
show_legend = state;
}
public synchronized int StartEvaluate() throws IOException
{
error = null;
if (modified)
evaluated = null;
if ((in_y == null || in_x == null))
{
error = "Missing Y or X values";
signals = null;
return 0;
}
if (shots == null && !(experiment == null || experiment.trim().length() == 0))
{
error = "Missing shot value";
signals = null;
}
if (shots != null && (experiment == null || experiment.trim().length() == 0))
{
error = "Missing experiment name";
signals = null;
}
num_waves = in_y.length;
if (modified)
{
if (!is_image)
signals = new Signal[num_waves];
evaluated = new boolean[num_waves];
w_error = new String[num_waves];
}
if (in_x != null && num_waves != in_x.length)
{
error = "X values are different from Y values";
return 0;
}
if (shots != null && shots.length > 0)
{
int i = 0;
do
{
dp.update(experiment, shots[i]);
i++;
}
while (i < shots.length && dp.getError() != null);
}
else
dp.update(null, 0);
if (dp.getError() != null)
{
error = dp.getError();
return 0;
}
// Compute title
if (in_title != null && (in_title.trim()).length() != 0)
{
title = dp.getString(in_title, wave.getRow(), wave.getColumn(), wave.getIndex());
if (title == null)
{
error = dp.getError();
return 0;
}
}
// compute limits
if (in_xmin != null && (in_xmin.trim()).length() != 0 && in_upd_limits)
{
xmin = dp.getFloat(in_xmin, wave.getRow(), wave.getColumn(), wave.getIndex());
if (dp.getError() != null)
{
error = dp.getError();
return 0;
}
final long timeLong = getDate(in_xmin);
if (timeLong != -1)
{
xLimitsLong = true;
xminLong = timeLong;
}
}
else
xmin = (!is_image) ? -Double.MAX_VALUE : -1;
if (in_xmax != null && (in_xmax.trim()).length() != 0 && in_upd_limits)
{
xmax = dp.getFloat(in_xmax, wave.getRow(), wave.getColumn(), wave.getIndex());
if (dp.getError() != null)
{
error = dp.getError();
return 0;
}
final long timeLong = getDate(in_xmax);
if (timeLong != -1)
{
xLimitsLong = true;
xmaxLong = timeLong;
}
}
else
xmax = (!is_image) ? Double.MAX_VALUE : -1;
if (in_ymax != null && (in_ymax.trim()).length() != 0 && in_upd_limits)
{
ymax = dp.getFloat(in_ymax, wave.getRow(), wave.getColumn(), wave.getIndex());
if (dp.getError() != null)
{
error = dp.getError();
return 0;
}
}
else
ymax = (!is_image) ? Double.MAX_VALUE : -1;
if (in_ymin != null && (in_ymin.trim()).length() != 0 && in_upd_limits)
{
ymin = dp.getFloat(in_ymin, wave.getRow(), wave.getColumn(), wave.getIndex());
if (dp.getError() != null)
{
error = dp.getError();
return 0;
}
}
else
ymin = (!is_image) ? -Double.MAX_VALUE : -1;
if (is_image)
{
if (in_timemax != null && (in_timemax.trim()).length() != 0)
{
timemax = dp.getFloat(in_timemax, wave.getRow(), wave.getColumn(), wave.getIndex());
if (dp.getError() != null)
{
error = dp.getError();
return 0;
}
}
else
timemax = Double.MAX_VALUE;
if (in_timemin != null && (in_timemin.trim()).length() != 0)
{
timemin = dp.getFloat(in_timemin, wave.getRow(), wave.getColumn(), wave.getIndex());
if (dp.getError() != null)
{
error = dp.getError();
return 0;
}
}
else
timemin = -Double.MAX_VALUE;
}
// Compute x label, y_label
if (in_xlabel != null && (in_xlabel.trim()).length() != 0)
{
xlabel = dp.getString(in_xlabel, wave.getRow(), wave.getColumn(), wave.getIndex());
if (xlabel == null)
{
error = dp.getError();
return 0;
}
}
if (in_ylabel != null && (in_ylabel.trim()).length() != 0)
{
ylabel = dp.getString(in_ylabel, wave.getRow(), wave.getColumn(), wave.getIndex());
if (ylabel == null)
{
error = dp.getError();
return 0;
}
}
if (xmin > xmax)
xmin = xmax;
if (ymin > ymax)
ymin = ymax;
return 1;
}
public boolean UpdateShot(long curr_shots[]) throws IOException
{
int curr_num_shot;
if (curr_shots == null)
{
curr_num_shot = 1;
shots = null;
if (num_shot == 0)
return false;
}
else
curr_num_shot = curr_shots.length;
int num_signal;
int num_expr;
if (num_shot == 0)
{
num_signal = num_waves * curr_num_shot;
num_expr = num_waves;
}
else
{
num_signal = num_waves / num_shot * curr_num_shot;
num_expr = num_waves / num_shot;
}
if (is_image)
{
modified = true;
shots = curr_shots;
return true;
}
if (num_signal == 0)
return false;
modified = true;
final String[] in_label = new String[num_signal];
final String[] in_x = new String[num_signal];
final String[] in_y = new String[num_signal];
final String[] in_up_err = new String[num_signal];
final String[] in_low_err = new String[num_signal];
final int[] markers = new int[num_signal];
final int[] markers_step = new int[num_signal];
final int[] colors_idx = new int[num_signal];
final boolean[] interpolates = new boolean[num_signal];
final int[] mode2D = new int[num_signal];
final int[] mode1D = new int[num_signal];
long[] shots = null;
if (curr_shots != null)
shots = new long[num_signal];
final int sig_idx = (this.num_shot == 0) ? 1 : this.num_shot;
for (int i = 0, k = 0; i < num_expr; i++)
{
for (int j = 0; j < curr_num_shot; j++, k++)
{
in_label[k] = this.in_label[i * sig_idx];
in_x[k] = this.in_x[i * sig_idx];
in_y[k] = this.in_y[i * sig_idx];
if (j < this.num_shot)
{
markers[k] = this.markers[i * this.num_shot + j];
markers_step[k] = this.markers_step[i * this.num_shot + j];
interpolates[k] = this.interpolates[i * this.num_shot + j];
mode2D[k] = this.mode2D[i * this.num_shot + j];
mode1D[k] = this.mode1D[i * this.num_shot + j];
if (curr_shots != null)
shots[k] = curr_shots[j];
in_up_err[k] = this.in_up_err[i * this.num_shot + j];
in_low_err[k] = this.in_low_err[i * this.num_shot + j];
colors_idx[k] = this.colors_idx[i * this.num_shot + j];
}
else
{
markers[k] = this.markers[i * this.num_shot];
markers_step[k] = this.markers_step[i * this.num_shot];
interpolates[k] = this.interpolates[i * this.num_shot];
mode2D[k] = this.mode2D[i * this.num_shot];
mode1D[k] = this.mode1D[i * this.num_shot];
in_up_err[k] = this.in_up_err[i * this.num_shot];
in_low_err[k] = this.in_low_err[i * this.num_shot];
if (auto_color_on_expr)
colors_idx[k] = i % Waveform.colors.length; // this.colors_idx[i * this.num_shot];
else
colors_idx[k] = j % Waveform.colors.length;
if (curr_shots != null)
shots[k] = curr_shots[j];
}
}
}
this.in_label = in_label;
this.in_x = in_x;
this.in_y = in_y;
this.in_up_err = in_up_err;
this.in_low_err = in_low_err;
this.markers = markers;
this.markers_step = markers_step;
this.colors_idx = colors_idx;
this.interpolates = interpolates;
this.mode2D = mode2D;
this.mode1D = mode1D;
this.shots = shots;
if (shots != null)
this.num_shot = curr_num_shot;
else
this.num_shot = 1;
num_waves = num_signal;
return true;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy