function varargout = WhatIfAnalysis(varargin)
% MATPLANWDM Application M-file for matplanwdm.fig
% FIG = matplanwdm2 launch matplanwdm2 GUI.
% matplanwdm('callback_name', ...) invoke the named callback.
% Last Modified by GUIDE v2.5 14-Jul-2006 18:15:26
if nargin == 0 % LAUNCH GUI
close all
clear all
clc
fig = openfig(mfilename,'new');
% Generate a structure of handles to pass to callbacks, and store it.
handles = guihandles(fig);
guidata(fig, handles);
if nargout > 0
varargout{1} = fig;
end
gui_ini(handles)
elseif ischar(varargin{1}) % INVOKE NAMED SUBFUNCTION OR CALLBACK
try
if (nargout)
[varargout{1:nargout}] = feval(varargin{:}); % FEVAL switchyard
else
feval(varargin{:}); % FEVAL switchyard
end
catch
disp(lasterr);
end
end
%set(fig,'Color',get(0,'DefaultUicontrolBackgroundColor'));
%| ABOUT CALLBACKS:
%| GUIDE automatically appends subfunction prototypes to this file, and
%| sets objects' callback properties to call them through the FEVAL
%| switchyard above. This comment describes that mechanism.
%|
%| Each callback subfunction declaration has the following form:
%| <SUBFUNCTION_NAME>(H, EVENTDATA, HANDLES, VARARGIN)
%|
%| The subfunction name is composed using the object's Tag and the
%| callback type separated by '_', e.g. 'slider2_Callback',
%| 'figure1_CloseRequestFcn', 'axis1_ButtondownFcn'.
%|
%| H is the callback object's handle (obtained using GCBO).
%|
%| EVENTDATA is empty, but reserved for future use.
%|
%| HANDLES is a structure containing handles of components in GUI using
%| tags as fieldnames, e.g. handles.figure1, handles.slider2. This
%| structure is created at GUI startup using GUIHANDLES and stored in
%| the figure's application data using GUIDATA. A copy of the structure
%| is passed to each callback. You can store additional information in
%| this structure at GUI startup, and you can change the structure
%| during callbacks. Call guidata(h, handles) after changing your
%| copy to replace the stored original so that subsequent callbacks see
%| the updates. Type "help guihandles" and "help guidata" for more
%| information.
%|
%| VARARGIN contains any extra arguments you have passed to the
%| callback. Specify the extra arguments by editing the callback
%| property in the inspector. By default, GUIDE sets the property to:
%| <MFILENAME>('<SUBFUNCTION_NAME>', gcbo, [], guidata(gcbo))
%| Add any extra arguments after the last argument, before the final
%| closing parenthesis.
%
%set(fig,'Color',get(0,'DefaultUicontrolBackgroundColor'));
% --------------------------------------------------------------------
% --------------------------------------------------------------------
% INITIALIZATION FUNCTION
% --------------------------------------------------------------------
% --------------------------------------------------------------------
function gui_ini(handles)
load_global;
imageUPCT=imread('upct_logo.jpg','jpg');
axes(handles.axes6);
image(imageUPCT);
axis off
set(handles.men1,'Checked','off');
set(handles.men2,'Checked','on');
%%HEURISTICS MENU BUILDING
h = dir(fullfile(pwd, 'algorithms/staticPlanning/*.m'));
priv_h = dir(fullfile(pwd, 'algorithms/private/staticPlanning/*.m'));
numberOfPublicHeuristicAlgorithms = length(h);
numberOfPrivateHeuristicAlgorithms = length(priv_h);
heuristicAlgorithms=cell(numberOfPublicHeuristicAlgorithms+numberOfPrivateHeuristicAlgorithms,1);
heuristicAlgorithms(1:numberOfPublicHeuristicAlgorithms) = {h.name}';
heuristicAlgorithms(numberOfPublicHeuristicAlgorithms+1:end) = {priv_h.name}';
numberOfHeuristicAlgorithms=length(heuristicAlgorithms);
methodsString=cell(numberOfHeuristicAlgorithms+2,1);
methodsString(1)={['Select desired']};
methodsString(2)={['Mixer-integer Linear Programming (MILP)']};
methodsString(3:length(methodsString))=heuristicAlgorithms;
set(handles.method_popupmenu,'String',methodsString);
% --------------------------------------------------------------------
% --------------------------------------------------------------------
% MENUs
% --------------------------------------------------------------------
% --------------------------------------------------------------------
% *********************************************************************
% *********************************************************************
% MENU 1 - FILE
% *********************************************************************
% *********************************************************************
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Quit
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function varargout = Quit_Callback(h, eventdata, handles, varargin)
close
close all
% *********************************************************************
% *********************************************************************
% MENU 2 - MODE
% *********************************************************************
% *********************************************************************
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%mode1 - DESIGN LIGHTPATH LOGICAL NETWORK
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function varargout = mode1_Callback(h, eventdata, handles, varargin)
set(handles.men1,'Checked','on');
set(handles.men2,'Checked','off');
set(handles.men3,'Checked','off');
set(handles.men4,'Checked','off');
clear all
close
matplanwdm
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%mode2 - WHAT IF ANALYSIS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function varargout = modeWhatIf_Callback(h, eventdata, handles, varargin)
set(handles.men1,'Checked','off');
set(handles.men2,'Checked','on');
set(handles.men3,'Checked','off');
set(handles.men4,'Checked','off');
clear all
close
WhatIfAnalysis
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%mode3 - MULTIHOUR ANALYSIS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function varargout = modeMultiHour_Callback(h, eventdata, handles, varargin)
set(handles.men1,'Checked','off');
set(handles.men2,'Checked','off');
set(handles.men3,'Checked','on');
set(handles.men4,'Checked','off');
clear all
close
MultiHourAnalysis
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%mode4 - DYNAMIC ANALYSIS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function varargout = modeDynamic_Callback(h, eventdata, handles, varargin)
set(handles.men1,'Checked','off');
set(handles.men2,'Checked','off');
set(handles.men3,'Checked','off');
set(handles.men4,'Checked','on');
clear all
close
Dynamic
% *********************************************************************
% *********************************************************************
% MENU 3 - TOOLS
% *********************************************************************
% *********************************************************************
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Traffic Generation
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function varargout = trafficGen_Callback(h, eventdata, handles, varargin)
% load_global;%Global variables are loaded
trafficGenerationFigure=openfig('trafficGeneration.fig','reuse');
dataTrafficGenerationFigure=guihandles(trafficGenerationFigure);
guidata(trafficGenerationFigure,dataTrafficGenerationFigure);
numberOfNodes=0;
% *********************************************************************
% *********************************************************************
% MENU 4 - HELP
% *********************************************************************
% *********************************************************************
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%MatplanWDM HELP
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function varargout = matplanwdmHelp_Callback(h, eventdata, handles, varargin)
HelpPath =[pwd '\help\matplanwdmHelp.html'];
web(HelpPath, '-helpbrowser')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%About
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function varargout = about_Callback(h, eventdata, handles, varargin)
openfig('about.fig','new')
% --------------------------------------------------------------------
% --------------------------------------------------------------------
% GENERAL INPUT ARGUMENTS
% --------------------------------------------------------------------
% --------------------------------------------------------------------
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%openPhysFile_pushbutton - OPEN PHYS FILE BUTTON
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function varargout = openPhysFile_pushbutton_Callback(h, eventdata, handles, varargin)
load_global_WhatIf;%Global variables are loaded
axes(handles.axes1);
%We open the file to read our 'Physical Topology File (*.phys)'
[filename, pathname] = uigetfile({'*.xml','Physical Topology File'},'Open Physical Topology File','data\physicalTopologies\');
topologyFilename=filename;
fullpathname=[pathname filename];
try
[metadata, physFromFile] = io_readXML(fullpathname);
checkPhys(physFromFile)
catch
lastErrorMsg=lasterr;
errordlg(lastErrorMsg,'Unexpected Error On Reading/Checking Physical Topology from the XML File!!!','modal');
return
end
axes(handles.axes1);
hold off
plotTopology(physFromFile.nodesPlaceMatrix,physFromFile.linkTable,0,'',1)
axis('off');
% %We show the loaded file in the edit
physTextReport = physXMLfileTextReport(metadata , physFromFile);
previousText=get(handles.edit6,'String');
topologyReport=vertcat(previousText, {[' ']},{['######### PHYSICAL TOPOLOGY FILE "',topologyFilename,'" LOADED ##########']},{[' ']}, physTextReport) ;
set(handles.edit6,'String', topologyReport);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%openTraffFile_pushbutton - OPEN TRAFF FILE BUTTON
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function varargout = openTraffFile_pushbutton_Callback(h, eventdata, handles, varargin)
load_global_WhatIf;%Global variables are loaded
%We open the file to read our 'Traffic File (*.traff)'
[filename, pathname] = uigetfile({'*.traff','Traffic File (*.traff)'},'Open Traffic File','data\traffics\');
trafficFilename=filename;
fullpathname=[pathname filename];
[traff_trafficMatrixFromFile, errmsg, errorFlag] = IO_readTraffFile(fullpathname);
if errorFlag==-1,
errordlg(errmsg,'Error On Reading Traff File!!!','modal');
return
else
[traffString] = IO_writeTraffString(traff_trafficMatrixFromFile);
end
% %We show the loaded file in the edit
previousText=get(handles.edit6,'String');
trafficReport=vertcat(previousText, {[' ']},{['############### TRAFFIC FILE "',trafficFilename,'" LOADED ##############']},{[' ']}, {traffString});
set(handles.edit6,'String', trafficReport);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%FirstSweepParameter_popupmenu - POPUPMENU TO SELECT THE 1st SWEEP PARAMETER
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function varargout = FirstSweepParameter_popupmenu_Callback(h, eventdata, handles, varargin)
load_global_WhatIf;%Global variables are loaded
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%SecondSweepParameter_popupmenu - POPUPMENU TO SELECT THE 2nd SWEEP PARAMETER
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function varargout = SecondSweepParameter_popupmenu_Callback(h, eventdata, handles, varargin)
load_global_WhatIf;%Global variables are loaded
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%FirstSweepLowerLimit_edit - LOWER LIMIT OF THE FIRST SWEEP IN %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function varargout = FirstSweepLowerLimit_edit_Callback(h, eventdata, handles, varargin)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%FirstSweepStep_edit - UPPER LIMIT OF THE FIRST SWEEP IN %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function varargout = FirstSweepStep_edit_Callback(h, eventdata, handles, varargin)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%FirstSweepNrPoints_edit - NUMBER OF POINTS IN THE FIRST SWEEP
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function varargout = FirstSweepNrPoints_edit_Callback(h, eventdata, handles, varargin)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%SecondSweepLowerLimit_edit - LOWER LIMIT OF THE SECOND SWEEP IN %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function varargout = SecondSweepLowerLimit_edit_Callback(h, eventdata, handles, varargin)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%SecondSweepStep_edit - UPPER LIMIT OF THE SECOND SWEEP IN %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function varargout = SecondSweepStep_edit_Callback(h, eventdata, handles, varargin)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%SecondSweepNrPoints_edit - NUMBER OF POINTS IN THE SECOND SWEEP
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function varargout = SecondSweepNrPoints_edit_Callback(h, eventdata, handles, varargin)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%secondSweep_checkbox - CHECKBOX TO ACTIVATE THE SECOND SWEEP PARAMETER
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function varargout= secondSweep_checkbox(h, eventdata, handles, varargin)
if get(handles.secondSweep_checkbox,'Value')==1,
set(handles.text40,'Enable','On')
set(handles.text43,'Enable','On')
set(handles.text44,'Enable','On')
set(handles.text45,'Enable','On')
set(handles.text48,'Enable','On')
set(handles.SecondSweepParameter_popupmenu,'Enable','On')
set(handles.SecondSweepLowerLimit_edit,'Enable','On')
set(handles.SecondSweepStep_edit,'Enable','On')
set(handles.SecondSweepNrPoints_edit,'Enable','On')
else
set(handles.text40,'Enable','Off')
set(handles.text43,'Enable','Off')
set(handles.text44,'Enable','Off')
set(handles.text45,'Enable','Off')
set(handles.text48,'Enable','Off')
set(handles.SecondSweepParameter_popupmenu,'Enable','Off')
set(handles.SecondSweepLowerLimit_edit,'Enable','Off')
set(handles.SecondSweepStep_edit,'Enable','Off')
set(handles.SecondSweepNrPoints_edit,'Enable','Off')
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%POPUPMENU TO SELECTED METHODS FOR THE ANALYSIS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function varargout = method_popupmenu_Callback(h, eventdata, handles, varargin)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%PUSHBUTTON TO DEFINE THE METHODS FOR THE ANALYSIS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function varargout = listOfMethods_pushbutton_Callback(h, eventdata, handles, varargin)
load_global_WhatIf;
methodSelection=get(handles.method_popupmenu,'Value')-1;
algorithmParameters=get(handles.AlgorithmParameters_edit, 'String');
%we catch the algorithm parameters
switch methodSelection
case 0
errordlg('Incorrect Method Selection','Empty or Bad Input Data','modal');
return;
case 1 %MILP Method
method='MILP';
otherwise%heuristics
[pathstr,method,ext,versn]=fileparts(heuristicAlgorithms{methodSelection-1});
end
previousText=get(handles.listOfMethods_edit,'String');
numberOfMethods=numel(previousText)+1;
listOfMethodsString=vertcat(previousText, {[num2str(numberOfMethods),'. ' method ' - ' algorithmParameters]});
set(handles.listOfMethods_edit,'String',listOfMethodsString)
if numberOfMethods > 1, %We deactivate the 2nd sweep
set(handles.secondSweep_checkbox,'Enable','Off')
set(handles.secondSweep_checkbox,'Value',0)
set(handles.text40,'Enable','Off')
set(handles.text43,'Enable','Off')
set(handles.text44,'Enable','Off')
set(handles.text45,'Enable','Off')
set(handles.text48,'Enable','Off')
set(handles.SecondSweepParameter_popupmenu,'Enable','Off')
set(handles.SecondSweepLowerLimit_edit,'Enable','Off')
set(handles.SecondSweepStep_edit,'Enable','Off')
set(handles.SecondSweepNrPoints_edit,'Enable','Off')
else
set(handles.secondSweep_checkbox,'Enable','On')
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%PUSHBUTTON TO REMOVE METHODS FROM THE LIST OF METHODS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function varargout = RemoveMethod_pushbutton_Callback(h, eventdata, handles, varargin)
load_global_WhatIf;%Global variables are loaded
listOfMethodsString=get(handles.listOfMethods_edit,'String');
numberOfMethods=numel(listOfMethodsString);
if numberOfMethods>0,
listOfMethodsString(end)=[];
numberOfMethods=numberOfMethods-1;
end
set(handles.listOfMethods_edit,'String',listOfMethodsString)
if numberOfMethods > 1, %We deactivate the 2nd sweep
set(handles.secondSweep_checkbox,'Enable','Off')
set(handles.secondSweep_checkbox,'Value',0)
set(handles.text40,'Enable','Off')
set(handles.text43,'Enable','Off')
set(handles.text44,'Enable','Off')
set(handles.text45,'Enable','Off')
set(handles.text48,'Enable','Off')
set(handles.SecondSweepParameter_popupmenu,'Enable','Off')
set(handles.SecondSweepLowerLimit_edit,'Enable','Off')
set(handles.SecondSweepStep_edit,'Enable','Off')
set(handles.SecondSweepNrPoints_edit,'Enable','Off')
else
set(handles.secondSweep_checkbox,'Enable','On')
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%metric_popupmenu - METRIC SELECTION
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function varargout = metric_popupmenu_Callback(h, eventdata, handles, varargin)
load_global_WhatIf;%Global variables are loaded
axes(handles.axes2);
metricSelection=get(handles.metric_popupmenu,'Value')-1;
switch metricSelection
case 1
yAxeYLabel =['Carried Traffic / Offered Traffic (%)'];
case 2
yAxeYLabel=['Number of Virtual Hops'];
case 3
yAxeYLabel=['Network Congestion (Gbps)'];
case 4
yAxeYLabel=['Single Hop Traffic / Offered Traffic (%)'];
case 5
yAxeYLabel=['Number of Lightpaths)'];
case 6
yAxeYLabel=['Number of Used Wavelengths Channels'];
case 7
yAxeYLabel=['Number of Lightpaths per Fiber Link'];
case 8
yAxeYLabel=['Message Propgation Delay (us)'];
end
markers=['o' 'x' '+' '*' 's' 'd' 'v' '^' '<' '>' 'p' 'h'];
colors=['b' 'g' 'r' 'c' 'm' 'y' 'b' 'g' 'r' 'c' 'm' 'y'];
if secondSweepNrPoints>1,%there is second sweep
SweepOfSecondParameterPrct=linspace(secondSweepLowerLimit, secondSweepUpperLimit, secondSweepNrPoints);
end
legendLabel=listOfMethodsString;
% if size(listOfMethodsString,1)>1,%there are severla methods
% legendLabel=listOfMethodsString;
% end
h=0;
cla reset;
for j=1:secondSweepNrPoints,
for n=1:size(listOfMethodsString,1),
h=h+1;
if secondSweepNrPoints>1,%there is second sweep
legendLabel(h)={[num2str(SweepOfSecondParameterPrct(h)), '%' ]};
end
hold on;
SweepOfFirstParameterPrct=linspace(firstSweepLowerLimit, firstSweepUpperLimit, firstSweepNrPoints);
plot(SweepOfFirstParameterPrct, SweepOfPlottingMetrics(metricSelection, : , j, n), cat(2,colors(h),markers(h),'-'));
end
end
xAxeXLabel = nameOfFirstSweepParameter;
xlabel(xAxeXLabel);
ylabel(yAxeYLabel);
legend(legendLabel);
% metricsFigureHandle = gca
% metricsFigureHandle=handles.axes2
% legend(legendLabel,'boxoff');
metricsFigureHandle = figure(1);
h=0;
cla reset;
for j=1:secondSweepNrPoints,
for n=1:size(listOfMethodsString,1),
h=h+1;
if secondSweepNrPoints>1,%there is second sweep
legendLabel(h)={[num2str(SweepOfSecondParameterPrct(h)), '%' ]};
end
hold on;
SweepOfFirstParameterPrct=linspace(firstSweepLowerLimit, firstSweepUpperLimit, firstSweepNrPoints);
plot(SweepOfFirstParameterPrct, SweepOfPlottingMetrics(metricSelection, : , j, n), cat(2,colors(h),markers(h),'-'));
end
end
xAxeXLabel = nameOfFirstSweepParameter;
xlabel(xAxeXLabel);
ylabel(yAxeYLabel);
legend(legendLabel);
title([yAxeYLabel,' - Perfomance Curves '])
% --------------------------------------------------------------------
% --------------------------------------------------------------------
% EXECUTION CONTROLS
% --------------------------------------------------------------------
% --------------------------------------------------------------------
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Start_pushbutton - START BUTTON
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function varargout = Start_pushbutton_Callback(h, eventdata, handles, varargin)
delete(statusbar);
load_global_WhatIf;%Global variables are loaded
%We clear the current curves of metrics perfomance
axes(handles.axes2);
cla reset;
% plot(0,0);
axis('off');
set(handles.metric_popupmenu,'Value',1);
set(handles.metric_popupmenu,'Enable','off');
set(handles.text23,'Enable','off');
%We save the phys structure and the traffic matrix loaded by the files.
phys=physFromFile;
traff_trafficMatrix=traff_trafficMatrixFromFile;
%CHECK INPUT DATA
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% We check that all the input data were entered are correct
if isempty(phys)
errordlg('Phys File Not Selected', 'Empty or Bad Input Data','modal');
return;
elseif isempty(traff_trafficMatrix),
errordlg('Traff File Not Selected','Empty or Bad Input Data','modal');
return;
elseif size(phys.nodesPlaceMatrix,1)~=size(traff_trafficMatrix,1),
errordlg('Phys File and Traff File does not match in the number of nodes','Bad Input Data','modal');
return;
elseif isempty(listOfMethodsString),
errordlg('None Method Selected','Empty or Bad Input Data','modal');
return;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%FIRST SWEEP
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%1.We select the first sweep parameter from the popupmenu and catch it from
%the input data
firstSweepParameterSelection=get(handles.FirstSweepParameter_popupmenu,'Value')-1;
switch firstSweepParameterSelection
case 1
firstSweepParameter=phys.numberTxPerNode;
case 2
firstSweepParameter=phys.numberRxPerNode;
case 3
firstSweepParameter=phys.numberTWCPerNode;
case 4
firstSweepParameter=phys.numberWavelengthPerFiber;
case 5
firstSweepParameter=phys.lightpathCapacity;
case 6
firstSweepParameter=traff_trafficMatrix;
otherwise
firstSweepParameter=[];
errordlg('The 1st Sweep Parameter was not selected','Incorrect Selection','modal');
return;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%2.Once the first sweep parameter is selected, we sweep it from the lower
%limit defined by the edit text as many times as the entered number of sim points
%%%%%%%%%%%%%%%%1st SWEEP%%%%%%%%%%%%%%%%%%%
%%%%Lower Limit
auxFirstSweepLowerLimit=str2num(get(handles.FirstSweepLowerLimit_edit,'String'));
if isempty(auxFirstSweepLowerLimit),
errordlg('The Lower Limit of the 1st Sweep must be a non-negative number','Incorrect Value','modal')
return;
elseif auxFirstSweepLowerLimit < 0,
errordlg('The Lower Limit of the 1st Sweep must be bigger than 0','Incorrect Value','modal')
return;
else
firstSweepLowerLimit=auxFirstSweepLowerLimit;
end
%%%%Sweep Step
auxFirstSweepStep=str2num(get(handles.FirstSweepStep_edit,'String'));
if isempty(auxFirstSweepStep),
errordlg('The Step of the 1st Sweep must be a positive number','Incorrect Value','modal')
return;
elseif auxFirstSweepStep < 0,
errordlg('The Step of the 1st Sweep must be bigger than 0','Incorrect Value','modal')
return;
else
firstSweepStep=auxFirstSweepStep;
end
%%%%Nr of Points
auxFirstSweepNrPoints=str2num(get(handles.FirstSweepNrPoints_edit,'String'));
if isempty(auxFirstSweepNrPoints),
errordlg('The Number of Points of the 1st Sweep must be a positive number','Incorrect Value','modal')
return;
elseif auxFirstSweepNrPoints <= 0 | (abs(auxFirstSweepNrPoints)-abs(fix(auxFirstSweepNrPoints)) ~= 0),
errordlg('The Number of Points of the 1st Sweep must be a positive integer number','Incorrect Value','modal')
return;
else
firstSweepNrPoints=auxFirstSweepNrPoints;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%3. When we have all the data to make the sweep, we define the simulation
%points of the 1st sweep
firstSweepUpperLimit = firstSweepLowerLimit + firstSweepStep*(firstSweepNrPoints-1);
firstSweepPrct = (firstSweepLowerLimit:firstSweepStep:firstSweepUpperLimit)/100;
[nrRows nrCols]=size(firstSweepParameter);
if nrRows==1 & nrCols==1,%firstSweepParameter is a scalar
firstSweep = firstSweepPrct.*firstSweepParameter;
elseif nrRows==1 | nrCols==1,%firstSweepParameter is a vector
firstSweep=zeros(length(firstSweepParameter),firstSweepNrPoints);
for i=1:firstSweepNrPoints,
firstSweep(:,i) = firstSweepPrct(i).*firstSweepParameter;
end
elseif nrRows>1 & nrCols>1,%firstSweepParameter is a matrix
firstSweep=zeros(nrRows,nrCols,firstSweepNrPoints);
for i=1:firstSweepNrPoints,
firstSweep(:,:,i) = firstSweepPrct(i).*firstSweepParameter;
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%SECOND SWEEP (IF SELECTED OF POSSIBLE)
%4.We check if the second sweep is activated, otherwise, we fix the number
%of points of the second sweep to 1 and the secondSweepParameterSelection
%to 0
if get(handles.secondSweep_checkbox,'Value')==0,
secondSweepNrPoints=1;
secondSweepParameterSelection=0;
else %if 2nd sweep is activated:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%5.We select the second sweep parameter from the popupmenu and catch it from
%the input data
secondSweepParameterSelection=get(handles.SecondSweepParameter_popupmenu,'Value')-1;
switch secondSweepParameterSelection
case 1
secondSweepParameter=phys.numberTxPerNode;
case 2
secondSweepParameter=phys.numberRxPerNode;
case 3
secondSweepParameter=phys.numberTWCPerNode;
case 4
secondSweepParameter=phys.numberWavelengthPerFiber;
case 5
secondSweepParameter=phys.lightpathCapacity;
case 6
secondSweepParameter=traff_trafficMatrix;
otherwise
secondSweepParameter=[];
errordlg('The 2nd Sweep Parameter was not selected','Incorrect Selection','modal');
return;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%6.Once the second sweep parameter is selected, we sweep it from the lower
%limit up to the upper limit defined by the edit texts as many times as the
%entered number of points
%%%%%%%%%%%%%%%%2nd SWEEP%%%%%%%%%%%%%%%%%%%
%%%%Lower Limit
auxSecondSweepLowerLimit=str2num(get(handles.SecondSweepLowerLimit_edit,'String'));
if isempty(auxSecondSweepLowerLimit),
errordlg('The Lower Limit of the 2nd Sweep must be a non-negative number','Incorrect Value','modal')
return
elseif auxSecondSweepLowerLimit < 0,
errordlg('The Lower Limit of the 2nd Sweep must be bigger than 0','Incorrect Value','modal')
return
else
secondSweepLowerLimit=auxSecondSweepLowerLimit;
end
%%%%Sweep Step
auxSecondSweepStep=str2num(get(handles.SecondSweepStep_edit,'String'));
if isempty(auxSecondSweepStep),
errordlg('The Step of the 2nd Sweep must be a positive number','Incorrect Value','modal')
return;
elseif auxSecondSweepStep < 0,
errordlg('The Step of the 2nd Sweep must be bigger than 0','Incorrect Value','modal')
return;
else
secondSweepStep=auxSecondSweepStep;
end
%%%%Nr of Points
auxSecondSweepNrPoints=str2num(get(handles.SecondSweepNrPoints_edit,'String'));
if isempty(auxSecondSweepNrPoints),
errordlg('The Number of Points of the 1st Sweep must be a positive number','Incorrect Value','modal')
return
elseif auxSecondSweepNrPoints <= 0 | (abs(auxSecondSweepNrPoints)-abs(fix(auxSecondSweepNrPoints)) ~= 0),
errordlg('The Number of Points of the 1st Sweep must be a positive number','Incorrect Value','modal')
return
else
secondSweepNrPoints=auxSecondSweepNrPoints;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%7. When we have all the data to make the sweep, we define the simulation
%points of the 2nd sweep
secondSweepUpperLimit = secondSweepLowerLimit + secondSweepStep*(secondSweepNrPoints-1);
secondSweepPrct = (secondSweepLowerLimit:secondSweepStep:secondSweepUpperLimit)/100;
[nrRows nrCols]=size(secondSweepParameter);
if nrRows==1 & nrCols==1,%secondSweepParameter is a scalar
secondSweep = secondSweepPrct.*secondSweepParameter;
elseif nrRows==1 | nrCols==1,%secondSweepParameter is a vector
secondSweep=zeros(length(secondSweepParameter),secondSweepNrPoints);
for i=1:secondSweepNrPoints,
secondSweep(:,i) = secondSweepPrct(i).*secondSweepParameter;
end
elseif nrRows>1 & nrCols>1,%secondSweepParameter is a matrix
secondSweep=zeros(nrRows,nrCols,secondSweepNrPoints);
for i=1:secondSweepNrPoints,
secondSweep(:,:,i) = secondSweepPrct(i).*secondSweepParameter;
end
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%8.We define the sweep of the physical topology (SweepOfPhys) and the sweep of
%the traffic matrix (SweepOfTrafficMatrix)
SweepOfPhys=cell(firstSweepNrPoints, secondSweepNrPoints);
SweepOfTrafficMatrix=cell(firstSweepNrPoints, secondSweepNrPoints);
for i=1:firstSweepNrPoints,
switch firstSweepParameterSelection
case 1
phys.numberTxPerNode=round(firstSweep(:,i))';
nameOfFirstSweepParameter=['Number of Transmitters per Node (%)'];
SweepOfFirstParameter=phys.numberTxPerNode;
case 2
phys.numberRxPerNode=round(firstSweep(:,i))';
nameOfFirstSweepParameter=['Number of Receivers per Node (%)'];
SweepOfFirstParameter=phys.numberRxPerNode;
case 3
phys.numberTWCPerNode=round(firstSweep(:,i))';
nameOfFirstSweepParameter=['Number of TWCs per Node (%)'];
SweepOfFirstParameter=phys.numberTWCPerNode;
case 4
phys.numberWavelengthPerFiber=round(firstSweep(:,i))';
nameOfFirstSweepParameter=['Number of Wavelengths per Fiber (%)'];
SweepOfFirstParameter=phys.numberWavelengthPerFiber;
case 5
phys.lightpathCapacity=firstSweep(i);
nameOfFirstSweepParameter=['Wavelength Channel Capacity (Gbps) (%)'];
SweepOfFirstParameter=phys.lightpathCapacity;
case 6
traff_trafficMatrix=firstSweep(:,:,i);
nameOfFirstSweepParameter=['Traffic Demand (%)'];
SweepOfFirstParameter=traff_trafficMatrix;
end
for j=1:secondSweepNrPoints,
switch secondSweepParameterSelection
case 1
phys.numberTxPerNode=round(secondSweep(:,j))';
nameOfSecondSweepParameter=['Number of Transmitters per Node (%)'];
SweepOfSecondParameter=phys.numberTxPerNode;
case 2
phys.numberRxPerNode=round(secondSweep(:,j))';
nameOfSecondSweepParameter=['Number of Receivers per Node (%)'];
SweepOfSecondParameter=phys.numberRxPerNode;
case 3
phys.numberTWCPerNode=round(secondSweep(:,j))';
nameOfSecondSweepParameter=['Number of TWCs per Node (%)'];
SweepOfSecondParameter=phys.numberTWCPerNode;
case 4
phys.numberWavelengthPerFiber=round(secondSweep(:,j))';
nameOfSecondSweepParameter=['Number of Wavelengths per Fiber (%)'];
SweepOfSecondParameter=phys.numberWavelengthPerFiber;
case 5
phys.lightpathCapacity=secondSweep(j);
nameOfSecondSweepParameter=['Wavelength Channel Capacity (%)'];
SweepOfSecondParameter=phys.lightpathCapacity;
case 6
traff_trafficMatrix=secondSweep(:,:,j);
nameOfSecondSweepParameter=['Traffic Demand (%)'];
SweepOfSecondParameter=traff_trafficMatrix;
otherwise %if second sweep is not activated
end
SweepOfPhys(i,j)={phys};
SweepOfTrafficMatrix(i,j)={traff_trafficMatrix};
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%9. We compute the netState of each sweep point using the selected method
exitMsg=cell(firstSweepNrPoints, secondSweepNrPoints, size(listOfMethodsString,1));
exitFlag=zeros(firstSweepNrPoints, secondSweepNrPoints, size(listOfMethodsString,1));
SweepOfNetState=cell(firstSweepNrPoints, secondSweepNrPoints, size(listOfMethodsString,1));
SweepOfStatMetrics=cell(firstSweepNrPoints, secondSweepNrPoints, size(listOfMethodsString,1));
SweepOfPlottingMetrics=zeros(5, firstSweepNrPoints, secondSweepNrPoints, size(listOfMethodsString,1));
anyExitFlagIsNull=0;
f=statusbar('What If Analysis in progress ...');
k=0;
for n=1:size(listOfMethodsString,1),
currentMethodString=listOfMethodsString{n};
indecesOfSpaces=find(currentMethodString==' ');
method=currentMethodString(indecesOfSpaces(1)+1:indecesOfSpaces(2)-1);
algorithmParameters=currentMethodString(indecesOfSpaces(3)+1:end);
%We sweep the parameters
for i=1:firstSweepNrPoints,
for j=1:secondSweepNrPoints,
if strcmp(method, 'MILP'),%MILP
tic
[exitMsg{i,j,n} exitFlag(i,j,n) SweepOfNetState{i,j,n}] = ...
MILP(cell2mat(SweepOfTrafficMatrix(i,j)), SweepOfPhys{i,j}, algorithmParameters);
designTime=toc;
else%heuristic methods
try
tic
[exitMsg{i,j,n} exitFlag(i,j,n) SweepOfNetState{i,j,n}] = ...
feval(method, cell2mat(SweepOfTrafficMatrix(i,j)), SweepOfPhys{i,j}, algorithmParameters);
designTime=toc;
catch
delete(f);
lastErrorMsg=lasterr;
errordlg(lastErrorMsg,'Unexpected Error in What If Analysis','modal')
return;
end
end
if exitFlag(i,j,n) == 1;
anyExitFlagIsNull = 1;
SweepOfStatMetrics{i,j,n}=[];
SweepOfPlottingMetrics(1,i,j,n)=NaN;
SweepOfPlottingMetrics(2,i,j,n)=NaN;
SweepOfPlottingMetrics(3,i,j,n)=NaN;
SweepOfPlottingMetrics(4,i,j,n)=NaN;
SweepOfPlottingMetrics(5,i,j,n)=NaN;
SweepOfPlottingMetrics(6,i,j,n)=NaN;
SweepOfPlottingMetrics(7,i,j,n)=NaN;
else
%Check netState correct
try
flag_removeLoops=1;
flag_checkLpRoutingMatrix=1;
flag_lossesAllowed=1;
flag_checkLoops=1;
[flag_modifiedNetState SweepOfNetState{i,j,n}]= checkNetState(SweepOfNetState{i,j,n} , SweepOfPhys{i,j}, cell2mat(SweepOfTrafficMatrix(i,j)) , flag_checkLoops, flag_removeLoops , flag_checkLpRoutingMatrix , flag_lossesAllowed);
catch
delete(f)
lastErrorMsg=lasterr;
errordlg(lastErrorMsg,'Unexpected Error on checking the planned design!!!','modal')
return;
end
SweepOfStatMetrics{i,j,n} = calculateStaticNetMetrics(SweepOfPhys{i,j}, SweepOfNetState{i,j,n});
SweepOfPlottingMetrics(1,i,j,n)=(SweepOfStatMetrics{i,j,n}.carriedTraffic)*100/sum(sum(cell2mat(SweepOfTrafficMatrix(i,j)),1),2);
SweepOfPlottingMetrics(2,i,j,n)=SweepOfStatMetrics{i,j,n}.averVirtualHops;
SweepOfPlottingMetrics(3,i,j,n)=SweepOfStatMetrics{i,j,n}.networkCongestion;
SweepOfPlottingMetrics(4,i,j,n)=SweepOfStatMetrics{i,j,n}.singleHopTraffic*100/sum(sum(cell2mat(SweepOfTrafficMatrix(i,j)),1),2);
SweepOfPlottingMetrics(5,i,j,n)=SweepOfStatMetrics{i,j,n}.numberOfLightpaths;
SweepOfPlottingMetrics(6,i,j,n)=SweepOfStatMetrics{i,j,n}.totalNrOfUsedWavelengths;
SweepOfPlottingMetrics(7,i,j,n)=SweepOfStatMetrics{i,j,n}.maximumLinkLoadinNrLightpaths;
SweepOfPlottingMetrics(8,i,j,n)=SweepOfStatMetrics{i,j,n}.messagePropagationDelay;
end
k=k+1;
statusbar(k/(firstSweepNrPoints*secondSweepNrPoints*size(listOfMethodsString,1)),f);
end
end
end
delete(f) %The status bar is deleted
if anyExitFlagIsNull == 1;
warndlg('Some simulation point failed','Error in What If Analysis','modal')
end
set(handles.metric_popupmenu,'Enable','on');
set(handles.text23,'Enable','on');
%We show the simulation text report in the edit
previousText=get(handles.edit6,'String');
if secondSweepNrPoints > 1,
secondSweepInfoString = vertcat({[' - Second Sweep Parameter: ',nameOfSecondSweepParameter, ' : ']},...
{[' ', num2str(secondSweepPrct*100)]});
else
secondSweepInfoString = [''];
end
currentClock=clock;
whatIfSimulationTextReport = vertcat(...
{['##### WHAT IF ANALYSIS REPORT #####']},...
{['']},...
{['##################################################']},...
{['Simulation date: ',num2str(ceil(currentClock(3))),'/',num2str(ceil(currentClock(2))),'/',num2str(ceil(currentClock(1))),' - ',num2str(ceil(currentClock(4))),':',num2str(ceil(currentClock(5)))]},...
{['##################################################']},...
{[' ']},...
{[' ']}, ...
{['INPUT DATA OF THE WHAT IF ANALYSIS:']},...
{[' ']},...
{[' - Physical Topology File: ',topologyFilename]},...
{[' - Traffic File: ',trafficFilename]},...
{[' - Number Of Simulations: ',num2str(firstSweepNrPoints*secondSweepNrPoints*size(listOfMethodsString,1))]},...
{[' - Planning Algorithm(s): ']},...
listOfMethodsString,...
{[' - First Sweep Parameter: ',nameOfFirstSweepParameter, ' : ']},...
{[' ', num2str(firstSweepPrct*100)]},...
secondSweepInfoString,...
{[' ']},...
{[' ']}, ...
{['##################################################']}...
);
whatIfSimulationTextReport = regexprep(whatIfSimulationTextReport, '%', 'prct' );
whatIfSimulationTextReport=vertcat(previousText, {[' ']}, whatIfSimulationTextReport);
set(handles.edit6,'String', whatIfSimulationTextReport);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%pushbutton2 - RESET BUTTON
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function varargout = pushbutton2_Callback(h, eventdata, handles, varargin)
delete(statusbar);
clear all;
close all;
WhatIfAnalysis;
% --------------------------------------------------------------------
% --------------------------------------------------------------------
% RESULTS REPORT
% --------------------------------------------------------------------
% --------------------------------------------------------------------
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%SaveResults_pushbutton - Pushbutton to save the results report from the
%results edit into a .results file
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function varargout = SaveResults_pushbutton_Callback(h, eventdata, handles, varargin)
%We open the file to save our 'Results File (*.results)'
[filename, pathname] = uiputfile({'*.results','Results File (*.results)'},'Save Results File as','data\results\');
fullpathname=[pathname filename];
fid = fopen(fullpathname, 'w');
designResults=get(handles.edit6,'String');
designResultsString=[];
for k=1:length(designResults),
designResultsString= [designResultsString '\n' cell2mat(designResults(k))];
end
fprintf(fid, designResultsString);
fclose(fid);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%ResetResults_pushbutton - Pushbutton to reser the results edit
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function varargout = ResetResults_pushbutton_Callback(h, eventdata, handles, varargin)
set(handles.edit6,'String','');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%pushbuttonSaveXML -
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function varargout = pushbuttonSaveXML_Callback(h, eventdata, handles, varargin)
metadataWhatIfFigure=openfig('metadataWhatIfFigure.fig','reuse');
dataMetadataWhatIfFigure=guihandles(metadataWhatIfFigure);
guidata(metadataWhatIfFigure,dataMetadataWhatIfFigure);