ScenarioGovvieCurveBuilder.java

  1. package org.drip.state.creator;

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

  77. /**
  78.  * <i>ScenarioGovvieCurveBuilder</i> implements the Construction of the Scenario Govvie Curve using the Input
  79.  * Govvie Curve Instruments.
  80.  *
  81.  *  <br><br>
  82.  *  <ul>
  83.  *      <li><b>Module </b> = <a href = "https://github.com/lakshmiDRIP/DROP/tree/master/ProductCore.md">Product Core Module</a></li>
  84.  *      <li><b>Library</b> = <a href = "https://github.com/lakshmiDRIP/DROP/tree/master/FixedIncomeAnalyticsLibrary.md">Fixed Income Analytics</a></li>
  85.  *      <li><b>Project</b> = <a href = "https://github.com/lakshmiDRIP/DROP/tree/master/src/main/java/org/drip/state/README.md">Latent State Inference and Creation Utilities</a></li>
  86.  *      <li><b>Package</b> = <a href = "https://github.com/lakshmiDRIP/DROP/tree/master/src/main/java/org/drip/state/creator/README.md">Scenario State Curve/Surface Builders</a></li>
  87.  *  </ul>
  88.  * <br><br>
  89.  *
  90.  * @author Lakshmi Krishnamurthy
  91.  */

  92. public class ScenarioGovvieCurveBuilder {

  93.     /**
  94.      * Build the Shape Preserving Govvie Curve using the Custom Parameters
  95.      *
  96.      * @param llsc The Linear Latent State Calibrator Instance
  97.      * @param aStretchSpec Array of the Latent State Stretches
  98.      * @param strTreasuryCode Treasury Code
  99.      * @param strCurrency Currency
  100.      * @param valParams Valuation Parameters
  101.      * @param pricerParams Pricer Parameters
  102.      * @param csqc Market Parameters
  103.      * @param vcp Valuation Customization Parameters
  104.      * @param dblEpochResponse The Starting Response Value
  105.      *
  106.      * @return Instance of the Shape Preserving Discount Curve
  107.      */

  108.     public static final org.drip.state.govvie.GovvieCurve ShapePreservingGovvieCurve (
  109.         final org.drip.state.inference.LinearLatentStateCalibrator llsc,
  110.         final org.drip.state.inference.LatentStateStretchSpec[] aStretchSpec,
  111.         final java.lang.String strTreasuryCode,
  112.         final java.lang.String strCurrency,
  113.         final org.drip.param.valuation.ValuationParams valParams,
  114.         final org.drip.param.pricer.CreditPricerParams pricerParams,
  115.         final org.drip.param.market.CurveSurfaceQuoteContainer csqc,
  116.         final org.drip.param.valuation.ValuationCustomizationParams vcp,
  117.         final double dblEpochResponse)
  118.     {
  119.         if (null == llsc) return null;

  120.         try {
  121.             org.drip.state.govvie.GovvieCurve govvieCurve = new org.drip.state.curve.BasisSplineGovvieYield
  122.                 (strTreasuryCode, strCurrency, llsc.calibrateSpan (aStretchSpec, dblEpochResponse, valParams,
  123.                     pricerParams, vcp, csqc));

  124.             return govvieCurve.setCCIS (new org.drip.analytics.input.LatentStateShapePreservingCCIS (llsc,
  125.                 aStretchSpec, valParams, pricerParams, vcp, csqc)) ? govvieCurve : null;
  126.         } catch (java.lang.Exception e) {
  127.             e.printStackTrace();
  128.         }

  129.         return null;
  130.     }

  131.     /**
  132.      * Construct an Instance of the Shape Preserver of the desired Basis Spline Type, using the specified
  133.      *  Basis Spline Set Builder Parameters.
  134.      *
  135.      * @param strName Curve Name
  136.      * @param strTreasuryCode Treasury Code
  137.      * @param strCurrency Currency
  138.      * @param valParams Valuation Parameters
  139.      * @param pricerParams Pricer Parameters
  140.      * @param csqc Market Parameters
  141.      * @param vcp Valuation Customization Parameters
  142.      * @param strBasisType The Basis Type
  143.      * @param fsbp The Function Set Basis Parameters
  144.      * @param sdic Segment Design In-elastic Control
  145.      * @param aCalibComp Array of Calibration Components
  146.      * @param strManifestMeasure The Calibration Manifest Measure
  147.      * @param adblQuote Array of Calibration Quotes
  148.      *
  149.      * @return Instance of the Shape Preserver of the Desired Basis Type
  150.      */

  151.     public static final org.drip.state.govvie.GovvieCurve ShapePreservingGovvieCurve (
  152.         final java.lang.String strName,
  153.         final java.lang.String strTreasuryCode,
  154.         final java.lang.String strCurrency,
  155.         final org.drip.param.valuation.ValuationParams valParams,
  156.         final org.drip.param.pricer.CreditPricerParams pricerParams,
  157.         final org.drip.param.market.CurveSurfaceQuoteContainer csqc,
  158.         final org.drip.param.valuation.ValuationCustomizationParams vcp,
  159.         final java.lang.String strBasisType,
  160.         final org.drip.spline.basis.FunctionSetBuilderParams fsbp,
  161.         final org.drip.spline.params.SegmentInelasticDesignControl sdic,
  162.         final org.drip.product.definition.CalibratableComponent[] aCalibComp,
  163.         final java.lang.String strManifestMeasure,
  164.         final double[] adblQuote)
  165.     {
  166.         if (null == strName || strName.isEmpty() || null == strBasisType || strBasisType.isEmpty() || null ==
  167.             valParams || null == fsbp || null == strManifestMeasure || strManifestMeasure.isEmpty())
  168.             return null;

  169.         int iNumQuote = null == adblQuote ? 0 : adblQuote.length;
  170.         int iNumComp = null == aCalibComp ? 0 : aCalibComp.length;

  171.         if (0 == iNumComp || iNumComp != iNumQuote) return null;

  172.         org.drip.state.identifier.GovvieLabel govvieLabel = aCalibComp[0].govvieLabel();

  173.         try {
  174.             org.drip.state.representation.LatentStateSpecification[] aLSS = new
  175.                 org.drip.state.representation.LatentStateSpecification[] {new
  176.                     org.drip.state.representation.LatentStateSpecification
  177.                         (org.drip.analytics.definition.LatentStateStatic.LATENT_STATE_GOVVIE,
  178.                             org.drip.analytics.definition.LatentStateStatic.GOVVIE_QM_YIELD, govvieLabel)};

  179.             org.drip.state.inference.LatentStateSegmentSpec[] aSegmentSpec = new
  180.                 org.drip.state.inference.LatentStateSegmentSpec[iNumComp];

  181.             for (int i = 0; i < iNumComp; ++i) {
  182.                 org.drip.product.calib.ProductQuoteSet pqs = aCalibComp[i].calibQuoteSet (aLSS);

  183.                 if (null == pqs || !pqs.set (strManifestMeasure, adblQuote[i])) return null;

  184.                 aSegmentSpec[i] = new org.drip.state.inference.LatentStateSegmentSpec (aCalibComp[i], pqs);
  185.             }

  186.             org.drip.state.inference.LatentStateStretchSpec[] aStretchSpec = new
  187.                 org.drip.state.inference.LatentStateStretchSpec[] {new
  188.                     org.drip.state.inference.LatentStateStretchSpec (strName, aSegmentSpec)};

  189.             org.drip.state.inference.LinearLatentStateCalibrator llsc = new
  190.                 org.drip.state.inference.LinearLatentStateCalibrator (new
  191.                     org.drip.spline.params.SegmentCustomBuilderControl (strBasisType, fsbp, sdic, new
  192.                         org.drip.spline.params.ResponseScalingShapeControl (true, new
  193.                             org.drip.function.r1tor1.QuadraticRationalShapeControl (0.)), null),
  194.                                 org.drip.spline.stretch.BoundarySettings.FinancialStandard(),
  195.                                     org.drip.spline.stretch.MultiSegmentSequence.CALIBRATE, null, null);

  196.             return ShapePreservingGovvieCurve (llsc, aStretchSpec, strTreasuryCode, strCurrency, valParams,
  197.                 pricerParams, csqc, vcp, adblQuote[0]);
  198.         } catch (java.lang.Exception e) {
  199.             e.printStackTrace();
  200.         }

  201.         return null;
  202.     }

  203.     /**
  204.      * Construct an Instance of the Shape Preserver of the Linear Polynomial Type, using the Specified Basis
  205.      *  Set Builder Parameters.
  206.      *
  207.      * @param strName Curve Name
  208.      * @param strTreasuryCode Treasury Code
  209.      * @param strCurrency Currency
  210.      * @param iSpotDate Spot Date
  211.      * @param aComp Array of Calibration Components
  212.      * @param adblQuote Array of Calibration Quotes
  213.      * @param strManifestMeasure The Calibration Manifest Measure
  214.      *
  215.      * @return Instance of the Shape Preserver of the Cubic Polynomial Type
  216.      */

  217.     public static final org.drip.state.govvie.GovvieCurve LinearPolyShapePreserver (
  218.         final java.lang.String strName,
  219.         final java.lang.String strTreasuryCode,
  220.         final java.lang.String strCurrency,
  221.         final int iSpotDate,
  222.         final org.drip.product.definition.CalibratableComponent[] aComp,
  223.         final double[] adblQuote,
  224.         final java.lang.String strManifestMeasure)
  225.     {
  226.         try {
  227.             return ShapePreservingGovvieCurve (strName, strTreasuryCode, strCurrency,
  228.                 org.drip.param.valuation.ValuationParams.Spot (iSpotDate), null, null, null,
  229.                     org.drip.spline.stretch.MultiSegmentSequenceBuilder.BASIS_SPLINE_POLYNOMIAL, new
  230.                         org.drip.spline.basis.PolynomialFunctionSetParams (2),
  231.                             org.drip.spline.params.SegmentInelasticDesignControl.Create (0, 2), aComp,
  232.                                 strManifestMeasure, adblQuote);
  233.         } catch (java.lang.Exception e) {
  234.             e.printStackTrace();
  235.         }

  236.         return null;
  237.     }

  238.     /**
  239.      * Construct an Instance of the Shape Preserver of the Cubic Polynomial Type, using the Specified Basis
  240.      *  Set Builder Parameters.
  241.      *
  242.      * @param strName Curve Name
  243.      * @param strTreasuryCode Treasury Code
  244.      * @param strCurrency Currency
  245.      * @param iSpotDate Spot Date
  246.      * @param aComp Array of Calibration Components
  247.      * @param adblQuote Array of Calibration Quotes
  248.      * @param strManifestMeasure The Calibration Manifest Measure
  249.      *
  250.      * @return Instance of the Shape Preserver of the Cubic Polynomial Type
  251.      */

  252.     public static final org.drip.state.govvie.GovvieCurve CubicPolyShapePreserver (
  253.         final java.lang.String strName,
  254.         final java.lang.String strTreasuryCode,
  255.         final java.lang.String strCurrency,
  256.         final int iSpotDate,
  257.         final org.drip.product.definition.CalibratableComponent[] aComp,
  258.         final double[] adblQuote,
  259.         final java.lang.String strManifestMeasure)
  260.     {
  261.         try {
  262.             return ShapePreservingGovvieCurve (strName, strTreasuryCode, strCurrency,
  263.                 org.drip.param.valuation.ValuationParams.Spot (iSpotDate), null, null, null,
  264.                     org.drip.spline.stretch.MultiSegmentSequenceBuilder.BASIS_SPLINE_POLYNOMIAL, new
  265.                         org.drip.spline.basis.PolynomialFunctionSetParams (4),
  266.                             org.drip.spline.params.SegmentInelasticDesignControl.Create (2, 2), aComp,
  267.                                 strManifestMeasure, adblQuote);
  268.         } catch (java.lang.Exception e) {
  269.             e.printStackTrace();
  270.         }

  271.         return null;
  272.     }

  273.     /**
  274.      * Create an Instance of the Custom Splined Govvie Yield Curve
  275.      *
  276.      * @param strName Curve Name
  277.      * @param dtStart The Tenor Start Date
  278.      * @param strTreasuryCode Treasury Code
  279.      * @param strCurrency Currency
  280.      * @param aiMaturityDate Array of the Maturity Dates
  281.      * @param adblYield Array of the Yields
  282.      * @param scbc The Segment Custom Builder Control
  283.      *
  284.      * @return The Instance of the Govvie Yield Curve
  285.      */

  286.     public static final org.drip.state.govvie.GovvieCurve CustomSplineCurve (
  287.         final java.lang.String strName,
  288.         final org.drip.analytics.date.JulianDate dtStart,
  289.         final java.lang.String strTreasuryCode,
  290.         final java.lang.String strCurrency,
  291.         final int[] aiMaturityDate,
  292.         final double[] adblYield,
  293.         final org.drip.spline.params.SegmentCustomBuilderControl scbc)
  294.     {
  295.         if (null == strName || strName.isEmpty() || null == dtStart || null == aiMaturityDate || null ==
  296.             adblYield)
  297.             return null;

  298.         int iNumTreasury = aiMaturityDate.length;
  299.         int[] aiPredictorOrdinate = new int[iNumTreasury + 1];
  300.         double[] adblResponseValue = new double[iNumTreasury + 1];
  301.         org.drip.spline.params.SegmentCustomBuilderControl[] aSCBC = new
  302.             org.drip.spline.params.SegmentCustomBuilderControl[iNumTreasury];

  303.         if (0 == iNumTreasury || iNumTreasury != adblYield.length) return null;

  304.         for (int i = 0; i <= iNumTreasury; ++i) {
  305.             aiPredictorOrdinate[i] = 0 == i ? dtStart.julian() : aiMaturityDate[i - 1];

  306.             adblResponseValue[i] = 0 == i ? adblYield[0] : adblYield[i - 1];

  307.             if (0 != i) aSCBC[i - 1] = scbc;
  308.         }

  309.         try {
  310.             return new org.drip.state.curve.BasisSplineGovvieYield (strTreasuryCode, strCurrency, new
  311.                 org.drip.spline.grid.OverlappingStretchSpan
  312.                     (org.drip.spline.stretch.MultiSegmentSequenceBuilder.CreateCalibratedStretchEstimator
  313.                         (strName, aiPredictorOrdinate, adblResponseValue, aSCBC, null,
  314.                             org.drip.spline.stretch.BoundarySettings.FloatingStandard(),
  315.                                 org.drip.spline.stretch.MultiSegmentSequence.CALIBRATE)));
  316.         } catch (java.lang.Exception e) {
  317.             e.printStackTrace();
  318.         }

  319.         return null;
  320.     }

  321.     /**
  322.      * Create an Instance of the Linear Polynomial Splined Govvie Yield Curve
  323.      *
  324.      * @param strName Curve Name
  325.      * @param dtStart The Tenor Start Date
  326.      * @param strTreasuryCode Treasury Code
  327.      * @param strCurrency Currency
  328.      * @param aiMaturityDate Array of the Maturity Dates
  329.      * @param adblYield Array of the Govvie Yields
  330.      *
  331.      * @return The Instance of the Govvie Yield Curve
  332.      */

  333.     /* public static final org.drip.state.govvie.GovvieCurve LinearPolynomialCurve (
  334.         final java.lang.String strName,
  335.         final org.drip.analytics.date.JulianDate dtStart,
  336.         final java.lang.String strTreasuryCode,
  337.         final java.lang.String strCurrency,
  338.         final int[] aiMaturityDate,
  339.         final double[] adblYield)
  340.     {
  341.         try {
  342.             return CustomSplineCurve (strName, dtStart, strTreasuryCode, strCurrency, aiMaturityDate,
  343.                 adblYield, new org.drip.spline.params.SegmentCustomBuilderControl
  344.                     (org.drip.spline.stretch.MultiSegmentSequenceBuilder.BASIS_SPLINE_POLYNOMIAL, new
  345.                         org.drip.spline.basis.PolynomialFunctionSetParams (2),
  346.                             org.drip.spline.params.SegmentInelasticDesignControl.Create (0, 2), null, null));
  347.         } catch (java.lang.Exception e) {
  348.             e.printStackTrace();
  349.         }

  350.         return null;
  351.     } */

  352.     /**
  353.      * Create an Instance of the Cubic Polynomial Splined Govvie Yield Curve
  354.      *
  355.      * @param strName Curve Name
  356.      * @param dtStart The Tenor Start Date
  357.      * @param strTreasuryCode Treasury Code
  358.      * @param strCurrency Currency
  359.      * @param aiMaturityDate Array of the Maturity Dates
  360.      * @param adblYield Array of the Govvie Yields
  361.      *
  362.      * @return The Instance of the Govvie Yield Curve
  363.      */

  364.     public static final org.drip.state.govvie.GovvieCurve CubicPolynomialCurve (
  365.         final java.lang.String strName,
  366.         final org.drip.analytics.date.JulianDate dtStart,
  367.         final java.lang.String strTreasuryCode,
  368.         final java.lang.String strCurrency,
  369.         final int[] aiMaturityDate,
  370.         final double[] adblYield)
  371.     {
  372.         try {
  373.             return CustomSplineCurve (strName, dtStart, strTreasuryCode, strCurrency, aiMaturityDate,
  374.                 adblYield, new org.drip.spline.params.SegmentCustomBuilderControl
  375.                     (org.drip.spline.stretch.MultiSegmentSequenceBuilder.BASIS_SPLINE_POLYNOMIAL, new
  376.                         org.drip.spline.basis.PolynomialFunctionSetParams (4),
  377.                             org.drip.spline.params.SegmentInelasticDesignControl.Create (2, 2), null, null));
  378.         } catch (java.lang.Exception e) {
  379.             e.printStackTrace();
  380.         }

  381.         return null;
  382.     }

  383.     /**
  384.      * Create an Instance of the Quartic Polynomial Splined Govvie Yield Curve
  385.      *
  386.      * @param strName Curve Name
  387.      * @param dtStart The Tenor Start Date
  388.      * @param strTreasuryCode Treasury Code
  389.      * @param strCurrency Currency
  390.      * @param aiMaturityDate Array of the Maturity Dates
  391.      * @param adblYield Array of the Yields
  392.      *
  393.      * @return The Instance of the Govvie Yield Curve
  394.      */

  395.     public static final org.drip.state.govvie.GovvieCurve QuarticPolynomialCurve (
  396.         final java.lang.String strName,
  397.         final org.drip.analytics.date.JulianDate dtStart,
  398.         final java.lang.String strTreasuryCode,
  399.         final java.lang.String strCurrency,
  400.         final int[] aiMaturityDate,
  401.         final double[] adblYield)
  402.     {
  403.         try {
  404.             return CustomSplineCurve (strName, dtStart, strTreasuryCode, strCurrency, aiMaturityDate,
  405.                 adblYield, new org.drip.spline.params.SegmentCustomBuilderControl
  406.                     (org.drip.spline.stretch.MultiSegmentSequenceBuilder.BASIS_SPLINE_POLYNOMIAL, new
  407.                         org.drip.spline.basis.PolynomialFunctionSetParams (5),
  408.                             org.drip.spline.params.SegmentInelasticDesignControl.Create (2, 2), null, null));
  409.         } catch (java.lang.Exception e) {
  410.             e.printStackTrace();
  411.         }

  412.         return null;
  413.     }

  414.     /**
  415.      * Create an Instance of the Kaklis-Pandelis Splined Govvie Yield Curve
  416.      *
  417.      * @param strName Curve Name
  418.      * @param dtStart The Tenor Start Date
  419.      * @param strTreasuryCode Treasury Code
  420.      * @param strCurrency Currency
  421.      * @param aiMaturityDate Array of the Maturity Dates
  422.      * @param adblYield Array of the Yields
  423.      *
  424.      * @return The Instance of the Govvie Yield Curve
  425.      */

  426.     public static final org.drip.state.govvie.GovvieCurve KaklisPandelisCurve (
  427.         final java.lang.String strName,
  428.         final org.drip.analytics.date.JulianDate dtStart,
  429.         final java.lang.String strTreasuryCode,
  430.         final java.lang.String strCurrency,
  431.         final int[] aiMaturityDate,
  432.         final double[] adblYield)
  433.     {
  434.         try {
  435.             return CustomSplineCurve (strName, dtStart, strTreasuryCode, strCurrency, aiMaturityDate,
  436.                 adblYield, new org.drip.spline.params.SegmentCustomBuilderControl
  437.                     (org.drip.spline.stretch.MultiSegmentSequenceBuilder.BASIS_SPLINE_KAKLIS_PANDELIS, new
  438.                         org.drip.spline.basis.KaklisPandelisSetParams (2),
  439.                             org.drip.spline.params.SegmentInelasticDesignControl.Create (2, 2), null, null));
  440.         } catch (java.lang.Exception e) {
  441.             e.printStackTrace();
  442.         }

  443.         return null;
  444.     }

  445.     /**
  446.      * Create an Instance of the KLK Hyperbolic Splined Govvie Yield Curve
  447.      *
  448.      * @param strName Curve Name
  449.      * @param dtStart The Tenor Start Date
  450.      * @param strTreasuryCode Treasury Code
  451.      * @param strCurrency Currency
  452.      * @param aiMaturityDate Array of the Maturity Dates
  453.      * @param adblYield Array of the Yields
  454.      * @param dblTension The Tension Parameter
  455.      *
  456.      * @return The Instance of the Govvie Yield Curve
  457.      */

  458.     public static final org.drip.state.govvie.GovvieCurve KLKHyperbolicCurve (
  459.         final java.lang.String strName,
  460.         final org.drip.analytics.date.JulianDate dtStart,
  461.         final java.lang.String strTreasuryCode,
  462.         final java.lang.String strCurrency,
  463.         final int[] aiMaturityDate,
  464.         final double[] adblYield,
  465.         final double dblTension)
  466.     {
  467.         try {
  468.             return CustomSplineCurve (strName, dtStart, strTreasuryCode, strCurrency, aiMaturityDate,
  469.                 adblYield, new org.drip.spline.params.SegmentCustomBuilderControl
  470.                     (org.drip.spline.stretch.MultiSegmentSequenceBuilder.BASIS_SPLINE_KLK_HYPERBOLIC_TENSION,
  471.                         new org.drip.spline.basis.ExponentialTensionSetParams (dblTension),
  472.                             org.drip.spline.params.SegmentInelasticDesignControl.Create (2, 2), null, null));
  473.         } catch (java.lang.Exception e) {
  474.             e.printStackTrace();
  475.         }

  476.         return null;
  477.     }

  478.     /**
  479.      * Create an Instance of the KLK Rational Linear Splined Govvie Yield Curve
  480.      *
  481.      * @param strName Curve Name
  482.      * @param dtStart The Tenor Start Date
  483.      * @param strTreasuryCode Treasury Code
  484.      * @param strCurrency Currency
  485.      * @param aiMaturityDate Array of the Maturity Dates
  486.      * @param adblYield Array of the Yields
  487.      * @param dblTension The Tension Parameter
  488.      *
  489.      * @return The Instance of the Govvie Yield Curve
  490.      */

  491.     public static final org.drip.state.govvie.GovvieCurve KLKRationalLinearCurve (
  492.         final java.lang.String strName,
  493.         final org.drip.analytics.date.JulianDate dtStart,
  494.         final java.lang.String strTreasuryCode,
  495.         final java.lang.String strCurrency,
  496.         final int[] aiMaturityDate,
  497.         final double[] adblYield,
  498.         final double dblTension)
  499.     {
  500.         try {
  501.             return CustomSplineCurve (strName, dtStart, strTreasuryCode, strCurrency, aiMaturityDate,
  502.                 adblYield, new org.drip.spline.params.SegmentCustomBuilderControl
  503.                     (org.drip.spline.stretch.MultiSegmentSequenceBuilder.BASIS_SPLINE_KLK_RATIONAL_LINEAR_TENSION,
  504.                 new org.drip.spline.basis.ExponentialTensionSetParams (dblTension),
  505.                     org.drip.spline.params.SegmentInelasticDesignControl.Create (2, 2), null, null));
  506.         } catch (java.lang.Exception e) {
  507.             e.printStackTrace();
  508.         }

  509.         return null;
  510.     }

  511.     /**
  512.      * Create an Instance of the KLK Rational Quadratic Splined Govvie Yield Curve
  513.      *
  514.      * @param strName Curve Name
  515.      * @param dtStart The Tenor Start Date
  516.      * @param strTreasuryCode Treasury Code
  517.      * @param strCurrency Currency
  518.      * @param aiMaturityDate Array of the Maturity Dates
  519.      * @param adblYield Array of the Yields
  520.      * @param dblTension The Tension Parameter
  521.      *
  522.      * @return The Instance of the Govvie Yield Curve
  523.      */

  524.     public static final org.drip.state.govvie.GovvieCurve KLKRationalQuadraticCurve (
  525.         final java.lang.String strName,
  526.         final org.drip.analytics.date.JulianDate dtStart,
  527.         final java.lang.String strTreasuryCode,
  528.         final java.lang.String strCurrency,
  529.         final int[] aiMaturityDate,
  530.         final double[] adblYield,
  531.         final double dblTension)
  532.     {
  533.         try {
  534.             return CustomSplineCurve (strName, dtStart, strTreasuryCode, strCurrency, aiMaturityDate,
  535.                 adblYield, new org.drip.spline.params.SegmentCustomBuilderControl
  536.                     (org.drip.spline.stretch.MultiSegmentSequenceBuilder.BASIS_SPLINE_KLK_RATIONAL_QUADRATIC_TENSION,
  537.                 new org.drip.spline.basis.ExponentialTensionSetParams (dblTension),
  538.                     org.drip.spline.params.SegmentInelasticDesignControl.Create (2, 2), null, null));
  539.         } catch (java.lang.Exception e) {
  540.             e.printStackTrace();
  541.         }

  542.         return null;
  543.     }

  544.     /**
  545.      * Construct a Govvie Curve from an Array of Dates and Yields
  546.      *
  547.      * @param iEpochDate Epoch Date
  548.      * @param strTreasuryCode Treasury Code
  549.      * @param strCurrency Currency
  550.      * @param aiDate Array of Dates
  551.      * @param adblYield Array of Yields
  552.      *
  553.      * @return The Govvie Curve Instance
  554.      */

  555.     public static final org.drip.state.govvie.GovvieCurve DateYield (
  556.         final int iEpochDate,
  557.         final java.lang.String strTreasuryCode,
  558.         final java.lang.String strCurrency,
  559.         final int[] aiDate,
  560.         final double[] adblYield)
  561.     {
  562.         try {
  563.             return new org.drip.state.nonlinear.FlatYieldGovvieCurve (iEpochDate, strTreasuryCode,
  564.                 strCurrency, aiDate, adblYield);
  565.         } catch (java.lang.Exception e) {
  566.             e.printStackTrace();
  567.         }

  568.         return null;
  569.     }

  570.     /**
  571.      * Construct a Govvie Curve from the Specified Date and Yield
  572.      *
  573.      * @param iEpochDate Epoch Date
  574.      * @param strTreasuryCode Treasury Code
  575.      * @param strCurrency Currency
  576.      * @param dblYield Yield
  577.      *
  578.      * @return The Govvie Curve Instance
  579.      */

  580.     public static final org.drip.state.govvie.GovvieCurve ConstantYield (
  581.         final int iEpochDate,
  582.         final java.lang.String strTreasuryCode,
  583.         final java.lang.String strCurrency,
  584.         final double dblYield)  {
  585.         try {
  586.             return new org.drip.state.nonlinear.FlatYieldGovvieCurve (iEpochDate, strTreasuryCode,
  587.                 strCurrency, new int[] {iEpochDate}, new double[] {dblYield});
  588.         } catch (java.lang.Exception e) {
  589.             e.printStackTrace();
  590.         }

  591.         return null;
  592.     }
  593. }