LatentMarketStateBuilder.java

  1. package org.drip.service.template;

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

  78. /**
  79.  * <i>LatentMarketStateBuilder</i> contains static Helper API to facilitate Construction of the Latent Market
  80.  * States as Curves/Surfaces.
  81.  *
  82.  * <br><br>
  83.  *  <ul>
  84.  *      <li><b>Module </b> = <a href = "https://github.com/lakshmiDRIP/DROP/tree/master/ComputationalCore.md">Computational Core Module</a></li>
  85.  *      <li><b>Library</b> = <a href = "https://github.com/lakshmiDRIP/DROP/tree/master/ComputationSupportLibrary.md">Computation Support</a></li>
  86.  *      <li><b>Project</b> = <a href = "https://github.com/lakshmiDRIP/DROP/tree/master/src/main/java/org/drip/service/README.md">Environment, Product/Definition Containers, and Scenario/State Manipulation APIs</a></li>
  87.  *      <li><b>Package</b> = <a href = "https://github.com/lakshmiDRIP/DROP/tree/master/src/main/java/org/drip/service/template/README.md">Curve Construction Product Builder Templates</a></li>
  88.  *  </ul>
  89.  * <br><br>
  90.  *
  91.  * @author Lakshmi Krishnamurthy
  92.  */

  93. public class LatentMarketStateBuilder {

  94.     /**
  95.      * Shape Preserving Latent State
  96.      */

  97.     public static final int SHAPE_PRESERVING = 0;

  98.     /**
  99.      * Smoothened Latent State
  100.      */

  101.     public static final int SMOOTH = 1;

  102.     /**
  103.      * Construct a Funding Curve Based off of the Input Exchange/OTC Market Instruments Using the specified
  104.      *  Spline
  105.      *
  106.      * @param dtSpot The Spot Date
  107.      * @param strCurrency Currency
  108.      * @param astrDepositMaturityTenor Array of Deposit Maturity Tenors
  109.      * @param adblDepositQuote Array of Deposit Quotes
  110.      * @param strDepositMeasure Deposit Calibration Measure
  111.      * @param adblFuturesQuote Array of Futures Quotes
  112.      * @param strFuturesMeasure Futures Calibration Measure
  113.      * @param astrFixFloatMaturityTenor Array of Fix Float Swap Maturity Tenors
  114.      * @param adblFixFloatQuote Array of Fix Float Swap Quotes
  115.      * @param strFixFloatMeasure Fix Float Calibration Measure
  116.      * @param scbc Segment Custom Builder Control
  117.      *
  118.      * @return The Funding Curve Instance
  119.      */

  120.     public static final org.drip.state.discount.MergedDiscountForwardCurve FundingCurve (
  121.         final org.drip.analytics.date.JulianDate dtSpot,
  122.         final java.lang.String strCurrency,
  123.         final java.lang.String[] astrDepositMaturityTenor,
  124.         final double[] adblDepositQuote,
  125.         final java.lang.String strDepositMeasure,
  126.         final double[] adblFuturesQuote,
  127.         final java.lang.String strFuturesMeasure,
  128.         final java.lang.String[] astrFixFloatMaturityTenor,
  129.         final double[] adblFixFloatQuote,
  130.         final java.lang.String strFixFloatMeasure,
  131.         final org.drip.spline.params.SegmentCustomBuilderControl scbc)
  132.     {
  133.         if (null == dtSpot || null == strCurrency || strCurrency.isEmpty()) return null;

  134.         org.drip.analytics.date.JulianDate dtEffective = dtSpot.addBusDays (0, strCurrency);

  135.         org.drip.state.inference.LatentStateStretchSpec lsssDeposit = null;
  136.         org.drip.state.inference.LatentStateStretchSpec lsssFutures = null;
  137.         org.drip.state.inference.LatentStateStretchSpec lsssFixFloat = null;
  138.         int iNumFuturesComp = null == adblFuturesQuote ? 0 : adblFuturesQuote.length;
  139.         int iNumDepositQuote = null == adblDepositQuote ? 0 : adblDepositQuote.length;
  140.         int iNumFixFloatQuote = null == adblFixFloatQuote ? 0 : adblFixFloatQuote.length;
  141.         int iNumDepositComp = null == astrDepositMaturityTenor ? 0 : astrDepositMaturityTenor.length;
  142.         int iNumFixFloatComp = null == astrFixFloatMaturityTenor ? 0 : astrFixFloatMaturityTenor.length;

  143.         if (iNumDepositQuote != iNumDepositComp || iNumFixFloatQuote != iNumFixFloatComp) return null;

  144.         if (0 != iNumDepositComp)
  145.             lsssDeposit = org.drip.state.estimator.LatentStateStretchBuilder.ForwardFundingStretchSpec
  146.                 ("DEPOSIT", org.drip.service.template.OTCInstrumentBuilder.FundingDeposit (dtEffective,
  147.                     strCurrency, astrDepositMaturityTenor), strDepositMeasure, adblDepositQuote);

  148.         if (0 != iNumFuturesComp)
  149.             lsssFutures = org.drip.state.estimator.LatentStateStretchBuilder.ForwardFundingStretchSpec
  150.                 ("FUTURES", org.drip.service.template.ExchangeInstrumentBuilder.ForwardRateFuturesPack
  151.                     (dtEffective, iNumFuturesComp, strCurrency), strFuturesMeasure, adblFuturesQuote);

  152.         if (0 != iNumFixFloatComp)
  153.             lsssFixFloat = org.drip.state.estimator.LatentStateStretchBuilder.ForwardFundingStretchSpec
  154.                 ("FIXFLOAT", org.drip.service.template.OTCInstrumentBuilder.FixFloatStandard (dtEffective,
  155.                     strCurrency, "ALL", astrFixFloatMaturityTenor, "MAIN", 0.), strFixFloatMeasure,
  156.                         adblFixFloatQuote);

  157.         try {
  158.             org.drip.state.inference.LinearLatentStateCalibrator lcc = new
  159.                 org.drip.state.inference.LinearLatentStateCalibrator (scbc,
  160.                     org.drip.spline.stretch.BoundarySettings.NaturalStandard(),
  161.                         org.drip.spline.stretch.MultiSegmentSequence.CALIBRATE, null, null);

  162.             return org.drip.state.creator.ScenarioDiscountCurveBuilder.ShapePreservingDFBuild (strCurrency,
  163.                 lcc, new org.drip.state.inference.LatentStateStretchSpec[] {lsssDeposit, lsssFutures,
  164.                     lsssFixFloat}, org.drip.param.valuation.ValuationParams.Spot (dtSpot.julian()), null,
  165.                         null, null, 1.);
  166.         } catch (java.lang.Exception e) {
  167.             e.printStackTrace();
  168.         }

  169.         return null;
  170.     }

  171.     /**
  172.      * Construct a Single Stretch Funding Curve Based off of the Input Exchange/OTC Market Instruments Using
  173.      *  the specified Spline
  174.      *
  175.      * @param dtSpot The Spot Date
  176.      * @param strCurrency Currency
  177.      * @param astrDepositMaturityTenor Array of Deposit Maturity Tenors
  178.      * @param adblDepositQuote Array of Deposit Quotes
  179.      * @param strDepositMeasure Deposit Calibration Measure
  180.      * @param adblFuturesQuote Array of Futures Quotes
  181.      * @param strFuturesMeasure Futures Calibration Measure
  182.      * @param astrFixFloatMaturityTenor Array of Fix Float Swap Maturity Tenors
  183.      * @param adblFixFloatQuote Array of Fix Float Swap Quotes
  184.      * @param strFixFloatMeasure Fix Float Calibration Measure
  185.      * @param scbc Segment Custom Builder Control
  186.      *
  187.      * @return The Funding Curve Instance
  188.      */

  189.     public static final org.drip.state.discount.MergedDiscountForwardCurve SingleStretchFundingCurve (
  190.         final org.drip.analytics.date.JulianDate dtSpot,
  191.         final java.lang.String strCurrency,
  192.         final java.lang.String[] astrDepositMaturityTenor,
  193.         final double[] adblDepositQuote,
  194.         final java.lang.String strDepositMeasure,
  195.         final double[] adblFuturesQuote,
  196.         final java.lang.String strFuturesMeasure,
  197.         final java.lang.String[] astrFixFloatMaturityTenor,
  198.         final double[] adblFixFloatQuote,
  199.         final java.lang.String strFixFloatMeasure,
  200.         final org.drip.spline.params.SegmentCustomBuilderControl scbc)
  201.     {
  202.         if (null == dtSpot || null == strCurrency || strCurrency.isEmpty()) return null;

  203.         org.drip.analytics.date.JulianDate dtEffective = dtSpot.addBusDays (0, strCurrency);

  204.         int iNumFixFloatComp = null == astrFixFloatMaturityTenor ? 0 : astrFixFloatMaturityTenor.length;
  205.         int iNumDepositComp = null == astrDepositMaturityTenor ? 0 : astrDepositMaturityTenor.length;
  206.         int iNumFixFloatQuote = null == adblFixFloatQuote ? 0 : adblFixFloatQuote.length;
  207.         int iNumDepositQuote = null == adblDepositQuote ? 0 : adblDepositQuote.length;
  208.         int iNumFuturesComp = null == adblFuturesQuote ? 0 : adblFuturesQuote.length;
  209.         org.drip.state.inference.LatentStateStretchSpec lsssDepositFutures = null;
  210.         org.drip.state.inference.LatentStateStretchSpec lsssFixFloat = null;
  211.         int iNumDepositFuturesComp = iNumDepositComp + iNumFuturesComp;
  212.         double[] adblDepositFuturesQuote = new double[iNumDepositFuturesComp];

  213.         if (iNumDepositQuote != iNumDepositComp || iNumFixFloatQuote != iNumFixFloatComp) return null;

  214.         for (int i = 0; i < iNumDepositFuturesComp; ++i)
  215.             adblDepositFuturesQuote[i] = i < iNumDepositComp ? adblDepositQuote[i] :
  216.                 adblFuturesQuote[i - iNumDepositComp];

  217.         if (0 != iNumDepositComp)
  218.             lsssDepositFutures = org.drip.state.estimator.LatentStateStretchBuilder.ForwardFundingStretchSpec
  219.                 ("DEPOSIT", org.drip.service.template.OTCInstrumentBuilder.FundingDepositFutures
  220.                     (dtEffective, strCurrency, astrDepositMaturityTenor, iNumFuturesComp), strDepositMeasure,
  221.                         adblDepositFuturesQuote);

  222.         if (0 != iNumFixFloatComp)
  223.             lsssFixFloat = org.drip.state.estimator.LatentStateStretchBuilder.ForwardFundingStretchSpec
  224.                 ("FIXFLOAT", org.drip.service.template.OTCInstrumentBuilder.FixFloatStandard (dtEffective,
  225.                     strCurrency, "ALL", astrFixFloatMaturityTenor, "MAIN", 0.), strFixFloatMeasure,
  226.                         adblFixFloatQuote);

  227.         try {
  228.             org.drip.state.inference.LinearLatentStateCalibrator lcc = new
  229.                 org.drip.state.inference.LinearLatentStateCalibrator (scbc,
  230.                     org.drip.spline.stretch.BoundarySettings.NaturalStandard(),
  231.                         org.drip.spline.stretch.MultiSegmentSequence.CALIBRATE, null, null);

  232.             return org.drip.state.creator.ScenarioDiscountCurveBuilder.ShapePreservingDFBuild (strCurrency,
  233.                 lcc, new org.drip.state.inference.LatentStateStretchSpec[] {lsssDepositFutures,
  234.                     lsssFixFloat}, org.drip.param.valuation.ValuationParams.Spot (dtSpot.julian()), null,
  235.                         null, null, 1.);
  236.         } catch (java.lang.Exception e) {
  237.             e.printStackTrace();
  238.         }

  239.         return null;
  240.     }

  241.     /**
  242.      * Construct a Shape Preserving Single Stretch Funding Curve Based off of the Input Exchange/OTC Market
  243.      *  Instruments
  244.      *
  245.      * @param dtSpot The Spot Date
  246.      * @param strCurrency Currency
  247.      * @param astrDepositMaturityTenor Array of Deposit Maturity Tenors
  248.      * @param adblDepositQuote Array of Deposit Quotes
  249.      * @param strDepositMeasure Deposit Calibration Measure
  250.      * @param adblFuturesQuote Array of Futures Quotes
  251.      * @param strFuturesMeasure Futures Calibration Measure
  252.      * @param astrFixFloatMaturityTenor Array of Fix Float Swap Maturity Tenors
  253.      * @param adblFixFloatQuote Array of Fix Float Swap Quotes
  254.      * @param strFixFloatMeasure Fix Float Calibration Measure
  255.      *
  256.      * @return The Single Stretch Funding Curve Instance
  257.      */

  258.     public static final org.drip.state.discount.MergedDiscountForwardCurve SingleStretchShapePreservingFundingCurve (
  259.         final org.drip.analytics.date.JulianDate dtSpot,
  260.         final java.lang.String strCurrency,
  261.         final java.lang.String[] astrDepositMaturityTenor,
  262.         final double[] adblDepositQuote,
  263.         final java.lang.String strDepositMeasure,
  264.         final double[] adblFuturesQuote,
  265.         final java.lang.String strFuturesMeasure,
  266.         final java.lang.String[] astrFixFloatMaturityTenor,
  267.         final double[] adblFixFloatQuote,
  268.         final java.lang.String strFixFloatMeasure)
  269.     {
  270.         try {
  271.             return SingleStretchFundingCurve (dtSpot, strCurrency, astrDepositMaturityTenor, adblDepositQuote,
  272.                 strDepositMeasure, adblFuturesQuote, strFuturesMeasure, astrFixFloatMaturityTenor,
  273.                     adblFixFloatQuote, strFixFloatMeasure, new
  274.                         org.drip.spline.params.SegmentCustomBuilderControl
  275.                             (org.drip.spline.stretch.MultiSegmentSequenceBuilder.BASIS_SPLINE_POLYNOMIAL, new
  276.                                 org.drip.spline.basis.PolynomialFunctionSetParams (2),
  277.                                     org.drip.spline.params.SegmentInelasticDesignControl.Create (0, 2), new
  278.                                         org.drip.spline.params.ResponseScalingShapeControl (true, new
  279.                                             org.drip.function.r1tor1.QuadraticRationalShapeControl (0.)),
  280.                                                 null));
  281.         } catch (java.lang.Exception e) {
  282.             e.printStackTrace();
  283.         }

  284.         return null;
  285.     }

  286.     /**
  287.      * Construct a Shape Preserving Funding Curve Based off of the Input Exchange/OTC Market Instruments
  288.      *
  289.      * @param dtSpot The Spot Date
  290.      * @param strCurrency Currency
  291.      * @param astrDepositMaturityTenor Array of Deposit Maturity Tenors
  292.      * @param adblDepositQuote Array of Deposit Quotes
  293.      * @param strDepositMeasure Deposit Calibration Measure
  294.      * @param adblFuturesQuote Array of Futures Quotes
  295.      * @param strFuturesMeasure Futures Calibration Measure
  296.      * @param astrFixFloatMaturityTenor Array of Fix Float Swap Maturity Tenors
  297.      * @param adblFixFloatQuote Array of Fix Float Swap Quotes
  298.      * @param strFixFloatMeasure Fix Float Calibration Measure
  299.      *
  300.      * @return The Funding Curve Instance
  301.      */

  302.     public static final org.drip.state.discount.MergedDiscountForwardCurve ShapePreservingFundingCurve (
  303.         final org.drip.analytics.date.JulianDate dtSpot,
  304.         final java.lang.String strCurrency,
  305.         final java.lang.String[] astrDepositMaturityTenor,
  306.         final double[] adblDepositQuote,
  307.         final java.lang.String strDepositMeasure,
  308.         final double[] adblFuturesQuote,
  309.         final java.lang.String strFuturesMeasure,
  310.         final java.lang.String[] astrFixFloatMaturityTenor,
  311.         final double[] adblFixFloatQuote,
  312.         final java.lang.String strFixFloatMeasure)
  313.     {
  314.         try {
  315.             return FundingCurve (dtSpot, strCurrency, astrDepositMaturityTenor, adblDepositQuote,
  316.                 strDepositMeasure, adblFuturesQuote, strFuturesMeasure, astrFixFloatMaturityTenor,
  317.                     adblFixFloatQuote, strFixFloatMeasure, new
  318.                         org.drip.spline.params.SegmentCustomBuilderControl
  319.                             (org.drip.spline.stretch.MultiSegmentSequenceBuilder.BASIS_SPLINE_POLYNOMIAL, new
  320.                                 org.drip.spline.basis.PolynomialFunctionSetParams (2),
  321.                                     org.drip.spline.params.SegmentInelasticDesignControl.Create (0, 2), new
  322.                                         org.drip.spline.params.ResponseScalingShapeControl (true, new
  323.                                             org.drip.function.r1tor1.QuadraticRationalShapeControl (0.)),
  324.                                                 null));
  325.         } catch (java.lang.Exception e) {
  326.             e.printStackTrace();
  327.         }

  328.         return null;
  329.     }

  330.     /**
  331.      * Construct a Smooth Funding Curve Based off of the Input Exchange/OTC Market Instruments
  332.      *
  333.      * @param dtSpot The Spot Date
  334.      * @param strCurrency Currency
  335.      * @param astrDepositMaturityTenor Array of Deposit Maturity Tenors
  336.      * @param adblDepositQuote Array of Deposit Quotes
  337.      * @param strDepositMeasure Deposit Calibration Measure
  338.      * @param adblFuturesQuote Array of Futures Quotes
  339.      * @param strFuturesMeasure Futures Calibration Measure
  340.      * @param astrFixFloatMaturityTenor Array of Fix Float Swap Maturity Tenors
  341.      * @param adblFixFloatQuote Array of Fix Float Swap Quotes
  342.      * @param strFixFloatMeasure Fix Float Calibration Measure
  343.      *
  344.      * @return The Funding Curve Instance
  345.      */

  346.     public static final org.drip.state.discount.MergedDiscountForwardCurve SmoothFundingCurve (
  347.         final org.drip.analytics.date.JulianDate dtSpot,
  348.         final java.lang.String strCurrency,
  349.         final java.lang.String[] astrDepositMaturityTenor,
  350.         final double[] adblDepositQuote,
  351.         final java.lang.String strDepositMeasure,
  352.         final double[] adblFuturesQuote,
  353.         final java.lang.String strFuturesMeasure,
  354.         final java.lang.String[] astrFixFloatMaturityTenor,
  355.         final double[] adblFixFloatQuote,
  356.         final java.lang.String strFixFloatMeasure)
  357.     {
  358.         try {
  359.             return FundingCurve (dtSpot, strCurrency, astrDepositMaturityTenor, adblDepositQuote,
  360.                 strDepositMeasure, adblFuturesQuote, strFuturesMeasure, astrFixFloatMaturityTenor,
  361.                     adblFixFloatQuote, strFixFloatMeasure, new
  362.                         org.drip.spline.params.SegmentCustomBuilderControl
  363.                             (org.drip.spline.stretch.MultiSegmentSequenceBuilder.BASIS_SPLINE_POLYNOMIAL, new
  364.                                 org.drip.spline.basis.PolynomialFunctionSetParams (4),
  365.                                     org.drip.spline.params.SegmentInelasticDesignControl.Create (2, 2), new
  366.                                         org.drip.spline.params.ResponseScalingShapeControl (true, new
  367.                                             org.drip.function.r1tor1.QuadraticRationalShapeControl (0.)),
  368.                                                 null));
  369.         } catch (java.lang.Exception e) {
  370.             e.printStackTrace();
  371.         }

  372.         return null;
  373.     }

  374.     /**
  375.      * Construct a Smooth Single Stretch Funding Curve Based off of the Input Exchange/OTC Market Instruments
  376.      *
  377.      * @param dtSpot The Spot Date
  378.      * @param strCurrency Currency
  379.      * @param astrDepositMaturityTenor Array of Deposit Maturity Tenors
  380.      * @param adblDepositQuote Array of Deposit Quotes
  381.      * @param strDepositMeasure Deposit Calibration Measure
  382.      * @param adblFuturesQuote Array of Futures Quotes
  383.      * @param strFuturesMeasure Futures Calibration Measure
  384.      * @param astrFixFloatMaturityTenor Array of Fix Float Swap Maturity Tenors
  385.      * @param adblFixFloatQuote Array of Fix Float Swap Quotes
  386.      * @param strFixFloatMeasure Fix Float Calibration Measure
  387.      *
  388.      * @return The Single Stretch Funding Curve Instance
  389.      */

  390.     public static final org.drip.state.discount.MergedDiscountForwardCurve SingleStretchSmoothFundingCurve (
  391.         final org.drip.analytics.date.JulianDate dtSpot,
  392.         final java.lang.String strCurrency,
  393.         final java.lang.String[] astrDepositMaturityTenor,
  394.         final double[] adblDepositQuote,
  395.         final java.lang.String strDepositMeasure,
  396.         final double[] adblFuturesQuote,
  397.         final java.lang.String strFuturesMeasure,
  398.         final java.lang.String[] astrFixFloatMaturityTenor,
  399.         final double[] adblFixFloatQuote,
  400.         final java.lang.String strFixFloatMeasure)
  401.     {
  402.         try {
  403.             return SingleStretchFundingCurve (dtSpot, strCurrency, astrDepositMaturityTenor,
  404.                 adblDepositQuote, strDepositMeasure, adblFuturesQuote, strFuturesMeasure,
  405.                     astrFixFloatMaturityTenor, adblFixFloatQuote, strFixFloatMeasure, new
  406.                         org.drip.spline.params.SegmentCustomBuilderControl
  407.                             (org.drip.spline.stretch.MultiSegmentSequenceBuilder.BASIS_SPLINE_POLYNOMIAL, new
  408.                                 org.drip.spline.basis.PolynomialFunctionSetParams (4),
  409.                                     org.drip.spline.params.SegmentInelasticDesignControl.Create (2, 2), new
  410.                                         org.drip.spline.params.ResponseScalingShapeControl (true, new
  411.                                             org.drip.function.r1tor1.QuadraticRationalShapeControl (0.)),
  412.                                                 null));
  413.         } catch (java.lang.Exception e) {
  414.             e.printStackTrace();
  415.         }

  416.         return null;
  417.     }

  418.     /**
  419.      * Construct a Funding Curve Based off of the Input Exchange/OTC Market Instruments
  420.      *
  421.      * @param dtSpot The Spot Date
  422.      * @param strCurrency Currency
  423.      * @param astrDepositMaturityTenor Array of Deposit Maturity Tenors
  424.      * @param adblDepositQuote Array of Deposit Quotes
  425.      * @param strDepositMeasure Deposit Calibration Measure
  426.      * @param adblFuturesQuote Array of Futures Quotes
  427.      * @param strFuturesMeasure Futures Calibration Measure
  428.      * @param astrFixFloatMaturityTenor Array of Fix Float Swap Maturity Tenors
  429.      * @param adblFixFloatQuote Array of Fix Float Swap Quotes
  430.      * @param strFixFloatMeasure Fix Float Calibration Measure
  431.      * @param iLatentStateType SHAPE_PRESERVING/SMOOTH
  432.      *
  433.      * @return The Funding Curve Instance
  434.      */

  435.     public static final org.drip.state.discount.MergedDiscountForwardCurve FundingCurve (
  436.         final org.drip.analytics.date.JulianDate dtSpot,
  437.         final java.lang.String strCurrency,
  438.         final java.lang.String[] astrDepositMaturityTenor,
  439.         final double[] adblDepositQuote,
  440.         final java.lang.String strDepositMeasure,
  441.         final double[] adblFuturesQuote,
  442.         final java.lang.String strFuturesMeasure,
  443.         final java.lang.String[] astrFixFloatMaturityTenor,
  444.         final double[] adblFixFloatQuote,
  445.         final java.lang.String strFixFloatMeasure,
  446.         final int iLatentStateType)
  447.     {
  448.         if (SHAPE_PRESERVING == iLatentStateType)
  449.             return ShapePreservingFundingCurve (dtSpot, strCurrency, astrDepositMaturityTenor, adblDepositQuote,
  450.                 strDepositMeasure, adblFuturesQuote, strFuturesMeasure, astrFixFloatMaturityTenor,
  451.                     adblFixFloatQuote, strFixFloatMeasure);

  452.         if (SMOOTH == iLatentStateType)
  453.             return SmoothFundingCurve (dtSpot, strCurrency, astrDepositMaturityTenor, adblDepositQuote,
  454.                 strDepositMeasure, adblFuturesQuote, strFuturesMeasure, astrFixFloatMaturityTenor,
  455.                     adblFixFloatQuote, strFixFloatMeasure);

  456.         return null;
  457.     }

  458.     /**
  459.      * Construct a Single Stretch Funding Curve Based off of the Input Exchange/OTC Market Instruments
  460.      *
  461.      * @param dtSpot The Spot Date
  462.      * @param strCurrency Currency
  463.      * @param astrDepositMaturityTenor Array of Deposit Maturity Tenors
  464.      * @param adblDepositQuote Array of Deposit Quotes
  465.      * @param strDepositMeasure Deposit Calibration Measure
  466.      * @param adblFuturesQuote Array of Futures Quotes
  467.      * @param strFuturesMeasure Futures Calibration Measure
  468.      * @param astrFixFloatMaturityTenor Array of Fix Float Swap Maturity Tenors
  469.      * @param adblFixFloatQuote Array of Fix Float Swap Quotes
  470.      * @param strFixFloatMeasure Fix Float Calibration Measure
  471.      * @param iLatentStateType SHAPE_PRESERVING/SMOOTH
  472.      *
  473.      * @return The Single Stretch Funding Curve Instance
  474.      */

  475.     public static final org.drip.state.discount.MergedDiscountForwardCurve SingleStretchFundingCurve (
  476.         final org.drip.analytics.date.JulianDate dtSpot,
  477.         final java.lang.String strCurrency,
  478.         final java.lang.String[] astrDepositMaturityTenor,
  479.         final double[] adblDepositQuote,
  480.         final java.lang.String strDepositMeasure,
  481.         final double[] adblFuturesQuote,
  482.         final java.lang.String strFuturesMeasure,
  483.         final java.lang.String[] astrFixFloatMaturityTenor,
  484.         final double[] adblFixFloatQuote,
  485.         final java.lang.String strFixFloatMeasure,
  486.         final int iLatentStateType)
  487.     {
  488.         if (SHAPE_PRESERVING == iLatentStateType)
  489.             return SingleStretchShapePreservingFundingCurve (dtSpot, strCurrency, astrDepositMaturityTenor,
  490.                 adblDepositQuote, strDepositMeasure, adblFuturesQuote, strFuturesMeasure,
  491.                     astrFixFloatMaturityTenor, adblFixFloatQuote, strFixFloatMeasure);

  492.         if (SMOOTH == iLatentStateType)
  493.             return SingleStretchSmoothFundingCurve (dtSpot, strCurrency, astrDepositMaturityTenor,
  494.                 adblDepositQuote, strDepositMeasure, adblFuturesQuote, strFuturesMeasure,
  495.                     astrFixFloatMaturityTenor, adblFixFloatQuote, strFixFloatMeasure);

  496.         return null;
  497.     }

  498.     /**
  499.      * Construct a Instance of the Forward Curve off of Exchange/OTC Market Instruments
  500.      *
  501.      * @param dtSpot Spot Date
  502.      * @param forwardLabel Forward Label
  503.      * @param astrDepositMaturityTenor Array of Deposit Maturity Tenors
  504.      * @param adblDepositQuote Array of the Deposit Instrument Quotes
  505.      * @param strDepositMeasure The Deposit Instrument Calibration Measure
  506.      * @param astrFRAMaturityTenor Array of FRA Maturity Tenors
  507.      * @param adblFRAQuote Array of the FRA Instrument Quotes
  508.      * @param strFRAMeasure The FRA Instrument Calibration Measure
  509.      * @param astrFixFloatMaturityTenor Array of Fix-Float Maturity Tenors
  510.      * @param adblFixFloatQuote Array of the Fix-Float Quotes
  511.      * @param strFixFloatMeasure The Fix-Float Calibration Measure
  512.      * @param astrFloatFloatMaturityTenor Array of Float-Float Maturity Tenors
  513.      * @param adblFloatFloatQuote Array of the Float-Float Quotes
  514.      * @param strFloatFloatMeasure The Float-Float Calibration Measure
  515.      * @param astrSyntheticFloatFloatMaturityTenor Array of Synthetic Float-Float Maturity Tenors
  516.      * @param adblSyntheticFloatFloatQuote Array of the Synthetic Float-Float Quotes
  517.      * @param strSyntheticFloatFloatMeasure The Synthetic Float-Float Calibration Measure
  518.      * @param dc The Base Discount Curve
  519.      * @param fcReference The Reference Forward Curve
  520.      * @param scbc Segment Custom Builder Control Parameters
  521.      *
  522.      * @return Instance of the Forward Curve
  523.      */

  524.     public static final org.drip.state.forward.ForwardCurve ForwardCurve (
  525.         final org.drip.analytics.date.JulianDate dtSpot,
  526.         final org.drip.state.identifier.ForwardLabel forwardLabel,
  527.         final java.lang.String[] astrDepositMaturityTenor,
  528.         final double[] adblDepositQuote,
  529.         final java.lang.String strDepositMeasure,
  530.         final java.lang.String[] astrFRAMaturityTenor,
  531.         final double[] adblFRAQuote,
  532.         final java.lang.String strFRAMeasure,
  533.         final java.lang.String[] astrFixFloatMaturityTenor,
  534.         final double[] adblFixFloatQuote,
  535.         final java.lang.String strFixFloatMeasure,
  536.         final java.lang.String[] astrFloatFloatMaturityTenor,
  537.         final double[] adblFloatFloatQuote,
  538.         final java.lang.String strFloatFloatMeasure,
  539.         final java.lang.String[] astrSyntheticFloatFloatMaturityTenor,
  540.         final double[] adblSyntheticFloatFloatQuote,
  541.         final java.lang.String strSyntheticFloatFloatMeasure,
  542.         final org.drip.state.discount.MergedDiscountForwardCurve dc,
  543.         final org.drip.state.forward.ForwardCurve fcReference,
  544.         final org.drip.spline.params.SegmentCustomBuilderControl scbc)
  545.     {
  546.         if (null == dtSpot || null == forwardLabel || null == dc) return null;

  547.         java.lang.String strCurrency = forwardLabel.currency();

  548.         org.drip.analytics.date.JulianDate dtEffective = dtSpot.addBusDays (0, strCurrency);

  549.         org.drip.state.inference.LatentStateStretchSpec lsssFRA = null;
  550.         org.drip.state.inference.LinearLatentStateCalibrator lcc = null;
  551.         int iNumFRAQuote = null == adblFRAQuote ? 0 : adblFRAQuote.length;
  552.         org.drip.state.inference.LatentStateStretchSpec lsssDeposit = null;
  553.         org.drip.state.inference.LatentStateStretchSpec lsssFixFloat = null;
  554.         org.drip.state.inference.LatentStateStretchSpec lsssFloatFloat = null;
  555.         int iNumDepositQuote = null == adblDepositQuote ? 0 : adblDepositQuote.length;
  556.         org.drip.state.inference.LatentStateStretchSpec lsssSyntheticFloatFloat = null;
  557.         int iNumFRAComp = null == astrFRAMaturityTenor ? 0 : astrFRAMaturityTenor.length;
  558.         int iNumFixFloatQuote = null == adblFixFloatQuote ? 0 : adblFixFloatQuote.length;
  559.         int iNumFloatFloatQuote = null == adblFloatFloatQuote ? 0 : adblFloatFloatQuote.length;
  560.         int iNumDepositComp = null == astrDepositMaturityTenor ? 0 : astrDepositMaturityTenor.length;
  561.         int iNumFixFloatComp = null == astrFixFloatMaturityTenor ? 0 : astrFixFloatMaturityTenor.length;
  562.         int iNumFloatFloatComp = null == astrFloatFloatMaturityTenor ? 0 :
  563.             astrFloatFloatMaturityTenor.length;
  564.         int iNumSyntheticFloatFloatQuote = null == adblSyntheticFloatFloatQuote ? 0 :
  565.             adblSyntheticFloatFloatQuote.length;
  566.         int iNumSyntheticFloatFloatComp = null == astrSyntheticFloatFloatMaturityTenor ? 0 :
  567.             astrSyntheticFloatFloatMaturityTenor.length;

  568.         if (iNumDepositQuote != iNumDepositComp || iNumFRAQuote != iNumFRAComp || iNumFixFloatQuote !=
  569.             iNumFixFloatComp || iNumFloatFloatQuote != iNumFloatFloatComp || iNumSyntheticFloatFloatQuote !=
  570.                 iNumSyntheticFloatFloatComp)
  571.             return null;

  572.         if (0 != iNumDepositComp)
  573.             lsssDeposit = org.drip.state.estimator.LatentStateStretchBuilder.ForwardStretchSpec ("DEPOSIT",
  574.                 org.drip.service.template.OTCInstrumentBuilder.ForwardRateDeposit (dtEffective,
  575.                     astrDepositMaturityTenor, forwardLabel), strDepositMeasure, adblDepositQuote);

  576.         if (0 != iNumFRAComp)
  577.             lsssFRA = org.drip.state.estimator.LatentStateStretchBuilder.ForwardStretchSpec ("FRA",
  578.                 org.drip.service.template.OTCInstrumentBuilder.FRAStandard (dtEffective, forwardLabel,
  579.                     astrFRAMaturityTenor, adblFRAQuote), strFRAMeasure, adblFRAQuote);

  580.         if (0 != iNumFixFloatComp)
  581.             lsssFixFloat = org.drip.state.estimator.LatentStateStretchBuilder.ForwardStretchSpec ("FIXFLOAT",
  582.                 org.drip.service.template.OTCInstrumentBuilder.FixFloatCustom (dtEffective, forwardLabel,
  583.                     astrFixFloatMaturityTenor), strFixFloatMeasure, adblFixFloatQuote);

  584.         if (0 != iNumFloatFloatComp)
  585.             lsssFloatFloat = org.drip.state.estimator.LatentStateStretchBuilder.ForwardStretchSpec
  586.                 ("FLOATFLOAT", org.drip.service.template.OTCInstrumentBuilder.FloatFloat (dtEffective,
  587.                     strCurrency, forwardLabel.tenor(), astrFloatFloatMaturityTenor, 0.),
  588.                         strFloatFloatMeasure, adblFloatFloatQuote);

  589.         if (0 != iNumSyntheticFloatFloatComp)
  590.             lsssSyntheticFloatFloat = org.drip.state.estimator.LatentStateStretchBuilder.ForwardStretchSpec
  591.                 ("SYNTHETICFLOATFLOAT", org.drip.service.template.OTCInstrumentBuilder.FloatFloat
  592.                     (dtEffective, strCurrency, forwardLabel.tenor(), astrSyntheticFloatFloatMaturityTenor,
  593.                         0.), strSyntheticFloatFloatMeasure, adblSyntheticFloatFloatQuote);

  594.         org.drip.state.inference.LatentStateStretchSpec[] aStretchSpec = new
  595.             org.drip.state.inference.LatentStateStretchSpec[] {lsssDeposit, lsssFRA, lsssFixFloat,
  596.                 lsssFloatFloat, lsssSyntheticFloatFloat};

  597.         try {
  598.             lcc = new org.drip.state.inference.LinearLatentStateCalibrator (scbc,
  599.                 org.drip.spline.stretch.BoundarySettings.NaturalStandard(),
  600.                     org.drip.spline.stretch.MultiSegmentSequence.CALIBRATE, null, null);

  601.             return org.drip.state.creator.ScenarioForwardCurveBuilder.ShapePreservingForwardCurve (lcc,
  602.                 aStretchSpec, forwardLabel, org.drip.param.valuation.ValuationParams.Spot
  603.                     (dtEffective.julian()), null, org.drip.param.creator.MarketParamsBuilder.Create (dc,
  604.                         fcReference, null, null, null, null, null, null), null, 0 == iNumDepositComp ?
  605.                             adblFRAQuote[0] : adblDepositQuote[0]);
  606.         } catch (java.lang.Exception e) {
  607.             e.printStackTrace();
  608.         }

  609.         return null;
  610.     }

  611.     /**
  612.      * Construct a Instance of the Shape Preserving Forward Curve off of Exchange/OTC Market Instruments
  613.      *
  614.      * @param dtSpot Spot Date
  615.      * @param forwardLabel Forward Label
  616.      * @param astrDepositMaturityTenor Array of Deposit Maturity Tenors
  617.      * @param adblDepositQuote Array of the Deposit Instrument Quotes
  618.      * @param strDepositMeasure The Deposit Instrument Calibration Measure
  619.      * @param astrFRAMaturityTenor Array of FRA Maturity Tenors
  620.      * @param adblFRAQuote Array of the FRA Instrument Quotes
  621.      * @param strFRAMeasure The FRA Instrument Calibration Measure
  622.      * @param astrFixFloatMaturityTenor Array of Fix-Float Maturity Tenors
  623.      * @param adblFixFloatQuote Array of the Fix-Float Quotes
  624.      * @param strFixFloatMeasure The Fix-Float Calibration Measure
  625.      * @param astrFloatFloatMaturityTenor Array of Float-Float Maturity Tenors
  626.      * @param adblFloatFloatQuote Array of the Float-Float Quotes
  627.      * @param strFloatFloatMeasure The Float-Float Calibration Measure
  628.      * @param astrSyntheticFloatFloatMaturityTenor Array of Synthetic Float-Float Maturity Tenors
  629.      * @param adblSyntheticFloatFloatQuote Array of the Synthetic Float-Float Quotes
  630.      * @param strSyntheticFloatFloatMeasure The Synthetic Float-Float Calibration Measure
  631.      * @param dc The Base Discount Curve
  632.      * @param fcReference The Reference Forward Curve
  633.      *
  634.      * @return Instance of the Forward Curve
  635.      */

  636.     public static final org.drip.state.forward.ForwardCurve ShapePreservingForwardCurve (
  637.         final org.drip.analytics.date.JulianDate dtSpot,
  638.         final org.drip.state.identifier.ForwardLabel forwardLabel,
  639.         final java.lang.String[] astrDepositMaturityTenor,
  640.         final double[] adblDepositQuote,
  641.         final java.lang.String strDepositMeasure,
  642.         final java.lang.String[] astrFRAMaturityTenor,
  643.         final double[] adblFRAQuote,
  644.         final java.lang.String strFRAMeasure,
  645.         final java.lang.String[] astrFixFloatMaturityTenor,
  646.         final double[] adblFixFloatQuote,
  647.         final java.lang.String strFixFloatMeasure,
  648.         final java.lang.String[] astrFloatFloatMaturityTenor,
  649.         final double[] adblFloatFloatQuote,
  650.         final java.lang.String strFloatFloatMeasure,
  651.         final java.lang.String[] astrSyntheticFloatFloatMaturityTenor,
  652.         final double[] adblSyntheticFloatFloatQuote,
  653.         final java.lang.String strSyntheticFloatFloatMeasure,
  654.         final org.drip.state.discount.MergedDiscountForwardCurve dc,
  655.         final org.drip.state.forward.ForwardCurve fcReference)
  656.     {
  657.         try {
  658.             return ForwardCurve (dtSpot, forwardLabel, astrDepositMaturityTenor, adblDepositQuote,
  659.                 strDepositMeasure, astrFRAMaturityTenor, adblFRAQuote, strFRAMeasure,
  660.                     astrFixFloatMaturityTenor, adblFixFloatQuote, strFixFloatMeasure,
  661.                         astrFloatFloatMaturityTenor, adblFloatFloatQuote, strFloatFloatMeasure,
  662.                             astrSyntheticFloatFloatMaturityTenor, adblSyntheticFloatFloatQuote,
  663.                                 strSyntheticFloatFloatMeasure, dc, fcReference, new
  664.                                     org.drip.spline.params.SegmentCustomBuilderControl
  665.                                         (org.drip.spline.stretch.MultiSegmentSequenceBuilder.BASIS_SPLINE_POLYNOMIAL,
  666.                 new org.drip.spline.basis.PolynomialFunctionSetParams (2),
  667.                     org.drip.spline.params.SegmentInelasticDesignControl.Create (0, 2), new
  668.                         org.drip.spline.params.ResponseScalingShapeControl (true, new
  669.                             org.drip.function.r1tor1.QuadraticRationalShapeControl (0.)), null));
  670.         } catch (java.lang.Exception e) {
  671.             e.printStackTrace();
  672.         }

  673.         return null;
  674.     }

  675.     /**
  676.      * Construct a Instance of Smooth Forward Curve off of Exchange/OTC Market Instruments
  677.      *
  678.      * @param dtSpot Spot Date
  679.      * @param forwardLabel Forward Label
  680.      * @param astrDepositMaturityTenor Array of Deposit Maturity Tenors
  681.      * @param adblDepositQuote Array of the Deposit Instrument Quotes
  682.      * @param strDepositMeasure The Deposit Instrument Calibration Measure
  683.      * @param astrFRAMaturityTenor Array of FRA Maturity Tenors
  684.      * @param adblFRAQuote Array of the FRA Instrument Quotes
  685.      * @param strFRAMeasure The FRA Instrument Calibration Measure
  686.      * @param astrFixFloatMaturityTenor Array of Fix-Float Maturity Tenors
  687.      * @param adblFixFloatQuote Array of the Fix-Float Quotes
  688.      * @param strFixFloatMeasure The Fix-Float Calibration Measure
  689.      * @param astrFloatFloatMaturityTenor Array of Float-Float Maturity Tenors
  690.      * @param adblFloatFloatQuote Array of the Float-Float Quotes
  691.      * @param strFloatFloatMeasure The Float-Float Calibration Measure
  692.      * @param astrSyntheticFloatFloatMaturityTenor Array of Synthetic Float-Float Maturity Tenors
  693.      * @param adblSyntheticFloatFloatQuote Array of the Synthetic Float-Float Quotes
  694.      * @param strSyntheticFloatFloatMeasure The Synthetic Float-Float Calibration Measure
  695.      * @param dc The Base Discount Curve
  696.      * @param fcReference The Reference Forward Curve
  697.      *
  698.      * @return Instance of the Forward Curve
  699.      */

  700.     public static final org.drip.state.forward.ForwardCurve SmoothForwardCurve (
  701.         final org.drip.analytics.date.JulianDate dtSpot,
  702.         final org.drip.state.identifier.ForwardLabel forwardLabel,
  703.         final java.lang.String[] astrDepositMaturityTenor,
  704.         final double[] adblDepositQuote,
  705.         final java.lang.String strDepositMeasure,
  706.         final java.lang.String[] astrFRAMaturityTenor,
  707.         final double[] adblFRAQuote,
  708.         final java.lang.String strFRAMeasure,
  709.         final java.lang.String[] astrFixFloatMaturityTenor,
  710.         final double[] adblFixFloatQuote,
  711.         final java.lang.String strFixFloatMeasure,
  712.         final java.lang.String[] astrFloatFloatMaturityTenor,
  713.         final double[] adblFloatFloatQuote,
  714.         final java.lang.String strFloatFloatMeasure,
  715.         final java.lang.String[] astrSyntheticFloatFloatMaturityTenor,
  716.         final double[] adblSyntheticFloatFloatQuote,
  717.         final java.lang.String strSyntheticFloatFloatMeasure,
  718.         final org.drip.state.discount.MergedDiscountForwardCurve dc,
  719.         final org.drip.state.forward.ForwardCurve fcReference)
  720.     {
  721.         try {
  722.             return ForwardCurve (dtSpot, forwardLabel, astrDepositMaturityTenor, adblDepositQuote,
  723.                 strDepositMeasure, astrFRAMaturityTenor, adblFRAQuote, strFRAMeasure,
  724.                     astrFixFloatMaturityTenor, adblFixFloatQuote, strFixFloatMeasure,
  725.                         astrFloatFloatMaturityTenor, adblFloatFloatQuote, strFloatFloatMeasure,
  726.                             astrSyntheticFloatFloatMaturityTenor, adblSyntheticFloatFloatQuote,
  727.                                 strSyntheticFloatFloatMeasure, dc, fcReference, new
  728.                                     org.drip.spline.params.SegmentCustomBuilderControl
  729.                                         (org.drip.spline.stretch.MultiSegmentSequenceBuilder.BASIS_SPLINE_POLYNOMIAL,
  730.                 new org.drip.spline.basis.PolynomialFunctionSetParams (4),
  731.                     org.drip.spline.params.SegmentInelasticDesignControl.Create (2, 2), new
  732.                         org.drip.spline.params.ResponseScalingShapeControl (true, new
  733.                             org.drip.function.r1tor1.QuadraticRationalShapeControl (0.)), null));
  734.         } catch (java.lang.Exception e) {
  735.             e.printStackTrace();
  736.         }

  737.         return null;
  738.     }

  739.     /**
  740.      * Construct a Instance of the Smooth/Shape Preserving Forward Curve off of Exchange/OTC Market
  741.      *  Instruments
  742.      *
  743.      * @param dtSpot Spot Date
  744.      * @param forwardLabel Forward Label
  745.      * @param astrDepositMaturityTenor Array of Deposit Maturity Tenors
  746.      * @param adblDepositQuote Array of the Deposit Instrument Quotes
  747.      * @param strDepositMeasure The Deposit Instrument Calibration Measure
  748.      * @param astrFRAMaturityTenor Array of FRA Maturity Tenors
  749.      * @param adblFRAQuote Array of the FRA Instrument Quotes
  750.      * @param strFRAMeasure The FRA Instrument Calibration Measure
  751.      * @param astrFixFloatMaturityTenor Array of Fix-Float Maturity Tenors
  752.      * @param adblFixFloatQuote Array of the Fix-Float Quotes
  753.      * @param strFixFloatMeasure The Fix-Float Calibration Measure
  754.      * @param astrFloatFloatMaturityTenor Array of Float-Float Maturity Tenors
  755.      * @param adblFloatFloatQuote Array of the Float-Float Quotes
  756.      * @param strFloatFloatMeasure The Float-Float Calibration Measure
  757.      * @param astrSyntheticFloatFloatMaturityTenor Array of Synthetic Float-Float Maturity Tenors
  758.      * @param adblSyntheticFloatFloatQuote Array of the Synthetic Float-Float Quotes
  759.      * @param strSyntheticFloatFloatMeasure The Synthetic Float-Float Calibration Measure
  760.      * @param dc The Base Discount Curve
  761.      * @param fcReference The Reference Forward Curve
  762.      * @param iLatentStateType SHAPE_PRESERVING/SMOOTH
  763.      *
  764.      * @return Instance of the Forward Curve
  765.      */

  766.     public static final org.drip.state.forward.ForwardCurve ForwardCurve (
  767.         final org.drip.analytics.date.JulianDate dtSpot,
  768.         final org.drip.state.identifier.ForwardLabel forwardLabel,
  769.         final java.lang.String[] astrDepositMaturityTenor,
  770.         final double[] adblDepositQuote,
  771.         final java.lang.String strDepositMeasure,
  772.         final java.lang.String[] astrFRAMaturityTenor,
  773.         final double[] adblFRAQuote,
  774.         final java.lang.String strFRAMeasure,
  775.         final java.lang.String[] astrFixFloatMaturityTenor,
  776.         final double[] adblFixFloatQuote,
  777.         final java.lang.String strFixFloatMeasure,
  778.         final java.lang.String[] astrFloatFloatMaturityTenor,
  779.         final double[] adblFloatFloatQuote,
  780.         final java.lang.String strFloatFloatMeasure,
  781.         final java.lang.String[] astrSyntheticFloatFloatMaturityTenor,
  782.         final double[] adblSyntheticFloatFloatQuote,
  783.         final java.lang.String strSyntheticFloatFloatMeasure,
  784.         final org.drip.state.discount.MergedDiscountForwardCurve dc,
  785.         final org.drip.state.forward.ForwardCurve fcReference,
  786.         final int iLatentStateType)
  787.     {
  788.         if (SHAPE_PRESERVING == iLatentStateType)
  789.             return ShapePreservingForwardCurve (dtSpot, forwardLabel, astrDepositMaturityTenor,
  790.                 adblDepositQuote, strDepositMeasure, astrFRAMaturityTenor, adblFRAQuote, strFRAMeasure,
  791.                     astrFixFloatMaturityTenor, adblFixFloatQuote, strFixFloatMeasure,
  792.                         astrFloatFloatMaturityTenor, adblFloatFloatQuote, strFloatFloatMeasure,
  793.                             astrSyntheticFloatFloatMaturityTenor, adblSyntheticFloatFloatQuote,
  794.                                 strSyntheticFloatFloatMeasure, dc, fcReference);

  795.         if (SMOOTH == iLatentStateType)
  796.             return SmoothForwardCurve (dtSpot, forwardLabel, astrDepositMaturityTenor, adblDepositQuote,
  797.                 strDepositMeasure, astrFRAMaturityTenor, adblFRAQuote, strFRAMeasure,
  798.                     astrFixFloatMaturityTenor, adblFixFloatQuote, strFixFloatMeasure,
  799.                         astrFloatFloatMaturityTenor, adblFloatFloatQuote, strFloatFloatMeasure,
  800.                             astrSyntheticFloatFloatMaturityTenor, adblSyntheticFloatFloatQuote,
  801.                                 strSyntheticFloatFloatMeasure, dc, fcReference);

  802.         return null;
  803.     }

  804.     /**
  805.      * Construct an Overnight Curve from Overnight Exchange/OTC Market Instruments
  806.      *
  807.      * @param dtSpot Spot Date
  808.      * @param strCurrency Currency
  809.      * @param astrDepositMaturityTenor Array of Deposit Maturity Tenors
  810.      * @param adblDepositQuote Array of Deposit Quotes
  811.      * @param strDepositMeasure Deposit Measure
  812.      * @param astrShortEndOISMaturityTenor Array of Short End OIS Maturity Tenors
  813.      * @param adblShortEndOISQuote Array of Short End OIS Quotes
  814.      * @param strShortEndOISMeasure Short End OIS Measure
  815.      * @param astrOISFuturesEffectiveTenor Array of OIS Futures Effective Tenors
  816.      * @param astrOISFuturesMaturityTenor Array of OIS Futures Maturity Tenors
  817.      * @param adblOISFuturesQuote Array of OIS Futures Quotes
  818.      * @param strOISFuturesMeasure OIS Futures Measure
  819.      * @param astrLongEndOISMaturityTenor Array of Long End OIS Maturity Tenors
  820.      * @param adblLongEndOISQuote Array of Long End OIS Quotes
  821.      * @param strLongEndOISMeasure Long End OIS Measure
  822.      * @param scbc Segment Custom Builder Control
  823.      *
  824.      * @return Overnight Curve from Overnight OTC Instruments
  825.      */

  826.     public static final org.drip.state.discount.MergedDiscountForwardCurve OvernightCurve (
  827.         final org.drip.analytics.date.JulianDate dtSpot,
  828.         final String strCurrency,
  829.         final java.lang.String[] astrDepositMaturityTenor,
  830.         final double[] adblDepositQuote,
  831.         final java.lang.String strDepositMeasure,
  832.         final java.lang.String[] astrShortEndOISMaturityTenor,
  833.         final double[] adblShortEndOISQuote,
  834.         final java.lang.String strShortEndOISMeasure,
  835.         final java.lang.String[] astrOISFuturesEffectiveTenor,
  836.         final java.lang.String[] astrOISFuturesMaturityTenor,
  837.         final double[] adblOISFuturesQuote,
  838.         final java.lang.String strOISFuturesMeasure,
  839.         final java.lang.String[] astrLongEndOISMaturityTenor,
  840.         final double[] adblLongEndOISQuote,
  841.         final java.lang.String strLongEndOISMeasure,
  842.         final org.drip.spline.params.SegmentCustomBuilderControl scbc)
  843.     {
  844.         if (null == dtSpot) return null;

  845.         org.drip.state.inference.LatentStateStretchSpec lsssDeposit = null;
  846.         org.drip.state.inference.LatentStateStretchSpec lsssOISFutures = null;
  847.         org.drip.state.inference.LatentStateStretchSpec lsssLongEndOIS = null;
  848.         org.drip.state.inference.LatentStateStretchSpec lsssShortEndOIS = null;
  849.         int iNumDepositQuote = null == adblDepositQuote ? 0 : adblDepositQuote.length;
  850.         int iNumOISFuturesQuote = null == adblOISFuturesQuote ? 0 : adblOISFuturesQuote.length;
  851.         int iNumLongEndOISQuote = null == adblLongEndOISQuote ? 0 : adblLongEndOISQuote.length;
  852.         int iNumShortEndOISQuote = null == adblShortEndOISQuote ? 0 : adblShortEndOISQuote.length;
  853.         int iNumDepositComp = null == astrDepositMaturityTenor ? 0 : astrDepositMaturityTenor.length;
  854.         int iNumOISFuturesComp = null == astrOISFuturesMaturityTenor ? 0 :
  855.             astrOISFuturesMaturityTenor.length;
  856.         int iNumOISFuturesComp2 = null == astrOISFuturesEffectiveTenor ? 0 :
  857.             astrOISFuturesEffectiveTenor.length;
  858.         int iNumLongEndOISComp = null == astrLongEndOISMaturityTenor ? 0 :
  859.             astrLongEndOISMaturityTenor.length;
  860.         int iNumShortEndOISComp = null == astrShortEndOISMaturityTenor ? 0 :
  861.             astrShortEndOISMaturityTenor.length;

  862.         if (iNumDepositQuote != iNumDepositComp || iNumShortEndOISQuote != iNumShortEndOISComp ||
  863.             iNumOISFuturesQuote != iNumOISFuturesComp || iNumOISFuturesComp2 != iNumOISFuturesComp ||
  864.                 iNumLongEndOISQuote != iNumLongEndOISComp)
  865.             return null;

  866.         org.drip.analytics.date.JulianDate dtEffective = dtSpot.addBusDays (0, strCurrency);

  867.         if (0 != iNumDepositComp)
  868.             lsssDeposit = org.drip.state.estimator.LatentStateStretchBuilder.ForwardFundingStretchSpec
  869.                 ("DEPOSIT", org.drip.service.template.OTCInstrumentBuilder.OvernightDeposit (dtEffective,
  870.                     strCurrency, astrDepositMaturityTenor), strDepositMeasure, adblDepositQuote);

  871.         if (0 != iNumShortEndOISComp)
  872.             lsssShortEndOIS = org.drip.state.estimator.LatentStateStretchBuilder.ForwardFundingStretchSpec
  873.                 ("SHORTENDOIS", org.drip.service.template.OTCInstrumentBuilder.OISFixFloat (dtEffective,
  874.                     strCurrency, astrShortEndOISMaturityTenor, adblShortEndOISQuote, false),
  875.                         strShortEndOISMeasure, adblShortEndOISQuote);

  876.         if (0 != iNumOISFuturesComp)
  877.             lsssOISFutures = org.drip.state.estimator.LatentStateStretchBuilder.ForwardFundingStretchSpec
  878.                 ("OISFUTURES", org.drip.service.template.OTCInstrumentBuilder.OISFixFloatFutures
  879.                     (dtEffective, strCurrency, astrOISFuturesEffectiveTenor, astrOISFuturesMaturityTenor,
  880.                         adblOISFuturesQuote, false), strOISFuturesMeasure, adblOISFuturesQuote);

  881.         if (0 != iNumLongEndOISComp)
  882.             lsssLongEndOIS = org.drip.state.estimator.LatentStateStretchBuilder.ForwardFundingStretchSpec
  883.                 ("LONGENDOIS", org.drip.service.template.OTCInstrumentBuilder.OISFixFloat (dtEffective,
  884.                     strCurrency, astrLongEndOISMaturityTenor, adblLongEndOISQuote, false),
  885.                         strLongEndOISMeasure, adblLongEndOISQuote);

  886.         try {
  887.             org.drip.state.inference.LinearLatentStateCalibrator lcc = new
  888.                 org.drip.state.inference.LinearLatentStateCalibrator (scbc,
  889.                     org.drip.spline.stretch.BoundarySettings.NaturalStandard(),
  890.                         org.drip.spline.stretch.MultiSegmentSequence.CALIBRATE, null, null);

  891.             return org.drip.state.creator.ScenarioDiscountCurveBuilder.ShapePreservingDFBuild (strCurrency,
  892.                 lcc, new org.drip.state.inference.LatentStateStretchSpec[] {lsssDeposit, lsssShortEndOIS,
  893.                     lsssOISFutures, lsssLongEndOIS}, org.drip.param.valuation.ValuationParams.Spot
  894.                         (dtEffective.julian()), null, null, null, 1.);
  895.         } catch (java.lang.Exception e) {
  896.             e.printStackTrace();
  897.         }

  898.         return null;
  899.     }

  900.     /**
  901.      * Construct a Shape Preserving Overnight Curve from Overnight Exchange/OTC Market Instruments
  902.      *
  903.      * @param dtSpot Spot Date
  904.      * @param strCurrency Currency
  905.      * @param astrDepositMaturityTenor Array of Deposit Maturity Tenors
  906.      * @param adblDepositQuote Array of Deposit Quotes
  907.      * @param strDepositMeasure Deposit Measure
  908.      * @param astrShortEndOISMaturityTenor Array of Short End OIS Maturity Tenors
  909.      * @param adblShortEndOISQuote Array of Short End OIS Quotes
  910.      * @param strShortEndOISMeasure Short End OIS Measure
  911.      * @param astrOISFuturesEffectiveTenor Array of OIS Futures Effective Tenors
  912.      * @param astrOISFuturesMaturityTenor Array of OIS Futures Maturity Tenors
  913.      * @param adblOISFuturesQuote Array of OIS Futures Quotes
  914.      * @param strOISFuturesMeasure OIS Futures Measure
  915.      * @param astrLongEndOISMaturityTenor Array of Long End OIS Maturity Tenors
  916.      * @param adblLongEndOISQuote Array of Long End OIS Quotes
  917.      * @param strLongEndOISMeasure Long End OIS Measure
  918.      *
  919.      * @return Overnight Curve from Overnight OTC Instruments
  920.      */

  921.     public static final org.drip.state.discount.MergedDiscountForwardCurve ShapePreservingOvernightCurve (
  922.         final org.drip.analytics.date.JulianDate dtSpot,
  923.         final String strCurrency,
  924.         final java.lang.String[] astrDepositMaturityTenor,
  925.         final double[] adblDepositQuote,
  926.         final java.lang.String strDepositMeasure,
  927.         final java.lang.String[] astrShortEndOISMaturityTenor,
  928.         final double[] adblShortEndOISQuote,
  929.         final java.lang.String strShortEndOISMeasure,
  930.         final java.lang.String[] astrOISFuturesEffectiveTenor,
  931.         final java.lang.String[] astrOISFuturesMaturityTenor,
  932.         final double[] adblOISFuturesQuote,
  933.         final java.lang.String strOISFuturesMeasure,
  934.         final java.lang.String[] astrLongEndOISMaturityTenor,
  935.         final double[] adblLongEndOISQuote,
  936.         final java.lang.String strLongEndOISMeasure)
  937.     {
  938.         try {
  939.             return OvernightCurve (dtSpot, strCurrency, astrDepositMaturityTenor, adblDepositQuote,
  940.                 strDepositMeasure, astrShortEndOISMaturityTenor, adblShortEndOISQuote, strShortEndOISMeasure,
  941.                     astrOISFuturesEffectiveTenor, astrOISFuturesMaturityTenor, adblOISFuturesQuote,
  942.                         strOISFuturesMeasure, astrLongEndOISMaturityTenor, adblLongEndOISQuote,
  943.                             strLongEndOISMeasure, new org.drip.spline.params.SegmentCustomBuilderControl
  944.                                 (org.drip.spline.stretch.MultiSegmentSequenceBuilder.BASIS_SPLINE_POLYNOMIAL,
  945.                                     new org.drip.spline.basis.PolynomialFunctionSetParams (2),
  946.                                         org.drip.spline.params.SegmentInelasticDesignControl.Create (0, 2),
  947.                                             new org.drip.spline.params.ResponseScalingShapeControl (true, new
  948.                                                 org.drip.function.r1tor1.QuadraticRationalShapeControl (0.)),
  949.                                                     null));
  950.         } catch (java.lang.Exception e) {
  951.             e.printStackTrace();
  952.         }

  953.         return null;
  954.     }

  955.     /**
  956.      * Construct a Smooth Overnight Curve from Overnight Exchange/OTC Market Instruments
  957.      *
  958.      * @param dtSpot Spot Date
  959.      * @param strCurrency Currency
  960.      * @param astrDepositMaturityTenor Array of Deposit Maturity Tenors
  961.      * @param adblDepositQuote Array of Deposit Quotes
  962.      * @param strDepositMeasure Deposit Measure
  963.      * @param astrShortEndOISMaturityTenor Array of Short End OIS Maturity Tenors
  964.      * @param adblShortEndOISQuote Array of Short End OIS Quotes
  965.      * @param strShortEndOISMeasure Short End OIS Measure
  966.      * @param astrOISFuturesEffectiveTenor Array of OIS Futures Effective Tenors
  967.      * @param astrOISFuturesMaturityTenor Array of OIS Futures Maturity Tenors
  968.      * @param adblOISFuturesQuote Array of OIS Futures Quotes
  969.      * @param strOISFuturesMeasure OIS Futures Measure
  970.      * @param astrLongEndOISMaturityTenor Array of Long End OIS Maturity Tenors
  971.      * @param adblLongEndOISQuote Array of Long End OIS Quotes
  972.      * @param strLongEndOISMeasure Long End OIS Measure
  973.      *
  974.      * @return Overnight Curve from Overnight OTC Instruments
  975.      */

  976.     public static final org.drip.state.discount.MergedDiscountForwardCurve SmoothOvernightCurve (
  977.         final org.drip.analytics.date.JulianDate dtSpot,
  978.         final String strCurrency,
  979.         final java.lang.String[] astrDepositMaturityTenor,
  980.         final double[] adblDepositQuote,
  981.         final java.lang.String strDepositMeasure,
  982.         final java.lang.String[] astrShortEndOISMaturityTenor,
  983.         final double[] adblShortEndOISQuote,
  984.         final java.lang.String strShortEndOISMeasure,
  985.         final java.lang.String[] astrOISFuturesEffectiveTenor,
  986.         final java.lang.String[] astrOISFuturesMaturityTenor,
  987.         final double[] adblOISFuturesQuote,
  988.         final java.lang.String strOISFuturesMeasure,
  989.         final java.lang.String[] astrLongEndOISMaturityTenor,
  990.         final double[] adblLongEndOISQuote,
  991.         final java.lang.String strLongEndOISMeasure)
  992.     {
  993.         try {
  994.             return OvernightCurve (dtSpot, strCurrency, astrDepositMaturityTenor, adblDepositQuote,
  995.                 strDepositMeasure, astrShortEndOISMaturityTenor, adblShortEndOISQuote, strShortEndOISMeasure,
  996.                     astrOISFuturesEffectiveTenor, astrOISFuturesMaturityTenor, adblOISFuturesQuote,
  997.                         strOISFuturesMeasure, astrLongEndOISMaturityTenor, adblLongEndOISQuote,
  998.                             strLongEndOISMeasure, new org.drip.spline.params.SegmentCustomBuilderControl
  999.                                 (org.drip.spline.stretch.MultiSegmentSequenceBuilder.BASIS_SPLINE_POLYNOMIAL,
  1000.                                     new org.drip.spline.basis.PolynomialFunctionSetParams (4),
  1001.                                         org.drip.spline.params.SegmentInelasticDesignControl.Create (2, 2),
  1002.                                             new org.drip.spline.params.ResponseScalingShapeControl (true, new
  1003.                                                 org.drip.function.r1tor1.QuadraticRationalShapeControl (0.)),
  1004.                                                     null));
  1005.         } catch (java.lang.Exception e) {
  1006.             e.printStackTrace();
  1007.         }

  1008.         return null;
  1009.     }

  1010.     /**
  1011.      * Construct an Overnight Curve from Overnight Exchange/OTC Market Instruments
  1012.      *
  1013.      * @param dtSpot Spot Date
  1014.      * @param strCurrency Currency
  1015.      * @param astrDepositMaturityTenor Array of Deposit Maturity Tenors
  1016.      * @param adblDepositQuote Array of Deposit Quotes
  1017.      * @param strDepositMeasure Deposit Measure
  1018.      * @param astrShortEndOISMaturityTenor Array of Short End OIS Maturity Tenors
  1019.      * @param adblShortEndOISQuote Array of Short End OIS Quotes
  1020.      * @param strShortEndOISMeasure Short End OIS Measure
  1021.      * @param astrOISFuturesEffectiveTenor Array of OIS Futures Effective Tenors
  1022.      * @param astrOISFuturesMaturityTenor Array of OIS Futures Maturity Tenors
  1023.      * @param adblOISFuturesQuote Array of OIS Futures Quotes
  1024.      * @param strOISFuturesMeasure OIS Futures Measure
  1025.      * @param astrLongEndOISMaturityTenor Array of Long End OIS Maturity Tenors
  1026.      * @param adblLongEndOISQuote Array of Long End OIS Quotes
  1027.      * @param strLongEndOISMeasure Long End OIS Measure
  1028.      * @param iLatentStateType SHAPE PRESERVING/SMOOTH
  1029.      *
  1030.      * @return Overnight Curve from Overnight OTC Instruments
  1031.      */

  1032.     public static final org.drip.state.discount.MergedDiscountForwardCurve OvernightCurve (
  1033.         final org.drip.analytics.date.JulianDate dtSpot,
  1034.         final String strCurrency,
  1035.         final java.lang.String[] astrDepositMaturityTenor,
  1036.         final double[] adblDepositQuote,
  1037.         final java.lang.String strDepositMeasure,
  1038.         final java.lang.String[] astrShortEndOISMaturityTenor,
  1039.         final double[] adblShortEndOISQuote,
  1040.         final java.lang.String strShortEndOISMeasure,
  1041.         final java.lang.String[] astrOISFuturesEffectiveTenor,
  1042.         final java.lang.String[] astrOISFuturesMaturityTenor,
  1043.         final double[] adblOISFuturesQuote,
  1044.         final java.lang.String strOISFuturesMeasure,
  1045.         final java.lang.String[] astrLongEndOISMaturityTenor,
  1046.         final double[] adblLongEndOISQuote,
  1047.         final java.lang.String strLongEndOISMeasure,
  1048.         final int iLatentStateType)
  1049.     {
  1050.         if (SHAPE_PRESERVING == iLatentStateType)
  1051.             return ShapePreservingOvernightCurve (dtSpot, strCurrency, astrDepositMaturityTenor,
  1052.                 adblDepositQuote, strDepositMeasure, astrShortEndOISMaturityTenor, adblShortEndOISQuote,
  1053.                     strShortEndOISMeasure, astrOISFuturesEffectiveTenor, astrOISFuturesMaturityTenor,
  1054.                         adblOISFuturesQuote, strOISFuturesMeasure, astrLongEndOISMaturityTenor,
  1055.                             adblLongEndOISQuote, strLongEndOISMeasure);

  1056.         if (SMOOTH == iLatentStateType)
  1057.             return SmoothOvernightCurve (dtSpot, strCurrency, astrDepositMaturityTenor, adblDepositQuote,
  1058.                 strDepositMeasure, astrShortEndOISMaturityTenor, adblShortEndOISQuote, strShortEndOISMeasure,
  1059.                     astrOISFuturesEffectiveTenor, astrOISFuturesMaturityTenor, adblOISFuturesQuote,
  1060.                         strOISFuturesMeasure, astrLongEndOISMaturityTenor, adblLongEndOISQuote,
  1061.                             strLongEndOISMeasure);

  1062.         return null;
  1063.     }

  1064.     /**
  1065.      * Construct a Credit Curve from Overnight Exchange/OTC Market Instruments
  1066.      *
  1067.      * @param dtSpot Spot Date
  1068.      * @param strCredit Credit Curve
  1069.      * @param astrMaturityTenor Maturity Tenor
  1070.      * @param adblCoupon Coupon Array
  1071.      * @param adblQuote Array of Market Quotes
  1072.      * @param strMeasure Calibration Measure
  1073.      * @param dc Discount Curve
  1074.      *
  1075.      * @return The Credit Curve Instance
  1076.      */

  1077.     public static final org.drip.state.credit.CreditCurve CreditCurve (
  1078.         final org.drip.analytics.date.JulianDate dtSpot,
  1079.         final java.lang.String strCredit,
  1080.         final java.lang.String[] astrMaturityTenor,
  1081.         final double[] adblCoupon,
  1082.         final double[] adblQuote,
  1083.         final java.lang.String strMeasure,
  1084.         final org.drip.state.discount.MergedDiscountForwardCurve dc)
  1085.     {
  1086.         if (null == dtSpot || null == dc) return null;

  1087.         java.lang.String strCurrency = dc.currency();

  1088.         org.drip.analytics.date.JulianDate dtEffective = dtSpot.addBusDays (0, strCurrency);

  1089.         org.drip.product.definition.CreditDefaultSwap[] aCDS =
  1090.             org.drip.service.template.OTCInstrumentBuilder.CDS (dtEffective, astrMaturityTenor, adblCoupon,
  1091.                 strCurrency, strCredit);

  1092.         if (null == aCDS) return null;

  1093.         int iNumCDS = aCDS.length;
  1094.         java.lang.String[] astrMeasure = new java.lang.String[iNumCDS];

  1095.         if (0 == iNumCDS) return null;

  1096.         for (int i = 0; i < iNumCDS; ++i)
  1097.             astrMeasure[i] = strMeasure;

  1098.         return org.drip.state.creator.ScenarioCreditCurveBuilder.Custom (strCredit, dtEffective, aCDS, dc,
  1099.             adblQuote, astrMeasure, "CAD".equalsIgnoreCase (strCurrency) || "EUR".equalsIgnoreCase
  1100.                 (strCurrency) || "GBP".equalsIgnoreCase (strCurrency) || "HKD".equalsIgnoreCase (strCurrency)
  1101.                     || "USD".equalsIgnoreCase (strCurrency) ? 0.40 : 0.25, "QuotedSpread".equals
  1102.                         (strMeasure));
  1103.     }

  1104.     /**
  1105.      * Construct a Credit Curve from the specified Calibration CDS Instruments
  1106.      *
  1107.      * @param dtSpot Spot Date
  1108.      * @param aCDS Array of the Calibration CDS Instruments
  1109.      * @param adblQuote Array of Market Quotes
  1110.      * @param strMeasure Calibration Measure
  1111.      * @param dc Discount Curve
  1112.      *
  1113.      * @return The Credit Curve Instance
  1114.      */

  1115.     public static final org.drip.state.credit.CreditCurve CreditCurve (
  1116.         final org.drip.analytics.date.JulianDate dtSpot,
  1117.         final org.drip.product.definition.CreditDefaultSwap[] aCDS,
  1118.         final double[] adblQuote,
  1119.         final java.lang.String strMeasure,
  1120.         final org.drip.state.discount.MergedDiscountForwardCurve dc)
  1121.     {
  1122.         if (null == dtSpot || null == dc) return null;

  1123.         java.lang.String strCurrency = dc.currency();

  1124.         if (null == aCDS) return null;

  1125.         int iNumCDS = aCDS.length;
  1126.         java.lang.String[] astrMeasure = new java.lang.String[iNumCDS];

  1127.         if (0 == iNumCDS) return null;

  1128.         for (int i = 0; i < iNumCDS; ++i)
  1129.             astrMeasure[i] = strMeasure;

  1130.         return org.drip.state.creator.ScenarioCreditCurveBuilder.Custom
  1131.             (aCDS[0].creditLabel().referenceEntity(), dtSpot, aCDS, dc, adblQuote, astrMeasure,
  1132.                 "CAD".equalsIgnoreCase (strCurrency) || "EUR".equalsIgnoreCase (strCurrency) ||
  1133.                     "GBP".equalsIgnoreCase (strCurrency) || "HKD".equalsIgnoreCase (strCurrency) ||
  1134.                         "USD".equalsIgnoreCase (strCurrency) ? 0.40 : 0.25, "QuotedSpread".equals
  1135.                             (strMeasure));
  1136.     }

  1137.     /**
  1138.      * Construct a Govvie Curve from the Treasury Instruments
  1139.      *
  1140.      * @param strCode Treasury Code
  1141.      * @param dtSpot Spot Date
  1142.      * @param adtEffective Array of Effective Dates
  1143.      * @param adtMaturity Array of Maturity Dates
  1144.      * @param adblCoupon Array of Coupons
  1145.      * @param adblQuote Array of Market Quotes
  1146.      * @param strMeasure Calibration Measure
  1147.      * @param scbc Segment Custom Builder Control Parameters
  1148.      *
  1149.      * @return The Govvie Curve Instance
  1150.      */

  1151.     public static final org.drip.state.govvie.GovvieCurve GovvieCurve (
  1152.         final java.lang.String strCode,
  1153.         final org.drip.analytics.date.JulianDate dtSpot,
  1154.         final org.drip.analytics.date.JulianDate[] adtEffective,
  1155.         final org.drip.analytics.date.JulianDate[] adtMaturity,
  1156.         final double[] adblCoupon,
  1157.         final double[] adblQuote,
  1158.         final java.lang.String strMeasure,
  1159.         final org.drip.spline.params.SegmentCustomBuilderControl scbc)
  1160.     {
  1161.         org.drip.product.credit.BondComponent[] aTreasury =
  1162.             org.drip.service.template.TreasuryBuilder.FromCode (strCode, adtEffective, adtMaturity,
  1163.                 adblCoupon);

  1164.         if (null == aTreasury) return null;

  1165.         int iNumTreasury = aTreasury.length;
  1166.         int[] aiDate = new int[iNumTreasury];

  1167.         if (0 == iNumTreasury || adblQuote.length != iNumTreasury) return null;

  1168.         for (int i = 0; i < iNumTreasury; ++i)
  1169.             aiDate[i] = adtMaturity[i].julian();

  1170.         java.lang.String strCurrency = aTreasury[0].currency();

  1171.         java.lang.String strBenchmarkTreasuryCode =
  1172.             org.drip.market.issue.TreasurySettingContainer.CurrencyBenchmarkCode (strCurrency);

  1173.         return null == strBenchmarkTreasuryCode || strBenchmarkTreasuryCode.isEmpty() ? null :
  1174.             org.drip.state.creator.ScenarioGovvieCurveBuilder.CustomSplineCurve (strBenchmarkTreasuryCode,
  1175.                 dtSpot, strBenchmarkTreasuryCode, strCurrency, aiDate, adblQuote, scbc);
  1176.     }

  1177.     /**
  1178.      * Construct a Shape Preserving Govvie Curve from the Treasury Instruments
  1179.      *
  1180.      * @param strCode Treasury Code
  1181.      * @param dtSpot Spot Date
  1182.      * @param adtEffective Array of Effective Dates
  1183.      * @param adtMaturity Array of Maturity Dates
  1184.      * @param adblCoupon Array of Coupons
  1185.      * @param adblQuote Array of Market Quotes
  1186.      * @param strMeasure Calibration Measure
  1187.      *
  1188.      * @return The Govvie Curve Instance
  1189.      */

  1190.     public static final org.drip.state.govvie.GovvieCurve ShapePreservingGovvieCurve (
  1191.         final java.lang.String strCode,
  1192.         final org.drip.analytics.date.JulianDate dtSpot,
  1193.         final org.drip.analytics.date.JulianDate[] adtEffective,
  1194.         final org.drip.analytics.date.JulianDate[] adtMaturity,
  1195.         final double[] adblCoupon,
  1196.         final double[] adblQuote,
  1197.         final java.lang.String strMeasure)
  1198.     {
  1199.         try {
  1200.             return GovvieCurve (strCode, dtSpot, adtEffective, adtMaturity, adblCoupon, adblQuote,
  1201.                 strMeasure, new org.drip.spline.params.SegmentCustomBuilderControl
  1202.                     (org.drip.spline.stretch.MultiSegmentSequenceBuilder.BASIS_SPLINE_POLYNOMIAL, new
  1203.                         org.drip.spline.basis.PolynomialFunctionSetParams (2),
  1204.                             org.drip.spline.params.SegmentInelasticDesignControl.Create (0, 2), null, null));
  1205.         } catch (java.lang.Exception e) {
  1206.             e.printStackTrace();
  1207.         }

  1208.         return null;
  1209.     }

  1210.     /**
  1211.      * Construct a Smooth Govvie Curve from the Treasury Instruments
  1212.      *
  1213.      * @param strCode Treasury Code
  1214.      * @param dtSpot Spot Date
  1215.      * @param adtEffective Array of Effective Dates
  1216.      * @param adtMaturity Array of Maturity Dates
  1217.      * @param adblCoupon Array of Coupons
  1218.      * @param adblQuote Array of Market Quotes
  1219.      * @param strMeasure Calibration Measure
  1220.      *
  1221.      * @return The Govvie Curve Instance
  1222.      */

  1223.     public static final org.drip.state.govvie.GovvieCurve SmoothGovvieCurve (
  1224.         final java.lang.String strCode,
  1225.         final org.drip.analytics.date.JulianDate dtSpot,
  1226.         final org.drip.analytics.date.JulianDate[] adtEffective,
  1227.         final org.drip.analytics.date.JulianDate[] adtMaturity,
  1228.         final double[] adblCoupon,
  1229.         final double[] adblQuote,
  1230.         final java.lang.String strMeasure)
  1231.     {
  1232.         try {
  1233.             return GovvieCurve (strCode, dtSpot, adtEffective, adtMaturity, adblCoupon, adblQuote,
  1234.                 strMeasure, new org.drip.spline.params.SegmentCustomBuilderControl
  1235.                     (org.drip.spline.stretch.MultiSegmentSequenceBuilder.BASIS_SPLINE_POLYNOMIAL, new
  1236.                         org.drip.spline.basis.PolynomialFunctionSetParams (4),
  1237.                             org.drip.spline.params.SegmentInelasticDesignControl.Create (2, 2), null, null));
  1238.         } catch (java.lang.Exception e) {
  1239.             e.printStackTrace();
  1240.         }

  1241.         return null;
  1242.     }

  1243.     /**
  1244.      * Construct a Govvie Curve from the Treasury Instruments
  1245.      *
  1246.      * @param strCode Treasury Code
  1247.      * @param dtSpot Spot Date
  1248.      * @param adtEffective Array of Effective Dates
  1249.      * @param adtMaturity Array of Maturity Dates
  1250.      * @param adblCoupon Array of Coupons
  1251.      * @param adblQuote Array of Market Quotes
  1252.      * @param strMeasure Calibration Measure
  1253.      * @param iLatentStateType SHAPE PRESERVING/SMOOTH
  1254.      *
  1255.      * @return The Govvie Curve Instance
  1256.      */

  1257.     public static final org.drip.state.govvie.GovvieCurve GovvieCurve (
  1258.         final java.lang.String strCode,
  1259.         final org.drip.analytics.date.JulianDate dtSpot,
  1260.         final org.drip.analytics.date.JulianDate[] adtEffective,
  1261.         final org.drip.analytics.date.JulianDate[] adtMaturity,
  1262.         final double[] adblCoupon,
  1263.         final double[] adblQuote,
  1264.         final java.lang.String strMeasure,
  1265.         final int iLatentStateType)
  1266.     {
  1267.         if (SHAPE_PRESERVING == iLatentStateType)
  1268.             return ShapePreservingGovvieCurve (strCode, dtSpot, adtEffective, adtMaturity, adblCoupon,
  1269.                 adblQuote, strMeasure);

  1270.         if (SMOOTH == iLatentStateType)
  1271.             return SmoothGovvieCurve (strCode, dtSpot, adtEffective, adtMaturity, adblCoupon, adblQuote,
  1272.                 strMeasure);

  1273.         return null;
  1274.     }

  1275.     /**
  1276.      * Construct an FX Curve from the FX Forward Instruments
  1277.      *
  1278.      * @param dtSpot Spot Date
  1279.      * @param cp The FX Currency Pair
  1280.      * @param astrMaturityTenor Array of Maturity Tenors
  1281.      * @param adblQuote Array of FX Forwards
  1282.      * @param strMeasure Calibration Measure
  1283.      * @param dblFXSpot FX Spot
  1284.      * @param scbc Segment Custom Builder Builder Parameters
  1285.      *
  1286.      * @return The FX Curve Instance
  1287.      */

  1288.     public static final org.drip.state.fx.FXCurve FXCurve (
  1289.         final org.drip.analytics.date.JulianDate dtSpot,
  1290.         final org.drip.product.params.CurrencyPair cp,
  1291.         final java.lang.String[] astrMaturityTenor,
  1292.         final double[] adblQuote,
  1293.         final java.lang.String strMeasure,
  1294.         final double dblFXSpot,
  1295.         final org.drip.spline.params.SegmentCustomBuilderControl scbc)
  1296.     {
  1297.         if (null == dtSpot || null == cp) return null;

  1298.         org.drip.analytics.date.JulianDate dtEffective = dtSpot.addBusDays (0, cp.denomCcy());

  1299.         org.drip.product.fx.FXForwardComponent[] aFXFC =
  1300.             org.drip.service.template.OTCInstrumentBuilder.FXForward (dtEffective, cp, astrMaturityTenor);

  1301.         if (null == aFXFC) return null;

  1302.         int iNumFXFC = aFXFC.length;

  1303.         if (0 == iNumFXFC || adblQuote.length != iNumFXFC) return null;

  1304.         return org.drip.state.creator.ScenarioFXCurveBuilder.ShapePreservingFXCurve ( cp.code(), cp,
  1305.             org.drip.param.valuation.ValuationParams.Spot (dtEffective.julian()), null, null, null, aFXFC,
  1306.                 strMeasure, adblQuote, dblFXSpot, scbc);
  1307.     }

  1308.     /**
  1309.      * Construct a Shape Preserving FX Curve from the FX Forward Instruments
  1310.      *
  1311.      * @param dtSpot Spot Date
  1312.      * @param cp The FX Currency Pair
  1313.      * @param astrMaturityTenor Array of Maturity Tenors
  1314.      * @param adblQuote Array of FX Forwards
  1315.      * @param strMeasure Calibration Measure
  1316.      * @param dblFXSpot FX Spot
  1317.      *
  1318.      * @return The FX Curve Instance
  1319.      */

  1320.     public static final org.drip.state.fx.FXCurve ShapePreservingFXCurve (
  1321.         final org.drip.analytics.date.JulianDate dtSpot,
  1322.         final org.drip.product.params.CurrencyPair cp,
  1323.         final java.lang.String[] astrMaturityTenor,
  1324.         final double[] adblQuote,
  1325.         final java.lang.String strMeasure,
  1326.         final double dblFXSpot)
  1327.     {
  1328.         try {
  1329.             return FXCurve (dtSpot, cp, astrMaturityTenor, adblQuote, strMeasure, dblFXSpot, new
  1330.                 org.drip.spline.params.SegmentCustomBuilderControl
  1331.                     (org.drip.spline.stretch.MultiSegmentSequenceBuilder.BASIS_SPLINE_POLYNOMIAL, new
  1332.                         org.drip.spline.basis.PolynomialFunctionSetParams (2),
  1333.                             org.drip.spline.params.SegmentInelasticDesignControl.Create (0, 2), null, null));
  1334.         } catch (java.lang.Exception e) {
  1335.             e.printStackTrace();
  1336.         }

  1337.         return null;
  1338.     }

  1339.     /**
  1340.      * Construct a Smooth FX Curve from the FX Forward Instruments
  1341.      *
  1342.      * @param dtSpot Spot Date
  1343.      * @param cp The FX Currency Pair
  1344.      * @param astrMaturityTenor Array of Maturity Tenors
  1345.      * @param adblQuote Array of FX Forwards
  1346.      * @param strMeasure Calibration Measure
  1347.      * @param dblFXSpot FX Spot
  1348.      *
  1349.      * @return The FX Curve Instance
  1350.      */

  1351.     public static final org.drip.state.fx.FXCurve SmoothFXCurve (
  1352.         final org.drip.analytics.date.JulianDate dtSpot,
  1353.         final org.drip.product.params.CurrencyPair cp,
  1354.         final java.lang.String[] astrMaturityTenor,
  1355.         final double[] adblQuote,
  1356.         final java.lang.String strMeasure,
  1357.         final double dblFXSpot)
  1358.     {
  1359.         try {
  1360.             return FXCurve (dtSpot, cp, astrMaturityTenor, adblQuote, strMeasure, dblFXSpot, new
  1361.                 org.drip.spline.params.SegmentCustomBuilderControl
  1362.                     (org.drip.spline.stretch.MultiSegmentSequenceBuilder.BASIS_SPLINE_POLYNOMIAL, new
  1363.                         org.drip.spline.basis.PolynomialFunctionSetParams (4),
  1364.                             org.drip.spline.params.SegmentInelasticDesignControl.Create (2, 2), null, null));
  1365.         } catch (java.lang.Exception e) {
  1366.             e.printStackTrace();
  1367.         }

  1368.         return null;
  1369.     }

  1370.     /**
  1371.      * Construct an FX Curve from the FX Forward Instruments
  1372.      *
  1373.      * @param dtSpot Spot Date
  1374.      * @param cp The FX Currency Pair
  1375.      * @param astrMaturityTenor Array of Maturity Tenors
  1376.      * @param adblQuote Array of FX Forwards
  1377.      * @param strMeasure Calibration Measure
  1378.      * @param dblFXSpot FX Spot
  1379.      * @param iLatentStateType SHAPE PRESERVING/SMOOTH
  1380.      *
  1381.      * @return The FX Curve Instance
  1382.      */

  1383.     public static final org.drip.state.fx.FXCurve FXCurve (
  1384.         final org.drip.analytics.date.JulianDate dtSpot,
  1385.         final org.drip.product.params.CurrencyPair cp,
  1386.         final java.lang.String[] astrMaturityTenor,
  1387.         final double[] adblQuote,
  1388.         final java.lang.String strMeasure,
  1389.         final double dblFXSpot,
  1390.         final int iLatentStateType)
  1391.     {
  1392.         if (SHAPE_PRESERVING == iLatentStateType)
  1393.             return ShapePreservingFXCurve (dtSpot, cp, astrMaturityTenor, adblQuote, strMeasure, dblFXSpot);

  1394.         if (SMOOTH == iLatentStateType)
  1395.             return SmoothFXCurve (dtSpot, cp, astrMaturityTenor, adblQuote, strMeasure, dblFXSpot);

  1396.         return null;
  1397.     }

  1398.     /**
  1399.      * Forward Rate Volatility Latent State Construction from Cap/Floor Instruments
  1400.      *
  1401.      * @param dtSpot Spot Date
  1402.      * @param forwardLabel Forward Label
  1403.      * @param bIsCap TRUE - Create and Use Array of Caps
  1404.      * @param astrMaturityTenor Array of Cap/floor Maturities
  1405.      * @param adblStrike Array of Cap/Floor Strikes
  1406.      * @param adblQuote Array of Cap/Floor Quotes
  1407.      * @param strMeasure Calibration Measure
  1408.      * @param dc Discount Curve Instance
  1409.      * @param fc Forward Curve Instance
  1410.      *
  1411.      * @return Instance of the Forward Rate Volatility Curve
  1412.      */

  1413.     public static final org.drip.state.volatility.VolatilityCurve ForwardRateVolatilityCurve (
  1414.         final org.drip.analytics.date.JulianDate dtSpot,
  1415.         final org.drip.state.identifier.ForwardLabel forwardLabel,
  1416.         final boolean bIsCap,
  1417.         final java.lang.String[] astrMaturityTenor,
  1418.         final double[] adblStrike,
  1419.         final double[] adblQuote,
  1420.         final java.lang.String strMeasure,
  1421.         final org.drip.state.discount.MergedDiscountForwardCurve dc,
  1422.         final org.drip.state.forward.ForwardCurve fc)
  1423.     {
  1424.         if (null == dtSpot || null == astrMaturityTenor || null == dc) return null;

  1425.         org.drip.analytics.date.JulianDate dtEffective = dtSpot.addBusDays (0, dc.currency());

  1426.         int iNumComp = astrMaturityTenor.length;
  1427.         java.lang.String[] astrCalibMeasure = new java.lang.String[iNumComp];

  1428.         if (0 == iNumComp) return null;

  1429.         for (int i = 0; i < iNumComp; ++i)
  1430.             astrCalibMeasure[i] = strMeasure;

  1431.         return org.drip.state.creator.ScenarioLocalVolatilityBuilder.NonlinearBuild
  1432.             (forwardLabel.fullyQualifiedName() + "::VOL", dtEffective, forwardLabel,
  1433.                 org.drip.service.template.OTCInstrumentBuilder.CapFloor (dtEffective, forwardLabel,
  1434.                     astrMaturityTenor, adblStrike, bIsCap), adblQuote, astrCalibMeasure, dc, fc, null);
  1435.     }

  1436.     /**
  1437.      * Construct a Map of Tenor Bumped Funding Curve Based off of the Input Exchange/OTC Market Instruments
  1438.      *
  1439.      * @param dtSpot The Spot Date
  1440.      * @param strCurrency Currency
  1441.      * @param astrDepositMaturityTenor Array of Deposit Maturity Tenors
  1442.      * @param adblDepositQuote Array of Deposit Quotes
  1443.      * @param strDepositMeasure Deposit Calibration Measure
  1444.      * @param adblFuturesQuote Array of Futures Quotes
  1445.      * @param strFuturesMeasure Futures Calibration Measure
  1446.      * @param astrFixFloatMaturityTenor Array of Fix Float Swap Maturity Tenors
  1447.      * @param adblFixFloatQuote Array of Fix Float Swap Quotes
  1448.      * @param strFixFloatMeasure Fix Float Calibration Measure
  1449.      * @param iLatentStateType SHAPE_PRESERVING/SMOOTH
  1450.      * @param dblBump The Tenor Node Bump Amount
  1451.      * @param bIsProportional TRUE - The Bump Applied is Proportional
  1452.      *
  1453.      * @return The Tenor Bumped Funding Curve Map
  1454.      */

  1455.     public static final
  1456.         org.drip.analytics.support.CaseInsensitiveTreeMap<org.drip.state.discount.MergedDiscountForwardCurve>
  1457.             BumpedFundingCurve (
  1458.                 final org.drip.analytics.date.JulianDate dtSpot,
  1459.                 final java.lang.String strCurrency,
  1460.                 final java.lang.String[] astrDepositMaturityTenor,
  1461.                 final double[] adblDepositQuote,
  1462.                 final java.lang.String strDepositMeasure,
  1463.                 final double[] adblFuturesQuote,
  1464.                 final java.lang.String strFuturesMeasure,
  1465.                 final java.lang.String[] astrFixFloatMaturityTenor,
  1466.                 final double[] adblFixFloatQuote,
  1467.                 final java.lang.String strFixFloatMeasure,
  1468.                 final int iLatentStateType,
  1469.                 final double dblBump,
  1470.                 final boolean bIsProportional)
  1471.     {
  1472.         if (!org.drip.numerical.common.NumberUtil.IsValid (dblBump)) return null;

  1473.         org.drip.analytics.support.CaseInsensitiveTreeMap<org.drip.state.discount.MergedDiscountForwardCurve>
  1474.             mapBumpedCurve = new
  1475.                 org.drip.analytics.support.CaseInsensitiveTreeMap<org.drip.state.discount.MergedDiscountForwardCurve>();

  1476.         try {
  1477.             org.drip.param.definition.ManifestMeasureTweak mmtFLAT = new
  1478.                 org.drip.param.definition.ManifestMeasureTweak
  1479.                     (org.drip.param.definition.ManifestMeasureTweak.FLAT, bIsProportional, dblBump);

  1480.             if (null != adblDepositQuote) {
  1481.                 int iNumDeposit = adblDepositQuote.length;

  1482.                 for (int i = 0; i < iNumDeposit; ++i) {
  1483.                     org.drip.state.discount.MergedDiscountForwardCurve dcDepositQuoteBumped = FundingCurve
  1484.                         (dtSpot, strCurrency, astrDepositMaturityTenor,
  1485.                             org.drip.analytics.support.Helper.TweakManifestMeasure (adblDepositQuote, new
  1486.                                 org.drip.param.definition.ManifestMeasureTweak (i, bIsProportional,
  1487.                                     dblBump)), strDepositMeasure, adblFuturesQuote, strFuturesMeasure,
  1488.                                         astrFixFloatMaturityTenor, adblFixFloatQuote, strFixFloatMeasure,
  1489.                                             iLatentStateType);

  1490.                     if (null != dcDepositQuoteBumped)
  1491.                         mapBumpedCurve.put ("DEPOSIT::" + astrDepositMaturityTenor[i],
  1492.                             dcDepositQuoteBumped);
  1493.                 }
  1494.             }

  1495.             double[] adblDepositParallelBump = org.drip.analytics.support.Helper.TweakManifestMeasure
  1496.                 (adblDepositQuote, mmtFLAT);

  1497.             org.drip.state.discount.MergedDiscountForwardCurve dcDepositQuoteBumped = FundingCurve (dtSpot,
  1498.                 strCurrency, astrDepositMaturityTenor, adblDepositParallelBump, strDepositMeasure,
  1499.                     adblFuturesQuote, strFuturesMeasure, astrFixFloatMaturityTenor, adblFixFloatQuote,
  1500.                         strFixFloatMeasure, iLatentStateType);

  1501.             if (null != dcDepositQuoteBumped) mapBumpedCurve.put ("DEPOSIT::PLL", dcDepositQuoteBumped);

  1502.             if (null != adblFuturesQuote) {
  1503.                 int iNumFutures = adblFuturesQuote.length;

  1504.             for (int i = 0; i < iNumFutures; ++i) {
  1505.                 org.drip.state.discount.MergedDiscountForwardCurve dcFuturesQuoteBumped = FundingCurve
  1506.                     (dtSpot, strCurrency, astrDepositMaturityTenor, adblDepositQuote, strDepositMeasure,
  1507.                         org.drip.analytics.support.Helper.TweakManifestMeasure (adblFuturesQuote, new
  1508.                             org.drip.param.definition.ManifestMeasureTweak (i, bIsProportional, dblBump)),
  1509.                                 strFuturesMeasure, astrFixFloatMaturityTenor, adblFixFloatQuote,
  1510.                                     strFixFloatMeasure, iLatentStateType);

  1511.                 if (null != dcFuturesQuoteBumped) mapBumpedCurve.put ("FUTURES::" + i, dcFuturesQuoteBumped);
  1512.                 }
  1513.             }

  1514.             double[] adblFuturesParallelBump = org.drip.analytics.support.Helper.TweakManifestMeasure
  1515.                 (adblFuturesQuote, mmtFLAT);

  1516.             org.drip.state.discount.MergedDiscountForwardCurve dcFuturesQuoteBumped = FundingCurve (dtSpot,
  1517.                 strCurrency, astrDepositMaturityTenor, adblDepositQuote, strDepositMeasure,
  1518.                     adblFuturesParallelBump, strFuturesMeasure, astrFixFloatMaturityTenor, adblFixFloatQuote,
  1519.                         strFixFloatMeasure, iLatentStateType);

  1520.             if (null != dcFuturesQuoteBumped) mapBumpedCurve.put ("FUTURES::P", dcFuturesQuoteBumped);

  1521.             if (null != adblFixFloatQuote) {
  1522.                 int iNumFixFloat = adblFixFloatQuote.length;

  1523.                 for (int i = 0; i < iNumFixFloat; ++i) {
  1524.                     org.drip.state.discount.MergedDiscountForwardCurve dcFixFloatQuoteBumped = FundingCurve
  1525.                         (dtSpot, strCurrency, astrDepositMaturityTenor, adblDepositQuote, strDepositMeasure,
  1526.                             adblFuturesQuote, strFuturesMeasure, astrFixFloatMaturityTenor,
  1527.                                 org.drip.analytics.support.Helper.TweakManifestMeasure (adblFixFloatQuote,
  1528.                                     new org.drip.param.definition.ManifestMeasureTweak (i, bIsProportional,
  1529.                                         dblBump)), strFixFloatMeasure, iLatentStateType);

  1530.                     if (null != dcFixFloatQuoteBumped)
  1531.                         mapBumpedCurve.put ("FIXFLOAT::" + astrFixFloatMaturityTenor[i],
  1532.                             dcFixFloatQuoteBumped);
  1533.                 }

  1534.                 double[] adblFixFloatParallelBump = org.drip.analytics.support.Helper.TweakManifestMeasure
  1535.                     (adblFixFloatQuote, mmtFLAT);

  1536.                 org.drip.state.discount.MergedDiscountForwardCurve dcFixFloatQuoteBumped = FundingCurve
  1537.                     (dtSpot, strCurrency, astrDepositMaturityTenor, adblDepositQuote, strDepositMeasure,
  1538.                         adblFuturesQuote, strFuturesMeasure, astrFixFloatMaturityTenor,
  1539.                             adblFixFloatParallelBump, strFixFloatMeasure, iLatentStateType);

  1540.                 if (null != dcFixFloatQuoteBumped)
  1541.                     mapBumpedCurve.put ("FIXFLOAT::PLL", dcFixFloatQuoteBumped);

  1542.                 org.drip.state.discount.MergedDiscountForwardCurve dcFundingBase = FundingCurve (dtSpot,
  1543.                     strCurrency, astrDepositMaturityTenor, adblDepositQuote, strDepositMeasure,
  1544.                         adblFuturesQuote, strFuturesMeasure, astrFixFloatMaturityTenor, adblFixFloatQuote,
  1545.                             strFixFloatMeasure, iLatentStateType);

  1546.                 if (null != dcFundingBase) mapBumpedCurve.put ("BASE", dcFundingBase);

  1547.                 org.drip.state.discount.MergedDiscountForwardCurve dcFundingBumped = FundingCurve (dtSpot,
  1548.                     strCurrency, astrDepositMaturityTenor, adblDepositParallelBump, strDepositMeasure,
  1549.                         adblFuturesParallelBump, strFuturesMeasure, astrFixFloatMaturityTenor,
  1550.                             adblFixFloatParallelBump, strFixFloatMeasure, iLatentStateType);

  1551.                 if (null != dcFundingBumped) mapBumpedCurve.put ("BUMP", dcFundingBumped);
  1552.             }
  1553.         } catch (java.lang.Exception e) {
  1554.             e.printStackTrace();
  1555.         }

  1556.         return mapBumpedCurve;
  1557.     }

  1558.     /**
  1559.      * Construct a Map of Tenor Bumped Funding Curve Based off of the Underlying Forward Curve Shift
  1560.      *
  1561.      * @param dtSpot The Spot Date
  1562.      * @param strCurrency Currency
  1563.      * @param astrDepositMaturityTenor Array of Deposit Maturity Tenors
  1564.      * @param adblDepositQuote Array of Deposit Quotes
  1565.      * @param strDepositMeasure Deposit Calibration Measure
  1566.      * @param adblFuturesQuote Array of Futures Quotes
  1567.      * @param strFuturesMeasure Futures Calibration Measure
  1568.      * @param astrFixFloatMaturityTenor Array of Fix Float Swap Maturity Tenors
  1569.      * @param adblFixFloatQuote Array of Fix Float Swap Quotes
  1570.      * @param strFixFloatMeasure Fix Float Calibration Measure
  1571.      * @param iLatentStateType SHAPE_PRESERVING/SMOOTH
  1572.      * @param dblBump The Tenor Node Bump Amount
  1573.      * @param bIsProportional TRUE - The Bump Applied is Proportional
  1574.      *
  1575.      * @return The Tenor Bumped Funding Curve Map
  1576.      */

  1577.     public static final
  1578.         org.drip.analytics.support.CaseInsensitiveTreeMap<org.drip.state.discount.MergedDiscountForwardCurve>
  1579.             BumpedForwardFundingCurve (
  1580.                 final org.drip.analytics.date.JulianDate dtSpot,
  1581.                 final java.lang.String strCurrency,
  1582.                 final java.lang.String[] astrDepositMaturityTenor,
  1583.                 final double[] adblDepositQuote,
  1584.                 final java.lang.String strDepositMeasure,
  1585.                 final double[] adblFuturesQuote,
  1586.                 final java.lang.String strFuturesMeasure,
  1587.                 final java.lang.String[] astrFixFloatMaturityTenor,
  1588.                 final double[] adblFixFloatQuote,
  1589.                 final java.lang.String strFixFloatMeasure,
  1590.                 final int iLatentStateType,
  1591.                 final double dblBump,
  1592.                 final boolean bIsProportional)
  1593.     {
  1594.         if (!org.drip.numerical.common.NumberUtil.IsValid (dblBump)) return null;

  1595.         org.drip.analytics.support.CaseInsensitiveTreeMap<org.drip.state.discount.MergedDiscountForwardCurve>
  1596.             mapBumpedCurve = new
  1597.                 org.drip.analytics.support.CaseInsensitiveTreeMap<org.drip.state.discount.MergedDiscountForwardCurve>();

  1598.         org.drip.state.discount.MergedDiscountForwardCurve dcFundingBase = SingleStretchFundingCurve (dtSpot, strCurrency,
  1599.             astrDepositMaturityTenor, adblDepositQuote, strDepositMeasure, adblFuturesQuote,
  1600.                 strFuturesMeasure, astrFixFloatMaturityTenor, adblFixFloatQuote, strFixFloatMeasure,
  1601.                     iLatentStateType);

  1602.         if (null == dcFundingBase) return null;

  1603.         int iNumDeposit = null == astrDepositMaturityTenor ? 0 : astrDepositMaturityTenor.length;
  1604.         int iNumFixFloat = null == adblFixFloatQuote ? 0 : adblFixFloatQuote.length;
  1605.         int iNumFutures = null == adblFuturesQuote ? 0 : adblFuturesQuote.length;
  1606.         int iNumDepositFutures = iNumDeposit + iNumFutures;
  1607.         int iNumDepositFuturesFixFloat = iNumDepositFutures + iNumFixFloat;
  1608.         int[] aiDate = new int[iNumDepositFuturesFixFloat];

  1609.         org.drip.product.rates.SingleStreamComponent[] aSSC =
  1610.             org.drip.service.template.ExchangeInstrumentBuilder.ForwardRateFuturesPack (dtSpot, iNumFutures,
  1611.                 strCurrency);

  1612.         for (int i = 0; i < iNumDeposit; ++i)
  1613.             aiDate[i] = dtSpot.addTenor (astrDepositMaturityTenor[i]).julian();

  1614.         for (int i = iNumDeposit; i < iNumDepositFutures; ++i)
  1615.             aiDate[i] = aSSC[i - iNumDeposit].maturityDate().julian();

  1616.         for (int i = iNumDepositFutures; i < iNumDepositFuturesFixFloat; ++i)
  1617.             aiDate[i] = dtSpot.addTenor (astrFixFloatMaturityTenor[i - iNumDepositFutures]).julian();

  1618.         org.drip.state.nonlinear.FlatForwardDiscountCurve ffdc = dcFundingBase.flatNativeForward (aiDate,
  1619.             0.);

  1620.         if (null == ffdc) return null;

  1621.         mapBumpedCurve.put ("base", ffdc);

  1622.         org.drip.state.nonlinear.FlatForwardDiscountCurve ffdcBumped = dcFundingBase.flatNativeForward
  1623.             (aiDate, dblBump);

  1624.         if (null == ffdcBumped) return null;

  1625.         mapBumpedCurve.put ("bump", ffdcBumped);

  1626.         for (int i = 0; i < iNumDepositFuturesFixFloat; ++i) {
  1627.             org.drip.state.nonlinear.FlatForwardDiscountCurve ffdcTenorBumped =
  1628.                 dcFundingBase.flatNativeForwardEI (aiDate, i, dblBump);

  1629.             if (null == ffdcTenorBumped) return null;

  1630.             mapBumpedCurve.put ("tenor::" + i, ffdcTenorBumped);
  1631.         }

  1632.         return mapBumpedCurve;
  1633.     }

  1634.     /**
  1635.      * Construct a Map of Tenor Bumped Forward Curve Based off of the Input Exchange/OTC Market Instruments
  1636.      *
  1637.      * @param dtSpot Spot Date
  1638.      * @param forwardLabel Forward Label
  1639.      * @param astrDepositMaturityTenor Array of Deposit Maturity Tenors
  1640.      * @param adblDepositQuote Array of the Deposit Instrument Quotes
  1641.      * @param strDepositMeasure The Deposit Instrument Calibration Measure
  1642.      * @param astrFRAMaturityTenor Array of FRA Maturity Tenors
  1643.      * @param adblFRAQuote Array of the FRA Instrument Quotes
  1644.      * @param strFRAMeasure The FRA Instrument Calibration Measure
  1645.      * @param astrFixFloatMaturityTenor Array of Fix-Float Maturity Tenors
  1646.      * @param adblFixFloatQuote Array of the Fix-Float Quotes
  1647.      * @param strFixFloatMeasure The Fix-Float Calibration Measure
  1648.      * @param astrFloatFloatMaturityTenor Array of Float-Float Maturity Tenors
  1649.      * @param adblFloatFloatQuote Array of the Float-Float Quotes
  1650.      * @param strFloatFloatMeasure The Float-Float Calibration Measure
  1651.      * @param astrSyntheticFloatFloatMaturityTenor Array of Synthetic Float-Float Maturity Tenors
  1652.      * @param adblSyntheticFloatFloatQuote Array of the Synthetic Float-Float Quotes
  1653.      * @param strSyntheticFloatFloatMeasure The Synthetic Float-Float Calibration Measure
  1654.      * @param dc The Base Discount Curve
  1655.      * @param fcReference The Reference Forward Curve
  1656.      * @param iLatentStateType SHAPE_PRESERVING/SMOOTH
  1657.      * @param dblBump The Tenor Node Bump Amount
  1658.      * @param bIsProportional TRUE - The Bump Applied is Proportional
  1659.      *
  1660.      * @return The Tenor Bumped Forward Curve Map
  1661.      */

  1662.     public static final
  1663.         org.drip.analytics.support.CaseInsensitiveTreeMap<org.drip.state.forward.ForwardCurve>
  1664.             BumpedForwardCurve (
  1665.                 final org.drip.analytics.date.JulianDate dtSpot,
  1666.                 final org.drip.state.identifier.ForwardLabel forwardLabel,
  1667.                 final java.lang.String[] astrDepositMaturityTenor,
  1668.                 final double[] adblDepositQuote,
  1669.                 final java.lang.String strDepositMeasure,
  1670.                 final java.lang.String[] astrFRAMaturityTenor,
  1671.                 final double[] adblFRAQuote,
  1672.                 final java.lang.String strFRAMeasure,
  1673.                 final java.lang.String[] astrFixFloatMaturityTenor,
  1674.                 final double[] adblFixFloatQuote,
  1675.                 final java.lang.String strFixFloatMeasure,
  1676.                 final java.lang.String[] astrFloatFloatMaturityTenor,
  1677.                 final double[] adblFloatFloatQuote,
  1678.                 final java.lang.String strFloatFloatMeasure,
  1679.                 final java.lang.String[] astrSyntheticFloatFloatMaturityTenor,
  1680.                 final double[] adblSyntheticFloatFloatQuote,
  1681.                 final java.lang.String strSyntheticFloatFloatMeasure,
  1682.                 final org.drip.state.discount.MergedDiscountForwardCurve dc,
  1683.                 final org.drip.state.forward.ForwardCurve fcReference,
  1684.                 final int iLatentStateType,
  1685.                 final double dblBump,
  1686.                 final boolean bIsProportional)
  1687.     {
  1688.         if (!org.drip.numerical.common.NumberUtil.IsValid (dblBump)) return null;

  1689.         org.drip.analytics.support.CaseInsensitiveTreeMap<org.drip.state.forward.ForwardCurve>
  1690.             mapBumpedCurve = new
  1691.                 org.drip.analytics.support.CaseInsensitiveTreeMap<org.drip.state.forward.ForwardCurve>();

  1692.         try {
  1693.             org.drip.param.definition.ManifestMeasureTweak mmtFLAT = new
  1694.                 org.drip.param.definition.ManifestMeasureTweak
  1695.                     (org.drip.param.definition.ManifestMeasureTweak.FLAT, bIsProportional, dblBump);

  1696.             if (null != adblDepositQuote) {
  1697.                 int iNumDeposit = adblDepositQuote.length;

  1698.                 for (int i = 0; i < iNumDeposit; ++i) {
  1699.                     org.drip.state.forward.ForwardCurve fcDepositQuoteBumped = ForwardCurve (dtSpot,
  1700.                         forwardLabel, astrDepositMaturityTenor,
  1701.                             org.drip.analytics.support.Helper.TweakManifestMeasure (adblDepositQuote, new
  1702.                                 org.drip.param.definition.ManifestMeasureTweak (i, bIsProportional,
  1703.                                     dblBump)), strDepositMeasure, astrFRAMaturityTenor, adblFRAQuote,
  1704.                                         strFRAMeasure, astrFixFloatMaturityTenor, adblFixFloatQuote,
  1705.                                             strFixFloatMeasure, astrFloatFloatMaturityTenor,
  1706.                                                 adblFloatFloatQuote, strFloatFloatMeasure,
  1707.                                                     astrSyntheticFloatFloatMaturityTenor,
  1708.                                                         adblSyntheticFloatFloatQuote,
  1709.                                                             strSyntheticFloatFloatMeasure, dc, fcReference,
  1710.                                                                 iLatentStateType);

  1711.                     if (null != fcDepositQuoteBumped)
  1712.                         mapBumpedCurve.put ("DEPOSIT::" + astrDepositMaturityTenor[i],
  1713.                             fcDepositQuoteBumped);
  1714.                 }
  1715.             }

  1716.             double[] adblDepositParallelBump = org.drip.analytics.support.Helper.TweakManifestMeasure
  1717.                 (adblDepositQuote, mmtFLAT);

  1718.             org.drip.state.forward.ForwardCurve fcDepositQuoteBumped = ForwardCurve (dtSpot, forwardLabel,
  1719.                 astrDepositMaturityTenor, adblDepositParallelBump, strDepositMeasure, astrFRAMaturityTenor,
  1720.                     adblFRAQuote, strFRAMeasure, astrFixFloatMaturityTenor, adblFixFloatQuote,
  1721.                         strFixFloatMeasure, astrFloatFloatMaturityTenor, adblFloatFloatQuote,
  1722.                             strFloatFloatMeasure, astrSyntheticFloatFloatMaturityTenor,
  1723.                                 adblSyntheticFloatFloatQuote, strSyntheticFloatFloatMeasure, dc,
  1724.                                     fcReference, iLatentStateType);

  1725.             if (null != fcDepositQuoteBumped) mapBumpedCurve.put ("DEPOSIT::PLL", fcDepositQuoteBumped);

  1726.             if (null != adblFRAQuote) {
  1727.                 int iNumFRA = adblFRAQuote.length;

  1728.                 for (int i = 0; i < iNumFRA; ++i) {
  1729.                     org.drip.state.forward.ForwardCurve fcFRAQuoteBumped = ForwardCurve (dtSpot,
  1730.                         forwardLabel, astrDepositMaturityTenor, adblDepositQuote, strDepositMeasure,
  1731.                             astrFRAMaturityTenor, org.drip.analytics.support.Helper.TweakManifestMeasure
  1732.                                 (adblFRAQuote, new org.drip.param.definition.ManifestMeasureTweak (i,
  1733.                                     bIsProportional, dblBump)), strFRAMeasure, astrFixFloatMaturityTenor,
  1734.                                         adblFixFloatQuote, strFixFloatMeasure, astrFloatFloatMaturityTenor,
  1735.                                             adblFloatFloatQuote, strFloatFloatMeasure,
  1736.                                                 astrSyntheticFloatFloatMaturityTenor,
  1737.                                                     adblSyntheticFloatFloatQuote,
  1738.                                                         strSyntheticFloatFloatMeasure, dc, fcReference,
  1739.                                                             iLatentStateType);

  1740.                     if (null != fcFRAQuoteBumped)
  1741.                         mapBumpedCurve.put ("FRA::" + astrFRAMaturityTenor[i], fcFRAQuoteBumped);
  1742.                 }
  1743.             }

  1744.             double[] adblFRAParallelBump = org.drip.analytics.support.Helper.TweakManifestMeasure
  1745.                 (adblFRAQuote, mmtFLAT);

  1746.             org.drip.state.forward.ForwardCurve fcFRAQuoteBumped = ForwardCurve (dtSpot, forwardLabel,
  1747.                 astrDepositMaturityTenor, adblDepositQuote, strDepositMeasure, astrFRAMaturityTenor,
  1748.                     adblFRAParallelBump, strFRAMeasure, astrFixFloatMaturityTenor, adblFixFloatQuote,
  1749.                         strFixFloatMeasure, astrFloatFloatMaturityTenor, adblFloatFloatQuote,
  1750.                             strFloatFloatMeasure, astrSyntheticFloatFloatMaturityTenor,
  1751.                                 adblSyntheticFloatFloatQuote, strSyntheticFloatFloatMeasure, dc,
  1752.                                     fcReference, iLatentStateType);

  1753.             if (null != fcFRAQuoteBumped) mapBumpedCurve.put ("FRA::PLL", fcFRAQuoteBumped);

  1754.             if (null != adblFixFloatQuote) {
  1755.                 int iNumFixFloat = adblFixFloatQuote.length;

  1756.                 for (int i = 0; i < iNumFixFloat; ++i) {
  1757.                     org.drip.state.forward.ForwardCurve fcFixFloatQuoteBumped = ForwardCurve (dtSpot,
  1758.                         forwardLabel, astrDepositMaturityTenor, adblDepositQuote, strDepositMeasure,
  1759.                             astrFRAMaturityTenor, adblFRAQuote, strFRAMeasure, astrFixFloatMaturityTenor,
  1760.                                 org.drip.analytics.support.Helper.TweakManifestMeasure (adblFixFloatQuote,
  1761.                                     new org.drip.param.definition.ManifestMeasureTweak (i, bIsProportional,
  1762.                                         dblBump)), strFixFloatMeasure, astrFloatFloatMaturityTenor,
  1763.                                             adblFloatFloatQuote, strFloatFloatMeasure,
  1764.                                                 astrSyntheticFloatFloatMaturityTenor,
  1765.                                                     adblSyntheticFloatFloatQuote,
  1766.                                                         strSyntheticFloatFloatMeasure, dc, fcReference,
  1767.                                                             iLatentStateType);

  1768.                     if (null != fcFixFloatQuoteBumped)
  1769.                         mapBumpedCurve.put ("FIXFLOAT::" + astrFixFloatMaturityTenor[i],
  1770.                             fcFixFloatQuoteBumped);
  1771.                 }
  1772.             }

  1773.             double[] adblFixFloatParallelBump = org.drip.analytics.support.Helper.TweakManifestMeasure
  1774.                 (adblFixFloatQuote, mmtFLAT);

  1775.             org.drip.state.forward.ForwardCurve fcFixFloatQuoteBumped = ForwardCurve (dtSpot, forwardLabel,
  1776.                 astrDepositMaturityTenor, adblDepositQuote, strDepositMeasure, astrFRAMaturityTenor,
  1777.                     adblFRAQuote, strFRAMeasure, astrFixFloatMaturityTenor, adblFixFloatParallelBump,
  1778.                         strFixFloatMeasure, astrFloatFloatMaturityTenor, adblFloatFloatQuote,
  1779.                             strFloatFloatMeasure, astrSyntheticFloatFloatMaturityTenor,
  1780.                                 adblSyntheticFloatFloatQuote, strSyntheticFloatFloatMeasure, dc,
  1781.                                     fcReference, iLatentStateType);

  1782.             if (null != fcFixFloatQuoteBumped) mapBumpedCurve.put ("FIXFLOAT::PLL", fcFixFloatQuoteBumped);

  1783.             if (null != adblFloatFloatQuote) {
  1784.                 int iNumFloatFloat = adblFloatFloatQuote.length;

  1785.                 for (int i = 0; i < iNumFloatFloat; ++i) {
  1786.                     org.drip.state.forward.ForwardCurve fcFloatFloatQuoteBumped = ForwardCurve (dtSpot,
  1787.                         forwardLabel, astrDepositMaturityTenor, adblDepositQuote, strDepositMeasure,
  1788.                             astrFRAMaturityTenor, adblFRAQuote, strFRAMeasure, astrFixFloatMaturityTenor,
  1789.                                 adblFRAQuote, strFixFloatMeasure, astrFloatFloatMaturityTenor,
  1790.                                     org.drip.analytics.support.Helper.TweakManifestMeasure
  1791.                                         (adblFloatFloatQuote, new
  1792.                                             org.drip.param.definition.ManifestMeasureTweak (i,
  1793.                                                 bIsProportional, dblBump)), strFloatFloatMeasure,
  1794.                                                     astrSyntheticFloatFloatMaturityTenor,
  1795.                                                         adblSyntheticFloatFloatQuote,
  1796.                                                             strSyntheticFloatFloatMeasure, dc, fcReference,
  1797.                                                                 iLatentStateType);

  1798.                     if (null != fcFloatFloatQuoteBumped)
  1799.                         mapBumpedCurve.put ("FLOATFLOAT::" + astrFloatFloatMaturityTenor[i],
  1800.                             fcFloatFloatQuoteBumped);
  1801.                 }
  1802.             }

  1803.             double[] adblFloatFloatParallelBump = org.drip.analytics.support.Helper.TweakManifestMeasure
  1804.                 (adblFloatFloatQuote, mmtFLAT);

  1805.             org.drip.state.forward.ForwardCurve fcFloatFloatQuoteBumped = ForwardCurve (dtSpot, forwardLabel,
  1806.                 astrDepositMaturityTenor, adblDepositQuote, strDepositMeasure, astrFRAMaturityTenor,
  1807.                     adblFRAQuote, strFRAMeasure, astrFixFloatMaturityTenor, adblFixFloatQuote,
  1808.                         strFixFloatMeasure, astrFloatFloatMaturityTenor, adblFloatFloatParallelBump,
  1809.                             strFloatFloatMeasure, astrSyntheticFloatFloatMaturityTenor,
  1810.                                 adblSyntheticFloatFloatQuote, strSyntheticFloatFloatMeasure, dc,
  1811.                                     fcReference, iLatentStateType);

  1812.             if (null != fcFloatFloatQuoteBumped)
  1813.                 mapBumpedCurve.put ("FLOATFLOAT::PLL", fcFloatFloatQuoteBumped);

  1814.             if (null != adblSyntheticFloatFloatQuote) {
  1815.                 int iNumSyntheticFloatFloat = adblSyntheticFloatFloatQuote.length;

  1816.                 for (int i = 0; i < iNumSyntheticFloatFloat; ++i) {
  1817.                     org.drip.state.forward.ForwardCurve fcSyntheticFloatFloatQuoteBumped = ForwardCurve
  1818.                         (dtSpot, forwardLabel, astrDepositMaturityTenor, adblDepositQuote, strDepositMeasure,
  1819.                             astrFRAMaturityTenor, adblFRAQuote, strFRAMeasure, astrFixFloatMaturityTenor,
  1820.                                 adblFixFloatQuote, strFixFloatMeasure, astrFloatFloatMaturityTenor,
  1821.                                     adblFloatFloatQuote, strFloatFloatMeasure,
  1822.                                         astrSyntheticFloatFloatMaturityTenor,
  1823.                                             org.drip.analytics.support.Helper.TweakManifestMeasure
  1824.                                                 (adblSyntheticFloatFloatQuote, new
  1825.                                                     org.drip.param.definition.ManifestMeasureTweak (i,
  1826.                                                         bIsProportional, dblBump)),
  1827.                                                             strSyntheticFloatFloatMeasure, dc, fcReference,
  1828.                                                                 iLatentStateType);

  1829.                     if (null != fcSyntheticFloatFloatQuoteBumped)
  1830.                         mapBumpedCurve.put ("SYNTHETICFLOATFLOAT::" +
  1831.                             astrSyntheticFloatFloatMaturityTenor[i], fcSyntheticFloatFloatQuoteBumped);
  1832.                 }
  1833.             }

  1834.             double[] adblSyntheticFloatFloatParallelBump =
  1835.                 org.drip.analytics.support.Helper.TweakManifestMeasure (adblSyntheticFloatFloatQuote,
  1836.                     mmtFLAT);

  1837.             org.drip.state.forward.ForwardCurve fcSyntheticFloatFloatQuoteBumped = ForwardCurve (dtSpot,
  1838.                 forwardLabel, astrDepositMaturityTenor, adblDepositQuote, strDepositMeasure,
  1839.                     astrFRAMaturityTenor, adblFRAQuote, strFRAMeasure, astrFixFloatMaturityTenor,
  1840.                         adblFixFloatQuote, strFixFloatMeasure, astrFloatFloatMaturityTenor,
  1841.                             adblFloatFloatQuote, strFloatFloatMeasure, astrSyntheticFloatFloatMaturityTenor,
  1842.                                 adblSyntheticFloatFloatParallelBump, strSyntheticFloatFloatMeasure, dc,
  1843.                                     fcReference, iLatentStateType);

  1844.             if (null != fcSyntheticFloatFloatQuoteBumped)
  1845.                 mapBumpedCurve.put ("SYNTHETICFLOATFLOAT::PLL", fcSyntheticFloatFloatQuoteBumped);

  1846.             org.drip.state.forward.ForwardCurve fcQuoteBase = ForwardCurve (dtSpot, forwardLabel,
  1847.                 astrDepositMaturityTenor, adblDepositQuote, strDepositMeasure, astrFRAMaturityTenor,
  1848.                     adblFRAQuote, strFRAMeasure, astrFixFloatMaturityTenor, adblFixFloatQuote,
  1849.                         strFixFloatMeasure, astrFloatFloatMaturityTenor, adblFloatFloatQuote,
  1850.                             strFloatFloatMeasure, astrSyntheticFloatFloatMaturityTenor,
  1851.                                 adblSyntheticFloatFloatQuote, strSyntheticFloatFloatMeasure, dc,
  1852.                                     fcReference, iLatentStateType);

  1853.             if (null != fcQuoteBase) mapBumpedCurve.put ("BASE", fcQuoteBase);

  1854.             org.drip.state.forward.ForwardCurve fcQuoteBump = ForwardCurve (dtSpot, forwardLabel,
  1855.                 astrDepositMaturityTenor, adblDepositParallelBump, strDepositMeasure, astrFRAMaturityTenor,
  1856.                     adblFRAParallelBump, strFRAMeasure, astrFixFloatMaturityTenor, adblFixFloatParallelBump,
  1857.                         strFixFloatMeasure, astrFloatFloatMaturityTenor, adblFloatFloatParallelBump,
  1858.                             strFloatFloatMeasure, astrSyntheticFloatFloatMaturityTenor,
  1859.                                 adblSyntheticFloatFloatParallelBump, strSyntheticFloatFloatMeasure, dc,
  1860.                                     fcReference, iLatentStateType);

  1861.             if (null != fcQuoteBump) mapBumpedCurve.put ("BUMP", fcQuoteBump);
  1862.         } catch (java.lang.Exception e) {
  1863.             e.printStackTrace();
  1864.         }

  1865.         return mapBumpedCurve;
  1866.     }

  1867.     /**
  1868.      * Construct a Map of Tenor + Parallel Bumped Overnight Curves
  1869.      *
  1870.      * @param dtSpot Spot Date
  1871.      * @param strCurrency Currency
  1872.      * @param astrDepositMaturityTenor Array of Deposit Maturity Tenors
  1873.      * @param adblDepositQuote Array of Deposit Quotes
  1874.      * @param strDepositMeasure Deposit Measure
  1875.      * @param astrShortEndOISMaturityTenor Array of Short End OIS Maturity Tenors
  1876.      * @param adblShortEndOISQuote Array of Short End OIS Quotes
  1877.      * @param strShortEndOISMeasure Short End OIS Measure
  1878.      * @param astrOISFuturesEffectiveTenor Array of OIS Futures Effective Tenors
  1879.      * @param astrOISFuturesMaturityTenor Array of OIS Futures Maturity Tenors
  1880.      * @param adblOISFuturesQuote Array of OIS Futures Quotes
  1881.      * @param strOISFuturesMeasure OIS Futures Measure
  1882.      * @param astrLongEndOISMaturityTenor Array of Long End OIS Maturity Tenors
  1883.      * @param adblLongEndOISQuote Array of Long End OIS Quotes
  1884.      * @param strLongEndOISMeasure Long End OIS Measure
  1885.      * @param iLatentStateType SHAPE PRESERVING/SMOOTH
  1886.      * @param dblBump The Tenor Node Bump Amount
  1887.      * @param bIsProportional TRUE - The Bump Applied is Proportional
  1888.      *
  1889.      * @return Map of Overnight Curves
  1890.      */

  1891.     public static final
  1892.         org.drip.analytics.support.CaseInsensitiveTreeMap<org.drip.state.discount.MergedDiscountForwardCurve>
  1893.             BumpedOvernightCurve (
  1894.         final org.drip.analytics.date.JulianDate dtSpot,
  1895.         final String strCurrency,
  1896.         final java.lang.String[] astrDepositMaturityTenor,
  1897.         final double[] adblDepositQuote,
  1898.         final java.lang.String strDepositMeasure,
  1899.         final java.lang.String[] astrShortEndOISMaturityTenor,
  1900.         final double[] adblShortEndOISQuote,
  1901.         final java.lang.String strShortEndOISMeasure,
  1902.         final java.lang.String[] astrOISFuturesEffectiveTenor,
  1903.         final java.lang.String[] astrOISFuturesMaturityTenor,
  1904.         final double[] adblOISFuturesQuote,
  1905.         final java.lang.String strOISFuturesMeasure,
  1906.         final java.lang.String[] astrLongEndOISMaturityTenor,
  1907.         final double[] adblLongEndOISQuote,
  1908.         final java.lang.String strLongEndOISMeasure,
  1909.         final int iLatentStateType,
  1910.         final double dblBump,
  1911.         final boolean bIsProportional)
  1912.     {
  1913.         if (!org.drip.numerical.common.NumberUtil.IsValid (dblBump)) return null;

  1914.         org.drip.analytics.support.CaseInsensitiveTreeMap<org.drip.state.discount.MergedDiscountForwardCurve>
  1915.             mapBumpedCurve = new
  1916.                 org.drip.analytics.support.CaseInsensitiveTreeMap<org.drip.state.discount.MergedDiscountForwardCurve>();

  1917.         try {
  1918.             org.drip.param.definition.ManifestMeasureTweak mmtFLAT = new
  1919.                 org.drip.param.definition.ManifestMeasureTweak
  1920.                     (org.drip.param.definition.ManifestMeasureTweak.FLAT, bIsProportional, dblBump);

  1921.             if (null != adblDepositQuote) {
  1922.                 int iNumDeposit = adblDepositQuote.length;

  1923.                 for (int i = 0; i < iNumDeposit; ++i) {
  1924.                     org.drip.state.discount.MergedDiscountForwardCurve dcOvernightDepositBumped =
  1925.                         OvernightCurve (dtSpot, strCurrency, astrDepositMaturityTenor,
  1926.                             org.drip.analytics.support.Helper.TweakManifestMeasure (adblDepositQuote, new
  1927.                                 org.drip.param.definition.ManifestMeasureTweak (i, bIsProportional,
  1928.                                     dblBump)), strDepositMeasure, astrShortEndOISMaturityTenor,
  1929.                                         adblShortEndOISQuote, strShortEndOISMeasure,
  1930.                                             astrOISFuturesEffectiveTenor, astrOISFuturesMaturityTenor,
  1931.                                                 adblOISFuturesQuote, strOISFuturesMeasure,
  1932.                                                     astrLongEndOISMaturityTenor, adblLongEndOISQuote,
  1933.                                                         strLongEndOISMeasure, iLatentStateType);

  1934.                     if (null != dcOvernightDepositBumped)
  1935.                         mapBumpedCurve.put ("DEPOSIT::" + astrDepositMaturityTenor[i],
  1936.                             dcOvernightDepositBumped);
  1937.                 }
  1938.             }

  1939.             double[] adblDepositParallelBump = org.drip.analytics.support.Helper.TweakManifestMeasure
  1940.                 (adblDepositQuote, mmtFLAT);

  1941.             org.drip.state.discount.MergedDiscountForwardCurve dcOvernightDepositBumped = OvernightCurve
  1942.                 (dtSpot, strCurrency, astrDepositMaturityTenor, adblDepositParallelBump, strDepositMeasure,
  1943.                     astrShortEndOISMaturityTenor, adblShortEndOISQuote, strShortEndOISMeasure,
  1944.                         astrOISFuturesEffectiveTenor, astrOISFuturesMaturityTenor, adblOISFuturesQuote,
  1945.                             strOISFuturesMeasure, astrLongEndOISMaturityTenor, adblLongEndOISQuote,
  1946.                                 strLongEndOISMeasure, iLatentStateType);

  1947.             if (null != dcOvernightDepositBumped)
  1948.                 mapBumpedCurve.put ("DEPOSIT::PLL", dcOvernightDepositBumped);

  1949.             if (null != adblShortEndOISQuote) {
  1950.                 int iNumShortEndOIS = adblShortEndOISQuote.length;

  1951.                 for (int i = 0; i < iNumShortEndOIS; ++i) {
  1952.                     org.drip.state.discount.MergedDiscountForwardCurve dcOvernightShortEndOISBumped =
  1953.                         OvernightCurve (dtSpot, strCurrency, astrDepositMaturityTenor, adblDepositQuote,
  1954.                             strDepositMeasure, astrShortEndOISMaturityTenor,
  1955.                                 org.drip.analytics.support.Helper.TweakManifestMeasure (adblShortEndOISQuote,
  1956.                                     new org.drip.param.definition.ManifestMeasureTweak (i, bIsProportional,
  1957.                                         dblBump)), strShortEndOISMeasure, astrOISFuturesEffectiveTenor,
  1958.                                             astrOISFuturesMaturityTenor, adblOISFuturesQuote,
  1959.                                                 strOISFuturesMeasure, astrLongEndOISMaturityTenor,
  1960.                                                     adblLongEndOISQuote, strLongEndOISMeasure,
  1961.                                                         iLatentStateType);

  1962.                     if (null != dcOvernightShortEndOISBumped)
  1963.                         mapBumpedCurve.put ("SHORTENDOIS::" + astrShortEndOISMaturityTenor[i],
  1964.                             dcOvernightShortEndOISBumped);
  1965.                 }
  1966.             }

  1967.             double[] adblShortEndOISParallelBump = org.drip.analytics.support.Helper.TweakManifestMeasure
  1968.                 (adblShortEndOISQuote, mmtFLAT);

  1969.             org.drip.state.discount.MergedDiscountForwardCurve dcOvernightShortEndOISBumped = OvernightCurve
  1970.                 (dtSpot, strCurrency, astrDepositMaturityTenor, adblDepositQuote, strDepositMeasure,
  1971.                     astrShortEndOISMaturityTenor, adblShortEndOISParallelBump, strShortEndOISMeasure,
  1972.                         astrOISFuturesEffectiveTenor, astrOISFuturesMaturityTenor,
  1973.                             adblOISFuturesQuote, strOISFuturesMeasure, astrLongEndOISMaturityTenor,
  1974.                                 adblLongEndOISQuote, strLongEndOISMeasure, iLatentStateType);

  1975.             if (null != dcOvernightShortEndOISBumped)
  1976.                 mapBumpedCurve.put ("SHORTENDOIS::PLL", dcOvernightShortEndOISBumped);

  1977.             if (null != adblOISFuturesQuote) {
  1978.                 int iNumOISFutures = adblOISFuturesQuote.length;

  1979.                 for (int i = 0; i < iNumOISFutures; ++i) {
  1980.                     org.drip.state.discount.MergedDiscountForwardCurve dcOvernightOISFuturesBumped =
  1981.                         OvernightCurve (dtSpot, strCurrency, astrDepositMaturityTenor, adblDepositQuote,
  1982.                             strDepositMeasure, astrShortEndOISMaturityTenor, adblShortEndOISQuote,
  1983.                                 strShortEndOISMeasure, astrOISFuturesEffectiveTenor,
  1984.                                     astrOISFuturesMaturityTenor,
  1985.                                         org.drip.analytics.support.Helper.TweakManifestMeasure
  1986.                                             (adblOISFuturesQuote, new
  1987.                                                 org.drip.param.definition.ManifestMeasureTweak (i,
  1988.                                                     bIsProportional, dblBump)), strOISFuturesMeasure,
  1989.                                                         astrLongEndOISMaturityTenor, adblLongEndOISQuote,
  1990.                                                             strLongEndOISMeasure, iLatentStateType);

  1991.                     if (null != dcOvernightOISFuturesBumped)
  1992.                         mapBumpedCurve.put ("OISFUTURES::" + astrOISFuturesEffectiveTenor[i] + " x " +
  1993.                             astrOISFuturesMaturityTenor[i], dcOvernightOISFuturesBumped);
  1994.                 }
  1995.             }

  1996.             double[] adblOISFuturesParallelBump = org.drip.analytics.support.Helper.TweakManifestMeasure
  1997.                 (adblOISFuturesQuote, mmtFLAT);

  1998.             org.drip.state.discount.MergedDiscountForwardCurve dcOvernightOISFuturesBumped = OvernightCurve
  1999.                 (dtSpot, strCurrency, astrDepositMaturityTenor, adblDepositQuote, strDepositMeasure,
  2000.                     astrShortEndOISMaturityTenor, adblShortEndOISQuote, strShortEndOISMeasure,
  2001.                         astrOISFuturesEffectiveTenor, astrOISFuturesMaturityTenor,
  2002.                             adblOISFuturesParallelBump, strOISFuturesMeasure, astrLongEndOISMaturityTenor,
  2003.                                 adblLongEndOISQuote, strLongEndOISMeasure, iLatentStateType);

  2004.             if (null != dcOvernightOISFuturesBumped)
  2005.                 mapBumpedCurve.put ("OISFUTURES::PARALLEL", dcOvernightOISFuturesBumped);

  2006.             if (null != adblLongEndOISQuote) {
  2007.                 int iNumLongEndOIS = adblLongEndOISQuote.length;

  2008.                 for (int i = 0; i < iNumLongEndOIS; ++i) {
  2009.                     org.drip.state.discount.MergedDiscountForwardCurve dcOvernightLongEndOISBumped =
  2010.                         OvernightCurve (dtSpot, strCurrency, astrDepositMaturityTenor, adblDepositQuote,
  2011.                             strDepositMeasure, astrShortEndOISMaturityTenor, adblShortEndOISQuote,
  2012.                                 strShortEndOISMeasure, astrOISFuturesEffectiveTenor,
  2013.                                     astrOISFuturesMaturityTenor, adblOISFuturesQuote, strOISFuturesMeasure,
  2014.                                         astrLongEndOISMaturityTenor,
  2015.                                             org.drip.analytics.support.Helper.TweakManifestMeasure
  2016.                                                 (adblLongEndOISQuote, new
  2017.                                                     org.drip.param.definition.ManifestMeasureTweak (i,
  2018.                                                         bIsProportional, dblBump)), strLongEndOISMeasure,
  2019.                                                             iLatentStateType);

  2020.                     if (null != dcOvernightLongEndOISBumped)
  2021.                         mapBumpedCurve.put ("LONGENDOIS::" + astrLongEndOISMaturityTenor[i],
  2022.                             dcOvernightLongEndOISBumped);
  2023.                 }
  2024.             }

  2025.             double[] adblLongEndOISParallelBump = org.drip.analytics.support.Helper.TweakManifestMeasure
  2026.                 (adblLongEndOISQuote, mmtFLAT);

  2027.             org.drip.state.discount.MergedDiscountForwardCurve dcOvernightLongEndOISBumped = OvernightCurve
  2028.                 (dtSpot, strCurrency, astrDepositMaturityTenor, adblDepositQuote, strDepositMeasure,
  2029.                     astrShortEndOISMaturityTenor, adblShortEndOISQuote, strShortEndOISMeasure,
  2030.                         astrOISFuturesEffectiveTenor, astrOISFuturesMaturityTenor, adblOISFuturesQuote,
  2031.                             strOISFuturesMeasure, astrLongEndOISMaturityTenor, adblLongEndOISParallelBump,
  2032.                                 strLongEndOISMeasure, iLatentStateType);

  2033.             if (null != dcOvernightLongEndOISBumped)
  2034.                 mapBumpedCurve.put ("LONGENDOIS::PLL", dcOvernightLongEndOISBumped);

  2035.             org.drip.state.discount.MergedDiscountForwardCurve dcOvernightBase = OvernightCurve (dtSpot,
  2036.                 strCurrency, astrDepositMaturityTenor, adblDepositQuote, strDepositMeasure,
  2037.                     astrShortEndOISMaturityTenor, adblShortEndOISQuote, strShortEndOISMeasure,
  2038.                         astrOISFuturesEffectiveTenor, astrOISFuturesMaturityTenor, adblOISFuturesQuote,
  2039.                             strOISFuturesMeasure, astrLongEndOISMaturityTenor, adblLongEndOISQuote,
  2040.                                 strLongEndOISMeasure, iLatentStateType);

  2041.             if (null != dcOvernightBase) mapBumpedCurve.put ("BASE", dcOvernightBase);

  2042.             org.drip.state.discount.MergedDiscountForwardCurve dcOvernightBump = OvernightCurve (dtSpot,
  2043.                 strCurrency, astrDepositMaturityTenor, adblDepositParallelBump, strDepositMeasure,
  2044.                     astrShortEndOISMaturityTenor, adblShortEndOISParallelBump, strShortEndOISMeasure,
  2045.                         astrOISFuturesEffectiveTenor, astrOISFuturesMaturityTenor,
  2046.                             adblOISFuturesParallelBump, strOISFuturesMeasure, astrLongEndOISMaturityTenor,
  2047.                                 adblLongEndOISParallelBump, strLongEndOISMeasure, iLatentStateType);

  2048.             if (null != dcOvernightBump) mapBumpedCurve.put ("BUMP", dcOvernightBump);
  2049.         } catch (java.lang.Exception e) {
  2050.             e.printStackTrace();

  2051.             return null;
  2052.         }

  2053.         return mapBumpedCurve;
  2054.     }

  2055.     /**
  2056.      * Construct a Tenor + Parallel Map of Bumped Credit Curves from Overnight Exchange/OTC Market Instruments
  2057.      *
  2058.      * @param dtSpot Spot Date
  2059.      * @param strCredit Credit Curve
  2060.      * @param astrMaturityTenor Maturity Tenor
  2061.      * @param adblCoupon Coupon Array
  2062.      * @param adblQuote Array of Market Quotes
  2063.      * @param strMeasure Calibration Measure
  2064.      * @param dc Discount Curve
  2065.      * @param dblBump The Tenor Node Bump Amount
  2066.      * @param bIsProportional TRUE - The Bump Applied is Proportional
  2067.      *
  2068.      * @return Map of Bumped Credit Curves
  2069.      */

  2070.     public static final org.drip.analytics.support.CaseInsensitiveTreeMap<org.drip.state.credit.CreditCurve>
  2071.         BumpedCreditCurve (
  2072.             final org.drip.analytics.date.JulianDate dtSpot,
  2073.             final java.lang.String strCredit,
  2074.             final java.lang.String[] astrMaturityTenor,
  2075.             final double[] adblCoupon,
  2076.             final double[] adblQuote,
  2077.             final java.lang.String strMeasure,
  2078.             final org.drip.state.discount.MergedDiscountForwardCurve dc,
  2079.             final double dblBump,
  2080.             final boolean bIsProportional)
  2081.     {
  2082.         if (!org.drip.numerical.common.NumberUtil.IsValid (dblBump)) return null;

  2083.         org.drip.analytics.support.CaseInsensitiveTreeMap<org.drip.state.credit.CreditCurve> mapBumpedCurve =
  2084.             new org.drip.analytics.support.CaseInsensitiveTreeMap<org.drip.state.credit.CreditCurve>();

  2085.         if (null != adblQuote) {
  2086.             int iNumComp = adblQuote.length;

  2087.             for (int i = 0; i < iNumComp; ++i) {
  2088.                 try {
  2089.                     org.drip.state.credit.CreditCurve ccBumped = CreditCurve (dtSpot, strCredit,
  2090.                         astrMaturityTenor, adblCoupon, org.drip.analytics.support.Helper.TweakManifestMeasure
  2091.                             (adblQuote, new org.drip.param.definition.ManifestMeasureTweak (i,
  2092.                                 bIsProportional, dblBump)), strMeasure, dc);

  2093.                     if (null != ccBumped) mapBumpedCurve.put ("CDS::" + astrMaturityTenor[i], ccBumped);
  2094.                 } catch (java.lang.Exception e) {
  2095.                     e.printStackTrace();
  2096.                 }
  2097.             }
  2098.         }

  2099.         try {
  2100.             org.drip.state.credit.CreditCurve ccBase = CreditCurve (dtSpot, strCredit, astrMaturityTenor,
  2101.                 adblCoupon, adblQuote, strMeasure, dc);

  2102.             if (null != ccBase) mapBumpedCurve.put ("BASE", ccBase);

  2103.             org.drip.state.credit.CreditCurve ccBumped = CreditCurve (dtSpot, strCredit, astrMaturityTenor,
  2104.                 adblCoupon, org.drip.analytics.support.Helper.TweakManifestMeasure (adblQuote, new
  2105.                     org.drip.param.definition.ManifestMeasureTweak
  2106.                         (org.drip.param.definition.ManifestMeasureTweak.FLAT, bIsProportional, dblBump)),
  2107.                             strMeasure, dc);

  2108.             if (null != ccBumped) mapBumpedCurve.put ("BUMP", ccBumped);
  2109.         } catch (java.lang.Exception e) {
  2110.             e.printStackTrace();
  2111.         }

  2112.         return mapBumpedCurve;
  2113.     }

  2114.     /**
  2115.      * Construct a Tenor + Parallel Map of Govvie Curves from the Treasury Instruments
  2116.      *
  2117.      * @param strCode The Govvie Code
  2118.      * @param dtSpot Spot Date
  2119.      * @param adtEffective Array of Effective Dates
  2120.      * @param adtMaturity Array of Maturity Dates
  2121.      * @param adblCoupon Array of Coupons
  2122.      * @param adblQuote Array of Market Quotes
  2123.      * @param strMeasure Calibration Measure
  2124.      * @param iLatentStateType SHAPE PRESERVING/SMOOTH
  2125.      * @param dblBump The Tenor Node Bump Amount
  2126.      * @param bIsProportional TRUE - The Bump Applied is Proportional
  2127.      *
  2128.      * @return Map of Govvie Curve Instance
  2129.      */

  2130.     public static final org.drip.analytics.support.CaseInsensitiveTreeMap<org.drip.state.govvie.GovvieCurve>
  2131.         BumpedGovvieCurve (
  2132.             final java.lang.String strCode,
  2133.             final org.drip.analytics.date.JulianDate dtSpot,
  2134.             final org.drip.analytics.date.JulianDate[] adtEffective,
  2135.             final org.drip.analytics.date.JulianDate[] adtMaturity,
  2136.             final double[] adblCoupon,
  2137.             final double[] adblQuote,
  2138.             final java.lang.String strMeasure,
  2139.             final int iLatentStateType,
  2140.             final double dblBump,
  2141.             final boolean bIsProportional)
  2142.     {
  2143.         if (!org.drip.numerical.common.NumberUtil.IsValid (dblBump)) return null;

  2144.         org.drip.analytics.support.CaseInsensitiveTreeMap<org.drip.state.govvie.GovvieCurve> mapBumpedCurve =
  2145.             new org.drip.analytics.support.CaseInsensitiveTreeMap<org.drip.state.govvie.GovvieCurve>();

  2146.         if (null != adblQuote) {
  2147.             int iNumComp = adblQuote.length;

  2148.             for (int i = 0; i < iNumComp; ++i) {
  2149.                 try {
  2150.                     org.drip.state.govvie.GovvieCurve gcBumped = GovvieCurve (strCode, dtSpot, adtEffective,
  2151.                         adtMaturity, adblCoupon, org.drip.analytics.support.Helper.TweakManifestMeasure
  2152.                             (adblQuote, new org.drip.param.definition.ManifestMeasureTweak (i,
  2153.                                 bIsProportional, dblBump)), strMeasure, iLatentStateType);

  2154.                     if (null != gcBumped) mapBumpedCurve.put ("TSY::" + adtMaturity[i], gcBumped);
  2155.                 } catch (java.lang.Exception e) {
  2156.                     e.printStackTrace();
  2157.                 }
  2158.             }
  2159.         }

  2160.         try {
  2161.             org.drip.state.govvie.GovvieCurve gcBase = GovvieCurve (strCode, dtSpot, adtEffective,
  2162.                 adtMaturity, adblCoupon, adblQuote, strMeasure, iLatentStateType);

  2163.             if (null != gcBase) mapBumpedCurve.put ("BASE", gcBase);

  2164.             org.drip.state.govvie.GovvieCurve gcBumped = GovvieCurve (strCode, dtSpot, adtEffective,
  2165.                 adtMaturity, adblCoupon, org.drip.analytics.support.Helper.TweakManifestMeasure (adblQuote,
  2166.                     new org.drip.param.definition.ManifestMeasureTweak
  2167.                         (org.drip.param.definition.ManifestMeasureTweak.FLAT, bIsProportional, dblBump)),
  2168.                             strMeasure, iLatentStateType);

  2169.             if (null != gcBumped) mapBumpedCurve.put ("BUMP", gcBumped);
  2170.         } catch (java.lang.Exception e) {
  2171.             e.printStackTrace();
  2172.         }

  2173.         return mapBumpedCurve;
  2174.     }

  2175.     /**
  2176.      * Construct a Tenor + Parallel Map of FX Curve from the FX Instruments
  2177.      *
  2178.      * @param dtSpot Spot Date
  2179.      * @param cp The FX Currency Pair
  2180.      * @param astrMaturityTenor Array of Maturity Tenors
  2181.      * @param adblQuote Array of FX Forwards
  2182.      * @param strMeasure Calibration Measure
  2183.      * @param dblFXSpot FX Spot
  2184.      * @param iLatentStateType SHAPE PRESERVING/SMOOTH
  2185.      * @param dblBump The Tenor Node Bump Amount
  2186.      * @param bIsProportional TRUE - The Bump Applied is Proportional
  2187.      *
  2188.      * @return Map of FX Curve Instance
  2189.      */

  2190.     public static final org.drip.analytics.support.CaseInsensitiveTreeMap<org.drip.state.fx.FXCurve>
  2191.         BumpedFXCurve (
  2192.             final org.drip.analytics.date.JulianDate dtSpot,
  2193.             final org.drip.product.params.CurrencyPair cp,
  2194.             final java.lang.String[] astrMaturityTenor,
  2195.             final double[] adblQuote,
  2196.             final java.lang.String strMeasure,
  2197.             final double dblFXSpot,
  2198.             final int iLatentStateType,
  2199.             final double dblBump,
  2200.             final boolean bIsProportional)
  2201.     {
  2202.         if (!org.drip.numerical.common.NumberUtil.IsValid (dblBump)) return null;

  2203.         org.drip.analytics.support.CaseInsensitiveTreeMap<org.drip.state.fx.FXCurve> mapBumpedCurve = new
  2204.             org.drip.analytics.support.CaseInsensitiveTreeMap<org.drip.state.fx.FXCurve>();

  2205.         if (null != adblQuote) {
  2206.             int iNumComp = adblQuote.length;

  2207.             for (int i = 0; i < iNumComp; ++i) {
  2208.                 try {
  2209.                     org.drip.state.fx.FXCurve fxCurveBumped = FXCurve (dtSpot, cp, astrMaturityTenor,
  2210.                         org.drip.analytics.support.Helper.TweakManifestMeasure (adblQuote, new
  2211.                             org.drip.param.definition.ManifestMeasureTweak (i, bIsProportional, dblBump)),
  2212.                                 strMeasure, dblFXSpot, iLatentStateType);

  2213.                     if (null != fxCurveBumped)
  2214.                         mapBumpedCurve.put ("FXFWD::" + astrMaturityTenor[i], fxCurveBumped);
  2215.                 } catch (java.lang.Exception e) {
  2216.                     e.printStackTrace();
  2217.                 }
  2218.             }
  2219.         }

  2220.         try {
  2221.             org.drip.state.fx.FXCurve fxCurveBase = FXCurve (dtSpot, cp, astrMaturityTenor, adblQuote,
  2222.                 strMeasure, dblFXSpot, iLatentStateType);

  2223.             if (null != fxCurveBase) mapBumpedCurve.put ("BASE", fxCurveBase);

  2224.             org.drip.state.fx.FXCurve fxCurveBump = FXCurve (dtSpot, cp, astrMaturityTenor,
  2225.                 org.drip.analytics.support.Helper.TweakManifestMeasure (adblQuote, new
  2226.                     org.drip.param.definition.ManifestMeasureTweak
  2227.                         (org.drip.param.definition.ManifestMeasureTweak.FLAT, bIsProportional, dblBump)),
  2228.                             strMeasure, dblFXSpot, iLatentStateType);

  2229.             if (null != fxCurveBump) mapBumpedCurve.put ("BUMP", fxCurveBump);
  2230.         } catch (java.lang.Exception e) {
  2231.             e.printStackTrace();
  2232.         }

  2233.         return mapBumpedCurve;
  2234.     }

  2235.     /**
  2236.      * Construct a Tenor + Parallel Forward Volatility Latent State Construction from Cap/Floor Instruments
  2237.      *
  2238.      * @param dtSpot Spot Date
  2239.      * @param forwardLabel Forward Label
  2240.      * @param bIsCap TRUE - Create and Use Array of Caps
  2241.      * @param astrMaturityTenor Array of Cap/floor Maturities
  2242.      * @param adblStrike Array of Cap/Floor Strikes
  2243.      * @param adblQuote Array of Cap/Floor Quotes
  2244.      * @param strMeasure Calibration Measure
  2245.      * @param dc Discount Curve Instance
  2246.      * @param fc Forward Curve Instance
  2247.      * @param dblBump The Tenor Node Bump Amount
  2248.      * @param bIsProportional TRUE - The Bump Applied is Proportional
  2249.      *
  2250.      * @return Map of Forward Volatility Curve Instance
  2251.      */

  2252.     public static final
  2253.         org.drip.analytics.support.CaseInsensitiveTreeMap<org.drip.state.volatility.VolatilityCurve>
  2254.             BumpedForwardVolatilityCurve (
  2255.                 final org.drip.analytics.date.JulianDate dtSpot,
  2256.                 final org.drip.state.identifier.ForwardLabel forwardLabel,
  2257.                 final boolean bIsCap,
  2258.                 final java.lang.String[] astrMaturityTenor,
  2259.                 final double[] adblStrike,
  2260.                 final double[] adblQuote,
  2261.                 final java.lang.String strMeasure,
  2262.                 final org.drip.state.discount.MergedDiscountForwardCurve dc,
  2263.                 final org.drip.state.forward.ForwardCurve fc,
  2264.                 final double dblBump,
  2265.                 final boolean bIsProportional)
  2266.     {
  2267.         if (!org.drip.numerical.common.NumberUtil.IsValid (dblBump)) return null;

  2268.         org.drip.analytics.support.CaseInsensitiveTreeMap<org.drip.state.volatility.VolatilityCurve>
  2269.             mapBumpedCurve = new
  2270.                 org.drip.analytics.support.CaseInsensitiveTreeMap<org.drip.state.volatility.VolatilityCurve>();

  2271.         if (null != adblQuote) {
  2272.             int iNumComp = adblQuote.length;

  2273.             for (int i = 0; i < iNumComp; ++i) {
  2274.                 try {
  2275.                     org.drip.state.volatility.VolatilityCurve forwardVolatilityCurveBumped =
  2276.                         ForwardRateVolatilityCurve (dtSpot, forwardLabel, bIsCap, astrMaturityTenor,
  2277.                             adblStrike, org.drip.analytics.support.Helper.TweakManifestMeasure (adblQuote,
  2278.                                 new org.drip.param.definition.ManifestMeasureTweak (i, bIsProportional,
  2279.                                     dblBump)), strMeasure, dc, fc);

  2280.                     if (null != forwardVolatilityCurveBumped)
  2281.                         mapBumpedCurve.put ("CAPFLOOR::" + astrMaturityTenor[i],
  2282.                             forwardVolatilityCurveBumped);
  2283.                 } catch (java.lang.Exception e) {
  2284.                     e.printStackTrace();
  2285.                 }
  2286.             }
  2287.         }

  2288.         try {
  2289.             org.drip.state.volatility.VolatilityCurve forwardVolatilityCurveBase = ForwardRateVolatilityCurve
  2290.                 (dtSpot, forwardLabel, bIsCap, astrMaturityTenor, adblStrike, adblQuote, strMeasure, dc, fc);

  2291.             if (null != forwardVolatilityCurveBase) mapBumpedCurve.put ("BASE", forwardVolatilityCurveBase);

  2292.             org.drip.state.volatility.VolatilityCurve forwardVolatilityCurveBumped =
  2293.                 ForwardRateVolatilityCurve (dtSpot, forwardLabel, bIsCap, astrMaturityTenor, adblStrike,
  2294.                     org.drip.analytics.support.Helper.TweakManifestMeasure (adblQuote, new
  2295.                         org.drip.param.definition.ManifestMeasureTweak
  2296.                             (org.drip.param.definition.ManifestMeasureTweak.FLAT, bIsProportional, dblBump)),
  2297.                                 strMeasure, dc, fc);

  2298.             if (null != forwardVolatilityCurveBumped)
  2299.                 mapBumpedCurve.put ("BUMP", forwardVolatilityCurveBumped);
  2300.         } catch (java.lang.Exception e) {
  2301.             e.printStackTrace();
  2302.         }

  2303.         return mapBumpedCurve;
  2304.     }
  2305. }