wxTreeItemId CEditAnimationDialog::AddModelToTree( TString ModelName )
{
    wxTreeItemId item = m_pModelTree->AppendItem(m_pModelTree->GetRootItem(), ModelName, eTCIT_File);
    CModel* pNewModel = new CModel;
    pNewModel->Initialize();
    m_ModelNameMap[item] = pNewModel;
    return item;
}
int main(int argc, char** argv)
{
   
	// sanity check
	if(argc < 2) 
	{
		std::cout << "Usage: ramp-bmrm-predict config.file" << std::endl;
		std::cout << "Check the configfiles directory for examples" << std::endl;
		std::cout << "ERROR: No configuration file given!" << std::endl;
		exit(EXIT_FAILURE);
	}

	// the very first thing to do!
	Configuration &config = Configuration::GetInstance();
	config.ReadFromFile(argv[1]);
	
	CData* data = 0;
	CLoss* loss_vex = 0;
	CLoss* loss_cav = 0;
	CModel* model = 0;
	
	try {
		// serial computation with centralised data
		config.SetString("Computation.mode", "SERIAL_CENTRALISED_DS");
		
		std::string modelFilename = config.GetString("Model.modelFile");
		std::string programMode = config.GetString("Program.mode");

		data = CDataFactory::GetData();     		
		model = CModelFactory::GetModel();
		model->Initialize(modelFilename, data->dim());
		CRampLossFactory::GetRampLoss(model,data, loss_vex, loss_cav);
		
		if(programMode == "PREDICTION")
			loss_vex->Predict(model);
		else if(programMode == "EVALUATION")
			loss_vex->Evaluate(model);
		else
			throw CBMRMException("unknown program mode <" + programMode +">","main()");
		
		// compute ramp loss function value
		Scalar lossVal_vex = 0.0;
		Scalar lossVal_cav = 0.0;
		
		loss_vex->ComputeLoss(lossVal_vex);
		loss_cav->ComputeLoss(lossVal_cav);

		std::cout << "a) Convex loss function value: " << lossVal_vex << std::endl;
		std::cout << "b) Concave loss function linearization value: " << lossVal_cav << std::endl;
		std::cout << "c) Ramp loss function value (a-b) : " << lossVal_vex - lossVal_cav << std::endl;

		// cleaning up
		delete model;
		delete loss_vex;
		delete loss_cav;
		delete data;
		
	}
	catch(CBMRMException e) {
		cout << e.Report() << endl;
	}
	
	return EXIT_SUCCESS;
}