/**
* Copyright (C) 2011 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.analytics.financial.montecarlo;
import java.util.Arrays;
import org.apache.commons.lang.Validate;
/**
* Class describing the time and amount required to price interest rate derivatives. The data is used in particular for Monte Carlo pricing.
*/
public class DecisionSchedule {
/**
* The time at which an exercise or fixing take place.
*/
private final double[] _decisionTime;
/**
* The time impacting the value at each decision date.
*/
private final double[][] _impactTime;
/**
* The reference amounts at each impact times.
*/
private final double[][] _impactAmount;
/**
* Constructor.
* @param decisionTime The time at which an exercise or fixing take place.
* @param impactTime The time impacting the value at each decision date.
* @param impactAmount The reference amounts at each impact times.
*/
public DecisionSchedule(double[] decisionTime, double[][] impactTime, double[][] impactAmount) {
Validate.isTrue(decisionTime.length == impactTime.length, "Incorrect length");
Validate.isTrue(decisionTime.length == impactAmount.length, "Incorrect length");
_decisionTime = decisionTime;
_impactTime = impactTime;
_impactAmount = impactAmount;
}
/**
* Gets the decision times.
* @return The decision times.
*/
public double[] getDecisionTime() {
return _decisionTime;
}
/**
* Gets the time impacting the value at each decision date.
* @return The impact times.
*/
public double[][] getImpactTime() {
return _impactTime;
}
/**
* Gets the reference amounts at each impact times.
* @return The amounts.
*/
public double[][] getImpactAmount() {
return _impactAmount;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + Arrays.hashCode(_decisionTime);
result = prime * result + Arrays.hashCode(_impactAmount);
result = prime * result + Arrays.hashCode(_impactTime);
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
DecisionSchedule other = (DecisionSchedule) obj;
if (!Arrays.equals(_decisionTime, other._decisionTime)) {
return false;
}
if (!Arrays.equals(_impactAmount, other._impactAmount)) {
return false;
}
if (!Arrays.equals(_impactTime, other._impactTime)) {
return false;
}
return true;
}
}