ProxyGreekEngine::ProxyGreekEngine( const boost::shared_ptr<MarketModelEvolver>& evolver, const std::vector< std::vector<boost::shared_ptr<ConstrainedEvolver> > >& constrainedEvolvers, const std::vector<std::vector<std::vector<Real> > >& diffWeights, const std::vector<Size>& startIndexOfConstraint, const std::vector<Size>& endIndexOfConstraint, const Clone<MarketModelMultiProduct>& product, Real initialNumeraireValue) : originalEvolver_(evolver), constrainedEvolvers_(constrainedEvolvers), diffWeights_(diffWeights), startIndexOfConstraint_(startIndexOfConstraint), endIndexOfConstraint_(endIndexOfConstraint), product_(product), initialNumeraireValue_(initialNumeraireValue), numberProducts_(product->numberOfProducts()), numerairesHeld_(product->numberOfProducts()), numberCashFlowsThisStep_(product->numberOfProducts()), cashFlowsGenerated_(product->numberOfProducts()) { for (Size i=0; i<numberProducts_; ++i) cashFlowsGenerated_[i].resize( product_->maxNumberOfCashFlowsPerProductPerStep()); const std::vector<Time>& cashFlowTimes = product_->possibleCashFlowTimes(); const std::vector<Rate>& rateTimes = product_->evolution().rateTimes(); Size n = cashFlowTimes.size(); discounters_.reserve(n); for (Size j=0; j<n; ++j) discounters_.push_back(MarketModelDiscounter(cashFlowTimes[j], rateTimes)); const std::vector<Rate>& evolutionTimes = product_->evolution().evolutionTimes(); constraints_.resize(evolutionTimes.size()); constraintsActive_.resize(evolutionTimes.size()); }