/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.hispec.trcedit;
import java.util.ArrayList;
import java.util.Arrays;
import org.hispec.BasicApplicationTools.HMath;
import org.hispec.seismicdataapi.AbstractHeaderEntry;
import org.hispec.seismicdataapi.IntegerArrayHeaderEntry;
import org.hispec.seismicdataapi.IntegerHeaderEntry;
import org.hispec.seismicdataapi.SeismicTraceHeader;
import org.hispec.seismicprocessapi.*;
import org.hispec.utilities.TaskLogger;
/**
*
* @author bchen
*/
public class TRCEDIT implements SeismicBatchModule {
TaskLogger log;
private FLOW_FLAG FLAG = FLOW_FLAG.NORMAL;
private SeismicTraceHeader sthdr;
int length, nlist;
int fmt_p_pkey, fmt_ps_pkey, fmt_ps_skey;
int p_nRow, p_nCol, ps_nRow, ps_nCol;
int amp_opr, p_opr, ps_opr;
float maxamp, minamp;
String p_pkeyname, ps_pkeyname, ps_skeyname;
boolean p_mode = false, ps_mode = false, amp_mode = false;
float [] p_pkey1, p_pkey2, ps_pkey1, ps_pkey2, ps_skey1, ps_skey2;
@Override
public void defineParameter(GlobalParameterList gp, OptionalParameterList op) {
String[] list1 = {"OMIT", "ZERO"};
AbstractTableParameter[] pkey_sel = {
new TableParameterFloat("PKEY1", java.util.ResourceBundle.getBundle("org/hispec/trcedit/trcedit").getString("PKEY1"),
null, null, null),
new TableParameterFloat("PKEY2", java.util.ResourceBundle.getBundle("org/hispec/trcedit/trcedit").getString("PKEY2"),
null, null, null),
};
AbstractParameter[] pkey_mode = {
new StringParameter("PRIMARY-KEY", java.util.ResourceBundle.getBundle("org/hispec/trcedit/trcedit").getString("PKEY"),
null, false),
new ListParameter("OPER", java.util.ResourceBundle.getBundle("org/hispec/trcedit/trcedit").getString("OPER"),
list1, 0, false),
new TableParameter("PKEY-SELECT", java.util.ResourceBundle.getBundle("org/hispec/trcedit/trcedit").getString("P-SELECT"),
pkey_sel, false),
};
op.addParameter(new GroupParameter("PKEY-MODE", java.util.ResourceBundle.getBundle("org/hispec/trcedit/trcedit").getString("P-MODE"),
pkey_mode, false));
AbstractTableParameter[] pkey_skey_sel = {
new TableParameterFloat("PKEY1", java.util.ResourceBundle.getBundle("org/hispec/trcedit/trcedit").getString("PKEY1"),
null, null, null),
new TableParameterFloat("PKEY2", java.util.ResourceBundle.getBundle("org/hispec/trcedit/trcedit").getString("PKEY2"),
null, null, null),
new TableParameterFloat("SKEY1", java.util.ResourceBundle.getBundle("org/hispec/trcedit/trcedit").getString("SKEY1"),
null, null, null),
new TableParameterFloat("SKEY2", java.util.ResourceBundle.getBundle("org/hispec/trcedit/trcedit").getString("SKEY2"),
null, null, null)
};
AbstractParameter[] pkey_skey_mode = {
new StringParameter("PRIMARY-KEY", java.util.ResourceBundle.getBundle("org/hispec/trcedit/trcedit").getString("PKEY"),
null, false),
new StringParameter("SECOND-KEY", java.util.ResourceBundle.getBundle("org/hispec/trcedit/trcedit").getString("SKEY"),
null, false),
new ListParameter("OPER", java.util.ResourceBundle.getBundle("org/hispec/trcedit/trcedit").getString("OPER"),
list1.clone(), 0, false),
new TableParameter("PKEY-SKEY-SELECT", java.util.ResourceBundle.getBundle("org/hispec/trcedit/trcedit").getString("PS-SELECT"),
pkey_skey_sel, false),
};
op.addParameter(new GroupParameter("PKEY-SKEY-MODE", java.util.ResourceBundle.getBundle("org/hispec/trcedit/trcedit").getString("PS-MODE"),
pkey_skey_mode, false));
AbstractParameter[] amplitude_mode = {
new FloatParameter("MAXIMUM-AMP", java.util.ResourceBundle.getBundle("org/hispec/trcedit/trcedit").getString("MAXIMUM-AMP"),
0.0f, null, null, false),
new FloatParameter("MINIMUM-AMP", java.util.ResourceBundle.getBundle("org/hispec/trcedit/trcedit").getString("MINIMUM-AMP"),
0.0f, null, null, false),
new ListParameter("OPER", java.util.ResourceBundle.getBundle("org/hispec/trcedit/trcedit").getString("OPER"),
list1.clone(), 0, false)
};
op.addParameter(new GroupParameter("AMPLITUDE-MODE", java.util.ResourceBundle.getBundle("org/hispec/trcedit/trcedit").getString("AMP-MODE"),
amplitude_mode, false));
}
@Override
public boolean setParameter(ParameterInJob pij, GlobalInformation gi) throws Exception {
log = gi.getLog();
ArrayList<AbstractParameter> plist = pij.getList();
if(plist.size() < 1) {
log.printError(" TRCEDIT: One optional parameter must be defined.");
return false;
}
sthdr = gi.getTraceHeader();
boolean errFlag = true;
int cnt_err = 0;
length = gi.getTraceLength();
nlist = plist.size();
//------
for(int is =0; is <nlist; is++) {
GroupParameter group = (GroupParameter)(plist.get(is));
if("PKEY-MODE".equals(group.getParameterName())) {
p_mode = true;
p_pkeyname = ((StringParameter) group.getParameterByName("PRIMARY-KEY")).getValue();
p_opr = ((ListParameter) group.getParameterByName("OPER")).getValue();
p_opr = 1 - p_opr;
TableParameter table = (TableParameter) group.getParameterByName("PKEY-SELECT");
p_nRow = table.getRowCount();
p_nCol = table.getColumnCount();
p_pkey1 = new float[p_nRow]; p_pkey2 = new float[p_nRow];
p_pkey1[0] = table.getFloat("PKEY1", 0, null , null, null);
p_pkey2[0] = table.getFloat("PKEY2", 0, p_pkey1[0], null, p_pkey1[0]);
for(int ir = 1; ir < p_nRow; ir++) {
p_pkey1[ir] = table.getFloat("PKEY1", ir, p_pkey2[ir-1], null, null);
p_pkey2[ir] = table.getFloat("PKEY2", ir, p_pkey1[ir] , null, p_pkey1[ir]);
}
} else if("PKEY-SKEY-MODE".equals(group.getParameterName())) {
ps_mode = true;
ps_pkeyname = ((StringParameter) group.getParameterByName("PRIMARY-KEY")).getValue();
ps_skeyname = ((StringParameter) group.getParameterByName("SECOND-KEY")) .getValue();
ps_opr = ((ListParameter) group.getParameterByName("OPER")).getValue();
ps_opr = 1 - ps_opr;
TableParameter table = (TableParameter) group.getParameterByName("PKEY-SKEY-SELECT");
p_nRow = table.getRowCount();
p_nCol = table.getColumnCount();
ps_pkey1 = new float[ps_nRow]; ps_pkey2 = new float[ps_nRow]; ps_skey1 = new float[ps_nRow]; ps_skey2 = new float[ps_nRow];
ps_pkey1[0] = table.getFloat("PKEY1", 0, null , null, null);
ps_pkey2[0] = table.getFloat("PKEY2", 0, ps_pkey1[0], null, ps_pkey1[0]);
ps_skey1[0] = table.getFloat("SKEY1", 0, null , null, null);
ps_skey2[0] = table.getFloat("SKEY2", 0, ps_skey1[0], null, ps_skey1[0]);
for(int ir = 1; ir < ps_nRow; ir++) {
ps_pkey1[ir] = table.getFloat("PKEY1", ir, ps_pkey2[ir-1], null, null);
ps_pkey2[ir] = table.getFloat("PKEY2", ir, ps_pkey1[ir]