void CommandlineInterface(vector<string> Arguments) {
	bool InputArgument = false;	
	vector<string> ParameterFiles;
	for (int i=0; i < int(Arguments.size()); i++) {
		if (Arguments[i].compare("inputfilelist") == 0) {
			if (int(Arguments.size()) >= i+2) {
				InputArgument = true;
				SetInputParametersFile(Arguments[i+1].data());
			}
		} if (Arguments[i].compare("parameterfile") == 0) {
			if (int(Arguments.size()) >= i+2) {
				ParameterFiles.push_back(Arguments[i+1].data());
				i++;
			}
		} 
	}
	if (!InputArgument) {
		SetInputParametersFile(COMMANDLINE_INPUT_FILE);
	}
	LoadParameters();
	for(int i=0; i < int(ParameterFiles.size()); i++) {
		LoadParameterFile(ParameterFiles[i]);
	}
	for (int i=0; i < int(Arguments.size()); i++) {
		if (Arguments[i].compare("resetparameter") == 0) {
			if (int(Arguments.size()) >= i+3) {
				string ParameterName = Arguments[i+1];
				findandreplace(ParameterName,"_"," ");
				SetParameter(ParameterName.data(),Arguments[i+2].data());		
			}
		} 
	}
	ClearParameterDependance("CLEAR ALL PARAMETER DEPENDANCE");
	if (Initialize() != SUCCESS) {
		return;
	}
	LoadFIGMODELParameters();
	ClearParameterDependance("CLEAR ALL PARAMETER DEPENDANCE");
	for (int i=0; i < int(Arguments.size()); i++) {
		if (Arguments[i].compare("stringcode") == 0) {
			if (int(Arguments.size()) < i+3) {
				cout << "Insufficient arguments" << endl;
				FErrorFile() << "Insufficient arguments" << endl;
				FlushErrorFile();
			} else {
				CreateStringCode(Arguments[i+1],Arguments[i+2]);
				i += 2;
			}
		} else if (Arguments[i].compare("LoadCentralSystem") == 0 || Arguments[i].compare("LoadDecentralSystem") == 0) {
			if (int(Arguments.size()) < i+2) {
				cout << "Insufficient arguments" << endl;
				FErrorFile() << "Insufficient arguments" << endl;
				FlushErrorFile();
			} else {
				LoadDatabaseFile(Arguments[i+1].data());		
			}
		} else if (Arguments[i].compare("ProcessDatabase") == 0) {
			ProcessDatabase();
		} else if (Arguments[i].compare("metabolites") == 0) {
			if (int(Arguments.size()) < i+2) {
				cout << "Insufficient arguments" << endl;
				FErrorFile() << "Insufficient arguments" << endl;
				FlushErrorFile();
			} else {
				SetParameter("metabolites to optimize",Arguments[i+1].data());		
			}
		} else if (Arguments[i].compare("WebGCM") == 0) {
			if (int(Arguments.size()) < i+3) {
				cout << "Insufficient arguments" << endl;
				FErrorFile() << "Insufficient arguments" << endl;
				FlushErrorFile();
			} else {
				RunWebGCM(Arguments[i+1].data(),Arguments[i+2].data());		
			}
		} else if (Arguments[i].compare("ProcessMolfiles") == 0) {
			if (int(Arguments.size()) < i+3) {
				cout << "Insufficient arguments" << endl;
				FErrorFile() << "Insufficient arguments" << endl;
				FlushErrorFile();
			} else {
				ProcessMolfileDirectory(Arguments[i+1].data(),Arguments[i+2].data());		
			}
		} else if (Arguments[i].compare("ProcessMolfileList") == 0) {
			ProcessMolfiles();
		}
	}
}
//---------------------------------------------------------------------------------
// Purpose: Initialise the database fields
//---------------------------------------------------------------------------------
bool ManiDatabase::Init(void)
{

	LoadDatabaseFile();
	return true;
}