⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mcacaldb.java

📁 一个用java写的地震分析软件(无源码)-used to write a seismic analysis software (without source)
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        currentStats.medianAFreeDeviation = Stats.meanDeviation(x, currentCodaCount);


        for (int idx = 0; idx < currentCodaCount; idx++) {
            x[idx] = inputDataList[idx].qFree;
        }
        currentStats.medianQFree = Stats.median(x, currentCodaCount);
        currentStats.medianQFreeDeviation = Stats.meanDeviation(x, currentCodaCount);

        return evaluateChannelStats(currentStats);
    }

    private boolean evaluateChannelStats(OutputStats stats) {
        boolean status = true;
        StringBuffer sb = new StringBuffer(80);
        if (! rejectDisabled) {
            // double qdif = Math.abs(stats.medianQFree - McaCalibrationTN.QFIX_DEFAULT)
            if (stats.codaCount < 10) {
                sb.append("ncoda<10; ");
                status = false;
            }
            if ( stats.medianQFree < 0.2) {
                sb.append("qfree<.2; ");
                status = false;
            }
            if (Math.abs(stats.calibrFitAFix - stats.medianAFix) > 0.5) {
                sb.append("adiff>.5; ");
                status = false;
            }
            if (stats.calibrFitSlope < 1.0) {
                sb.append("slope<1.; ");
                status = false;
            }
        }
        if (status) sb.append("ACCEPT");
        else sb.append("REJECT");
        stats.statusString = sb.toString();
        return status;
    }

    protected boolean writeChannelStatsToDb() {
        String seedchan = currentStats.stnChl.getSeedchan();
        long clipAmp    = CodaCalibrationTN.getDefaultClipAmp(seedchan);
        long cutoffAmp  = CodaCalibrationTN.getDefaultCutoffAmp(seedchan);

        McaCalibrationTN  mcaCalibr = new McaCalibrationTN(currentStats.stnChl, currentCalibrDateRange,
                                      currentStats.codaCount, currentStats.medianAFix, McaCalibrationTN.QFIX_DEFAULT,
                                      currentStats.medianAFree, currentStats.medianQFree,
                                      currentStats.calibrFitSlope, clipAmp, cutoffAmp);
        boolean status = mcaCalibr.store();
        if (! status ) log.println("Error writing to db : " + currentStats.stnChl.toAbbrvStnChlString() );
        return status;
    }

    private void printChannelStats() {
        log.println();
        log.println(currentStats.getHeaderString());
        log.println(currentStats.toString());
    }

    private void printChannelMagResidualsHeader() {
        log.println("\n IDX     ID   DEV    NW      AFX      AFR      QFR         ML       MC      RMS       - MAGRES +");
    }

    private void printChannelMagResiduals(InputData [] inputDataList) {
        char [] cres = new char[21];
        Arrays.fill(cres, ' ');
        cres[10] = '|';

        printChannelMagResidualsHeader();

        int currentCodaCount = inputDataList.length;

        for (int idx = 0; idx < currentCodaCount; idx++) {
            StringBuffer sb = new StringBuffer(132);
            Concatenate.format(sb, idx, 4).append(" ");
            Concatenate.format(sb, inputDataList[idx].evid, 8).append(" ");
            sb.append(inputDataList[idx].stnChl.getSubsource()).append(" :");
            Concatenate.format(sb, inputDataList[idx].windows, 4).append(" ");
            Concatenate.format(sb, inputDataList[idx].aFix, 5, 2).append(" ");
            Concatenate.format(sb, inputDataList[idx].aFree, 5, 2).append(" ");
            Concatenate.format(sb, inputDataList[idx].qFree, 5, 2).append(" : ");
            Concatenate.format(sb, inputDataList[idx].ml, 5, 2).append(" ");

            double calibratedMagnitude = inputDataList[idx].aFix - currentStats.medianAFix;
            double residual = calibratedMagnitude - inputDataList[idx].ml;
            int intRes = (int) ((residual + 1.05)/0.1);
            if (intRes < 0)  intRes = 0;
            else if (intRes > 20) intRes = 20;
            double value = Math.floor(inputDataList[idx].ml);
            if (value < 0.) value = 0.;
            else if (value > 6.) value = 6.;
            char chr = Character.forDigit((int) value, 10);
            cres[intRes] = chr;

            Concatenate.format(sb, calibratedMagnitude, 5, 2).append(" ");
            Concatenate.format(sb, residual, 5, 2).append(" |");
            sb.append(new String(cres)).append("|");
            log.println(sb.toString());

            cres[intRes] = ' ';
            cres[10] = '|';
        }
    }

    // l1 norm fit of data to determine slope and intercept parameters
    private void calcL1Norm(InputData [] inputDataList) {
        double smallestResidualSum = 999999.;
        double bestFitLineIntercept = 0.;
        double bestFitLineSlope = 0.;

        int currentCodaCount = inputDataList.length;
        double [] x = new double[currentCodaCount];

        for (int idx =0; idx < currentCodaCount; idx++) {
            x[idx] = inputDataList[idx].qFree;
        }
        int [] is = IndexSort.getSortedIndexes(x);

        double [] y = new double[currentCodaCount];
        // DEBUG log.println(" idx sidx       id dev   cnt     afix    afree    qfree        mag");
        for (int idx =0; idx < currentCodaCount; idx++) {

            x[idx] = inputDataList[is[idx]].qFree;
            y[idx] = inputDataList[is[idx]].aFree - inputDataList[is[idx]].ml;

/* DEBUG OUTPUT BELOW HERE
            StringBuffer sb = new StringBuffer(132);
            Concatenate.format(sb, idx, 4).append(" ");
            Concatenate.format(sb, is[idx], 4).append(" ");
            Concatenate.format(sb, inputDataList[is[idx]].evid, 8).append(" ");
            sb.append(inputDataList[is[idx]].stnChl.getSubsource()).append(" :");
            Concatenate.format(sb, inputDataList[is[idx]].windows, 4).append(" ");
            Concatenate.format(sb, inputDataList[is[idx]].aFix, 5, 2).append(" ");
            Concatenate.format(sb, inputDataList[is[idx]].aFree, 5, 2).append(" ");
            Concatenate.format(sb, inputDataList[is[idx]].qFree, 5, 2).append(" : ");
            Concatenate.format(sb, inputDataList[is[idx]].ml, 5, 2).append(" ");
            sb.append(inputDataList[is[idx]].stnChl.toStnChlString());
            log.println(sb.toString());
*/
        }

        for (int idx = 1; idx < currentCodaCount; idx++ ) {
            for (int idx2 = 0; idx2 < idx; idx2++) {
                double numerator   = y[idx2]*x[idx] - y[idx]*x[idx2];
                double denominator = x[idx]  - x[idx2];
                if (denominator < 0.001) denominator = 0.001;
                double trialIntercept = numerator/denominator;
                //double trialSlope = (trialIntercept - y[idx])/x[idx];
                double trialSlope = (y[idx] - trialIntercept)/x[idx];
                double sum = 0.;
                for (int idx3 = 0; idx3 < currentCodaCount; idx3++) {
                    double residual = trialIntercept + x[idx3]*trialSlope - y[idx3];
                    sum += Math.abs(residual);
                }
                if (sum <= smallestResidualSum) {
                    bestFitLineIntercept  = trialIntercept;
                    bestFitLineSlope = trialSlope;
                    smallestResidualSum = sum;
                }
            }
        }

        currentStats.calibrFitSlope = bestFitLineSlope;
        currentStats.calibrFitAFix  = bestFitLineIntercept + bestFitLineSlope * McaCalibrationTN.QFIX_DEFAULT;
    }

    protected int getDataFromDb(DataStnChl stnChl) {
        return getDataFromDb(DataSource.getConnection(), stnChl);
    }

    protected int getDataFromDb(Connection conn, DataStnChl stnChl) {
        currentInputDataCollection.clear(); // reuse existing collection
        if (conn == null) {
                System.err.println ("McaCalDb no connection is open.");
                return 0;
        }
        try {
            if (conn.isClosed()) {
                System.err.println ("McaCalDb DataSource connection is closed");
                return 0;
            }
            ResultSet rsdb = executeQuery(getJDBCStatement(conn), stnChl);
            if (rsdb == null) return 0;        // no data found
            while (rsdb.next()) {
                currentInputDataCollection.add(parseResultSet(rsdb));
            }
            rsdb.close();
        }
        catch (SQLException ex) {
            System.err.println(ex);
            ex.printStackTrace();
        }
        return currentInputDataCollection.size();
    }


    private String createSQLCodaQueryString() {
        StringBuffer sb = new StringBuffer(512);
        sb.append(SQL_CODA_QUERY_STRING);
        if (currentInputDateRange.isLimited()) {
            sb.append(" AND ");
            sb.append(org.trinet.jdbc.table.Coda.toDateTimeConstraintSQLWhereClause("CODA",
                currentInputDateRange.getMinDate(), currentInputDateRange.getMaxDate()));
        }
        sb.append(SQL_CODA_ORDER_BY_STRING);
        if (processedChannelCount < 1) log.println ("getDataFromDb SQL: "+sb.toString()); // DEBUG
        return sb.toString();
    }

    private Statement getJDBCStatement(Connection conn) {
        try {
            if (preparedDbStatement == null) {
                preparedDbStatement = conn.prepareStatement(createSQLCodaQueryString());
            }
        }
        catch (SQLException ex) {
            System.err.println(ex);
            ex.printStackTrace();
        }
        return preparedDbStatement;
    }

    private ResultSet executeQuery(Statement statement, DataStnChl stnChl) {
        ResultSet resultSet = null;
        PreparedStatement sm = (PreparedStatement) statement;
        try {
            sm.setString(1,stnChl.getNet());
            sm.setString(2,stnChl.getSta());
            sm.setString(3,stnChl.getSeedchan());
            resultSet = sm.executeQuery();
        }
        catch (SQLException ex) {
            System.err.println(ex);
            ex.printStackTrace();
        }
        return resultSet;
    }

    protected InputData parseResultSet(ResultSet rsdb) throws java.sql.SQLException{

        InputData inputData = new InputData();

        inputData.coid      = rsdb.getLong(1);    // coda.COID

        inputData.stnChl.setSta(      rsdb.getString(2));  // coda.STA
        inputData.stnChl.setNet(      rsdb.getString(3));  // coda.NET
        inputData.stnChl.setAuth(     rsdb.getString(4));  // coda.AUTH
        inputData.stnChl.setSubsource(rsdb.getString(5));  // coda.SUBSOURCE
        inputData.stnChl.setSeedchan(  rsdb.getString(6));  // coda.SEEDCHAN
        inputData.stnChl.setLocation( rsdb.getString(7));  // coda.LOCATION

        inputData.aFix      = rsdb.getDouble(8);  // coda.AFIX
        inputData.aFree     = rsdb.getDouble(9);  // coda.AFREE
        inputData.qFix      = rsdb.getDouble(10); // coda.QFIX
        inputData.qFree     = rsdb.getDouble(11); // coda.QFREE
        inputData.windows   = rsdb.getInt(12);    // coda.NSAMPLE
        inputData.time      = rsdb.getDouble(13); // coda.DATETIME
        inputData.evid      = rsdb.getLong(14);   // origin.EVID
        inputData.orid      = rsdb.getLong(15);   // assoccoo.ORID
        inputData.magid     = rsdb.getLong(16);   // netmag.MAGNITUDE
        inputData.ml        = rsdb.getDouble(17); // netmag.MAGNITUDE
        return inputData;
    }

    public static void main(String [] args) {
        // alternative is configure  with properties/resource file for debug settings, database info etc.
        int nargs = args.length;
        if (nargs < 1) {
             System.err.println("syntax: McaCalDb hostName [startDateStr endDateStr]");
             System.err.println("example: McaCalDb  k2 2000/10/01 2000/12/31");
             System.exit(0);
        }
        String hostName = args[0].trim();
        String dbName = hostName + "db";
        String dbConnect =  "jdbc:oracle:thin:@" + hostName + ".gps.caltech.edu:1521:" + dbName;
        System.out.println("Connection url: " + dbConnect);

        DataSource ds = new DataSource(
            dbConnect,
            "oracle.jdbc.driver.OracleDriver",
            "trinetdb",
            "calgs",
             true
        );
        EnvironmentInfo.setApplicationName("McaCalDb");
        EnvironmentInfo.setNetworkCode("CI");

        boolean status = false;
        java.util.Date startDate = (nargs > 1) ? EpochTime.stringToDate(args[1], "yyyy/MM/dd") : null;
        java.util.Date endDate   = (nargs > 2) ? EpochTime.stringToDate(args[2], "yyyy/MM/dd") : null;
        try {
            McaCalDb calibrator = new McaCalDb(startDate, endDate);
            status = calibrator.calibrate();
        }
        catch (IOException ex) {
           ex.printStackTrace();
        }
        catch (Exception ex) {
           ex.printStackTrace();
        }
        if (status) DataSource.commit();
        else {
            try {
                DataSource.getConnection().rollback();
            }
            catch (java.sql.SQLException sqlEx) {
                sqlEx.printStackTrace();
            }
        }
        DataSource.close();
        System.exit(0);
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -