void test_Calib_gMatrix(const LmmCalibrationConfig& config , const std::string& mkt_data_filename)
{
	std::string folder_data_file = "WithPositiveConstraint\\" + LMMPATH::get_BaseFileName(mkt_data_filename) + "\\";

	LmmSwaptionMarketData_PTR pLmmSwaptionMarketData=get_LmmSwaptionMarketData(config, mkt_data_filename);

	{
		std::string sub_folder_data_file = folder_data_file + "Cascade\\";
		LMMPATH::reset_Output_SubFolder(sub_folder_data_file );
		GMatrixMapping_PTR pGMatrixMapping = marketData_LMM_CascadeExact_calibration(config, pLmmSwaptionMarketData, config.get_abcdArray() ,create_InitCorrelation(config));
		config.print("calib_config.csv");
	}

	{
		config.use_local_calib_=false;
		std::string sub_folder_data_file = folder_data_file + "Global\\";
		LMMPATH::reset_Output_SubFolder(sub_folder_data_file );
		marketData_LMM_Global_gCalibration(config, pLmmSwaptionMarketData,config.get_abcdArray(),create_InitCorrelation(config), GMatrixMapping_PTR() );
		config.print("calib_config.csv");
	}

	{
		config.use_local_calib_=true;
		std::string sub_folder_data_file = folder_data_file + "Local\\";
		LMMPATH::reset_Output_SubFolder(sub_folder_data_file );
		marketData_LMM_Global_gCalibration(config, pLmmSwaptionMarketData,config.get_abcdArray(),create_InitCorrelation(config), GMatrixMapping_PTR() );
		config.print("calib_config.csv");
	}


}
void test_calibration_Cascade_then_Global(const std::string& mkt_data_filename)
{
	LmmCalibrationConfig config;
	config.reset_nbYear(16);
	config.correl_ReducedRank_= 3;

	config.correl_alpha_ = 0.000000001;
	config.correl_beta_  = 0.05;

	config.vol_abcd_.a_  = 0.25673;
	config.vol_abcd_.b_  = 0.00002;
	config.vol_abcd_.c_  = 0.547;
	config.vol_abcd_.d_  = 0.13998;

	config.use_positive_constraint_=true;
	

	std::stringstream foldername ;

	std::string base_name_file = LMMPATH::get_BaseFileName(mkt_data_filename) + "\\";
	foldername<<"Cascade_Then_Global\\";

	foldername << base_name_file ;

	LMMPATH::reset_Output_SubFolder(foldername.str() );


	LmmSwaptionMarketData_PTR pLmmSwaptionMarketData=get_LmmSwaptionMarketData(config, mkt_data_filename );

	GMatrixMapping_PTR pGMatrixMapping = marketData_LMM_CascadeExact_calibration(config, pLmmSwaptionMarketData, config.get_abcdArray() ,create_InitCorrelation(config));
	
	marketData_LMM_Global_gCalibration(config, pLmmSwaptionMarketData,config.get_abcdArray(),create_InitCorrelation(config),pGMatrixMapping );	
}
void test_LmmGenericSensitivity(const std::string& mkt_data_filename)
{

	LmmCalibrationConfig config;
	config.reset_nbYear(16);
	config.correl_ReducedRank_= 3;

	config.correl_alpha_ = 0.000000001;
	config.correl_beta_  = 0.05;

	config.vol_abcd_.a_  = 0.136554  ;
	config.vol_abcd_.b_  = 8.45E-06  ;
	config.vol_abcd_.c_  = 0.0439938 ;
	config.vol_abcd_.d_  = 0.0269172 ;
	
	config.penalty_libor_ = 1e-6;
	config.penalty_time_homogeneity_ = 1e-4;

	config.use_positive_constraint_=true;
	
	std::stringstream foldername ;

	std::string base_name_file = LMMPATH::get_BaseFileName(mkt_data_filename) + "\\";
	foldername<<"Regularized_";

	foldername << base_name_file ;

	LMMPATH::reset_Output_SubFolder(foldername.str() );
	
	LmmSwaptionMarketData_PTR pLmmSwaptionMarketData=get_LmmSwaptionMarketData(config, mkt_data_filename );

	//config.print("config_for_abcd_calibration.csv");
	//QuantLib::Array calibrated_abcd = marketData_LMM_ABCD_calibration(config,pLmmSwaptionMarketData);

	marketData_LMM_Global_gCalibration(config, pLmmSwaptionMarketData,config.get_abcdArray(),create_InitCorrelation(config), GMatrixMapping_PTR() );

	//QuantLib::Array calibrated_abcd(4);
	//config.correl_alpha_= 1e-7 ; config.correl_beta_= 1;
	//calibrated_abcd[0]=0.223519;calibrated_abcd[1]=1.36E-05;calibrated_abcd[2]=0.455953;calibrated_abcd[3]=0.140501;
	//Correlation_PTR pCorrelation = marketData_LMM_Correlation_calibration(config,pLmmSwaptionMarketData, calibrated_abcd );

	//config.print("config_for_correlation_calibration.csv");
	//Correlation_PTR pCorrelation = marketData_LMM_Correlation_calibration(config,pLmmSwaptionMarketData, calibrated_abcd );
	//Correlation_PTR pCorrelation = create_InitCorrelation(config);
	//GMatrixMapping_PTR pGMatrixMapping = marketData_LMM_CascadeExact_calibration(config, pLmmSwaptionMarketData, config.get_abcdArray() ,pCorrelation);
	//marketData_LMM_Global_gCalibration(config, pLmmSwaptionMarketData,config.get_abcdArray(),pCorrelation, pGMatrixMapping );



	foldername.str( std::string() ) ;
}
void test_LmmSensitivityCorrelationReducedRank()
{
	std::vector<std::string> mkt_file_list = InputFileManager::get_VCUB_FileList();
	size_t nbFile = mkt_file_list.size();

	LmmCalibrationConfig config;
	config.reset_nbYear(16);
	config.vol_abcd_.a_ = 0.148975	;
	config.vol_abcd_.b_ = 0.0197503	;
	config.vol_abcd_.c_ = 0.108518	;
	config.vol_abcd_.d_ = 1.38E-08  ;


	std::vector<size_t> reduced_rank_list;
	reduced_rank_list.push_back(3);
	reduced_rank_list.push_back(5);
	reduced_rank_list.push_back(10);
	reduced_rank_list.push_back(15);
	reduced_rank_list.push_back(20);
	reduced_rank_list.push_back(25);
	reduced_rank_list.push_back(30);

	std::stringstream foldername ;

	LmmSwaptionMarketData_PTR pLmmSwaptionMarketData=get_LmmSwaptionMarketData(config, mkt_file_list[0]);

	for(size_t i=0; i<reduced_rank_list.size();++i)
	{
		config.correl_ReducedRank_ = reduced_rank_list[i]  ;

		foldername << LMMPATH::get_BaseFileName(mkt_file_list[0])<<"\\"<<"ReducedRank_"<<reduced_rank_list[i]<<"\\";
		LMMPATH::reset_Output_SubFolder(foldername.str() );

		Correlation_PTR pCorrelation = marketData_LMM_Correlation_calibration(config,pLmmSwaptionMarketData,config.get_abcdArray() );

		foldername.str( std::string() ) ;
	}
}