ProductDailyPnL.java

  1. package org.drip.service.api;

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

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

  80. /**
  81.  * <i>ProductDailyPnL</i> contains the following daily measures computed:
  82.  *
  83.  * <br><br>
  84.  *  <ul>
  85.  *      <li>
  86.  *          1D Carry, Roll Down, Curve Shift, and Full Return PnL
  87.  *      </li>
  88.  *      <li>
  89.  *          3D Carry and Roll Down PnL
  90.  *      </li>
  91.  *      <li>
  92.  *          3M Carry and Roll Down PnL
  93.  *      </li>
  94.  *      <li>
  95.  *          Current DV01
  96.  *      </li>
  97.  *  </ul>
  98.  *
  99.  * <br><br>
  100.  *  <ul>
  101.  *      <li><b>Module </b> = <a href = "https://github.com/lakshmiDRIP/DROP/tree/master/ComputationalCore.md">Computational Core Module</a></li>
  102.  *      <li><b>Library</b> = <a href = "https://github.com/lakshmiDRIP/DROP/tree/master/ComputationSupportLibrary.md">Computation Support</a></li>
  103.  *      <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>
  104.  *      <li><b>Package</b> = <a href = "https://github.com/lakshmiDRIP/DROP/tree/master/src/main/java/org/drip/service/api/README.md">Horizon Roll Attribution Service API</a></li>
  105.  *  </ul>
  106.  * <br><br>
  107.  *
  108.  * @author Lakshmi Krishnamurthy
  109.  */

  110. public class ProductDailyPnL {
  111.     private int _i1DFixedAccrualDays = 0;
  112.     private int _i1DFloatingAccrualDays = 0;
  113.     private double _dblDV01 = java.lang.Double.NaN;
  114.     private double _dbl1DCarryPnL = java.lang.Double.NaN;
  115.     private double _dbl1MCarryPnL = java.lang.Double.NaN;
  116.     private double _dbl3MCarryPnL = java.lang.Double.NaN;
  117.     private double _dbl1DFixedDCF = java.lang.Double.NaN;
  118.     private double _dbl1MFixedDCF = java.lang.Double.NaN;
  119.     private double _dbl3MFixedDCF = java.lang.Double.NaN;
  120.     private double _dbl1DCleanPnL = java.lang.Double.NaN;
  121.     private double _dbl1DDirtyPnL = java.lang.Double.NaN;
  122.     private double _dbl1DTotalPnL = java.lang.Double.NaN;
  123.     private double _dbl1DTimeRollPnL = java.lang.Double.NaN;
  124.     private double _dbl1DFloatingDCF = java.lang.Double.NaN;
  125.     private double _dbl1MFloatingDCF = java.lang.Double.NaN;
  126.     private double _dbl3MFloatingDCF = java.lang.Double.NaN;
  127.     private double _dblCleanFixedDV01 = java.lang.Double.NaN;
  128.     private double _dblCleanFloatDV01 = java.lang.Double.NaN;
  129.     private double _dblDV01WithFixing = java.lang.Double.NaN;
  130.     private double _dbl1DCurveShiftPnL = java.lang.Double.NaN;
  131.     private double _dblPeriodFixedRate = java.lang.Double.NaN;
  132.     private double _dblBaselineSwapRate = java.lang.Double.NaN;
  133.     private double _dbl1DTimeRollSwapRate = java.lang.Double.NaN;
  134.     private double _dbl1DCleanPnLWithFixing = java.lang.Double.NaN;
  135.     private double _dbl1DDirtyPnLWithFixing = java.lang.Double.NaN;
  136.     private double _dbl1DTotalPnLWithFixing = java.lang.Double.NaN;
  137.     private double _dbl1DCurveShiftSwapRate = java.lang.Double.NaN;
  138.     private double _dblPeriodFloatingRateUsed = java.lang.Double.NaN;
  139.     private double _dblPeriodCurveFloatingRate = java.lang.Double.NaN;
  140.     private double _dbl1DMaturityRollUpSwapRate = java.lang.Double.NaN;
  141.     private double _dblCleanFloatDV01WithFixing = java.lang.Double.NaN;
  142.     private double _dblPeriodProductFloatingRate = java.lang.Double.NaN;
  143.     private double _dbl1DMaturityRollDownSwapRate = java.lang.Double.NaN;
  144.     private double _dbl1MMaturityRollDownSwapRate = java.lang.Double.NaN;
  145.     private double _dbl3MMaturityRollDownSwapRate = java.lang.Double.NaN;
  146.     private double _dbl1DMaturityRollUpSwapRatePnL = java.lang.Double.NaN;
  147.     private double _dbl1DMaturityRollUpFairPremium = java.lang.Double.NaN;
  148.     private double _dbl1DMaturityRollDownSwapRatePnL = java.lang.Double.NaN;
  149.     private double _dbl1MMaturityRollDownSwapRatePnL = java.lang.Double.NaN;
  150.     private double _dbl3MMaturityRollDownSwapRatePnL = java.lang.Double.NaN;
  151.     private double _dbl1DMaturityRollUpFairPremiumPnL = java.lang.Double.NaN;
  152.     private double _dbl1DMaturityRollUpFairPremiumWithFixing = java.lang.Double.NaN;
  153.     private double _dbl1DMaturityRollUpFairPremiumWithFixingPnL = java.lang.Double.NaN;

  154.     /**
  155.      * ProductDailyPnL constructor
  156.      *
  157.      * @param dbl1DTotalPnL 1D Total PnL
  158.      * @param dbl1DCleanPnL 1D Clean PnL
  159.      * @param dbl1DDirtyPnL 1D Dirty PnL
  160.      * @param dbl1DTotalPnLWithFixing 1D Total PnL With Fixing
  161.      * @param dbl1DCleanPnLWithFixing 1D Clean PnL With Fixing
  162.      * @param dbl1DDirtyPnLWithFixing 1D Dirty PnL With Fixing
  163.      * @param dbl1DCarryPnL 1D Carry PnL
  164.      * @param dbl1DTimeRollPnL 1D Time Roll PnL
  165.      * @param dbl1DMaturityRollDownSwapRatePnL 1D Curve Maturity Roll Down implied Par Swap rate PnL
  166.      * @param dbl1DMaturityRollUpSwapRatePnL 1D Curve Maturity Roll Up implied Par Swap rate PnL
  167.      * @param dbl1DMaturityRollUpFairPremiumPnL 1D Curve Maturity Roll Up implied Fair Premium PnL
  168.      * @param dbl1DMaturityRollUpFairPremiumWithFixingPnL 1D Curve Maturity Roll Up implied Fair Premium With
  169.      *  Fixing PnL
  170.      * @param dbl1DCurveShiftPnL 1D Curve Shift PnL
  171.      * @param dbl1MCarryPnL 1M Carry PnL
  172.      * @param dbl1MMaturityRollDownSwapRatePnL 1M Curve Maturity Roll Down implied Par Swap rate PnL
  173.      * @param dbl3MCarryPnL 3M Carry PnL
  174.      * @param dbl3MMaturityRollDownSwapRatePnL 3M Curve Maturity Roll Down implied Par Swap rate PnL
  175.      * @param dblDV01 DV01
  176.      * @param dblDV01WithFixing DV01 With Fixing
  177.      * @param dblCleanFixedDV01 Clean Fixed DV01
  178.      * @param dblCleanFloatDV01 Clean Float DV01
  179.      * @param dblCleanFloatDV01WithFixing Clean Float DV01 With Fixing
  180.      * @param dblBaselineSwapRate Baseline Par Swap Rate
  181.      * @param dbl1DTimeRollSwapRate 1D Curve Time Roll implied Par Swap rate
  182.      * @param dbl1DMaturityRollDownSwapRate 1D Curve Maturity Roll Down Implied Par Swap rate
  183.      * @param dbl1MMaturityRollDownSwapRate 1M Curve Maturity Roll Down implied Par Swap rate
  184.      * @param dbl3MMaturityRollDownSwapRate 3M Curve Maturity Roll Down implied Par Swap rate
  185.      * @param dbl1DMaturityRollUpSwapRate 1D Curve Maturity Roll Up Implied Par Swap rate
  186.      * @param dbl1DMaturityRollUpFairPremium 1D Curve Maturity Roll Up Implied Fair Premium
  187.      * @param dbl1DMaturityRollUpFairPremiumWithFixing 1D Curve Maturity Roll Up Implied Fair Premium With
  188.      *  Fixing
  189.      * @param dbl1DCurveShiftSwapRate 1D Day-to-Day Curve Shift implied Par Swap rate
  190.      * @param dblPeriodFixedRate The Period Fixed Rate
  191.      * @param dblPeriodCurveFloatingRate The Period Curve Floating Rate
  192.      * @param dblPeriodProductFloatingRate The Period Product Floating Rate
  193.      * @param dblPeriodFloatingRateUsed The Period Floating Rate Used
  194.      * @param i1DFixedAccrualDays 1D Fixed Accrual Days
  195.      * @param i1DFloatingAccrualDays 1D Floating Accrual Days
  196.      * @param dbl1DFixedDCF 1D Fixed Coupon DCF
  197.      * @param dbl1DFloatingDCF 1D Floating Coupon DCF
  198.      * @param dbl1MFixedDCF 1M Fixed Coupon DCF
  199.      * @param dbl1MFloatingDCF 1M Floating Coupon DCF
  200.      * @param dbl3MFixedDCF 3M Fixed Coupon DCF
  201.      * @param dbl3MFloatingDCF 3M Floating Coupon DCF
  202.      *
  203.      * @throws java.lang.Exception Thrown if inputs are invalid
  204.      */

  205.     public ProductDailyPnL (
  206.         final double dbl1DTotalPnL,
  207.         final double dbl1DCleanPnL,
  208.         final double dbl1DDirtyPnL,
  209.         final double dbl1DTotalPnLWithFixing,
  210.         final double dbl1DCleanPnLWithFixing,
  211.         final double dbl1DDirtyPnLWithFixing,
  212.         final double dbl1DCarryPnL,
  213.         final double dbl1DTimeRollPnL,
  214.         final double dbl1DMaturityRollDownSwapRatePnL,
  215.         final double dbl1DMaturityRollUpSwapRatePnL,
  216.         final double dbl1DMaturityRollUpFairPremiumPnL,
  217.         final double dbl1DMaturityRollUpFairPremiumWithFixingPnL,
  218.         final double dbl1DCurveShiftPnL,
  219.         final double dbl1MCarryPnL,
  220.         final double dbl1MMaturityRollDownSwapRatePnL,
  221.         final double dbl3MCarryPnL,
  222.         final double dbl3MMaturityRollDownSwapRatePnL,
  223.         final double dblDV01,
  224.         final double dblDV01WithFixing,
  225.         final double dblCleanFixedDV01,
  226.         final double dblCleanFloatDV01,
  227.         final double dblCleanFloatDV01WithFixing,
  228.         final double dblBaselineSwapRate,
  229.         final double dbl1DTimeRollSwapRate,
  230.         final double dbl1DMaturityRollDownSwapRate,
  231.         final double dbl1MMaturityRollDownSwapRate,
  232.         final double dbl3MMaturityRollDownSwapRate,
  233.         final double dbl1DMaturityRollUpSwapRate,
  234.         final double dbl1DMaturityRollUpFairPremium,
  235.         final double dbl1DMaturityRollUpFairPremiumWithFixing,
  236.         final double dbl1DCurveShiftSwapRate,
  237.         final double dblPeriodFixedRate,
  238.         final double dblPeriodCurveFloatingRate,
  239.         final double dblPeriodProductFloatingRate,
  240.         final double dblPeriodFloatingRateUsed,
  241.         final int i1DFixedAccrualDays,
  242.         final int i1DFloatingAccrualDays,
  243.         final double dbl1DFixedDCF,
  244.         final double dbl1DFloatingDCF,
  245.         final double dbl1MFixedDCF,
  246.         final double dbl1MFloatingDCF,
  247.         final double dbl3MFixedDCF,
  248.         final double dbl3MFloatingDCF)
  249.         throws java.lang.Exception
  250.     {
  251.         if (!org.drip.numerical.common.NumberUtil.IsValid (_dbl1DTotalPnL = dbl1DTotalPnL) ||
  252.             !org.drip.numerical.common.NumberUtil.IsValid (_dbl1DCleanPnL = dbl1DCleanPnL) ||
  253.                 !org.drip.numerical.common.NumberUtil.IsValid (_dbl1DDirtyPnL = dbl1DDirtyPnL) ||
  254.                     !org.drip.numerical.common.NumberUtil.IsValid (_dbl1DTotalPnLWithFixing =
  255.                         dbl1DTotalPnLWithFixing) || !org.drip.numerical.common.NumberUtil.IsValid
  256.                             (_dbl1DCleanPnLWithFixing = dbl1DCleanPnLWithFixing) ||
  257.                                 !org.drip.numerical.common.NumberUtil.IsValid (_dbl1DDirtyPnLWithFixing =
  258.                                     dbl1DDirtyPnLWithFixing) || !org.drip.numerical.common.NumberUtil.IsValid
  259.                                         (_dbl1DCarryPnL = dbl1DCarryPnL) ||
  260.                                             !org.drip.numerical.common.NumberUtil.IsValid (_dbl1DTimeRollPnL =
  261.                                                 dbl1DTimeRollPnL) ||
  262.                                                     !org.drip.numerical.common.NumberUtil.IsValid
  263.                                                         (_dbl1DMaturityRollDownSwapRatePnL =
  264.                                                             dbl1DMaturityRollDownSwapRatePnL) ||
  265.                                                                 !org.drip.numerical.common.NumberUtil.IsValid
  266.                                                                     (_dbl1DMaturityRollUpSwapRatePnL =
  267.                                                                         dbl1DMaturityRollUpSwapRatePnL) ||
  268.             !org.drip.numerical.common.NumberUtil.IsValid (_dbl1DMaturityRollUpFairPremiumPnL =
  269.                 dbl1DMaturityRollUpFairPremiumPnL) || !org.drip.numerical.common.NumberUtil.IsValid
  270.                     (_dbl1DMaturityRollUpFairPremiumWithFixingPnL =
  271.                         dbl1DMaturityRollUpFairPremiumWithFixingPnL) ||
  272.                             !org.drip.numerical.common.NumberUtil.IsValid (_dbl1DCurveShiftPnL =
  273.                                 dbl1DCurveShiftPnL) || !org.drip.numerical.common.NumberUtil.IsValid
  274.                                     (_dbl1MCarryPnL = dbl1MCarryPnL) ||
  275.                                         !org.drip.numerical.common.NumberUtil.IsValid
  276.                                             (_dbl1MMaturityRollDownSwapRatePnL =
  277.                                                 dbl1MMaturityRollDownSwapRatePnL) ||
  278.                                                     !org.drip.numerical.common.NumberUtil.IsValid (_dbl3MCarryPnL
  279.                                                         = dbl3MCarryPnL) ||
  280.                                                             !org.drip.numerical.common.NumberUtil.IsValid
  281.                                                                 (_dbl3MMaturityRollDownSwapRatePnL =
  282.                                                                     dbl3MMaturityRollDownSwapRatePnL) ||
  283.                                                                         !org.drip.numerical.common.NumberUtil.IsValid
  284.             (_dblDV01 = dblDV01) || !org.drip.numerical.common.NumberUtil.IsValid (_dblDV01WithFixing =
  285.                 dblDV01WithFixing) || !org.drip.numerical.common.NumberUtil.IsValid (_dblCleanFixedDV01 =
  286.                     dblCleanFixedDV01) || !org.drip.numerical.common.NumberUtil.IsValid (_dblCleanFloatDV01 =
  287.                         dblCleanFloatDV01) || !org.drip.numerical.common.NumberUtil.IsValid
  288.                             (_dblCleanFloatDV01WithFixing = dblCleanFloatDV01WithFixing) ||
  289.                                 !org.drip.numerical.common.NumberUtil.IsValid (_dblBaselineSwapRate =
  290.                                     dblBaselineSwapRate) || !org.drip.numerical.common.NumberUtil.IsValid
  291.                                         (_dbl1DTimeRollSwapRate = dbl1DTimeRollSwapRate) ||
  292.                                             !org.drip.numerical.common.NumberUtil.IsValid
  293.                                                 (_dbl1DMaturityRollDownSwapRate =
  294.                                                     dbl1DMaturityRollDownSwapRate) ||
  295.                                                         !org.drip.numerical.common.NumberUtil.IsValid
  296.                                                             (_dbl1MMaturityRollDownSwapRate =
  297.                                                                 dbl1MMaturityRollDownSwapRate) ||
  298.                                                                     !org.drip.numerical.common.NumberUtil.IsValid
  299.                                                                         (_dbl3MMaturityRollDownSwapRate =
  300.                                                                             dbl3MMaturityRollDownSwapRate) ||
  301.             !org.drip.numerical.common.NumberUtil.IsValid (_dbl1DMaturityRollUpSwapRate =
  302.                 dbl1DMaturityRollUpSwapRate) || !org.drip.numerical.common.NumberUtil.IsValid
  303.                     (_dbl1DMaturityRollUpFairPremium = dbl1DMaturityRollUpFairPremium) ||
  304.                         !org.drip.numerical.common.NumberUtil.IsValid (_dbl1DMaturityRollUpFairPremiumWithFixing
  305.                             = dbl1DMaturityRollUpFairPremiumWithFixing) ||
  306.                                 !org.drip.numerical.common.NumberUtil.IsValid (_dbl1DCurveShiftSwapRate =
  307.                                     dbl1DCurveShiftSwapRate) || !org.drip.numerical.common.NumberUtil.IsValid
  308.                                         (_dblPeriodFixedRate = dblPeriodFixedRate) ||
  309.                                             !org.drip.numerical.common.NumberUtil.IsValid
  310.                                                 (_dblPeriodCurveFloatingRate = dblPeriodCurveFloatingRate) ||
  311.                                                     !org.drip.numerical.common.NumberUtil.IsValid
  312.                                                         (_dblPeriodProductFloatingRate =
  313.                                                             dblPeriodProductFloatingRate) ||
  314.                                                                 !org.drip.numerical.common.NumberUtil.IsValid
  315.                                                                     (_dblPeriodFloatingRateUsed =
  316.                                                                         dblPeriodFloatingRateUsed) ||
  317.                                                                             !org.drip.numerical.common.NumberUtil.IsValid
  318.             (_dbl1DFixedDCF = dbl1DFixedDCF) || !org.drip.numerical.common.NumberUtil.IsValid (_dbl1DFloatingDCF
  319.                 = dbl1DFloatingDCF) || !org.drip.numerical.common.NumberUtil.IsValid (_dbl1MFixedDCF =
  320.                     dbl1MFixedDCF) || !org.drip.numerical.common.NumberUtil.IsValid (_dbl1MFloatingDCF =
  321.                         dbl1MFloatingDCF) || !org.drip.numerical.common.NumberUtil.IsValid (_dbl3MFixedDCF =
  322.                             dbl3MFixedDCF) || !org.drip.numerical.common.NumberUtil.IsValid (_dbl3MFloatingDCF =
  323.                                 dbl3MFloatingDCF))
  324.             throw new java.lang.Exception ("ProductDailyPnL ctr: Invalid Inputs!");

  325.         _i1DFixedAccrualDays = i1DFixedAccrualDays;
  326.         _i1DFloatingAccrualDays = i1DFloatingAccrualDays;
  327.     }

  328.     /**
  329.      * Retrieve the 1D Clean PnL
  330.      *
  331.      * @return The 1D Clean PnL
  332.      */

  333.     public double clean1DPnL()
  334.     {
  335.         return _dbl1DCleanPnL;
  336.     }

  337.     /**
  338.      * Retrieve the 1D Dirty PnL
  339.      *
  340.      * @return The 1D Dirty PnL
  341.      */

  342.     public double dirty1DPnL()
  343.     {
  344.         return _dbl1DDirtyPnL;
  345.     }

  346.     /**
  347.      * Retrieve the 1D Total PnL
  348.      *
  349.      * @return The 1D Total PnL
  350.      */

  351.     public double total1DPnL()
  352.     {
  353.         return _dbl1DTotalPnL;
  354.     }

  355.     /**
  356.      * Retrieve the 1D Clean PnL With Fixing
  357.      *
  358.      * @return The 1D Clean PnL With Fixing
  359.      */

  360.     public double clean1DPnLWithFixing()
  361.     {
  362.         return _dbl1DCleanPnLWithFixing;
  363.     }

  364.     /**
  365.      * Retrieve the 1D Dirty PnL With Fixing
  366.      *
  367.      * @return The 1D Dirty PnL With Fixing
  368.      */

  369.     public double dirty1DPnLWithFixing()
  370.     {
  371.         return _dbl1DDirtyPnLWithFixing;
  372.     }

  373.     /**
  374.      * Retrieve the 1D Total PnL With Fixing
  375.      *
  376.      * @return The 1D Total PnL With Fixing
  377.      */

  378.     public double total1DPnLWithFixing()
  379.     {
  380.         return _dbl1DTotalPnLWithFixing;
  381.     }

  382.     /**
  383.      * Retrieve the 1D Carry PnL
  384.      *
  385.      * @return The 1D Carry PnL
  386.      */

  387.     public double carry1DPnL()
  388.     {
  389.         return _dbl1DCarryPnL;
  390.     }

  391.     /**
  392.      * Retrieve the 1D Time Roll PnL
  393.      *
  394.      * @return The 1D Time Roll PnL
  395.      */

  396.     public double timeRoll1DPnL()
  397.     {
  398.         return _dbl1DTimeRollPnL;
  399.     }

  400.     /**
  401.      * Retrieve the 1D Maturity Roll Down Swap Rate PnL
  402.      *
  403.      * @return The 1D Maturity Roll Down Swap Rate PnL
  404.      */

  405.     public double maturityRollDownSwapRate1DPnL()
  406.     {
  407.         return _dbl1DMaturityRollDownSwapRatePnL;
  408.     }

  409.     /**
  410.      * Retrieve the 1D Maturity Roll Up Swap Rate PnL
  411.      *
  412.      * @return The 1D Maturity Roll Up Swap Rate PnL
  413.      */

  414.     public double maturityRollUpSwapRate1DPnL()
  415.     {
  416.         return _dbl1DMaturityRollUpSwapRatePnL;
  417.     }

  418.     /**
  419.      * Retrieve the 1D Maturity Roll Up Fair Premium PnL
  420.      *
  421.      * @return The 1D Maturity Roll Up Fair Premium PnL
  422.      */

  423.     public double maturityRollUpFairPremium1DPnL()
  424.     {
  425.         return _dbl1DMaturityRollUpFairPremiumPnL;
  426.     }

  427.     /**
  428.      * Retrieve the 1D Maturity Roll Up Fair Premium With Fixing PnL
  429.      *
  430.      * @return The 1D Maturity Roll Up Fair Premium With Fixing PnL
  431.      */

  432.     public double maturityRollUpFairPremiumWithFixing1DPnL()
  433.     {
  434.         return _dbl1DMaturityRollUpFairPremiumWithFixingPnL;
  435.     }

  436.     /**
  437.      * Retrieve the 1D Curve Shift PnL
  438.      *
  439.      * @return The 1D Curve Shift PnL
  440.      */

  441.     public double curveShift1DPnL()
  442.     {
  443.         return _dbl1DCurveShiftPnL;
  444.     }

  445.     /**
  446.      * Retrieve the 1M Carry PnL
  447.      *
  448.      * @return The 1M Carry PnL
  449.      */

  450.     public double carry1MPnL()
  451.     {
  452.         return _dbl1MCarryPnL;
  453.     }

  454.     /**
  455.      * Retrieve the 1M Maturity Roll Down Swap Rate PnL
  456.      *
  457.      * @return The 1M Maturity Roll Down Swap Rate PnL
  458.      */

  459.     public double maturityRollDownSwapRate1MPnL()
  460.     {
  461.         return _dbl1MMaturityRollDownSwapRatePnL;
  462.     }

  463.     /**
  464.      * Retrieve the 3M Carry PnL
  465.      *
  466.      * @return The 3M Carry PnL
  467.      */

  468.     public double carry3MPnL()
  469.     {
  470.         return _dbl3MCarryPnL;
  471.     }

  472.     /**
  473.      * Retrieve the 3M Maturity Roll Down Swap Rate PnL
  474.      *
  475.      * @return The 3M Maturity Roll Down Swap Rate PnL
  476.      */

  477.     public double maturityRollDownSwapRate3MPnL()
  478.     {
  479.         return _dbl3MMaturityRollDownSwapRatePnL;
  480.     }

  481.     /**
  482.      * Retrieve the DV01
  483.      *
  484.      * @return The DV01
  485.      */

  486.     public double DV01()
  487.     {
  488.         return _dblDV01;
  489.     }

  490.     /**
  491.      * Retrieve the DV01 With Fixing
  492.      *
  493.      * @return The DV01 With Fixing
  494.      */

  495.     public double DV01WithFixing()
  496.     {
  497.         return _dblDV01WithFixing;
  498.     }

  499.     /**
  500.      * Retrieve the Clean Fixed DV01
  501.      *
  502.      * @return The Clean Fixed DV01
  503.      */

  504.     public double cleanFixedDV01()
  505.     {
  506.         return _dblCleanFixedDV01;
  507.     }

  508.     /**
  509.      * Retrieve the Clean Float DV01
  510.      *
  511.      * @return The Clean Float DV01
  512.      */

  513.     public double cleanFloatDV01()
  514.     {
  515.         return _dblCleanFloatDV01;
  516.     }

  517.     /**
  518.      * Retrieve the Clean Float DV01 With Fixing
  519.      *
  520.      * @return The Clean Float DV01 With Fixing
  521.      */

  522.     public double cleanFloatDV01WithFixing()
  523.     {
  524.         return _dblCleanFloatDV01WithFixing;
  525.     }

  526.     /**
  527.      * Retrieve the Baseline Swap Rate
  528.      *
  529.      * @return The Baseline Swap Rate
  530.      */

  531.     public double baselineSwapRate()
  532.     {
  533.         return _dblBaselineSwapRate;
  534.     }

  535.     /**
  536.      * Retrieve the 1D Time Roll Swap Rate
  537.      *
  538.      * @return The 1D Time Roll Swap Rate
  539.      */

  540.     public double timeRollSwapRate1D()
  541.     {
  542.         return _dbl1DTimeRollSwapRate;
  543.     }

  544.     /**
  545.      * Retrieve the 1D Maturity Roll Down Swap Rate
  546.      *
  547.      * @return The 1D Maturity Roll Down Swap Rate
  548.      */

  549.     public double maturityRollDownSwapRate1D()
  550.     {
  551.         return _dbl1DMaturityRollDownSwapRate;
  552.     }

  553.     /**
  554.      * Retrieve the 1M Maturity Roll Down Swap Rate
  555.      *
  556.      * @return The 1M Maturity Roll Down Swap Rate
  557.      */

  558.     public double maturityRollDownSwapRate1M()
  559.     {
  560.         return _dbl1MMaturityRollDownSwapRate;
  561.     }

  562.     /**
  563.      * Retrieve the 3M Maturity Roll Down Swap Rate
  564.      *
  565.      * @return The 3M Maturity Roll Down Swap Rate
  566.      */

  567.     public double maturityRollDownSwapRate3M()
  568.     {
  569.         return _dbl3MMaturityRollDownSwapRate;
  570.     }

  571.     /**
  572.      * Retrieve the 1D Maturity Roll Up Swap Rate
  573.      *
  574.      * @return The 1D Maturity Roll Up Swap Rate
  575.      */

  576.     public double maturityRollUpSwapRate1D()
  577.     {
  578.         return _dbl1DMaturityRollUpSwapRate;
  579.     }

  580.     /**
  581.      * Retrieve the 1D Maturity Roll Up Fair Premium
  582.      *
  583.      * @return The 1D Maturity Roll Up Fair Premium
  584.      */

  585.     public double maturityRollUpFairPremium1D()
  586.     {
  587.         return _dbl1DMaturityRollUpFairPremium;
  588.     }

  589.     /**
  590.      * Retrieve the 1D Maturity Roll Up Fair Premium With Fixing
  591.      *
  592.      * @return The 1D Maturity Roll Up Fair Premium With Fixing
  593.      */

  594.     public double maturityRollUpFairPremiumWithFixing1D()
  595.     {
  596.         return _dbl1DMaturityRollUpFairPremiumWithFixing;
  597.     }

  598.     /**
  599.      * Retrieve the 1D Curve Shift Swap Rate
  600.      *
  601.      * @return The 1D Curve Shift Swap Rate
  602.      */

  603.     public double curveShiftSwapRate1D()
  604.     {
  605.         return _dbl1DCurveShiftSwapRate;
  606.     }

  607.     /**
  608.      * Retrieve the Period Fixed Rate
  609.      *
  610.      * @return The Period Fixed Rate
  611.      */

  612.     public double periodFixedRate()
  613.     {
  614.         return _dblPeriodFixedRate;
  615.     }

  616.     /**
  617.      * Retrieve the Period Curve Floating Rate
  618.      *
  619.      * @return The Period Curve Floating Rate
  620.      */

  621.     public double periodCurveFloatingRate()
  622.     {
  623.         return _dblPeriodCurveFloatingRate;
  624.     }

  625.     /**
  626.      * Retrieve the Period Product Floating Rate
  627.      *
  628.      * @return The Period Product Floating Rate
  629.      */

  630.     public double periodProductFloatingRate()
  631.     {
  632.         return _dblPeriodProductFloatingRate;
  633.     }

  634.     /**
  635.      * Retrieve the Period Floating Rate Used
  636.      *
  637.      * @return The Period Floating Rate Used
  638.      */

  639.     public double periodFloatingRateUsed()
  640.     {
  641.         return _dblPeriodFloatingRateUsed;
  642.     }

  643.     /**
  644.      * Retrieve the 1D Fixed Accrual Period
  645.      *
  646.      * @return The 1D Fixed Accrual Period
  647.      */

  648.     public int fixed1DAccrualDays()
  649.     {
  650.         return _i1DFixedAccrualDays;
  651.     }

  652.     /**
  653.      * Retrieve the 1D Floating Accrual Period
  654.      *
  655.      * @return The 1D Floating Accrual Period
  656.      */

  657.     public int floating1DAccrualDays()
  658.     {
  659.         return _i1DFloatingAccrualDays;
  660.     }

  661.     /**
  662.      * Retrieve the Period 1D Fixed DCF
  663.      *
  664.      * @return The Period 1D Fixed DCF
  665.      */

  666.     public double fixed1DDCF()
  667.     {
  668.         return _dbl1DFixedDCF;
  669.     }

  670.     /**
  671.      * Retrieve the Period 1D Floating DCF
  672.      *
  673.      * @return The Period 1D Floating DCF
  674.      */

  675.     public double floating1DDCF()
  676.     {
  677.         return _dbl1DFloatingDCF;
  678.     }

  679.     /**
  680.      * Retrieve the Period 1M Fixed DCF
  681.      *
  682.      * @return The Period 1M Fixed DCF
  683.      */

  684.     public double fixed1MDCF()
  685.     {
  686.         return _dbl1MFixedDCF;
  687.     }

  688.     /**
  689.      * Retrieve the Period 1M Floating DCF
  690.      *
  691.      * @return The Period 1M Floating DCF
  692.      */

  693.     public double floating1MDCF()
  694.     {
  695.         return _dbl1MFloatingDCF;
  696.     }

  697.     /**
  698.      * Retrieve the Period 3M Fixed DCF
  699.      *
  700.      * @return The Period 3M Fixed DCF
  701.      */

  702.     public double fixed3MDCF()
  703.     {
  704.         return _dbl3MFixedDCF;
  705.     }

  706.     /**
  707.      * Retrieve the Period 3M Floating DCF
  708.      *
  709.      * @return The Period 3M Floating DCF
  710.      */

  711.     public double floating3MDCF()
  712.     {
  713.         return _dbl3MFloatingDCF;
  714.     }

  715.     /**
  716.      * Retrieve the Array of Metrics
  717.      *
  718.      * @return The Array of Metrics
  719.      */

  720.     public double[] toArray()
  721.     {
  722.         java.util.List<java.lang.Double> lsPnLMetric = new java.util.ArrayList<java.lang.Double>();

  723.         lsPnLMetric.add (_dbl1DTotalPnL);

  724.         lsPnLMetric.add (_dbl1DCleanPnL);

  725.         lsPnLMetric.add (_dbl1DDirtyPnL);

  726.         lsPnLMetric.add (_dbl1DTotalPnLWithFixing);

  727.         lsPnLMetric.add (_dbl1DCleanPnLWithFixing);

  728.         lsPnLMetric.add (_dbl1DDirtyPnLWithFixing);

  729.         lsPnLMetric.add (_dbl1DCarryPnL);

  730.         lsPnLMetric.add (_dbl1DTimeRollPnL);

  731.         lsPnLMetric.add (_dbl1DMaturityRollDownSwapRatePnL);

  732.         lsPnLMetric.add (_dbl1DMaturityRollUpSwapRatePnL);

  733.         lsPnLMetric.add (_dbl1DMaturityRollUpFairPremiumPnL);

  734.         lsPnLMetric.add (_dbl1DMaturityRollUpFairPremiumWithFixingPnL);

  735.         lsPnLMetric.add (_dbl1DCurveShiftPnL);

  736.         lsPnLMetric.add (_dbl1MCarryPnL);

  737.         lsPnLMetric.add (_dbl1MMaturityRollDownSwapRatePnL);

  738.         lsPnLMetric.add (_dbl3MCarryPnL);

  739.         lsPnLMetric.add (_dbl3MMaturityRollDownSwapRatePnL);

  740.         lsPnLMetric.add (_dblDV01);

  741.         lsPnLMetric.add (_dblDV01WithFixing);

  742.         lsPnLMetric.add (_dblCleanFixedDV01);

  743.         lsPnLMetric.add (_dblCleanFloatDV01);

  744.         lsPnLMetric.add (_dblCleanFloatDV01WithFixing);

  745.         lsPnLMetric.add (_dblBaselineSwapRate);

  746.         lsPnLMetric.add (_dbl1DTimeRollSwapRate);

  747.         lsPnLMetric.add (_dbl1DMaturityRollDownSwapRate);

  748.         lsPnLMetric.add (_dbl1MMaturityRollDownSwapRate);

  749.         lsPnLMetric.add (_dbl3MMaturityRollDownSwapRate);

  750.         lsPnLMetric.add (_dbl1DMaturityRollUpSwapRate);

  751.         lsPnLMetric.add (_dbl1DMaturityRollUpFairPremium);

  752.         lsPnLMetric.add (_dbl1DMaturityRollUpFairPremiumWithFixing);

  753.         lsPnLMetric.add (_dbl1DCurveShiftSwapRate);

  754.         lsPnLMetric.add (_dblPeriodFixedRate);

  755.         lsPnLMetric.add (_dblPeriodCurveFloatingRate);

  756.         lsPnLMetric.add (_dblPeriodProductFloatingRate);

  757.         lsPnLMetric.add (_dblPeriodFloatingRateUsed);

  758.         lsPnLMetric.add ((double) _i1DFixedAccrualDays);

  759.         lsPnLMetric.add ((double) _i1DFloatingAccrualDays);

  760.         lsPnLMetric.add (_dbl1DFixedDCF);

  761.         lsPnLMetric.add (_dbl1DFloatingDCF);

  762.         lsPnLMetric.add (_dbl1MFixedDCF);

  763.         lsPnLMetric.add (_dbl1MFloatingDCF);

  764.         lsPnLMetric.add (_dbl3MFixedDCF);

  765.         lsPnLMetric.add (_dbl3MFloatingDCF);

  766.         int i = 0;

  767.         double[] adblSPCA = new double[lsPnLMetric.size()];

  768.         for (double dbl : lsPnLMetric)
  769.             adblSPCA[i++] = dbl;

  770.         return adblSPCA;
  771.     }

  772.     @Override public java.lang.String toString()
  773.     {
  774.         java.lang.StringBuffer sb = new java.lang.StringBuffer();

  775.         boolean bStart = true;

  776.         for (double dbl : toArray()) {
  777.             if (bStart)
  778.                 bStart = false;
  779.             else
  780.                 sb.append (",");

  781.             sb.append (dbl);
  782.         }

  783.         return sb.toString();
  784.     }
  785. }