function varargout = MultiHourAnalysis(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_Multihour;
imageUPCT=imread('upct_logo.jpg','jpg');
axes(handles.axes6);
image(imageUPCT);
axis off
set(handles.men1,'Checked','off');
set(handles.men2,'Checked','off');
set(handles.men3,'Checked','on');
%%HEURISTICS MENU BUILDING
h = dir(fullfile(pwd, 'algorithms/staticMHPlanning/*.m'));
priv_h = dir(fullfile(pwd, 'algorithms/private/staticMHPlanning/*.m'));
numberOfPublicHeuristicAlgorithms = length(h);
numberOfPrivateHeuristicAlgorithms = length(priv_h);
MultiHourAlgorithms=cell(numberOfPublicHeuristicAlgorithms+numberOfPrivateHeuristicAlgorithms,1);
MultiHourAlgorithms(1:numberOfPublicHeuristicAlgorithms) = {h.name}';
MultiHourAlgorithms(numberOfPublicHeuristicAlgorithms+1:end) = {priv_h.name}';
numberOfHeuristicAlgorithms=length(MultiHourAlgorithms);
methodsString=cell(numberOfHeuristicAlgorithms+1,1);
methodsString(1)={['Select desired']};
methodsString(2:length(methodsString))=MultiHourAlgorithms;
set(handles.method_popupmenu,'String',methodsString);
%%%%%%%%%%%%%LOAD a XML fille %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
s=pwd;
s=[s '\data\results\multiHourAnalysis\*.xml'];
c=dir(s);
netStates = struct2cell(c);
numberOfnetStates=length(netStates(1,:));
netStatesString=cell(numberOfnetStates+1,1);
netStatesString(1)={['Select desired']};
netStatesString(2:length(netStatesString))=netStates(1,:);
set(handles.popupmenu12,'String',netStatesString);
% --------------------------------------------------------------------
% --------------------------------------------------------------------
% MENUs
% --------------------------------------------------------------------
% --------------------------------------------------------------------
% *********************************************************************
% *********************************************************************
% MENU 1 - FILE
% *********************************************************************
% *********************************************************************
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Quit
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function varargout = Quit_Callback(h, eventdata, handles, varargin)
close
% *********************************************************************
% *********************************************************************
% 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_Multihour;%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_Multihour;%Global variables are loaded
%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, phys] = io_readXML(fullpathname);
checkPhys(phys)
catch
lastErrorMsg=lasterr;
errordlg(lastErrorMsg,'Unexpected Error On Reading/Checking Physical Topology from the XML File!!!','modal');
return
end
% %We show the loaded file in the edit
physTextReport = physXMLfileTextReport(metadata , phys);
previousText=get(handles.edit6,'String');
topologyReport=vertcat(previousText, {[' ']},{['######### PHYSICAL TOPOLOGY FILE "',topologyFilename,'" LOADED ##########']},{[' ']}, physTextReport);
set(handles.edit6,'String', topologyReport);
axes(handles.axes1);
hold off
plotTopology(phys.nodesPlaceMatrix,phys.linkTable,0,'',1)
axis('off');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%openTraffFile_pushbutton - OPEN TRAFF FILE BUTTON
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function varargout = openTraffFile_pushbutton_Callback(h, eventdata, handles, varargin)
load_global_Multihour;%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);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%POPUPMENU TO SELECTED METHODS FOR THE ANALYSIS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function varargout = method_popupmenu_Callback(h, eventdata, handles, varargin)
% --------------------------------------------------------------------
% --------------------------------------------------------------------
% EXECUTION CONTROLS
% --------------------------------------------------------------------
% --------------------------------------------------------------------
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Start_pushbutton - START BUTTON
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function varargout = Start_pushbutton_Callback(h, eventdata, handles, varargin)
if (get(handles.radiobuttonNewDesign,'Value')==1)
delete(statusbar);
load_global_Multihour;%Global variables are loaded
handles_popupDesign=msgbox('Designing Multhour Virtual Topologies. Please wait . . .','Virtual Topology Designs in progress','modal');
set(handles.ClearReport_pushbutton,'Enable','off');
set(handles.nodeResources_popupmenu,'Value',1);
set(handles.nodeResources_popupmenu,'Enable','off');
set(handles.text23,'Enable','off');
set(handles.popupmenu16,'Value',1);
set(handles.popupmenu16,'Enable','off');
set(handles.popupmenu17,'Value',1);
set(handles.popupmenu17,'Enable','off');
set(handles.popupmenu18,'Value',1);
set(handles.popupmenu18,'Enable','off');
set(handles.popupmenu19,'Value',1);
set(handles.popupmenu19,'Enable','off');
set(handles.popupmenu20,'Value',1);
set(handles.popupmenu20,'Enable','off');
set(handles.popupmenuTimeSlot,'Value',1);
set(handles.popupmenuTimeSlot,'Enable','off');
%Popup Menu of lightpaths
set(handles.popupmenu13,'Enable','off');
set(handles.popupmenu13,'Value',1);
axes(handles.axes1)
image([]);
axis off
%Popup Menu of flows
set(handles.popupmenu14,'Enable','off');
set(handles.popupmenu14,'Value',1);
axes(handles.axes11)
image([]);
axis off
%We save the traffic matrix loaded by the files.
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(phys.nodeTimezone),
errordlg('Node Timezones Not Selected','Empty or Bad Input Data','modal');
return;
elseif get(handles.method_popupmenu,'Value')==1;
errordlg('Incorrect Method Selection','Empty or Bad Input Data','modal');
return;
else
numberOfNodes=size(traff_trafficMatrixFromFile,1);
end
%METHOD SELECTED AND ITS PARAMETERS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%We catch that the algoritm parameter.
algorithmParameters=get(handles.AlgorithmParameters_edit, 'String');
%We capture the selected method
methodSelection=get(handles.method_popupmenu,'Value');
[pathstr,method,ext,versn]=fileparts(MultiHourAlgorithms{methodSelection-1});
%CONSTRUCTION OF THE MULTI-HOUR TRAFFIC MATRICES
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%1) Definition of the Activity Function for all the node pairs and for 24
%hours
multiHourTrafficMatrices=zeros(numberOfNodes,numberOfNodes,24);
UTC=0:23;
for i=1:numberOfNodes,
for j=1:numberOfNodes,
for t=1:24,
activity(i,t) = activityFunction(phys.nodeTimezone(i), UTC(t));
activity(j,t) = activityFunction(phys.nodeTimezone(j), UTC(t));
multiHourTrafficMatrices(i,j,t)=traff_trafficMatrix(i,j)*activity(i,t)*activity(j,t);
end
end
end
%We compute the netState for each traffic matrix using the selected method
exitMsg=cell(24,1);
exitFlag=zeros(24,1);
sweepOfNetStates=cell(24,1);
sweepOfStatMetrics=cell(24,1);
lightpathsRoutes=cell(24,1);
listOfSerialNumberFlowsPerLp=cell(24,1);
k=0;
try
tic;
[exitMsg exitFlag sweepOfNetStates]=feval(method, multiHourTrafficMatrices, phys, algorithmParameters);
designTime=toc;
for t=1:24,
[sweepOfStatMetrics{t},lightpathsRoutes{t},listOfSerialNumberFlowsPerLp{t}] = calculateMetrics(phys, sweepOfNetStates{t});
end
close(handles_popupDesign);
catch
close(handles_popupDesign);
lastErrorMsg=lasterr;
errordlg(lastErrorMsg,'Unexpected Error in MAnalysis','modal')
return;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%EXIT FLAG FROM DESIGN PROCESS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if exitFlag == 1, errordlg('NO FEASIBLE SOLUTION FOUND!!!','Design Failed','modal'); return; end
%Check netState correct
try
flag_removeLoops=1;
flag_checkLpRoutingMatrix=1;
flag_lossesAllowed=1;
flag_checkLoops=1;
[flag_modifiedNetState sweepOfNetStates] = checkNetState_MH(sweepOfNetStates , phys, multiHourTrafficMatrices, flag_checkLoops, flag_removeLoops , flag_checkLpRoutingMatrix, flag_lossesAllowed);
catch
lastErrorMsg=lasterr;
errordlg(lastErrorMsg,'Unexpected Error on checking the planned design!!!','modal')
return;
end
switch exitFlag,
case 0,
[IconData, IconCMap]=imread('OK.bmp');
msgbox(' OK!!!','Design Successful','custom', IconData, IconCMap,'modal');
case 1,
errordlg('NO FEASIBLE SOLUTION FOUND!!!','Design Failed','modal')
return
otherwise
warndlg(exitMsg,'Design Successful Non-Optimal','modal')
end
%Popup Menu of Statistics
lightpathsMatrixString=cell(7,1);
lightpathsMatrixString={['Select desired'],['Node Routes'],['Link Routes'],...
['Number of conversions'],['Distances'],['List of flows'],['Carried Traffic']};
set(handles.popupmenu17,'String', lightpathsMatrixString);
linksMatrixString=cell(3,1);
linksMatrixString={['Select desired'],['Wavelength utilization'],['Routed traffic']};
set(handles.popupmenu18,'String', linksMatrixString);
nodesMatrixString=cell(3,1);
nodesMatrixString={['Select desired'],['Used Transmitters/Receivers/TWCs'],['Ingress/Egress/Grooming traffic']};
set(handles.popupmenu19,'String', nodesMatrixString);
flowsMatrixString=cell(3,1);
flowsMatrixString={['Select desired'],['Lost traffic'],['Number of virtual hops']};
set(handles.popupmenu20,'String', flowsMatrixString);
set(handles.edit6,'Enable','on');
set(handles.text54,'Enable','on');
set(handles.text55,'Enable','on');
set(handles.text56,'Enable','on');
set(handles.text57,'Enable','on');
set(handles.text58,'Enable','on');
set(handles.ClearReport_pushbutton,'Enable','on');
set(handles.popupmenuTimeSlot,'Enable','on');
set(handles.popupmenu16,'Enable','on');
set(handles.nodeResources_popupmenu,'Enable','on');
set(handles.text23,'Enable','on');
set(handles.pushbutton17,'Enable','on');
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%pushbutton2 - RESET BUTTON
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function varargout = pushbutton2_Callback(h, eventdata, handles, varargin)
delete(statusbar);
clear all;
close all;
MultiHourAnalysis;
% --------------------------------------------------------------------
% --------------------------------------------------------------------
% RESULTS REPORT
% --------------------------------------------------------------------
% --------------------------------------------------------------------
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%ClearReport_pushbutton - Pushbutton to reser the results edit
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function varargout = ClearReport_pushbutton_Callback(h, eventdata, handles, varargin)
set(handles.edit6,'String','');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%nodeResources_popupmenu - NODE RESOURCES SELECTION
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function varargout = nodeResources_popupmenu_Callback(h, eventdata, handles, varargin)
load_global_Multihour;%Global variables are loaded
nodeResourcesSelection=get(handles.nodeResources_popupmenu,'Value')-1;
numberOfNodes=phys.N;
tableOfResourcesPerNode=zeros(numberOfNodes,24);
for t=1:24,
switch nodeResourcesSelection,
case 1
tableOfResourcesPerNode(:,t)=sweepOfStatMetrics{t}.NrUsedTransmittersPerNode';
case 2
tableOfResourcesPerNode(:,t)=sweepOfStatMetrics{t}.NrUsedReceiversPerNode';
case 3
tableOfResourcesPerNode(:,t)=sweepOfStatMetrics{t}.NrUsedConvertersPerNode';
case 4
tableOfResourcesPerNode(:,t) = sweepOfStatMetrics{t}.ingressEgressGroomingTraffic.ingressTraffic';
case 5
tableOfResourcesPerNode(:,t) = sweepOfStatMetrics{t}.ingressEgressGroomingTraffic.egressTraffic';
case 6
tableOfResourcesPerNode(:,t) = sweepOfStatMetrics{t}.ingressEgressGroomingTraffic.groomingTraffic';
case 7
tableOfResourcesPerNode(:,t) = sweepOfStatMetrics{t}.ingressEgressGroomingTraffic.ingressTraffic'+...
sweepOfStatMetrics{t}.ingressEgressGroomingTraffic.egressTraffic'+...
sweepOfStatMetrics{t}.ingressEgressGroomingTraffic.groomingTraffic';
end
end
if(nodeResourcesSelection==1||nodeResourcesSelection==2||nodeResourcesSelection==3)
if (numberOfNodes<7)
nodeResourcesReport=['Node X:'];
for node=1:numberOfNodes
[nodeString, errmsg] = sprintf('\t%4.0f', node) ;
nodeResourcesReport=horzcat(nodeResourcesReport,nodeString);
end
[totalString, errmsg]=sprintf('\tTotal');
nodeResourcesReport=[nodeResourcesReport, totalString];
maxNumber=max(tableOfResourcesPerNode,[],2);
[maxNumberString, errmsg] = sprintf('\t%4.0f', maxNumber);
tableOfResourcesPerNode=[tableOfResourcesPerNode maxNumber];
totalNumberOfUsedResources=sum(tableOfResourcesPerNode,1);
for i=2:25,
[resourceString, errmsg] = sprintf('\t%4.0f', tableOfResourcesPerNode(:,i-1)) ;
[totalNumberString, errmsg] = sprintf('\t%4.0f', totalNumberOfUsedResources(i-1));
if(i<=11)
hour=['0', num2str(i-2)];
else
hour=num2str(i-2);
end
nodeResourcesReport=vertcat(nodeResourcesReport,{['Hour ', hour,'h',':', resourceString,totalNumberString]});
end
[totalMaxString, errmsg] = sprintf('\t%4.0f', totalNumberOfUsedResources(end)) ;
nodeResourcesReport=vertcat(nodeResourcesReport,{['Max :',maxNumberString, totalMaxString]});
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
auxReport=get(handles.edit6,'String');
switch nodeResourcesSelection
case 1
title=['### Number of Used Transmitters per node ###'];
case 2
title=['### Number of Used Receivers per node ###'];
case 3
title=['### Number of Used TWCs per node ###'];
end
finalReport=vertcat(auxReport,title,nodeResourcesReport, {[''];['']} );
set(handles.edit6,'String',finalReport);
else
numberOfReports=ceil(numberOfNodes/7);
for i=1:numberOfReports
if (7+(i-1)*7)>numberOfNodes
numberOfNodesForThisReport=numberOfNodesForThisReport(end)+1:numberOfNodes;
else
numberOfNodesForThisReport=(1+(i-1)*7):(7+(i-1)*7);
end
nodeResourcesReport=['Node X: '];
for node=1:length(numberOfNodesForThisReport)
[nodeString, errmsg] = sprintf('\t%4.0f', numberOfNodesForThisReport(node)) ;
nodeResourcesReport=horzcat(nodeResourcesReport,nodeString);
end
[totalString, errmsg]=sprintf('\tTotal');
nodeResourcesReport=[nodeResourcesReport, totalString];
maxNumber=max(tableOfResourcesPerNode,[],2);
[maxNumberString, errmsg] = sprintf('\t%4.0f', maxNumber(numberOfNodesForThisReport));
tableOfResourcesPerNode=[tableOfResourcesPerNode maxNumber];
totalNumberOfUsedResources=sum(tableOfResourcesPerNode,1);
for i=2:25,
[resourceString, errmsg] = sprintf('\t%4.0f', tableOfResourcesPerNode(numberOfNodesForThisReport,i-1)) ;
[totalNumberString, errmsg] = sprintf('\t%4.0f', totalNumberOfUsedResources(i-1));
if(i<=11)
hour=['0', num2str(i-2)];
else
hour=num2str(i-2);
end
nodeResourcesReport=vertcat(nodeResourcesReport,{['Hour ', hour,'h',':', resourceString,totalNumberString]});
end
[totalMaxString, errmsg] = sprintf('\t%4.0f', totalNumberOfUsedResources(end)) ;
nodeResourcesReport=vertcat(nodeResourcesReport,{['Max :',maxNumberString, totalMaxString]});
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
auxReport=get(handles.edit6,'String');
switch nodeResourcesSelection
case 1
title=['### Number of Used Transmitters per node ###'];
case 2
title=['### Number of Used Receivers per node ###'];
case 3
title=['### Number of Used TWCs per node ###'];
end
finalReport=vertcat(auxReport,title,nodeResourcesReport, {[''];['']} );
set(handles.edit6,'String',finalReport);
end
end
end
if(nodeResourcesSelection==4||nodeResourcesSelection==5||nodeResourcesSelection==6||nodeResourcesSelection==7)
if (numberOfNodes<7)
nodeResourcesReport=['Node X:'];
for node=1:numberOfNodes
[nodeString, errmsg] = sprintf('\t%3.0f', node) ;
nodeResourcesReport=horzcat(nodeResourcesReport,nodeString);
end
[totalString, errmsg]=sprintf('\tTotal');
nodeResourcesReport=[nodeResourcesReport, totalString];
maxNumber=max(tableOfResourcesPerNode,[],2);
[maxNumberString, errmsg] = sprintf('\t%7.3f', maxNumber);
tableOfResourcesPerNode=[tableOfResourcesPerNode maxNumber];
totalNumberOfUsedResources=sum(tableOfResourcesPerNode,1);
for i=2:25,
[resourceString, errmsg] = sprintf('\t%7.3f', tableOfResourcesPerNode(:,i-1)) ;
[totalNumberString, errmsg] = sprintf('\t%7.3f', totalNumberOfUsedResources(i-1));
if(i<=11)
hour=['0', num2str(i-2)];
else
hour=num2str(i-2);
end
nodeResourcesReport=vertcat(nodeResourcesReport,{['Hour ', hour,'h',':', resourceString,totalNumberString]});
end
[totalMaxString, errmsg] = sprintf('\t%7.3f', totalNumberOfUsedResources(end)) ;
nodeResourcesReport=vertcat(nodeResourcesReport,{['Max :',maxNumberString, totalMaxString]});
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
auxReport=get(handles.edit6,'String');
switch nodeResourcesSelection
case 4
title=['### Ingress traffic per node (Gbps) ###'];
case 5
title=['### Egress traffic per node (Gbps) ###'];
case 6
title=['### Grooming traffic per node (Gbps) ###'];
case 7
title=['### Total traffic per node (Gbps) ###'];
end
finalReport=vertcat(auxReport,title,nodeResourcesReport, {[''];['']} );
set(handles.edit6,'String',finalReport);
else
numberOfReports=ceil(numberOfNodes/7);
for i=1:numberOfReports
if (7+(i-1)*7)>numberOfNodes
numberOfNodesForThisReport=numberOfNodesForThisReport(end)+1:numberOfNodes;
else
numberOfNodesForThisReport=(1+(i-1)*7):(7+(i-1)*7);
end
nodeResourcesReport=['Node X: '];
for node=1:length(numberOfNodesForThisReport)
[nodeString, errmsg] = sprintf('\t%3.0f', numberOfNodesForThisReport(node)) ;
nodeResourcesReport=horzcat(nodeResourcesReport,nodeString);
end
[totalString, errmsg]=sprintf('\tTotal');
nodeResourcesReport=[nodeResourcesReport, totalString];
maxNumber=max(tableOfResourcesPerNode,[],2);
[maxNumberString, errmsg] = sprintf('\t%7.3f', maxNumber(numberOfNodesForThisReport));
tableOfResourcesPerNode=[tableOfResourcesPerNode maxNumber];
totalNumberOfUsedResources=sum(tableOfResourcesPerNode,1);
for i=2:25,
[resourceString, errmsg] = sprintf('\t%7.3f', tableOfResourcesPerNode(numberOfNodesForThisReport,i-1)) ;
[totalNumberString, errmsg] = sprintf('\t%7.3f', totalNumberOfUsedResources(i-1));
if(i<=11)
hour=['0', num2str(i-2)];
else
hour=num2str(i-2);
end
nodeResourcesReport=vertcat(nodeResourcesReport,{['Hour ', hour,'h',': ', resourceString,totalNumberString]});
end
[totalMaxString, errmsg] = sprintf('\t%7.3f', totalNumberOfUsedResources(end)) ;
nodeResourcesReport=vertcat(nodeResourcesReport,{['Max :',maxNumberString, totalMaxString]});
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
auxReport=get(handles.edit6,'String');
switch nodeResourcesSelection
case 4
title=['### Ingress traffic per node (Gbps) ###'];
case 5
title=['### Egress traffic per node (Gbps) ###'];
case 6
title=['### Grooming traffic per node (Gbps) ###'];
case 7
title=['### Total traffic per node (Gbps) ###'];
end
finalReport=vertcat(auxReport,title,nodeResourcesReport, {[''];['']} );
set(handles.edit6,'String',finalReport);
end
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%checkboxLoad -
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function varargout = checkboxLoad_Callback(h, eventdata, handles, varargin)
selection = get(handles.radiobuttonLoad,'Value');
if selection==1
set(handles.radiobuttonNewDesign,'Value',0);
s=pwd;
s=[s '\data\results\multiHourAnalysis\*.xml'];
c=dir(s);
netStates = struct2cell(c);
numberOfnetStates=length(netStates(1,:));
netStatesString=cell(numberOfnetStates+1,1);
netStatesString(1)={['Select desired']};
netStatesString(2:length(netStatesString))=netStates(1,:);
set(handles.popupmenu12,'String',netStatesString);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%checkboxNewDesign -
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function varargout = checkboxNewDesign_Callback(h, eventdata, handles, varargin)
selection = get(handles.radiobuttonNewDesign,'Value');
if selection==1
set(handles.radiobuttonLoad,'Value',0);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%pushbutton2 - LOAD BUTTON
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function varargout = pushbuttonLoad_Callback(h, eventdata, handles, varargin)
if(get(handles.radiobuttonLoad,'Value')==1)
load_global_Multihour;
set(handles.edit6,'String',[]);
set(handles.nodeResources_popupmenu,'Value',1);
set(handles.popupmenu16,'Value',1);
set(handles.popupmenu17,'Value',1);
set(handles.popupmenu18,'Value',1);
set(handles.popupmenu19,'Value',1);
set(handles.popupmenu20,'Value',1);
set(handles.popupmenuTimeSlot,'Value',1);
%Popup Menu of lightpaths
set(handles.popupmenu13,'Enable','off');
set(handles.popupmenu13,'Value',1);
axes(handles.axes1)
image([]);
axis off
%Popup Menu of flows
set(handles.popupmenu14,'Enable','off');
set(handles.popupmenu14,'Value',1);
axes(handles.axes11)
image([]);
axis off
s=pwd;
s=[s '\data\results\multiHourAnalysis\*.xml'];
c=dir(s);
netStates = struct2cell(c);
numberOfnetStates=length(netStates(1,:));
netStatesString=cell(numberOfnetStates+1,1);
netStatesString(1)={['Select desired']};
netStatesString(2:length(netStatesString))=netStates(1,:);
net=get(handles.popupmenu12,'Value');
netName=netStatesString(net);
netName=char(netName);
fullpathname=[pwd '\data\results\multiHourAnalysis\' netName];
%We open the file to read our XML file (*.xml)'
%and check the physical topology and the netState read from it.
try
[metadata, phys, sweepOfNetStates] = io_readXML_MH(fullpathname);
checkPhys(phys)
flag_removeLoops=0;
flag_checkLpRoutingMatrix=1;
flag_lossesAllowed=1;
flag_checkLoops=1;
[flag_modifiedNetState sweepOfNetStates] = checkNetState_MH(sweepOfNetStates , phys, [], flag_checkLoops, flag_removeLoops , flag_checkLpRoutingMatrix, flag_lossesAllowed);
catch
lastErrorMsg=lasterr;
errordlg(lastErrorMsg,'Unexpected Error On Reading/Checking the VT Design from the XML File!!!','modal');
return
end
sweepOfStatMetrics=cell(24,1);
lightpathsRoutes=cell(24,1);
listOfSerialNumberFlowsPerLp=cell(24,1);
for t=1:24,
[sweepOfStatMetrics{t},lightpathsRoutes{t},listOfSerialNumberFlowsPerLp{t}] = calculateMetrics(phys, sweepOfNetStates{t});
end
%Popup Menu of Statistics
lightpathsMatrixString=cell(7,1);
lightpathsMatrixString={['Select desired'],['Node Routes'],['Link Routes'],...
['Number of conversions'],['Distances'],['List of flows'],['Carried Traffic']};
set(handles.popupmenu17,'String', lightpathsMatrixString);
linksMatrixString=cell(3,1);
linksMatrixString={['Select desired'],['Wavelength utilization'],['Routed traffic']};
set(handles.popupmenu18,'String', linksMatrixString);
nodesMatrixString=cell(3,1);
nodesMatrixString={['Select desired'],['Used Transmitters/Receivers/TWCs'],['Ingress/Egress/Grooming traffic']};
set(handles.popupmenu19,'String', nodesMatrixString);
flowsMatrixString=cell(3,1);
flowsMatrixString={['Select desired'],['Lost traffic'],['Number of virtual hops']};
set(handles.popupmenu20,'String', flowsMatrixString);
set(handles.edit6,'Enable','on');
set(handles.text54,'Enable','on');
set(handles.text55,'Enable','on');
set(handles.text56,'Enable','on');
set(handles.text57,'Enable','on');
set(handles.text58,'Enable','on');
set(handles.ClearReport_pushbutton,'Enable','on');
set(handles.popupmenuTimeSlot,'Enable','on');
set(handles.popupmenu16,'Enable','on');
set(handles.nodeResources_popupmenu,'Enable','on');
set(handles.text23,'Enable','on');
set(handles.pushbutton17,'Enable','on');
%Show Metadata
textReport = designMetadataTextReport(metadata);
set(handles.edit6,'String',[]);
set(handles.edit6,'String',textReport);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%popupmenuTimeSlot
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function varargout = popupmenuTimeSlot_Callback(h, eventdata, handles, varargin)
load_global_Multihour;
%Popup Menu of lightpaths
set(handles.popupmenu13,'Enable','off');
set(handles.popupmenu13,'Value',1);
axes(handles.axes1)
image([]);
axis off
%Popup Menu of flows
set(handles.popupmenu14,'Enable','off');
set(handles.popupmenu14,'Value',1);
axes(handles.axes11)
image([]);
axis off
timeSlot=get(handles.popupmenuTimeSlot,'Value')-1;
if timeSlot~=0
%Popup Menu of lightpaths
if(isempty(sweepOfNetStates{timeSlot}.lightpathTable)==0)
lightpathMatrixString=cell(size(sweepOfNetStates{timeSlot}.lightpathTable,1)+1,1);
lightpathMatrixString(1)={['Lightpaths']};
for i=2:size(sweepOfNetStates{timeSlot}.lightpathTable,1)+1,
lightpathMatrixString(i)={['lightpath ', num2str(sweepOfNetStates{timeSlot}.lightpathTable(i-1,1)), ...
': [', num2str(sweepOfNetStates{timeSlot}.lightpathTable(i-1,2)), '-->', num2str(sweepOfNetStates{timeSlot}.lightpathTable(i-1,3)),']' ]};
end
set(handles.popupmenu13,'String', lightpathMatrixString);
axes(handles.axes1);
topologyTitle='';
hold off
plotTopology (phys.nodesPlaceMatrix, phys.linkTable, 0, topologyTitle, 0);
end
%Popup Menu of flows
if(isempty(sweepOfNetStates{timeSlot}.flowTable)==0)
flowsMatrixString=cell(size(sweepOfNetStates{timeSlot}.flowTable,1)+1,1);
flowsMatrixString(1)={['Flows']};
for i=2:size(sweepOfNetStates{timeSlot}.flowTable,1)+1,
flowsMatrixString(i)={['flow ', num2str(sweepOfNetStates{timeSlot}.flowTable(i-1,1)), ...
': [', num2str(sweepOfNetStates{timeSlot}.flowTable(i-1,2)), '-->', num2str(sweepOfNetStates{timeSlot}.flowTable(i-1,3)),']' ]};
end
set(handles.popupmenu14,'String', flowsMatrixString);
axes(handles.axes11);
topologyTitle='';
hold off
plotTopology (phys.nodesPlaceMatrix, sweepOfNetStates{timeSlot}.lightpathTable(:,2:3), 1, topologyTitle, 0)
end
set(handles.popupmenu13,'Enable','on')
set(handles.popupmenu14,'Enable','on')
end
% --------------------------------------------------------------------
% --------------------------------------------------------------------
% LIGHTPATH AND FLOW RESULTS
% --------------------------------------------------------------------
% --------------------------------------------------------------------
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%popupmenu13 - LIGHTPATH MENU
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function varargout = popupmenu13_Callback(h, eventdata, handles, varargin)
load_global_Multihour;
%When a lightpath is chosen, its physical route is drawn
lightpathNumber=get(handles.popupmenu13,'Value');
timeSlot=get(handles.popupmenuTimeSlot,'Value')-1;
%cla
axes(handles.axes1);
hold off
if lightpathNumber~=1,
plotLightpath(phys.nodesPlaceMatrix,phys.linkTable, lightpathNumber-1, sweepOfNetStates{timeSlot}.lightpathRoutingMatrix, '')
else
plotTopology(phys.nodesPlaceMatrix,phys.linkTable,0,'',1)
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%popupmenu14 - FLOW MENU
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function varargout = popupmenu14_Callback(h, eventdata, handles, varargin)
%%Partial flows are drawn
load_global_Multihour;
%When a flow is chosen, its logical route is drawn
flowNumber=get(handles.popupmenu14,'Value');
timeSlot=get(handles.popupmenuTimeSlot,'Value')-1;
axes(handles.axes11);
hold off
title='';
if flowNumber~=1,
plotTrafficFlow(phys.nodesPlaceMatrix, sweepOfNetStates{timeSlot}.lightpathTable(:,2:3), flowNumber-1, sweepOfNetStates{timeSlot}.flowTable, sweepOfNetStates{timeSlot}.flowRoutingMatrix, title)
else
plotTopology(phys.nodesPlaceMatrix,sweepOfNetStates{timeSlot}.lightpathTable(:,2:3),1,title,1);
end
if ispc
set(h,'BackgroundColor','white');
else
set(h,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%popupmenu16 - Per hour report
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function varargout = popupmenu16_Callback(h, eventdata, handles, varargin)
%%Partial flows are drawn
load_global_Multihour;
%CALCULATE NET METRICS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
timeSlot=get(handles.popupmenu16,'value')-1;
if timeSlot==0
set(handles.popupmenu17,'Enable','off');
set(handles.popupmenu18,'Enable','off');
set(handles.popupmenu19,'Enable','off');
set(handles.popupmenu20,'Enable','off');
else
set(handles.popupmenu17,'Enable','on');
set(handles.popupmenu18,'Enable','on');
set(handles.popupmenu19,'Enable','on');
set(handles.popupmenu20,'Enable','on');
end
% --------------------------------------------------------------------
% --------------------------------------------------------------------
% RESULTS REPORT
% --------------------------------------------------------------------
% --------------------------------------------------------------------
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%popupmenu9 -
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function varargout = popupmenu17_Callback(h, eventdata, handles, varargin)
load_global_Multihour;
timeSlot=get(handles.popupmenu16,'value')-1;
lpReportTypeId=get(handles.popupmenu17,'Value');
numberOfLightpaths=size(sweepOfNetStates{timeSlot}.lightpathRoutingMatrix ,1);
switch lpReportTypeId
case 2, %
textReport1={['PER LIGHTPATH REPORT: NODE ROUTES'];['----------------------------------'];['Column 1: Lightpath ID'];['Column 2: Ingress node'];['Column 3: Egress node'];['Column 4: Capacity'];['Column 5: Sequence of nodes']};
case 3, %
textReport1={['PER LIGHTPATH REPORT: LINK ROUTES'];['----------------------------------'];['Column 1: Lightpath ID'];['Column 2: Ingress node'];['Column 3: Egress node'];['Column 4: Capacity'];['Column 5: Existing wavelengths'];['Column 6: Sequence of links']};
case 4, %
textReport1={['PER LIGHTPATH REPORT: NUMBER OF CONVERSIONS'];['--------------------------------------------'];['Column 1: Lightpath ID'];['Column 2: Ingress node'];['Column 3: Egress node'];['Column 4: Capacity'];['Column 5: Existing wavelengths'];['Column 6: Number of wavelength conversion']};
case 5, %
textReport1={['PER LIGHTPATH REPORT: DISTANCES'];['--------------------------------'];['Column 1: Lightpath ID'];['Column 2: Ingress node'];['Column 3: Egress node'];['Column 4: Capacity'];['Column 5: Number of physical hops'];['Column 6: Distance']};
case 6, %
textReport1={['PER LIGHTPATH REPORT: LIST OF CARRIED FLOW IDS'];['-----------------------------------------------'];['Column 1: Lightpath ID'];['Column 2: Ingress node'];['Column 3: Egress node'];['Column 4: Capacity'];['Column 5: Existing wavelengths'];['Column 6: Flow IDs ']};
case 7, %
textReport1={['PER LIGHTPATH REPORT: CARRIED TRAFFIC'];['--------------------------------------'];['Column 1: Lightpath ID'];['Column 2: Ingress node'];['Column 3: Egress node'];['Column 4: Capacity'];['Column 5: Carried traffic']};
otherwise
error ('Not Valid Report Type ID !!!');
end
for lpID=1:numberOfLightpaths
string1 = sprintf ('%4d %2d %2d %3.1f ' , [sweepOfNetStates{timeSlot}.lightpathTable(lpID,1) sweepOfNetStates{timeSlot}.lightpathTable(lpID,2) sweepOfNetStates{timeSlot}.lightpathTable(lpID,3) phys.lightpathCapacity]);
switch lpReportTypeId
case 2,
for node=lightpathsRoutes{timeSlot}{lpID,1},
string1 = [string1 sprintf('%2d ',[node])];
end
case 3,
for link=lightpathsRoutes{timeSlot}{lpID,2},
string1 = [string1 sprintf('%2d (%2d) ',[link sweepOfNetStates{timeSlot}.lightpathRoutingMatrix(lpID,link)])];
end
case 4,
string1 = [string1 sprintf('%2d ',[sweepOfStatMetrics{timeSlot}.NrUsedConvertersPerLP(lpID)])];
case 5,
string1 = [string1 sprintf('%2d %2d ',[sweepOfStatMetrics{timeSlot}.NrUsedPhysHops(lpID) sweepOfStatMetrics{timeSlot}.lightpathDistances(lpID)])];
case 6,
for flowNumber=listOfSerialNumberFlowsPerLp{timeSlot}{lpID},
string1 = [string1 sprintf('%5d ',[flowNumber])];
end
case 7,
string1 = [string1 sprintf('%2.1f ',[sweepOfStatMetrics{timeSlot}.lightpathFlows(lpID)])];
otherwise
error ('Not Valid Report Type ID !!!');
end
string1={string1};
textReport1=vertcat(textReport1,string1);
end
textReport1 = vertcat (textReport1 , {[''];['Summary information:'];['--------------------']});
switch lpReportTypeId
case 2,
auxTextReport={['Average Virtual Hops: ',num2str(sweepOfStatMetrics{timeSlot}.averVirtualHops)],
['Average Distance(km): ', num2str(sweepOfStatMetrics{timeSlot}.averageDistance)]};
textReport1 =vertcat(textReport1,auxTextReport);
case 3,
auxTextReport={['Average Virtual Hops: ',num2str(sweepOfStatMetrics{timeSlot}.averVirtualHops)],
['Average Distance(km): ', num2str(sweepOfStatMetrics{timeSlot}.averageDistance)]};
textReport1 =vertcat(textReport1,auxTextReport);
case 4,
auxTextReport={['Average number of used TWCs per lightpath: ',num2str(sweepOfStatMetrics{timeSlot}.averNrUsedConverPerLP)]};
textReport1 =vertcat(textReport1,auxTextReport);
case 5,
auxTextReport={['Average Virtual Hops: ',num2str(sweepOfStatMetrics{timeSlot}.averVirtualHops)],
['Average Distance(km): ', num2str(sweepOfStatMetrics{timeSlot}.averageDistance)]};
textReport1 =vertcat(textReport1,auxTextReport);
case 6,
auxTextReport={['Average number of flows in a lightpath: ',num2str(sweepOfStatMetrics{timeSlot}.averNumOfFlowsPerLp)]};
textReport1 =vertcat(textReport1,auxTextReport);
case 7,
auxTextReport={['Network congestion: ',num2str(sweepOfStatMetrics{timeSlot}.networkCongestion)]};
textReport1 =vertcat(textReport1,auxTextReport);
end
textReport1 = vertcat (textReport1 , {[''];[''];['']});
textReport=vertcat(get(handles.edit6,'String'),textReport1);
set(handles.edit6,'String',[]);
set(handles.edit6,'String',textReport);
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %popupmenu10 -
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function varargout = popupmenu18_Callback(h, eventdata, handles, varargin)
load_global_Multihour;
timeSlot=get(handles.popupmenu16,'value')-1;
linkReportTypeId=get(handles.popupmenu18,'Value');
numberOfLinks=phys.M;
switch linkReportTypeId
case 2, %
textReport1={['PER LINK REPORT: WAVELENGTH UTILIZATION'];['----------------------------------------'];['Column 1: Link ID'];['Column 2: Origin node'];['Column 3: Destination node'];['Column 4: Distance'];['Column 5: Existing wavelengths'];['Column 6: Used wavelengths']};
case 3, %
textReport1={['PER LINK REPORT: ROUTED TRAFFIC'];['--------------------------------'];['Column 1: Link ID'];['Column 2: Origin node'];['Column 3: Destination node'];['Column 4: Distance'];['Column 5: Routed traffic']};
otherwise
error ('Not Link Valid Report Type ID !!!');
end
for linkID=1:numberOfLinks
string1 = sprintf ('%4d %2d %2d %3d %3d ' , [linkID phys.linkTable(linkID,1) phys.linkTable(linkID,2) phys.lightpathCapacity phys.linkLengthInKm(linkID)]);
switch linkReportTypeId
case 2,
string1 = [string1 sprintf('%3d %3d',[phys.numberWavelengthPerFiber(linkID) sweepOfStatMetrics{timeSlot}.NrUsedWavelengthsPerFiber(linkID)])];
case 3,
string1 = [string1 sprintf('%3.1f ',[sweepOfStatMetrics{timeSlot}.linkTraffic(linkID)])];
otherwise
error ('Not Link Valid Report Type ID !!!');
end
string1={string1};
textReport1=vertcat(textReport1,string1);
end
textReport1 = vertcat (textReport1 , {[''];['Summary information:'];['--------------------']});
switch linkReportTypeId
case 2,
auxTextReport2={['Average used wavelength per link: ',num2str(sweepOfStatMetrics{timeSlot}.averNrUsedWavelengthsPerFiber)]};
textReport1 =vertcat(textReport1,auxTextReport2);
case 3,
auxTextReport2={['Average routed traffic per link: ',num2str(sweepOfStatMetrics{timeSlot}.averLinkTraffic)]};
textReport1 =vertcat(textReport1 ,auxTextReport2);
end
textReport1 = vertcat (textReport1 , {[''];[''];['']});
textReport=vertcat(get(handles.edit6,'String'),textReport1);
set(handles.edit6,'String',[]);
set(handles.edit6,'String',textReport);
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %popupmenu11 -
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function varargout = popupmenu19_Callback(h, eventdata, handles, varargin)
load_global_Multihour;
timeSlot=get(handles.popupmenu16,'value')-1;
nodeReportTypeId=get(handles.popupmenu19,'Value');
numberOfNodes=phys.N;
switch nodeReportTypeId
case 2, %
textReport1={['PER NODE REPORT: USED TRANSMITTERS/RECEIVERS/TWCS'];['--------------------------------------------------'];['Column 1: Node ID'];['Column 2: Used transmitters'];['Column 3: Used receivers'];['Column 4: Used TWCs']};
case 3, %
textReport1={['PER NODE REPORT: INGRESS/EGRESS/GROOMING TRAFFIC'];['-------------------------------------------------'];['Column 1: Node ID'];['Column 2: Ingress traffic (Gbps)'];['Column 3: Egress traffic (Gbps)'];['Column 4: Grooming traffic (Gbps)']};
otherwise
error ('Not Valid Node Report Type ID !!!');
end
for nodeID=1:numberOfNodes
string1 = sprintf ('%4d ' , [nodeID]);
switch nodeReportTypeId
case 2,
string1 = [string1 sprintf('%3d %3d %3d ',[sweepOfStatMetrics{timeSlot}.NrUsedTransmittersPerNode(nodeID) sweepOfStatMetrics{timeSlot}.NrUsedReceiversPerNode(nodeID) sweepOfStatMetrics{timeSlot}.NrUsedConvertersPerNode(nodeID)])];
case 3,
string1 = [string1 sprintf('%3.1f %3.1f %3.1f ',[sweepOfStatMetrics{timeSlot}.ingressEgressGroomingTraffic.ingressTraffic(nodeID) sweepOfStatMetrics{timeSlot}.ingressEgressGroomingTraffic.egressTraffic(nodeID) sweepOfStatMetrics{timeSlot}.ingressEgressGroomingTraffic.groomingTraffic(nodeID)])];
otherwise
error ('Not Valid Node Report Type ID !!!');
end
string1={string1};
textReport1=vertcat(textReport1,string1);
end
switch nodeReportTypeId
case 2,
case 3,
textReport1 = vertcat (textReport1 , {[''];['Summary information:'];['--------------------']});
auxTextReport={['Average ingress traffic (Gbps): ',num2str(sweepOfStatMetrics{timeSlot}.averIngressTraffic)],
['Average egress traffic (Gbps): ',num2str(sweepOfStatMetrics{timeSlot}.averEgressTraffic)],
['Average grooming traffic (Gbps): ',num2str(sweepOfStatMetrics{timeSlot}.averGroomingTraffic)]};
textReport1 =vertcat(textReport1 ,auxTextReport);
end
textReport1 = vertcat (textReport1 , {[''];[''];['']});
textReport=vertcat(get(handles.edit6,'String'),textReport1);
set(handles.edit6,'String',[]);
set(handles.edit6,'String',textReport);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%popupmenu12 -
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function varargout = popupmenu20_Callback(h, eventdata, handles, varargin)
load_global_Multihour;
timeSlot=get(handles.popupmenu16,'value')-1;
flowReportTypeId=get(handles.popupmenu20,'Value');
numberOfFlows=size(sweepOfNetStates{timeSlot}.flowRoutingMatrix,1);
switch flowReportTypeId
case 2, %
textReport1={['PER FLOW REPORT: LOST TRAFFIC'];['------------------------------'];['Column 1: Serial number of the flow'];['Column 2: IngressNode'];['Column 3: EgressNode'];['Column 4: Offered traffic (Gbps)'];['Column 5: Lost traffic (Gbps)']};
case 3, %
textReport1={['PER FLOW REPORT: NUMBER OF VIRTUAL HOPS'];['----------------------------------------'];['Column 1: Serial number of the flow'];['Column 2: IngressNode'];['Column 3: EgressNode'];['Column 4: Offered traffic (Gbps)'];['Column 5: Weighted number of hops ']};
otherwise
error ('Not Valid Flow Report Type ID !!!');
end
for flowID=1:numberOfFlows
string1 = sprintf ('%4d %2d %2d %3.1f ' , [sweepOfNetStates{timeSlot}.flowTable(flowID,1) sweepOfNetStates{timeSlot}.flowTable(flowID,2) sweepOfNetStates{timeSlot}.flowTable(flowID,3) sweepOfNetStates{timeSlot}.flowTable(flowID,4)]);
switch flowReportTypeId
case 2,
string1 = [string1 sprintf('%3.1f ',[sweepOfStatMetrics{timeSlot}.lostTraffic(flowID)])];
case 3,
string1 = [string1 sprintf('%3d ',[sweepOfStatMetrics{timeSlot}.numVirtHopsPerFlow(flowID)])];
otherwise
error ('Not Valid Flow Report Type ID !!!');
end
string1={string1};
textReport1=vertcat(textReport1,string1);
end
textReport1 = vertcat (textReport1 , {[''];['Summary information:'];['--------------------']});
switch flowReportTypeId
case 2,
auxTextReport={['Fraction of lost traffic: ',num2str(sweepOfStatMetrics{timeSlot}.fractionOfLostTraffic)]};
textReport1 =vertcat(textReport1 ,auxTextReport);
case 3,
auxTextReport={['Average weighted number of hops: ',num2str(sweepOfStatMetrics{timeSlot}.averNumVirtHopsPerFlow)]};
textReport1 =vertcat(textReport1 ,auxTextReport);
end
textReport1 = vertcat (textReport1 , {[''];['']});
textReport=vertcat(get(handles.edit6,'String'),textReport1);
set(handles.edit6,'String',[]);
set(handles.edit6,'String',textReport);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%pushbuttonSaveXML -
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function varargout = pushbuttonSaveXMLTimeSlot_Callback(h, eventdata, handles, varargin)
load_global_Multihour;
timeSlotToSave=get(handles.popupmenuTimeSlot,'Value')-1;
if timeSlotToSave~=0
metadataFigure=openfig('metadataFigure_MH.fig','reuse');
dataMetadataFigure=guihandles(metadataFigure);
guidata(metadataFigure,dataMetadataFigure);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%pushbuttonSaveXML -
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function varargout = pushbuttonSaveXML_Callback(h, eventdata, handles, varargin)
load_global_Multihour;
timeSlotToSave=-1;
metadataFigure=openfig('metadataFigure_MH.fig','reuse');
dataMetadataFigure=guihandles(metadataFigure);
guidata(metadataFigure,dataMetadataFigure);