NonlinearCurveBuilder.java

  1. package org.drip.state.nonlinear;

  2. /*
  3.  * -*- mode: java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
  4.  */

  5. /*!
  6.  * Copyright (C) 2020 Lakshmi Krishnamurthy
  7.  * Copyright (C) 2019 Lakshmi Krishnamurthy
  8.  * Copyright (C) 2018 Lakshmi Krishnamurthy
  9.  * Copyright (C) 2017 Lakshmi Krishnamurthy
  10.  * Copyright (C) 2016 Lakshmi Krishnamurthy
  11.  * Copyright (C) 2015 Lakshmi Krishnamurthy
  12.  * Copyright (C) 2014 Lakshmi Krishnamurthy
  13.  * Copyright (C) 2013 Lakshmi Krishnamurthy
  14.  * Copyright (C) 2012 Lakshmi Krishnamurthy
  15.  * Copyright (C) 2011 Lakshmi Krishnamurthy
  16.  *
  17.  *  This file is part of DROP, an open-source library targeting analytics/risk, transaction cost analytics,
  18.  *      asset liability management analytics, capital, exposure, and margin analytics, valuation adjustment
  19.  *      analytics, and portfolio construction analytics within and across fixed income, credit, commodity,
  20.  *      equity, FX, and structured products. It also includes auxiliary libraries for algorithm support,
  21.  *      numerical analysis, numerical optimization, spline builder, model validation, statistical learning,
  22.  *      and computational support.
  23.  *  
  24.  *      https://lakshmidrip.github.io/DROP/
  25.  *  
  26.  *  DROP is composed of three modules:
  27.  *  
  28.  *  - DROP Product Core - https://lakshmidrip.github.io/DROP-Product-Core/
  29.  *  - DROP Portfolio Core - https://lakshmidrip.github.io/DROP-Portfolio-Core/
  30.  *  - DROP Computational Core - https://lakshmidrip.github.io/DROP-Computational-Core/
  31.  *
  32.  *  DROP Product Core implements libraries for the following:
  33.  *  - Fixed Income Analytics
  34.  *  - Loan Analytics
  35.  *  - Transaction Cost Analytics
  36.  *
  37.  *  DROP Portfolio Core implements libraries for the following:
  38.  *  - Asset Allocation Analytics
  39.  *  - Asset Liability Management Analytics
  40.  *  - Capital Estimation Analytics
  41.  *  - Exposure Analytics
  42.  *  - Margin Analytics
  43.  *  - XVA Analytics
  44.  *
  45.  *  DROP Computational Core implements libraries for the following:
  46.  *  - Algorithm Support
  47.  *  - Computation Support
  48.  *  - Function Analysis
  49.  *  - Model Validation
  50.  *  - Numerical Analysis
  51.  *  - Numerical Optimizer
  52.  *  - Spline Builder
  53.  *  - Statistical Learning
  54.  *
  55.  *  Documentation for DROP is Spread Over:
  56.  *
  57.  *  - Main                     => https://lakshmidrip.github.io/DROP/
  58.  *  - Wiki                     => https://github.com/lakshmiDRIP/DROP/wiki
  59.  *  - GitHub                   => https://github.com/lakshmiDRIP/DROP
  60.  *  - Repo Layout Taxonomy     => https://github.com/lakshmiDRIP/DROP/blob/master/Taxonomy.md
  61.  *  - Javadoc                  => https://lakshmidrip.github.io/DROP/Javadoc/index.html
  62.  *  - Technical Specifications => https://github.com/lakshmiDRIP/DROP/tree/master/Docs/Internal
  63.  *  - Release Versions         => https://lakshmidrip.github.io/DROP/version.html
  64.  *  - Community Credits        => https://lakshmidrip.github.io/DROP/credits.html
  65.  *  - Issues Catalog           => https://github.com/lakshmiDRIP/DROP/issues
  66.  *  - JUnit                    => https://lakshmidrip.github.io/DROP/junit/index.html
  67.  *  - Jacoco                   => https://lakshmidrip.github.io/DROP/jacoco/index.html
  68.  *
  69.  *  Licensed under the Apache License, Version 2.0 (the "License");
  70.  *      you may not use this file except in compliance with the License.
  71.  *  
  72.  *  You may obtain a copy of the License at
  73.  *      http://www.apache.org/licenses/LICENSE-2.0
  74.  *  
  75.  *  Unless required by applicable law or agreed to in writing, software
  76.  *      distributed under the License is distributed on an "AS IS" BASIS,
  77.  *      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  78.  *  
  79.  *  See the License for the specific language governing permissions and
  80.  *      limitations under the License.
  81.  */

  82. /**
  83.  * <i>NonlinearCurveBuilder</i> calibrates the discount and credit/hazard curves from the components and
  84.  * their quotes. NonlinearCurveCalibrator employs a set of techniques for achieving this calibration.
  85.  *
  86.  *  <br><br>
  87.  *  <ul>
  88.  *      <li>
  89.  *          It bootstraps the nodes in sequence to calibrate the curve.
  90.  *      </li>
  91.  *      <li>
  92.  *          In conjunction with splining estimation techniques, it may also be used to perform dual sweep
  93.  *              calibration. The inner sweep achieves the calibration of the segment spline parameters, while
  94.  *              the outer sweep calibrates iteratively for the targeted boundary conditions.
  95.  *      </li>
  96.  *      <li>
  97.  *          It may also be used to custom calibrate a single Interest Rate/Hazard Rate Node from the
  98.  *              corresponding Component.
  99.  *      </li>
  100.  *  </ul>
  101.  *
  102.  * CurveCalibrator bootstraps/cooks both discount curves and credit curves.
  103.  *
  104.  *  <br><br>
  105.  *  <ul>
  106.  *      <li><b>Module </b> = <a href = "https://github.com/lakshmiDRIP/DROP/tree/master/ProductCore.md">Product Core Module</a></li>
  107.  *      <li><b>Library</b> = <a href = "https://github.com/lakshmiDRIP/DROP/tree/master/FixedIncomeAnalyticsLibrary.md">Fixed Income Analytics</a></li>
  108.  *      <li><b>Project</b> = <a href = "https://github.com/lakshmiDRIP/DROP/tree/master/src/main/java/org/drip/state/README.md">Latent State Inference and Creation Utilities</a></li>
  109.  *      <li><b>Package</b> = <a href = "https://github.com/lakshmiDRIP/DROP/tree/master/src/main/java/org/drip/state/nonlinear/README.md">Nonlinear (i.e., Boot) Latent State Construction</a></li>
  110.  *  </ul>
  111.  * <br><br>
  112.  *
  113.  * @author Lakshmi Krishnamurthy
  114.  */

  115. public class NonlinearCurveBuilder {

  116.     private static final boolean SetNode (
  117.         final org.drip.analytics.definition.ExplicitBootCurve ebc,
  118.         final int iNodeIndex,
  119.         final boolean bFlat,
  120.         final double dblValue)
  121.     {
  122.         return bFlat ? ebc.setFlatValue (dblValue) : ebc.setNodeValue (iNodeIndex, dblValue);
  123.     }

  124.     static class CreditCurveCalibrator extends org.drip.function.definition.R1ToR1 {
  125.         private boolean _bFlat = false;
  126.         private int _iCurveSegmentIndex = -1;
  127.         private java.lang.String _strCalibMeasure = "";
  128.         private double _dblCalibValue = java.lang.Double.NaN;
  129.         private org.drip.state.govvie.GovvieCurve _gc = null;
  130.         private org.drip.param.definition.CalibrationParams _cp = null;
  131.         private org.drip.product.definition.Component _calibComp = null;
  132.         private org.drip.param.valuation.ValuationParams _valParams = null;
  133.         private org.drip.state.credit.ExplicitBootCreditCurve _ebcc = null;
  134.         private org.drip.param.pricer.CreditPricerParams _pricerParams = null;
  135.         private org.drip.state.discount.MergedDiscountForwardCurve _dc = null;
  136.         private org.drip.param.market.LatentStateFixingsContainer _lsfc = null;
  137.         private org.drip.param.valuation.ValuationCustomizationParams _vcp = null;

  138.         CreditCurveCalibrator (
  139.             final org.drip.param.valuation.ValuationParams valParams,
  140.             final org.drip.product.definition.Component calibComp,
  141.             final double dblCalibValue,
  142.             final java.lang.String strCalibMeasure,
  143.             final boolean bFlat,
  144.             final int iCurveSegmentIndex,
  145.             final org.drip.state.credit.ExplicitBootCreditCurve ebcc,
  146.             final org.drip.state.discount.MergedDiscountForwardCurve dc,
  147.             final org.drip.state.govvie.GovvieCurve gc,
  148.             final org.drip.param.pricer.CreditPricerParams pricerParams,
  149.             final org.drip.param.market.LatentStateFixingsContainer lsfc,
  150.             final org.drip.param.valuation.ValuationCustomizationParams vcp,
  151.             final org.drip.param.definition.CalibrationParams cp)
  152.             throws java.lang.Exception
  153.         {
  154.             super (null);

  155.             _dc = dc;
  156.             _gc = gc;
  157.             _vcp = vcp;
  158.             _ebcc = ebcc;
  159.             _lsfc = lsfc;
  160.             _bFlat = bFlat;
  161.             _calibComp = calibComp;
  162.             _valParams = valParams;
  163.             _dblCalibValue = dblCalibValue;
  164.             _strCalibMeasure = strCalibMeasure;
  165.             _iCurveSegmentIndex = iCurveSegmentIndex;

  166.             if (null == (_cp = cp))
  167.                 _cp = new org.drip.param.definition.CalibrationParams (strCalibMeasure, 0, null);

  168.             _pricerParams = new org.drip.param.pricer.CreditPricerParams (pricerParams.unitSize(), _cp,
  169.                 pricerParams.survivalToPayDate(), pricerParams.discretizationScheme());
  170.         }

  171.         @Override public double evaluate (
  172.             final double dblRate)
  173.             throws java.lang.Exception
  174.         {
  175.             if (!SetNode (_ebcc, _iCurveSegmentIndex, _bFlat, dblRate))
  176.                 throw new java.lang.Exception
  177.                     ("NonlinearCurveBuilder::CreditCurveCalibrator::evaluate => Cannot set Rate = " + dblRate
  178.                         + " for node " + _iCurveSegmentIndex);

  179.             return _dblCalibValue - _calibComp.measureValue (_valParams, _pricerParams,
  180.                 org.drip.param.creator.MarketParamsBuilder.Create (_dc, _gc, _ebcc, null, null, null, _lsfc),
  181.                     _vcp, _strCalibMeasure);
  182.         }
  183.     }

  184.     /**
  185.      * Calibrate a single Hazard Rate Node from the corresponding Component
  186.      *
  187.      * @param valParams Calibration Valuation Parameters
  188.      * @param calibComp The Calibration Component
  189.      * @param dblCalibValue The Value to be Calibrated to
  190.      * @param strCalibMeasure The Calibration Measure
  191.      * @param bFlat TRUE - Calibrate a Flat Curve across all Tenors
  192.      * @param iCurveSegmentIndex The Curve Segment Index
  193.      * @param ebcc The Credit Curve to be calibrated
  194.      * @param dc The discount curve to be bootstrapped
  195.      * @param gc The Govvie Curve
  196.      * @param pricerParams Input Pricer Parameters
  197.      * @param lsfc The Latent State Fixings Container
  198.      * @param vcp Valuation Customization Parameters
  199.      * @param cp The Calibration Parameters
  200.      *
  201.      * @return The successfully calibrated State Hazard Rate Point
  202.      */

  203.     public static final boolean CreditCurve (
  204.         final org.drip.param.valuation.ValuationParams valParams,
  205.         final org.drip.product.definition.Component calibComp,
  206.         final double dblCalibValue,
  207.         final java.lang.String strCalibMeasure,
  208.         final boolean bFlat,
  209.         final int iCurveSegmentIndex,
  210.         final org.drip.state.credit.ExplicitBootCreditCurve ebcc,
  211.         final org.drip.state.discount.MergedDiscountForwardCurve dc,
  212.         final org.drip.state.govvie.GovvieCurve gc,
  213.         final org.drip.param.pricer.CreditPricerParams pricerParams,
  214.         final org.drip.param.market.LatentStateFixingsContainer lsfc,
  215.         final org.drip.param.valuation.ValuationCustomizationParams vcp,
  216.         final org.drip.param.definition.CalibrationParams cp)
  217.     {
  218.         try {
  219.             org.drip.function.r1tor1solver.FixedPointFinderOutput rfop = new
  220.                 org.drip.function.r1tor1solver.FixedPointFinderZheng (0., new CreditCurveCalibrator
  221.                     (valParams, calibComp, dblCalibValue, strCalibMeasure, bFlat, iCurveSegmentIndex, ebcc,
  222.                         dc, gc, pricerParams, lsfc, vcp, cp), true).findRoot();

  223.             return null != rfop && rfop.containsRoot();
  224.         } catch (java.lang.Exception e) {
  225.             e.printStackTrace();
  226.         }

  227.         return false;
  228.     }

  229.     /**
  230.      * Calibrate a Single Discount Curve Segment from the corresponding Component
  231.      *
  232.      * @param valParams Calibration Valuation Parameters
  233.      * @param comp The Calibration Component
  234.      * @param dblCalibValue The Value to be Calibrated to
  235.      * @param strCalibMeasure The Calibration Measure
  236.      * @param bFlat TRUE - Calibrate a Flat Curve across all Tenors
  237.      * @param iCurveSegmentIndex The Curve Segment Index
  238.      * @param ebdc The discount curve to be bootstrapped
  239.      * @param gc The Govvie Curve
  240.      * @param lsfc Latent State Fixings Container
  241.      * @param vcp Valuation Customization Parameters
  242.      *
  243.      * @return The successfully calibrated State IR Point
  244.      *
  245.      * @throws java.lang.Exception Thrown if the Bootstrapping is unsuccessful
  246.      */

  247.     public static final double DiscountCurveNode (
  248.         final org.drip.param.valuation.ValuationParams valParams,
  249.         final org.drip.product.definition.Component comp,
  250.         final double dblCalibValue,
  251.         final java.lang.String strCalibMeasure,
  252.         final boolean bFlat,
  253.         final int iCurveSegmentIndex,
  254.         final org.drip.state.discount.ExplicitBootDiscountCurve ebdc,
  255.         final org.drip.state.govvie.GovvieCurve gc,
  256.         final org.drip.param.market.LatentStateFixingsContainer lsfc,
  257.         final org.drip.param.valuation.ValuationCustomizationParams vcp)
  258.         throws java.lang.Exception
  259.     {
  260.         if (null == comp)
  261.             throw new java.lang.Exception ("NonlinearCurveBuilder::DiscountCurveNode => Invalid inputs!");

  262.         org.drip.function.definition.R1ToR1 ofIRNode = new org.drip.function.definition.R1ToR1 (null) {
  263.             @Override public double evaluate (
  264.                 final double dblValue)
  265.                 throws java.lang.Exception
  266.             {
  267.                 if (!SetNode (ebdc, iCurveSegmentIndex, bFlat, dblValue))
  268.                     throw new java.lang.Exception
  269.                         ("NonlinearCurveBuilder::DiscountCurveNode => Cannot set Value = " + dblValue +
  270.                             " for node " + iCurveSegmentIndex);

  271.                 return dblCalibValue - comp.measureValue (valParams, new
  272.                     org.drip.param.pricer.CreditPricerParams (1, new
  273.                         org.drip.param.definition.CalibrationParams (strCalibMeasure, 0, null), true, 0),
  274.                             org.drip.param.creator.MarketParamsBuilder.Create (ebdc, gc, null, null, null,
  275.                                 null, lsfc), vcp, strCalibMeasure);
  276.             }
  277.         };

  278.         org.drip.function.r1tor1solver.FixedPointFinderOutput rfop = new
  279.             org.drip.function.r1tor1solver.FixedPointFinderBrent (0., ofIRNode, true).findRoot();

  280.         if (null == rfop || !rfop.containsRoot())
  281.             throw new java.lang.Exception
  282.                 ("NonlinearCurveBuilder::DiscountCurveNode => Cannot calibrate IR segment for node #" +
  283.                     iCurveSegmentIndex);

  284.         return rfop.getRoot();
  285.     }

  286.     /**
  287.      * Boot-strap a Discount Curve from the set of calibration components
  288.      *
  289.      * @param valParams Calibration Valuation Parameters
  290.      * @param aCalibComp Array of the calibration components
  291.      * @param adblCalibValue Array of Calibration Values
  292.      * @param astrCalibMeasure Array of Calibration Measures
  293.      * @param dblBump Amount to bump the Quotes by
  294.      * @param bFlat TRUE - Calibrate a Flat Curve across all Tenors
  295.      * @param ebdc The discount curve to be bootstrapped
  296.      * @param gc The Govvie Curve
  297.      * @param lsfc Latent State Fixings Container
  298.      * @param vcp Valuation Customization Parameters
  299.      *
  300.      * @return TRUE - Bootstrapping was successful
  301.      */

  302.     public static final boolean DiscountCurve (
  303.         final org.drip.param.valuation.ValuationParams valParams,
  304.         final org.drip.product.definition.Component[] aCalibComp,
  305.         final double[] adblCalibValue,
  306.         final java.lang.String[] astrCalibMeasure,
  307.         final double dblBump,
  308.         final boolean bFlat,
  309.         final org.drip.state.discount.ExplicitBootDiscountCurve ebdc,
  310.         final org.drip.state.govvie.GovvieCurve gc,
  311.         final org.drip.param.market.LatentStateFixingsContainer lsfc,
  312.         final org.drip.param.valuation.ValuationCustomizationParams vcp)
  313.     {
  314.         if (null == adblCalibValue || null == aCalibComp || null == astrCalibMeasure ||
  315.             !org.drip.numerical.common.NumberUtil.IsValid (dblBump))
  316.             return false;

  317.         int iNumCalibComp = aCalibComp.length;

  318.         if (0 == iNumCalibComp || adblCalibValue.length != iNumCalibComp || astrCalibMeasure.length !=
  319.             iNumCalibComp)
  320.             return false;

  321.         for (int i = 0; i < iNumCalibComp; ++i) {
  322.             try {
  323.                 if (!org.drip.numerical.common.NumberUtil.IsValid (DiscountCurveNode (valParams, aCalibComp[i],
  324.                     adblCalibValue[i] + dblBump, astrCalibMeasure[i], bFlat, i, ebdc, gc, lsfc, vcp)))
  325.                     return false;
  326.             } catch (java.lang.Exception e) {
  327.                 e.printStackTrace();

  328.                 return false;
  329.             }
  330.         }

  331.         return true;
  332.     }

  333.     /**
  334.      * Calibrate a Single Volatility Curve Segment from the corresponding Component
  335.      *
  336.      * @param valParams Calibration Valuation Parameters
  337.      * @param comp The Calibration Component
  338.      * @param dblCalibValue The Value to be Calibrated to
  339.      * @param strCalibMeasure The Calibration Measure
  340.      * @param bFlat TRUE - Calibrate a Flat Curve across all Tenors
  341.      * @param iCurveSegmentIndex The Curve Segment Index
  342.      * @param ebvc The Volatility Curve to be bootstrapped
  343.      * @param dc The Discount Curve
  344.      * @param fc The Forward Curve
  345.      * @param lsfc Latent State Fixings Container
  346.      * @param vcp Valuation Customization Parameters
  347.      *
  348.      * @return The successfully calibrated State IR Point
  349.      *
  350.      * @throws java.lang.Exception Thrown if the Bootstrapping is unsuccessful
  351.      */

  352.     public static final double VolatilityCurveNode (
  353.         final org.drip.param.valuation.ValuationParams valParams,
  354.         final org.drip.product.definition.Component comp,
  355.         final double dblCalibValue,
  356.         final java.lang.String strCalibMeasure,
  357.         final boolean bFlat,
  358.         final int iCurveSegmentIndex,
  359.         final org.drip.state.volatility.ExplicitBootVolatilityCurve ebvc,
  360.         final org.drip.state.discount.MergedDiscountForwardCurve dc,
  361.         final org.drip.state.forward.ForwardCurve fc,
  362.         final org.drip.param.market.LatentStateFixingsContainer lsfc,
  363.         final org.drip.param.valuation.ValuationCustomizationParams vcp)
  364.         throws java.lang.Exception
  365.     {
  366.         if (null == comp)
  367.             throw new java.lang.Exception ("NonlinearCurveBuilder::VolatilityCurveNode => Invalid inputs!");

  368.         org.drip.function.definition.R1ToR1 r1r1VolMetric = new org.drip.function.definition.R1ToR1 (null) {
  369.             @Override public double evaluate (
  370.                 final double dblValue)
  371.                 throws java.lang.Exception
  372.             {
  373.                 if (!SetNode (ebvc, iCurveSegmentIndex, bFlat, dblValue))
  374.                     throw new java.lang.Exception
  375.                         ("NonlinearCurveBuilder::VolatilityCurveNode => Cannot set Value = " + dblValue +
  376.                             " for node " + iCurveSegmentIndex);

  377.                 org.drip.param.market.CurveSurfaceQuoteContainer csqs =
  378.                     org.drip.param.creator.MarketParamsBuilder.Create (dc, null, null, null, null, null,
  379.                         lsfc);

  380.                 if (null == csqs || !csqs.setForwardState (fc) || !csqs.setForwardVolatility (ebvc))
  381.                     throw new java.lang.Exception
  382.                         ("NonlinearCurveBuilder::VolatilityCurveNode => Cannot set Value = " + dblValue +
  383.                             " for node " + iCurveSegmentIndex);

  384.                 return dblCalibValue - comp.measureValue (valParams, new
  385.                     org.drip.param.pricer.CreditPricerParams (1, new
  386.                         org.drip.param.definition.CalibrationParams (strCalibMeasure, 0, null), true, 0),
  387.                             csqs, vcp, strCalibMeasure);
  388.             }
  389.         };

  390.         org.drip.function.r1tor1solver.FixedPointFinderOutput fpfo = (new
  391.             org.drip.function.r1tor1solver.FixedPointFinderBrent (0., r1r1VolMetric, true)).findRoot
  392.                 (org.drip.function.r1tor1solver.InitializationHeuristics.FromHardSearchEdges (0.00001, 5.));

  393.         if (null == fpfo || !fpfo.containsRoot())
  394.             throw new java.lang.Exception
  395.                 ("NonlinearCurveBuilder::VolatilityCurveNode => Cannot calibrate segment for node #" +
  396.                     iCurveSegmentIndex + " => " + dblCalibValue);

  397.         return fpfo.getRoot();
  398.     }

  399.     /**
  400.      * Boot-strap a Volatility Curve from the set of calibration components
  401.      *
  402.      * @param valParams Calibration Valuation Parameters
  403.      * @param aCalibComp Array of the calibration components
  404.      * @param adblCalibValue Array of Calibration Values
  405.      * @param astrCalibMeasure Array of Calibration Measures
  406.      * @param dblBump Amount to bump the Quotes by
  407.      * @param bFlat TRUE - Calibrate a Flat Curve across all Tenors
  408.      * @param ebvc The Volatility Curve to be bootstrapped
  409.      * @param dc The Discount Curve
  410.      * @param fc The Forward Curve
  411.      * @param lsfc Latent State Fixings Container
  412.      * @param vcp Valuation Customization Parameters
  413.      *
  414.      * @return TRUE - Bootstrapping was successful
  415.      */

  416.     public static final boolean VolatilityCurve (
  417.         final org.drip.param.valuation.ValuationParams valParams,
  418.         final org.drip.product.definition.Component[] aCalibComp,
  419.         final double[] adblCalibValue,
  420.         final java.lang.String[] astrCalibMeasure,
  421.         final double dblBump,
  422.         final boolean bFlat,
  423.         final org.drip.state.volatility.ExplicitBootVolatilityCurve ebvc,
  424.         final org.drip.state.discount.MergedDiscountForwardCurve dc,
  425.         final org.drip.state.forward.ForwardCurve fc,
  426.         final org.drip.param.market.LatentStateFixingsContainer lsfc,
  427.         final org.drip.param.valuation.ValuationCustomizationParams vcp)
  428.     {
  429.         if (null == adblCalibValue || null == aCalibComp || null == astrCalibMeasure ||
  430.             !org.drip.numerical.common.NumberUtil.IsValid (dblBump))
  431.             return false;

  432.         int iNumCalibComp = aCalibComp.length;

  433.         if (0 == iNumCalibComp || adblCalibValue.length != iNumCalibComp || astrCalibMeasure.length !=
  434.             iNumCalibComp)
  435.             return false;

  436.         for (int i = 0; i < iNumCalibComp; ++i) {
  437.             try {
  438.                 if (!org.drip.numerical.common.NumberUtil.IsValid (VolatilityCurveNode (valParams, aCalibComp[i],
  439.                     adblCalibValue[i] + dblBump, astrCalibMeasure[i], bFlat, i, ebvc, dc, fc, lsfc, vcp)))
  440.                     return false;
  441.             } catch (java.lang.Exception e) {
  442.                 e.printStackTrace();

  443.                 return false;
  444.             }
  445.         }

  446.         return true;
  447.     }
  448. }