From 1e60c9221b5efc89cd10e958ef13d56f848a748b Mon Sep 17 00:00:00 2001 From: AndersonPaschoalon Date: Mon, 28 Nov 2016 23:00:03 -0200 Subject: [PATCH] version v0.2, now the flows have interdeparture times models --- .gitignore | 1 + .../CompactTraceDescriptor.1480112621819.pdom | Bin 13266944 -> 13320192 bytes .../CompactTraceDescriptor.build.log | 79 +- .../org.eclipse.cdt.ui/Prototypes.build.log | 17 +- .../org.eclipse.cdt.ui/global-build.log | 426 ++ .../20/50fb859eceb500161808a5c64fd2084a | 1969 ++++++++ .../26/a07619e28bb500161808a5c64fd2084a | 1909 +++++++ .../26/b034ba7bceb500161808a5c64fd2084a | 231 + .../29/504e2db4cdb500161808a5c64fd2084a | 885 ++++ .../2d/001dfc91acb500161808a5c64fd2084a | 1945 +++++++ .../36/909fc6c28ab500161808a5c64fd2084a | 1894 +++++++ .../49/40b7149babb500161808a5c64fd2084a | 91 + .../4c/d02ddb7dabb500161808a5c64fd2084a | 105 + .../4e/70cc001eacb500161808a5c64fd2084a | 1948 +++++++ .../50/b05d7843a2b500161808a5c64fd2084a | 84 + .../57/f081141bacb500161808a5c64fd2084a | 1948 +++++++ .../6/e03e0d93acb500161808a5c64fd2084a | 885 ++++ .../72/2071569cceb500161808a5c64fd2084a | 1967 ++++++++ .../7f/c0b919418db500161808a5c64fd2084a | 1909 +++++++ .../87/20340d7ec8b500161808a5c64fd2084a | 1945 +++++++ .../88/c0c1a40b8ab500161808a5c64fd2084a | 100 + .../8d/30cd1e6f8bb500161808a5c64fd2084a | 1896 +++++++ .../9b/f06d2b72acb500161808a5c64fd2084a | 886 ++++ .../9e/204b400fa2b500161808a5c64fd2084a | 105 + .../a4/003017118cb500161808a5c64fd2084a | 1909 +++++++ .../a5/b0a10b008cb500161808a5c64fd2084a | 1909 +++++++ .../a9/c04130148ab500161808a5c64fd2084a | 105 + .../c1/f00f193186b500161808a5c64fd2084a | 29 + .../c2/20fe03f58bb500161808a5c64fd2084a | 886 ++++ .../c5/102fa794c8b500161808a5c64fd2084a | 1967 ++++++++ .../c5/4049f711acb500161808a5c64fd2084a | 1933 +++++++ .../c7/10d09ebda2b500161808a5c64fd2084a | 85 + .../db/802eecc9acb500161808a5c64fd2084a | 885 ++++ .../dc/20882d9d8ab500161808a5c64fd2084a | 885 ++++ .../de/9094c5bf8ab500161808a5c64fd2084a | 886 ++++ .../e0/0046bc9eacb500161808a5c64fd2084a | 1945 +++++++ .../e0/10e3bea0c8b500161808a5c64fd2084a | 1967 ++++++++ .../e8/b05455a8c8b500161808a5c64fd2084a | 92 + .../eb/903e156dacb500161808a5c64fd2084a | 1946 +++++++ .../ef/10ccebe9c8b500161808a5c64fd2084a | 1967 ++++++++ .../f8/107344d9a2b500161808a5c64fd2084a | 102 + .../.indexes/e4/properties.index | Bin 1484 -> 1569 bytes .../CompactTraceDescriptor/.markers.snap | Bin 5066 -> 27527 bytes .../CompactTraceDescriptor/.syncinfo.snap | Bin 112 -> 320 bytes .../.projects/Prototypes/.markers.snap | Bin 48 -> 256 bytes .../.projects/Prototypes/.syncinfo.snap | Bin 48 -> 256 bytes .../RemoteSystemsTempFiles/.markers.snap | Bin 112 -> 320 bytes .../RemoteSystemsTempFiles/.syncinfo.snap | Bin 112 -> 320 bytes .../.root/.markers.snap | Bin 112 -> 320 bytes .../.safetable/org.eclipse.core.resources | Bin 4952 -> 11738 bytes .../org.eclipse.core.resources/14.snap | Bin 8322 -> 14118 bytes .../org.eclipse.e4.workbench/workbench.xmi | 4462 +++++++++-------- .../Debug/src/DataProcessor.o | Bin 2865968 -> 2898288 bytes CompactTraceDescriptor/Debug/src/DitgFlow.o | Bin 607056 -> 607640 bytes CompactTraceDescriptor/Debug/src/DummyFlow.o | Bin 1355952 -> 1356496 bytes CompactTraceDescriptor/Debug/src/Main.o | Bin 465416 -> 466000 bytes .../Debug/src/NetworkFlow.o | Bin 284568 -> 274728 bytes .../Debug/src/NetworkTrace.o | Bin 403792 -> 404376 bytes .../Debug/src/StochasticModelFit.o | Bin 192544 -> 192544 bytes CompactTraceDescriptor/Debug/src/TestClass.o | Bin 1016752 -> 1017336 bytes CompactTraceDescriptor/fileStack.txt | 1373 +++++ CompactTraceDescriptor/interFileStack.txt | 42 + CompactTraceDescriptor/interSessionStack.txt | 1 + CompactTraceDescriptor/src/DataProcessor.cpp | 309 +- CompactTraceDescriptor/src/DataProcessor.h | 15 +- CompactTraceDescriptor/src/Defines.h | 134 +- .../src/StochasticModelFit.h | 15 + 67 files changed, 46600 insertions(+), 2474 deletions(-) create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/20/50fb859eceb500161808a5c64fd2084a create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/26/a07619e28bb500161808a5c64fd2084a create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/26/b034ba7bceb500161808a5c64fd2084a create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/29/504e2db4cdb500161808a5c64fd2084a create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/2d/001dfc91acb500161808a5c64fd2084a create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/36/909fc6c28ab500161808a5c64fd2084a create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/49/40b7149babb500161808a5c64fd2084a create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/4c/d02ddb7dabb500161808a5c64fd2084a create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/4e/70cc001eacb500161808a5c64fd2084a create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/50/b05d7843a2b500161808a5c64fd2084a create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/57/f081141bacb500161808a5c64fd2084a create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/6/e03e0d93acb500161808a5c64fd2084a create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/72/2071569cceb500161808a5c64fd2084a create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/7f/c0b919418db500161808a5c64fd2084a create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/87/20340d7ec8b500161808a5c64fd2084a create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/88/c0c1a40b8ab500161808a5c64fd2084a create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/8d/30cd1e6f8bb500161808a5c64fd2084a create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/9b/f06d2b72acb500161808a5c64fd2084a create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/9e/204b400fa2b500161808a5c64fd2084a create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/a4/003017118cb500161808a5c64fd2084a create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/a5/b0a10b008cb500161808a5c64fd2084a create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/a9/c04130148ab500161808a5c64fd2084a create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/c1/f00f193186b500161808a5c64fd2084a create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/c2/20fe03f58bb500161808a5c64fd2084a create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/c5/102fa794c8b500161808a5c64fd2084a create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/c5/4049f711acb500161808a5c64fd2084a create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/c7/10d09ebda2b500161808a5c64fd2084a create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/db/802eecc9acb500161808a5c64fd2084a create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/dc/20882d9d8ab500161808a5c64fd2084a create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/de/9094c5bf8ab500161808a5c64fd2084a create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/e0/0046bc9eacb500161808a5c64fd2084a create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/e0/10e3bea0c8b500161808a5c64fd2084a create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/e8/b05455a8c8b500161808a5c64fd2084a create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/eb/903e156dacb500161808a5c64fd2084a create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/ef/10ccebe9c8b500161808a5c64fd2084a create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/f8/107344d9a2b500161808a5c64fd2084a create mode 100644 CompactTraceDescriptor/fileStack.txt create mode 100644 CompactTraceDescriptor/interFileStack.txt create mode 100644 CompactTraceDescriptor/interSessionStack.txt diff --git a/.gitignore b/.gitignore index 819a6f4..560265f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ Components/* RemoteSystemsTempFiles +Pcap/ diff --git a/.metadata/.plugins/org.eclipse.cdt.core/CompactTraceDescriptor.1480112621819.pdom b/.metadata/.plugins/org.eclipse.cdt.core/CompactTraceDescriptor.1480112621819.pdom index 4303e13e4b0577e4adf8dec26a146853e51182c0..04cb9c11f0a441ff0bc3dc371ebf2cc0131e820c 100644 GIT binary patch delta 118233 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�#w<9ZV(O_@+Q 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 delta 63240 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 N|1l-@v$pt4{}0LKtq=eJ diff --git a/.metadata/.plugins/org.eclipse.cdt.ui/CompactTraceDescriptor.build.log b/.metadata/.plugins/org.eclipse.cdt.ui/CompactTraceDescriptor.build.log index a2ced6c..679ef0f 100644 --- a/.metadata/.plugins/org.eclipse.cdt.ui/CompactTraceDescriptor.build.log +++ b/.metadata/.plugins/org.eclipse.cdt.ui/CompactTraceDescriptor.build.log @@ -1,79 +1,8 @@ -16:04:49 **** Build of configuration Debug for project CompactTraceDescriptor **** +22:15:29 **** Incremental Build of configuration Debug for project CompactTraceDescriptor **** make all -make: Warning: File 'objects.mk' has modification time 170 s in the future -Building file: ../src/DataProcessor.cpp -Invoking: GCC C++ Compiler -g++ -std=c++11 -I"/home/ldapusers/apaschoalon/ProjetoMestrado/Components/D-ITG-2.8.1-r1023//src/libITG" -O2 -g3 -Wall -c -fmessage-length=0 -std=c++11 -MMD -MP -MF"src/DataProcessor.d" -MT"src/DataProcessor.o" -o "src/DataProcessor.o" "../src/DataProcessor.cpp" -../src/DataProcessor.cpp:446:8: warning: extra tokens at end of #endif directive - #endif DEBUG_StochasticModelFit - ^ -../src/DataProcessor.cpp: In member function ‘int DataProcessor::calculate(const string&, DatabaseInterface*, NetworkTrace*)’: -../src/DataProcessor.cpp:57:11: warning: unused variable ‘ps_mostFrequent’ [-Wunused-variable] - long int ps_mostFrequent = 0; - ^ -../src/DataProcessor.cpp:58:9: warning: unused variable ‘mean_packetRate’ [-Wunused-variable] - double mean_packetRate = 0; - ^ -../src/DataProcessor.cpp:61:22: warning: unused variable ‘modelVet’ [-Wunused-variable] - StochasticModelFit* modelVet = NULL; - ^ -Finished building: ../src/DataProcessor.cpp - -Building file: ../src/DatabaseInterface.cpp -Invoking: GCC C++ Compiler -g++ -std=c++11 -I"/home/ldapusers/apaschoalon/ProjetoMestrado/Components/D-ITG-2.8.1-r1023//src/libITG" -O2 -g3 -Wall -c -fmessage-length=0 -std=c++11 -MMD -MP -MF"src/DatabaseInterface.d" -MT"src/DatabaseInterface.o" -o "src/DatabaseInterface.o" "../src/DatabaseInterface.cpp" -Finished building: ../src/DatabaseInterface.cpp - -Building file: ../src/DitgFlow.cpp -Invoking: GCC C++ Compiler -g++ -std=c++11 -I"/home/ldapusers/apaschoalon/ProjetoMestrado/Components/D-ITG-2.8.1-r1023//src/libITG" -O2 -g3 -Wall -c -fmessage-length=0 -std=c++11 -MMD -MP -MF"src/DitgFlow.d" -MT"src/DitgFlow.o" -o "src/DitgFlow.o" "../src/DitgFlow.cpp" -Finished building: ../src/DitgFlow.cpp - -Building file: ../src/DummyFlow.cpp -Invoking: GCC C++ Compiler -g++ -std=c++11 -I"/home/ldapusers/apaschoalon/ProjetoMestrado/Components/D-ITG-2.8.1-r1023//src/libITG" -O2 -g3 -Wall -c -fmessage-length=0 -std=c++11 -MMD -MP -MF"src/DummyFlow.d" -MT"src/DummyFlow.o" -o "src/DummyFlow.o" "../src/DummyFlow.cpp" -../src/DummyFlow.cpp: In member function ‘virtual void DummyFlow::flowGenerate()’: -../src/DummyFlow.cpp:163:15: warning: unused variable ‘usecs’ [-Wunused-variable] - unsigned int usecs = (unsigned int) (this->getFlowStartDelay() * MEGA_POWER); - ^ -Finished building: ../src/DummyFlow.cpp - -Building file: ../src/Main.cpp -Invoking: GCC C++ Compiler -g++ -std=c++11 -I"/home/ldapusers/apaschoalon/ProjetoMestrado/Components/D-ITG-2.8.1-r1023//src/libITG" -O2 -g3 -Wall -c -fmessage-length=0 -std=c++11 -MMD -MP -MF"src/Main.d" -MT"src/Main.o" -o "src/Main.o" "../src/Main.cpp" -Finished building: ../src/Main.cpp - -Building file: ../src/NetworkFlow.cpp -Invoking: GCC C++ Compiler -g++ -std=c++11 -I"/home/ldapusers/apaschoalon/ProjetoMestrado/Components/D-ITG-2.8.1-r1023//src/libITG" -O2 -g3 -Wall -c -fmessage-length=0 -std=c++11 -MMD -MP -MF"src/NetworkFlow.d" -MT"src/NetworkFlow.o" -o "src/NetworkFlow.o" "../src/NetworkFlow.cpp" -Finished building: ../src/NetworkFlow.cpp - -Building file: ../src/NetworkTrace.cpp -Invoking: GCC C++ Compiler -g++ -std=c++11 -I"/home/ldapusers/apaschoalon/ProjetoMestrado/Components/D-ITG-2.8.1-r1023//src/libITG" -O2 -g3 -Wall -c -fmessage-length=0 -std=c++11 -MMD -MP -MF"src/NetworkTrace.d" -MT"src/NetworkTrace.o" -o "src/NetworkTrace.o" "../src/NetworkTrace.cpp" -Finished building: ../src/NetworkTrace.cpp - -Building file: ../src/StochasticModelFit.cpp -Invoking: GCC C++ Compiler -g++ -std=c++11 -I"/home/ldapusers/apaschoalon/ProjetoMestrado/Components/D-ITG-2.8.1-r1023//src/libITG" -O2 -g3 -Wall -c -fmessage-length=0 -std=c++11 -MMD -MP -MF"src/StochasticModelFit.d" -MT"src/StochasticModelFit.o" -o "src/StochasticModelFit.o" "../src/StochasticModelFit.cpp" -Finished building: ../src/StochasticModelFit.cpp - -Building file: ../src/TestClass.cpp -Invoking: GCC C++ Compiler -g++ -std=c++11 -I"/home/ldapusers/apaschoalon/ProjetoMestrado/Components/D-ITG-2.8.1-r1023//src/libITG" -O2 -g3 -Wall -c -fmessage-length=0 -std=c++11 -MMD -MP -MF"src/TestClass.d" -MT"src/TestClass.o" -o "src/TestClass.o" "../src/TestClass.cpp" -Finished building: ../src/TestClass.cpp - -Building file: ../src/TraceAnalyzer.cpp -Invoking: GCC C++ Compiler -g++ -std=c++11 -I"/home/ldapusers/apaschoalon/ProjetoMestrado/Components/D-ITG-2.8.1-r1023//src/libITG" -O2 -g3 -Wall -c -fmessage-length=0 -std=c++11 -MMD -MP -MF"src/TraceAnalyzer.d" -MT"src/TraceAnalyzer.o" -o "src/TraceAnalyzer.o" "../src/TraceAnalyzer.cpp" -Finished building: ../src/TraceAnalyzer.cpp - -Building target: CompactTraceDescriptor -Invoking: GCC C++ Linker -g++ -o "CompactTraceDescriptor" ./src/DataProcessor.o ./src/DatabaseInterface.o ./src/DitgFlow.o ./src/DummyFlow.o ./src/Main.o ./src/NetworkFlow.o ./src/NetworkTrace.o ./src/StochasticModelFit.o ./src/TestClass.o ./src/TraceAnalyzer.o -lpthread -lsqlite3 -larmadillo -lITG -Finished building target: CompactTraceDescriptor - +make: Warning: File 'src/TestClass.d' has modification time 61 s in the future make: warning: Clock skew detected. Your build may be incomplete. +make: Nothing to be done for 'all'. -16:05:02 Build Finished (took 12s.435ms) +22:15:30 Build Finished (took 260ms) diff --git a/.metadata/.plugins/org.eclipse.cdt.ui/Prototypes.build.log b/.metadata/.plugins/org.eclipse.cdt.ui/Prototypes.build.log index 3def672..f71c0c3 100644 --- a/.metadata/.plugins/org.eclipse.cdt.ui/Prototypes.build.log +++ b/.metadata/.plugins/org.eclipse.cdt.ui/Prototypes.build.log @@ -1,17 +1,8 @@ -16:05:02 **** Build of configuration Debug for project Prototypes **** +22:15:27 **** Incremental Build of configuration Debug for project Prototypes **** make all -make: Warning: File 'objects.mk' has modification time 170 s in the future -Building file: ../Algorithms/Prototypes.cpp -Invoking: GCC C++ Compiler -g++ -std=c++11 -O0 -g3 -Wall -c -fmessage-length=0 -std=c++11 -MMD -MP -MF"Algorithms/Prototypes.d" -MT"Algorithms/Prototypes.o" -o "Algorithms/Prototypes.o" "../Algorithms/Prototypes.cpp" -Finished building: ../Algorithms/Prototypes.cpp - -Building target: Prototypes -Invoking: GCC C++ Linker -g++ -o "Prototypes" ./Algorithms/Prototypes.o -larmadillo -Finished building target: Prototypes - +make: Warning: File 'Algorithms/subdir.mk' has modification time 168 s in the future make: warning: Clock skew detected. Your build may be incomplete. +make: Nothing to be done for 'all'. -16:05:05 Build Finished (took 3s.67ms) +22:15:27 Build Finished (took 160ms) diff --git a/.metadata/.plugins/org.eclipse.cdt.ui/global-build.log b/.metadata/.plugins/org.eclipse.cdt.ui/global-build.log index 80f74a3..5239aba 100644 --- a/.metadata/.plugins/org.eclipse.cdt.ui/global-build.log +++ b/.metadata/.plugins/org.eclipse.cdt.ui/global-build.log @@ -857,3 +857,429 @@ g++ -o "Prototypes" ./Algorithms/Prototypes.o -larmadillo Finished building target: Prototypes make: warning: Clock skew detected. Your build may be incomplete. +18:49:14 **** Incremental Build of configuration Debug for project CompactTraceDescriptor **** +make all +make: Warning: File 'src/subdir.mk' has modification time 168 s in the future +Building file: ../src/DataProcessor.cpp +Invoking: GCC C++ Compiler +g++ -std=c++11 -I"/home/ldapusers/apaschoalon/ProjetoMestrado/Components/D-ITG-2.8.1-r1023//src/libITG" -O2 -g3 -Wall -c -fmessage-length=0 -std=c++11 -MMD -MP -MF"src/DataProcessor.d" -MT"src/DataProcessor.o" -o "src/DataProcessor.o" "../src/DataProcessor.cpp" +In file included from ../src/DataProcessor.cpp:8:0: +../src/DataProcessor.h:87:7: error: extra qualification ‘DataProcessor::’ on member ‘save_data_on_file’ [-fpermissive] + void DataProcessor::save_data_on_file(const string& fileName, list theList); + ^ +../src/DataProcessor.cpp: In member function ‘int DataProcessor::calculate(const string&, DatabaseInterface*, NetworkTrace*)’: +../src/DataProcessor.cpp:57:11: warning: unused variable ‘ps_mostFrequent’ [-Wunused-variable] + long int ps_mostFrequent = 0; + ^ +../src/DataProcessor.cpp:58:9: warning: unused variable ‘mean_packetRate’ [-Wunused-variable] + double mean_packetRate = 0; + ^ +../src/DataProcessor.cpp:61:22: warning: unused variable ‘modelVet’ [-Wunused-variable] + StochasticModelFit* modelVet = NULL; + ^ +../src/DataProcessor.cpp: In member function ‘void DataProcessor::save_data_on_file(const string&, std::list)’: +../src/DataProcessor.cpp:1200:7: error: need ‘typename’ before ‘std::list::iterator’ because ‘std::list’ is a dependent scope + for (list::iterator it = theList.begin(); it != theList.end(); it++) + ^ +../src/DataProcessor.cpp:1200:25: error: expected ‘;’ before ‘it’ + for (list::iterator it = theList.begin(); it != theList.end(); it++) + ^ +../src/DataProcessor.cpp:1200:47: error: ‘it’ was not declared in this scope + for (list::iterator it = theList.begin(); it != theList.end(); it++) + ^ +../src/DataProcessor.cpp: In instantiation of ‘void DataProcessor::save_data_on_file(const string&, std::list) [with T = double; std::string = std::basic_string]’: +../src/DataProcessor.cpp:303:51: required from here +../src/DataProcessor.cpp:1200:45: error: dependent-name ‘std::list::iterator’ is parsed as a non-type, but instantiation yields a type + for (list::iterator it = theList.begin(); it != theList.end(); it++) + ^ +../src/DataProcessor.cpp:1200:45: note: say ‘typename std::list::iterator’ if a type is meant +../src/DataProcessor.cpp:1191:6: warning: unused variable ‘m’ [-Wunused-variable] + int m = theList.size(); + ^ +make: *** [src/DataProcessor.o] Error 1 +src/subdir.mk:45: recipe for target 'src/DataProcessor.o' failed +18:49:18 **** Incremental Build of configuration Debug for project Prototypes **** +make all +make: Warning: File 'Algorithms/subdir.mk' has modification time 168 s in the future +make: warning: Clock skew detected. Your build may be incomplete. +make: Nothing to be done for 'all'. +18:51:37 **** Incremental Build of configuration Debug for project CompactTraceDescriptor **** +make all +make: Warning: File 'src/subdir.mk' has modification time 168 s in the future +Building file: ../src/DataProcessor.cpp +Invoking: GCC C++ Compiler +g++ -std=c++11 -I"/home/ldapusers/apaschoalon/ProjetoMestrado/Components/D-ITG-2.8.1-r1023//src/libITG" -O2 -g3 -Wall -c -fmessage-length=0 -std=c++11 -MMD -MP -MF"src/DataProcessor.d" -MT"src/DataProcessor.o" -o "src/DataProcessor.o" "../src/DataProcessor.cpp" +In file included from ../src/DataProcessor.cpp:8:0: +../src/DataProcessor.h:86:7: error: extra qualification ‘DataProcessor::’ on member ‘save_data_on_file’ [-fpermissive] + void DataProcessor::save_data_on_file(const string& fileName, list theList); + ^ +../src/DataProcessor.cpp: In member function ‘int DataProcessor::calculate(const string&, DatabaseInterface*, NetworkTrace*)’: +../src/DataProcessor.cpp:57:11: warning: unused variable ‘ps_mostFrequent’ [-Wunused-variable] + long int ps_mostFrequent = 0; + ^ +../src/DataProcessor.cpp:58:9: warning: unused variable ‘mean_packetRate’ [-Wunused-variable] + double mean_packetRate = 0; + ^ +../src/DataProcessor.cpp:61:22: warning: unused variable ‘modelVet’ [-Wunused-variable] + StochasticModelFit* modelVet = NULL; + ^ +../src/DataProcessor.cpp: In member function ‘void DataProcessor::save_data_on_file(const string&, std::list)’: +../src/DataProcessor.cpp:1190:6: warning: unused variable ‘m’ [-Wunused-variable] + int m = theList.size(); + ^ +src/subdir.mk:45: recipe for target 'src/DataProcessor.o' failed +make: *** [src/DataProcessor.o] Error 1 +18:51:40 **** Incremental Build of configuration Debug for project Prototypes **** +make all +make: Warning: File 'Algorithms/subdir.mk' has modification time 168 s in the future +make: warning: Clock skew detected. Your build may be incomplete. +make: Nothing to be done for 'all'. +18:52:30 **** Incremental Build of configuration Debug for project CompactTraceDescriptor **** +make all +make: Warning: File 'src/subdir.mk' has modification time 168 s in the future +Building file: ../src/DataProcessor.cpp +Invoking: GCC C++ Compiler +g++ -std=c++11 -I"/home/ldapusers/apaschoalon/ProjetoMestrado/Components/D-ITG-2.8.1-r1023//src/libITG" -O2 -g3 -Wall -c -fmessage-length=0 -std=c++11 -MMD -MP -MF"src/DataProcessor.d" -MT"src/DataProcessor.o" -o "src/DataProcessor.o" "../src/DataProcessor.cpp" +In file included from ../src/DataProcessor.cpp:8:0: +../src/DataProcessor.h:86:7: error: extra qualification ‘DataProcessor::’ on member ‘save_data_on_file’ [-fpermissive] + void DataProcessor::save_data_on_file(const string& fileName, list& theList); + ^ +../src/DataProcessor.cpp: In member function ‘int DataProcessor::calculate(const string&, DatabaseInterface*, NetworkTrace*)’: +../src/DataProcessor.cpp:57:11: warning: unused variable ‘ps_mostFrequent’ [-Wunused-variable] + long int ps_mostFrequent = 0; + ^ +../src/DataProcessor.cpp:58:9: warning: unused variable ‘mean_packetRate’ [-Wunused-variable] + double mean_packetRate = 0; + ^ +../src/DataProcessor.cpp:61:22: warning: unused variable ‘modelVet’ [-Wunused-variable] + StochasticModelFit* modelVet = NULL; + ^ +../src/DataProcessor.cpp: In member function ‘void DataProcessor::save_data_on_file(const string&, std::list&)’: +../src/DataProcessor.cpp:1190:6: warning: unused variable ‘m’ [-Wunused-variable] + int m = theList.size(); + ^ +src/subdir.mk:45: recipe for target 'src/DataProcessor.o' failed +make: *** [src/DataProcessor.o] Error 1 +18:52:33 **** Incremental Build of configuration Debug for project Prototypes **** +make all +make: Warning: File 'Algorithms/subdir.mk' has modification time 168 s in the future +make: warning: Clock skew detected. Your build may be incomplete. +make: Nothing to be done for 'all'. +18:53:09 **** Clean-only build of configuration Debug for project CompactTraceDescriptor **** +make clean +make: Warning: File 'src/subdir.mk' has modification time 129 s in the future +rm -rf ./src/DataProcessor.o ./src/DatabaseInterface.o ./src/DitgFlow.o ./src/DummyFlow.o ./src/Main.o ./src/NetworkFlow.o ./src/NetworkTrace.o ./src/StochasticModelFit.o ./src/TestClass.o ./src/TraceAnalyzer.o ./src/DataProcessor.d ./src/DatabaseInterface.d ./src/DitgFlow.d ./src/DummyFlow.d ./src/Main.d ./src/NetworkFlow.d ./src/NetworkTrace.d ./src/StochasticModelFit.d ./src/TestClass.d ./src/TraceAnalyzer.d CompactTraceDescriptor + +make: warning: Clock skew detected. Your build may be incomplete. +18:53:09 **** Clean-only build of configuration Debug for project Prototypes **** +make clean +make: Warning: File 'Algorithms/subdir.mk' has modification time 132 s in the future +rm -rf ./Algorithms/Prototypes.o ./Algorithms/Prototypes.d Prototypes + +make: warning: Clock skew detected. Your build may be incomplete. +18:53:11 **** Build of configuration Debug for project CompactTraceDescriptor **** +make all +make: Warning: File 'objects.mk' has modification time 168 s in the future +Building file: ../src/DataProcessor.cpp +Invoking: GCC C++ Compiler +g++ -std=c++11 -I"/home/ldapusers/apaschoalon/ProjetoMestrado/Components/D-ITG-2.8.1-r1023//src/libITG" -O2 -g3 -Wall -c -fmessage-length=0 -std=c++11 -MMD -MP -MF"src/DataProcessor.d" -MT"src/DataProcessor.o" -o "src/DataProcessor.o" "../src/DataProcessor.cpp" +In file included from ../src/DataProcessor.cpp:8:0: +../src/DataProcessor.h:86:7: error: extra qualification ‘DataProcessor::’ on member ‘save_data_on_file’ [-fpermissive] + void DataProcessor::save_data_on_file(const string& fileName, list& theList); + ^ +../src/DataProcessor.cpp: In member function ‘int DataProcessor::calculate(const string&, DatabaseInterface*, NetworkTrace*)’: +../src/DataProcessor.cpp:57:11: warning: unused variable ‘ps_mostFrequent’ [-Wunused-variable] + long int ps_mostFrequent = 0; + ^ +../src/DataProcessor.cpp:58:9: warning: unused variable ‘mean_packetRate’ [-Wunused-variable] + double mean_packetRate = 0; + ^ +../src/DataProcessor.cpp:61:22: warning: unused variable ‘modelVet’ [-Wunused-variable] + StochasticModelFit* modelVet = NULL; + ^ +make: *** [src/DataProcessor.o] Error 1 +src/subdir.mk:45: recipe for target 'src/DataProcessor.o' failed +18:53:14 **** Build of configuration Debug for project Prototypes **** +make all +make: Warning: File 'objects.mk' has modification time 168 s in the future +Building file: ../Algorithms/Prototypes.cpp +Invoking: GCC C++ Compiler +g++ -std=c++11 -O0 -g3 -Wall -c -fmessage-length=0 -std=c++11 -MMD -MP -MF"Algorithms/Prototypes.d" -MT"Algorithms/Prototypes.o" -o "Algorithms/Prototypes.o" "../Algorithms/Prototypes.cpp" +Finished building: ../Algorithms/Prototypes.cpp + +Building target: Prototypes +Invoking: GCC C++ Linker +g++ -o "Prototypes" ./Algorithms/Prototypes.o -larmadillo +Finished building target: Prototypes + +make: warning: Clock skew detected. Your build may be incomplete. +18:54:03 **** Incremental Build of configuration Debug for project CompactTraceDescriptor **** +make all +make: Warning: File 'objects.mk' has modification time 117 s in the future +Building file: ../src/DataProcessor.cpp +Invoking: GCC C++ Compiler +g++ -std=c++11 -I"/home/ldapusers/apaschoalon/ProjetoMestrado/Components/D-ITG-2.8.1-r1023//src/libITG" -O2 -g3 -Wall -c -fmessage-length=0 -std=c++11 -MMD -MP -MF"src/DataProcessor.d" -MT"src/DataProcessor.o" -o "src/DataProcessor.o" "../src/DataProcessor.cpp" +../src/DataProcessor.cpp: In member function ‘int DataProcessor::calculate(const string&, DatabaseInterface*, NetworkTrace*)’: +../src/DataProcessor.cpp:57:11: warning: unused variable ‘ps_mostFrequent’ [-Wunused-variable] + long int ps_mostFrequent = 0; + ^ +../src/DataProcessor.cpp:58:9: warning: unused variable ‘mean_packetRate’ [-Wunused-variable] + double mean_packetRate = 0; + ^ +../src/DataProcessor.cpp:61:22: warning: unused variable ‘modelVet’ [-Wunused-variable] + StochasticModelFit* modelVet = NULL; + ^ +Finished building: ../src/DataProcessor.cpp + +Building file: ../src/DatabaseInterface.cpp +Invoking: GCC C++ Compiler +g++ -std=c++11 -I"/home/ldapusers/apaschoalon/ProjetoMestrado/Components/D-ITG-2.8.1-r1023//src/libITG" -O2 -g3 -Wall -c -fmessage-length=0 -std=c++11 -MMD -MP -MF"src/DatabaseInterface.d" -MT"src/DatabaseInterface.o" -o "src/DatabaseInterface.o" "../src/DatabaseInterface.cpp" +Finished building: ../src/DatabaseInterface.cpp + +Building file: ../src/DitgFlow.cpp +Invoking: GCC C++ Compiler +g++ -std=c++11 -I"/home/ldapusers/apaschoalon/ProjetoMestrado/Components/D-ITG-2.8.1-r1023//src/libITG" -O2 -g3 -Wall -c -fmessage-length=0 -std=c++11 -MMD -MP -MF"src/DitgFlow.d" -MT"src/DitgFlow.o" -o "src/DitgFlow.o" "../src/DitgFlow.cpp" +Finished building: ../src/DitgFlow.cpp + +Building file: ../src/DummyFlow.cpp +Invoking: GCC C++ Compiler +g++ -std=c++11 -I"/home/ldapusers/apaschoalon/ProjetoMestrado/Components/D-ITG-2.8.1-r1023//src/libITG" -O2 -g3 -Wall -c -fmessage-length=0 -std=c++11 -MMD -MP -MF"src/DummyFlow.d" -MT"src/DummyFlow.o" -o "src/DummyFlow.o" "../src/DummyFlow.cpp" +../src/DummyFlow.cpp: In member function ‘virtual void DummyFlow::flowGenerate()’: +../src/DummyFlow.cpp:163:15: warning: unused variable ‘usecs’ [-Wunused-variable] + unsigned int usecs = (unsigned int) (this->getFlowStartDelay() * MEGA_POWER); + ^ +Finished building: ../src/DummyFlow.cpp + +Building file: ../src/Main.cpp +Invoking: GCC C++ Compiler +g++ -std=c++11 -I"/home/ldapusers/apaschoalon/ProjetoMestrado/Components/D-ITG-2.8.1-r1023//src/libITG" -O2 -g3 -Wall -c -fmessage-length=0 -std=c++11 -MMD -MP -MF"src/Main.d" -MT"src/Main.o" -o "src/Main.o" "../src/Main.cpp" +Finished building: ../src/Main.cpp + +Building file: ../src/NetworkFlow.cpp +Invoking: GCC C++ Compiler +g++ -std=c++11 -I"/home/ldapusers/apaschoalon/ProjetoMestrado/Components/D-ITG-2.8.1-r1023//src/libITG" -O2 -g3 -Wall -c -fmessage-length=0 -std=c++11 -MMD -MP -MF"src/NetworkFlow.d" -MT"src/NetworkFlow.o" -o "src/NetworkFlow.o" "../src/NetworkFlow.cpp" +Finished building: ../src/NetworkFlow.cpp + +Building file: ../src/NetworkTrace.cpp +Invoking: GCC C++ Compiler +g++ -std=c++11 -I"/home/ldapusers/apaschoalon/ProjetoMestrado/Components/D-ITG-2.8.1-r1023//src/libITG" -O2 -g3 -Wall -c -fmessage-length=0 -std=c++11 -MMD -MP -MF"src/NetworkTrace.d" -MT"src/NetworkTrace.o" -o "src/NetworkTrace.o" "../src/NetworkTrace.cpp" +Finished building: ../src/NetworkTrace.cpp + +Building file: ../src/StochasticModelFit.cpp +Invoking: GCC C++ Compiler +g++ -std=c++11 -I"/home/ldapusers/apaschoalon/ProjetoMestrado/Components/D-ITG-2.8.1-r1023//src/libITG" -O2 -g3 -Wall -c -fmessage-length=0 -std=c++11 -MMD -MP -MF"src/StochasticModelFit.d" -MT"src/StochasticModelFit.o" -o "src/StochasticModelFit.o" "../src/StochasticModelFit.cpp" +Finished building: ../src/StochasticModelFit.cpp + +Building file: ../src/TestClass.cpp +Invoking: GCC C++ Compiler +g++ -std=c++11 -I"/home/ldapusers/apaschoalon/ProjetoMestrado/Components/D-ITG-2.8.1-r1023//src/libITG" -O2 -g3 -Wall -c -fmessage-length=0 -std=c++11 -MMD -MP -MF"src/TestClass.d" -MT"src/TestClass.o" -o "src/TestClass.o" "../src/TestClass.cpp" +Finished building: ../src/TestClass.cpp + +Building file: ../src/TraceAnalyzer.cpp +Invoking: GCC C++ Compiler +g++ -std=c++11 -I"/home/ldapusers/apaschoalon/ProjetoMestrado/Components/D-ITG-2.8.1-r1023//src/libITG" -O2 -g3 -Wall -c -fmessage-length=0 -std=c++11 -MMD -MP -MF"src/TraceAnalyzer.d" -MT"src/TraceAnalyzer.o" -o "src/TraceAnalyzer.o" "../src/TraceAnalyzer.cpp" +Finished building: ../src/TraceAnalyzer.cpp + +Building target: CompactTraceDescriptor +Invoking: GCC C++ Linker +g++ -o "CompactTraceDescriptor" ./src/DataProcessor.o ./src/DatabaseInterface.o ./src/DitgFlow.o ./src/DummyFlow.o ./src/Main.o ./src/NetworkFlow.o ./src/NetworkTrace.o ./src/StochasticModelFit.o ./src/TestClass.o ./src/TraceAnalyzer.o -lpthread -lsqlite3 -larmadillo -lITG +Finished building target: CompactTraceDescriptor + +make: warning: Clock skew detected. Your build may be incomplete. +18:54:18 **** Incremental Build of configuration Debug for project Prototypes **** +make all +make: Warning: File 'Algorithms/Prototypes.d' has modification time 107 s in the future +make: warning: Clock skew detected. Your build may be incomplete. +make: Nothing to be done for 'all'. +18:54:21 **** Incremental Build of configuration Debug for project CompactTraceDescriptor **** +make all +make: Warning: File 'src/TraceAnalyzer.d' has modification time 164 s in the future +make: Nothing to be done for 'all'. +make: warning: Clock skew detected. Your build may be incomplete. +22:12:42 **** Incremental Build of configuration Debug for project CompactTraceDescriptor **** +make all +make: Warning: File 'src/subdir.mk' has modification time 168 s in the future +Building file: ../src/DataProcessor.cpp +Invoking: GCC C++ Compiler +g++ -std=c++11 -I"/home/ldapusers/apaschoalon/ProjetoMestrado/Components/D-ITG-2.8.1-r1023//src/libITG" -O2 -g3 -Wall -c -fmessage-length=0 -std=c++11 -MMD -MP -MF"src/DataProcessor.d" -MT"src/DataProcessor.o" -o "src/DataProcessor.o" "../src/DataProcessor.cpp" +../src/DataProcessor.cpp: In member function ‘int DataProcessor::calculate(const string&, DatabaseInterface*, NetworkTrace*)’: +../src/DataProcessor.cpp:57:11: warning: unused variable ‘ps_mostFrequent’ [-Wunused-variable] + long int ps_mostFrequent = 0; + ^ +../src/DataProcessor.cpp:58:9: warning: unused variable ‘mean_packetRate’ [-Wunused-variable] + double mean_packetRate = 0; + ^ +../src/DataProcessor.cpp:61:22: warning: unused variable ‘modelVet’ [-Wunused-variable] + StochasticModelFit* modelVet = NULL; + ^ +../src/DataProcessor.cpp: In member function ‘StochasticModelFit* DataProcessor::fitModels(std::list&, const string&)’: +../src/DataProcessor.cpp:371:22: error: cannot convert ‘std::list::iterator {aka std::_List_iterator}’ to ‘double’ in assignment + modelVet[0].param1 = empiricalData.begin(); + ^ +make: *** [src/DataProcessor.o] Error 1 +src/subdir.mk:45: recipe for target 'src/DataProcessor.o' failed +22:12:45 **** Incremental Build of configuration Debug for project Prototypes **** +make all +make: Warning: File 'Algorithms/subdir.mk' has modification time 168 s in the future +make: Nothing to be done for 'all'. +make: warning: Clock skew detected. Your build may be incomplete. +22:12:59 **** Incremental Build of configuration Debug for project CompactTraceDescriptor **** +make all +make: Warning: File 'src/subdir.mk' has modification time 168 s in the future +Building file: ../src/DataProcessor.cpp +Invoking: GCC C++ Compiler +g++ -std=c++11 -I"/home/ldapusers/apaschoalon/ProjetoMestrado/Components/D-ITG-2.8.1-r1023//src/libITG" -O2 -g3 -Wall -c -fmessage-length=0 -std=c++11 -MMD -MP -MF"src/DataProcessor.d" -MT"src/DataProcessor.o" -o "src/DataProcessor.o" "../src/DataProcessor.cpp" +../src/DataProcessor.cpp: In member function ‘int DataProcessor::calculate(const string&, DatabaseInterface*, NetworkTrace*)’: +../src/DataProcessor.cpp:57:11: warning: unused variable ‘ps_mostFrequent’ [-Wunused-variable] + long int ps_mostFrequent = 0; + ^ +../src/DataProcessor.cpp:58:9: warning: unused variable ‘mean_packetRate’ [-Wunused-variable] + double mean_packetRate = 0; + ^ +../src/DataProcessor.cpp:61:22: warning: unused variable ‘modelVet’ [-Wunused-variable] + StochasticModelFit* modelVet = NULL; + ^ +../src/DataProcessor.cpp: In member function ‘StochasticModelFit* DataProcessor::fitModels(std::list&, const string&)’: +../src/DataProcessor.cpp:371:48: error: no matching function for call to ‘std::list::push_back()’ + modelVet[0].param1 = empiricalData.push_back(); + ^ +../src/DataProcessor.cpp:371:48: note: candidates are: +In file included from /usr/include/c++/4.9/list:63:0, + from ../src/DataProcessor.h:20, + from ../src/DataProcessor.cpp:8: +/usr/include/c++/4.9/bits/stl_list.h:1028:7: note: void std::list<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = double; _Alloc = std::allocator; std::list<_Tp, _Alloc>::value_type = double] + push_back(const value_type& __x) + ^ +/usr/include/c++/4.9/bits/stl_list.h:1028:7: note: candidate expects 1 argument, 0 provided +/usr/include/c++/4.9/bits/stl_list.h:1033:7: note: void std::list<_Tp, _Alloc>::push_back(std::list<_Tp, _Alloc>::value_type&&) [with _Tp = double; _Alloc = std::allocator; std::list<_Tp, _Alloc>::value_type = double] + push_back(value_type&& __x) + ^ +/usr/include/c++/4.9/bits/stl_list.h:1033:7: note: candidate expects 1 argument, 0 provided +src/subdir.mk:45: recipe for target 'src/DataProcessor.o' failed +make: *** [src/DataProcessor.o] Error 1 +22:13:01 **** Incremental Build of configuration Debug for project Prototypes **** +make all +make: Warning: File 'Algorithms/subdir.mk' has modification time 168 s in the future +make: Nothing to be done for 'all'. +make: warning: Clock skew detected. Your build may be incomplete. +22:13:18 **** Incremental Build of configuration Debug for project CompactTraceDescriptor **** +make all +make: Warning: File 'src/subdir.mk' has modification time 168 s in the future +Building file: ../src/DataProcessor.cpp +Invoking: GCC C++ Compiler +g++ -std=c++11 -I"/home/ldapusers/apaschoalon/ProjetoMestrado/Components/D-ITG-2.8.1-r1023//src/libITG" -O2 -g3 -Wall -c -fmessage-length=0 -std=c++11 -MMD -MP -MF"src/DataProcessor.d" -MT"src/DataProcessor.o" -o "src/DataProcessor.o" "../src/DataProcessor.cpp" +../src/DataProcessor.cpp: In member function ‘int DataProcessor::calculate(const string&, DatabaseInterface*, NetworkTrace*)’: +../src/DataProcessor.cpp:57:11: warning: unused variable ‘ps_mostFrequent’ [-Wunused-variable] + long int ps_mostFrequent = 0; + ^ +../src/DataProcessor.cpp:58:9: warning: unused variable ‘mean_packetRate’ [-Wunused-variable] + double mean_packetRate = 0; + ^ +../src/DataProcessor.cpp:61:22: warning: unused variable ‘modelVet’ [-Wunused-variable] + StochasticModelFit* modelVet = NULL; + ^ +Finished building: ../src/DataProcessor.cpp + +Building target: CompactTraceDescriptor +Invoking: GCC C++ Linker +g++ -o "CompactTraceDescriptor" ./src/DataProcessor.o ./src/DatabaseInterface.o ./src/DitgFlow.o ./src/DummyFlow.o ./src/Main.o ./src/NetworkFlow.o ./src/NetworkTrace.o ./src/StochasticModelFit.o ./src/TestClass.o ./src/TraceAnalyzer.o -lpthread -lsqlite3 -larmadillo -lITG +Finished building target: CompactTraceDescriptor + +make: warning: Clock skew detected. Your build may be incomplete. +22:13:24 **** Incremental Build of configuration Debug for project Prototypes **** +make all +make: Warning: File 'Algorithms/subdir.mk' has modification time 168 s in the future +make: warning: Clock skew detected. Your build may be incomplete. +make: Nothing to be done for 'all'. +22:13:31 **** Incremental Build of configuration Debug for project CompactTraceDescriptor **** +make all +make: Warning: File 'src/DataProcessor.d' has modification time 160 s in the future +Building file: ../src/DataProcessor.cpp +Invoking: GCC C++ Compiler +g++ -std=c++11 -I"/home/ldapusers/apaschoalon/ProjetoMestrado/Components/D-ITG-2.8.1-r1023//src/libITG" -O2 -g3 -Wall -c -fmessage-length=0 -std=c++11 -MMD -MP -MF"src/DataProcessor.d" -MT"src/DataProcessor.o" -o "src/DataProcessor.o" "../src/DataProcessor.cpp" +../src/DataProcessor.cpp: In member function ‘int DataProcessor::calculate(const string&, DatabaseInterface*, NetworkTrace*)’: +../src/DataProcessor.cpp:57:11: warning: unused variable ‘ps_mostFrequent’ [-Wunused-variable] + long int ps_mostFrequent = 0; + ^ +../src/DataProcessor.cpp:58:9: warning: unused variable ‘mean_packetRate’ [-Wunused-variable] + double mean_packetRate = 0; + ^ +../src/DataProcessor.cpp:61:22: warning: unused variable ‘modelVet’ [-Wunused-variable] + StochasticModelFit* modelVet = NULL; + ^ +Finished building: ../src/DataProcessor.cpp + +Building file: ../src/DitgFlow.cpp +Invoking: GCC C++ Compiler +g++ -std=c++11 -I"/home/ldapusers/apaschoalon/ProjetoMestrado/Components/D-ITG-2.8.1-r1023//src/libITG" -O2 -g3 -Wall -c -fmessage-length=0 -std=c++11 -MMD -MP -MF"src/DitgFlow.d" -MT"src/DitgFlow.o" -o "src/DitgFlow.o" "../src/DitgFlow.cpp" +Finished building: ../src/DitgFlow.cpp + +Building file: ../src/DummyFlow.cpp +Invoking: GCC C++ Compiler +g++ -std=c++11 -I"/home/ldapusers/apaschoalon/ProjetoMestrado/Components/D-ITG-2.8.1-r1023//src/libITG" -O2 -g3 -Wall -c -fmessage-length=0 -std=c++11 -MMD -MP -MF"src/DummyFlow.d" -MT"src/DummyFlow.o" -o "src/DummyFlow.o" "../src/DummyFlow.cpp" +../src/DummyFlow.cpp: In member function ‘virtual void DummyFlow::flowGenerate()’: +../src/DummyFlow.cpp:163:15: warning: unused variable ‘usecs’ [-Wunused-variable] + unsigned int usecs = (unsigned int) (this->getFlowStartDelay() * MEGA_POWER); + ^ +Finished building: ../src/DummyFlow.cpp + +Building file: ../src/Main.cpp +Invoking: GCC C++ Compiler +g++ -std=c++11 -I"/home/ldapusers/apaschoalon/ProjetoMestrado/Components/D-ITG-2.8.1-r1023//src/libITG" -O2 -g3 -Wall -c -fmessage-length=0 -std=c++11 -MMD -MP -MF"src/Main.d" -MT"src/Main.o" -o "src/Main.o" "../src/Main.cpp" +Finished building: ../src/Main.cpp + +Building file: ../src/NetworkFlow.cpp +Invoking: GCC C++ Compiler +g++ -std=c++11 -I"/home/ldapusers/apaschoalon/ProjetoMestrado/Components/D-ITG-2.8.1-r1023//src/libITG" -O2 -g3 -Wall -c -fmessage-length=0 -std=c++11 -MMD -MP -MF"src/NetworkFlow.d" -MT"src/NetworkFlow.o" -o "src/NetworkFlow.o" "../src/NetworkFlow.cpp" +Finished building: ../src/NetworkFlow.cpp + +Building file: ../src/NetworkTrace.cpp +Invoking: GCC C++ Compiler +g++ -std=c++11 -I"/home/ldapusers/apaschoalon/ProjetoMestrado/Components/D-ITG-2.8.1-r1023//src/libITG" -O2 -g3 -Wall -c -fmessage-length=0 -std=c++11 -MMD -MP -MF"src/NetworkTrace.d" -MT"src/NetworkTrace.o" -o "src/NetworkTrace.o" "../src/NetworkTrace.cpp" +Finished building: ../src/NetworkTrace.cpp + +Building file: ../src/TestClass.cpp +Invoking: GCC C++ Compiler +g++ -std=c++11 -I"/home/ldapusers/apaschoalon/ProjetoMestrado/Components/D-ITG-2.8.1-r1023//src/libITG" -O2 -g3 -Wall -c -fmessage-length=0 -std=c++11 -MMD -MP -MF"src/TestClass.d" -MT"src/TestClass.o" -o "src/TestClass.o" "../src/TestClass.cpp" +Finished building: ../src/TestClass.cpp + +Building target: CompactTraceDescriptor +Invoking: GCC C++ Linker +g++ -o "CompactTraceDescriptor" ./src/DataProcessor.o ./src/DatabaseInterface.o ./src/DitgFlow.o ./src/DummyFlow.o ./src/Main.o ./src/NetworkFlow.o ./src/NetworkTrace.o ./src/StochasticModelFit.o ./src/TestClass.o ./src/TraceAnalyzer.o -lpthread -lsqlite3 -larmadillo -lITG +Finished building target: CompactTraceDescriptor + +make: warning: Clock skew detected. Your build may be incomplete. +22:15:21 **** Incremental Build of configuration Debug for project CompactTraceDescriptor **** +make all +make: Warning: File 'src/TestClass.d' has modification time 69 s in the future +Building file: ../src/DataProcessor.cpp +Invoking: GCC C++ Compiler +g++ -std=c++11 -I"/home/ldapusers/apaschoalon/ProjetoMestrado/Components/D-ITG-2.8.1-r1023//src/libITG" -O2 -g3 -Wall -c -fmessage-length=0 -std=c++11 -MMD -MP -MF"src/DataProcessor.d" -MT"src/DataProcessor.o" -o "src/DataProcessor.o" "../src/DataProcessor.cpp" +../src/DataProcessor.cpp: In member function ‘int DataProcessor::calculate(const string&, DatabaseInterface*, NetworkTrace*)’: +../src/DataProcessor.cpp:57:11: warning: unused variable ‘ps_mostFrequent’ [-Wunused-variable] + long int ps_mostFrequent = 0; + ^ +../src/DataProcessor.cpp:58:9: warning: unused variable ‘mean_packetRate’ [-Wunused-variable] + double mean_packetRate = 0; + ^ +../src/DataProcessor.cpp:61:22: warning: unused variable ‘modelVet’ [-Wunused-variable] + StochasticModelFit* modelVet = NULL; + ^ +Finished building: ../src/DataProcessor.cpp + +Building target: CompactTraceDescriptor +Invoking: GCC C++ Linker +g++ -o "CompactTraceDescriptor" ./src/DataProcessor.o ./src/DatabaseInterface.o ./src/DitgFlow.o ./src/DummyFlow.o ./src/Main.o ./src/NetworkFlow.o ./src/NetworkTrace.o ./src/StochasticModelFit.o ./src/TestClass.o ./src/TraceAnalyzer.o -lpthread -lsqlite3 -larmadillo -lITG +Finished building target: CompactTraceDescriptor + +make: warning: Clock skew detected. Your build may be incomplete. +22:15:27 **** Incremental Build of configuration Debug for project Prototypes **** +make all +make: Warning: File 'Algorithms/subdir.mk' has modification time 168 s in the future +make: warning: Clock skew detected. Your build may be incomplete. +make: Nothing to be done for 'all'. +22:15:29 **** Incremental Build of configuration Debug for project CompactTraceDescriptor **** +make all +make: Warning: File 'src/TestClass.d' has modification time 61 s in the future +make: warning: Clock skew detected. Your build may be incomplete. +make: Nothing to be done for 'all'. diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/20/50fb859eceb500161808a5c64fd2084a b/.metadata/.plugins/org.eclipse.core.resources/.history/20/50fb859eceb500161808a5c64fd2084a new file mode 100644 index 0000000..4e9bc9a --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/20/50fb859eceb500161808a5c64fd2084a @@ -0,0 +1,1969 @@ +/* + * DataProcessor.cpp + * + * Created on: 14 de jun de 2016 + * Author: apaschoalon + */ + +#include "DataProcessor.h" + +DataProcessor::DataProcessor() +{ + //nothing to do at all +} + +DataProcessor::~DataProcessor() +{ + //nothing to do at all +} + +string DataProcessor::toString(void) +{ + string dataProcessor; + + dataProcessor = + "Used to calculate parameters of network flows; has no state."; + + return (dataProcessor); +} + +int DataProcessor::calculate(const string& experimentName, + DatabaseInterface* databaseInterface, NetworkTrace* netTrace) +{ + + //iterator variables + long int fcounter = 0; + long int nflows = 0; + databaseInterface->getNumberOfFlows(experimentName, &nflows); + +#ifdef DEBUG_DataProcessor_calculate + cout << "DataProcessor::calculate() -> Number of flows = " << nflows << endl; +#endif // DEBUG_DataProcessor_calculate + + //protocol variables + string flowStrData = ""; + long int flowIntData = 0; + double startDalay = 0; //time of the fist packet of the flow + double flowDuration = 0; //duration of the flow + list ttlList; + int ttl = 0; + + //flow-level variables + list relativeTime; //time relative to the 1st packet list + long int nKbytes = 0; //Number of kbytes (bytes/1024) of the + + //packetSize variables + list pslist; //packet-size list + long int ps_mostFrequent = 0; + double mean_packetRate = 0; + + //inter-deperture time variables + StochasticModelFit* modelVet = NULL; + list interArrival_list; // list of inter arrival times of a flow + list interArrival_fileStack; + list interArrival_interFileStack; + list interArrival_interSessionStack; + double lastTime = 0; + double idt = 0; + + for (fcounter = 0; fcounter < nflows; fcounter++) + { + + //new network flow + NetworkFlow* netFlow = NetworkFlow::make_flow("dummy"); + + //TODO checar valor retornado de databaseInterface + + //reset temp vars + flowStrData = ""; + flowIntData = 0; + relativeTime.clear(); + pslist.clear(); + interArrival_list.clear(); + interArrival_fileStack.clear(); + interArrival_interFileStack.clear(); + interArrival_interSessionStack.clear(); + + //load packet-size data + databaseInterface->getFlowData(experimentName, fcounter, "frame__len", + pslist); + + //laod time-relative data + databaseInterface->getFlowData(experimentName, fcounter, + "frame__time_relative", relativeTime); + + //evaluate inter-arrival data + //time relative to the begin of the measurement + lastTime = 0; + for (list::iterator it = relativeTime.begin(); + it != relativeTime.end(); it++) + { + idt = *it - lastTime; + interArrival_list.push_back(idt); + lastTime = *it; + } + + //###################################################################### + //Flow-level Options + //###################################################################### + startDalay = relativeTime.front(); + netFlow->setFlowStartDelay(startDalay); + + flowDuration = relativeTime.back() - relativeTime.front(); + netFlow->setFlowDuration(flowDuration); + + //TODO DS byte configuration -- now it is just set to zero + netFlow->setFlowDsByte(0); + + //flow kbytes + for (list::iterator it = pslist.begin(); it != pslist.end(); + it++) + { + nKbytes = nKbytes + *it; + } + nKbytes = nKbytes / 1024; + + netFlow->setNumberOfKbytes(nKbytes); + netFlow->setNumberOfPackets(relativeTime.size()); + + //###################################################################### + //Protocol Options + //###################################################################### + + // + //L3 protocols + //reference http://www.iana.org/assignments/ieee-802-numbers/ieee-802-numbers.xhtml + // + + databaseInterface->getFlowData(experimentName, fcounter, "eth__type", + &flowIntData); + if (flowIntData == IPV4_CODE) + { //IPv4 + netFlow->setNetworkProtocol(PROTOCOL__IPV4); + databaseInterface->getFlowData(experimentName, fcounter, "ip__src", + &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, "ip__dst", + &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + else if (flowIntData == (ARP_CODE || ARP_CODE_REV)) + { //ARP, Frame Relay ARP + netFlow->setNetworkProtocol(PROTOCOL__ARP); + databaseInterface->getFlowData(experimentName, fcounter, "ip__src", + &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, "ip__dst", + &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + else if (flowIntData == IPV6_CODE) + { //IPv6 + netFlow->setNetworkProtocol(PROTOCOL__ICMPV6); + databaseInterface->getFlowData(experimentName, fcounter, + "ipv6__addr", &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, + "ipv6__dst", &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + else + { //default IPv4 + netFlow->setNetworkProtocol(PROTOCOL__IPV4); + databaseInterface->getFlowData(experimentName, fcounter, "ip__src", + &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, "ip__dst", + &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + + //set ttl as the most frequent + databaseInterface->getFlowData(experimentName, fcounter, "ip__ttl", + ttlList); + //ttl = (int) mode(ttlList); + ttl = (int) mode(&ttlList); + netFlow->setNetworkTtl(ttl); + + // + //L4 Protocols + //reference https://en.wikipedia.org/wiki/List_of_IP_protocol_numbers + // + databaseInterface->getFlowData(experimentName, fcounter, "ip__proto", + &flowIntData); + if (flowIntData == ICMP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__ICMP); + } + else if (flowIntData == TCP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__TCP); + databaseInterface->getFlowData(experimentName, fcounter, + "tcp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "tcp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else if (flowIntData == UDP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__UDP); + databaseInterface->getFlowData(experimentName, fcounter, + "udp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "udp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else if (flowIntData == DCCP_CODE) + { + netFlow->setTransportDstPort(PROTOCOL__DCCP); + databaseInterface->getFlowData(experimentName, fcounter, + "dccp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "dccp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else if (flowIntData == GRE_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__GRE); + //TODO não suportado pelo D-ITG + } + else if (flowIntData == ICMPV6_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__ICMPV6); + } + else if (flowIntData == SCTP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__SCTP); + databaseInterface->getFlowData(experimentName, fcounter, + "sctp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "sctp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else + { //default: UDP + netFlow->setTransportProtocol(PROTOCOL__NULL); + //databaseInterface->getFlowData(experimentName, fcounter, "udp__dstport", &flowIntData); + //netFlow->setL4SrcPort(flowIntData); + //databaseInterface->getFlowData(experimentName, fcounter, "udp__srcport", &flowIntData); + //netFlow->setL4DstPort(flowIntData); + } + + //###################################################################### + //Packet Size Model + //###################################################################### + + // + // Constant model: Just set the packet size as the most frequent value + // + //ps_mostFrequent = mode(pslist); + //ps_mostFrequent = mode(&pslist); + //mean_packetRate = ((double) pslist.size() / flowDuration); + //netFlow->setPsConstant(ps_mostFrequent); + //netFlow->setIdtConstant(mean_packetRate); + + // + // Algorithm to choose the priority order of the models + // 1st version: just the constant model + // + //TODO implement a best algorithm + //netFlow->setPsModel1(MODEL__CONSTANT); + + //###################################################################### + //Inter-arrival-time Model + //###################################################################### + + /* + for (list::iterator it = interArrival_list.begin(); + it != interArrival_list.end(); it++) + { + if (*it < FILE_CUT_TIME) + { + interArrival_fileStack.push_back(*it); + } + else if (*it < SESSION_CUT_TIME) + { + interArrival_interFileStack.push_back(*it); + } + else + { + interArrival_interSessionStack.push_back(*it); + } + } + /* + +#ifdef DEBUG_DataProcessor_interArrival + if (fcounter == 0) + { + string file1 = "fileStack"; + string file2 = "interFileStack"; + string file3 = "interSessionStack"; + save_data_on_file(file1, interArrival_fileStack); + save_data_on_file(file2, interArrival_interFileStack); + save_data_on_file(file3, interArrival_interSessionStack); + } +#endif + + netFlow->setInterDepertureTimeModels( + fitModels(interArrival_list, "aic")); + + //TODO set the right model + + //netFlow->setIdtModel1(MODEL__CONSTANT); + + //TODO + + //TODO + + //###################################################################### + //Push-back the flow to Trace Flow-list + //###################################################################### + + netTrace->pushback_Netflow(netFlow); + +#ifdef DEBUG_DataProcessor_calculate_loop + cout << fcounter << ": ps_mostFrequent=" << ps_mostFrequent << endl; + cout << fcounter << ": startDalay=" << startDalay << endl; + cout << fcounter << ": mean_packetRate=" << mean_packetRate << endl; + cout << fcounter << ": idt_constant=" << netFlow->getIdtConstant() << endl; +#endif //DEBUG_DataProcessor_calculate_loop +#ifdef DEBUG_DataProcessor_calculate_loop + cout << fcounter << ": netFlow->getTransportProtocol() = " << netFlow->getTransportProtocol() << endl; + cout << fcounter << ": netFlow->getNetworkProtocol() = " << netFlow->getNetworkProtocol() << endl; + cout << fcounter << ": netFlow->getTransportDstPort() = " << netFlow->getTransportDstPort() << endl; + cout << fcounter << ": netFlow->getFlowDsByte() = " << netFlow->getFlowDsByte() << endl; + cout << fcounter << ": netFlow->getNetworkDstAddr() = " << netFlow->getNetworkDstAddr() << endl << endl; + +#endif //DEBUG_DataProcessor_calculate_loop + + } + +#ifdef DEBUG_DataProcessor_calculate + cout << "netTrace->networkFlow.size() = " << netTrace->networkFlow.size() << endl; + cout << "netTrace->getNumberOfFlows() = " << netTrace->getNumberOfFlows() << endl; +#endif //DEBUG_DataProcessor_calculate + + return (0); +} + +StochasticModelFit* DataProcessor::fitModels(list& empiricalData, + const string& criterion) +{ + //constants + const int numberOfModels = 8; + const int m = empiricalData.size(); //empirical data-size + //vars + int counter = 0; + StochasticModelFit* modelVet = NULL; + vec paramVec = zeros(2); + vec infoCriterion = zeros(2); + + if (m == 1) + { + modelVet = new StochasticModelFit[1]; + + //Constant + modelVet[0].aic = datum::inf; + modelVet[0].bic = datum::inf; + modelVet[0].modelName = CONSTANT; + modelVet[0].param1 = 0; + modelVet[0].param2 = 0; + modelVet[0].size = 1; + + } + else + { + + modelVet = new StochasticModelFit[numberOfModels]; + + //Inter-arrival vec + vec interArrival = zeros(m); + counter = 0; + for (list::iterator it = empiricalData.begin(); + it != empiricalData.end(); it++) + { + interArrival(counter) = *it + min_time; + counter++; + } + //Empirical CDF of interArrival + vec* interArrivalCdf = empiricalCdf(empiricalData); + + //Weibull + weibullFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[0].aic = infoCriterion(0); + modelVet[0].bic = infoCriterion(1); + modelVet[0].modelName = WEIBULL; + modelVet[0].param1 = paramVec(0); + modelVet[0].param2 = paramVec(1); + modelVet[0].size = numberOfModels; + + //normal + normalFitting(interArrival, paramVec, infoCriterion); + modelVet[1].aic = infoCriterion(0); + modelVet[1].bic = infoCriterion(1); + modelVet[1].modelName = NORMAL; + modelVet[1].param1 = paramVec(0); + modelVet[1].param2 = paramVec(1); + modelVet[1].size = numberOfModels; + + //exponential mean + exponentialMeFitting(interArrival, paramVec, infoCriterion); + modelVet[2].aic = infoCriterion(0); + modelVet[2].bic = infoCriterion(1); + modelVet[2].modelName = EXPONENTIAL_MEAN; + modelVet[2].param1 = paramVec(0); + modelVet[2].param2 = paramVec(1); + modelVet[2].size = numberOfModels; + + //exponential Linear Regression (LR) + exponentialLrFitting(interArrival, *interArrivalCdf, paramVec, + infoCriterion); + modelVet[3].aic = infoCriterion(0); + modelVet[3].bic = infoCriterion(1); + modelVet[3].modelName = EXPONENTIAL_LINEAR_REGRESSION; + modelVet[3].param1 = paramVec(0); + modelVet[3].param2 = paramVec(1); + modelVet[3].size = numberOfModels; + + //pareto linear regression + paretoLrFitting(interArrival, *interArrivalCdf, paramVec, + infoCriterion); + modelVet[4].aic = infoCriterion(0); + modelVet[4].bic = infoCriterion(1); + modelVet[4].modelName = PARETO_LINEAR_REGRESSION; + modelVet[4].param1 = paramVec(0); + modelVet[4].param2 = paramVec(1); + modelVet[4].size = numberOfModels; + + //pareto maximum likehood + paretoMlhFitting(interArrival, *interArrivalCdf, paramVec, + infoCriterion); + modelVet[5].aic = infoCriterion(0); + modelVet[5].bic = infoCriterion(1); + modelVet[5].modelName = PARETO_MAXIMUM_LIKEHOOD; + modelVet[5].param1 = paramVec(0); + modelVet[5].param2 = paramVec(1); + modelVet[5].size = numberOfModels; + + //Cauchy + cauchyFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[6].aic = infoCriterion(0); + modelVet[6].bic = infoCriterion(1); + modelVet[6].modelName = CAUCHY; + modelVet[6].param1 = paramVec(0); + modelVet[6].param2 = paramVec(1); + modelVet[6].size = numberOfModels; + + //Constant + constantFitting(interArrival, paramVec, infoCriterion); + modelVet[7].aic = infoCriterion(0); + modelVet[7].bic = infoCriterion(1); + modelVet[7].modelName = CONSTANT; + modelVet[7].param1 = paramVec(0); + modelVet[7].param2 = paramVec(1); + modelVet[7].size = numberOfModels; + + if (criterion == "bic") + { + qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), + compareBic); + } + else if (criterion == "aic") + { + qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), + compareAic); + } + else + { + cout + << "Error @ DataProcessor::fitModels -> Invalid criterion argument: " + << criterion << endl; + cout << "AIC set as default" << endl; + qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), + compareAic); + + } + +#ifdef DEBUG_StochasticModelFit + //if (modelVet[0].modelName == WEIBULL) + //{ + // cout << modelVet[0].modelName << "aic:bic->" << modelVet[0].aic << ":" << modelVet[0].bic + // << " " << "alpha:betha->" << modelVet[0].param1 + // << modelVet[0].param2 << endl; + // string fileName = "weibulldata_" + std::to_string(abs(modelVet[0].aic)); + // save_data_on_file(fileName, interArrival, *interArrivalCdf); + //} +#endif //DEBUG_StochasticModelFit + + delete interArrivalCdf; + } + + return (modelVet); +} + +inline void DataProcessor::weibullFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //init + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + //linearization + vec y = log(-log(1.0 + diferential - interArrivalCdf)); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double weibull_alpha = theta(1); + double weibull_betha = exp(-theta(0) / theta(1)); + paramVec(0) = weibull_alpha; + paramVec(1) = weibull_betha; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "weibull", paramVec, "aic"); + double bic = informationCriterion(interArrival, "weibull", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; + +} + +inline void DataProcessor::normalFitting(const vec& interArrival, vec& paramVec, + vec& infoCriterion) +{ + double sigma = stddev(interArrival); + double mu = mean(interArrival); + paramVec(0) = mu; + paramVec(1) = sigma; + + //information criterion + double aic = informationCriterion(interArrival, "normal", paramVec, "aic"); + double bic = informationCriterion(interArrival, "normal", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::exponentialLrFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //init + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + //linearization + vec y = log(1.00 + diferential - interArrivalCdf); + //vec y = log(1.00 - interArrivalCdf); + vec x = interArrival; + mat* X = featureMatrix(x); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double exp_lambda = -theta(1); + paramVec(0) = exp_lambda; + paramVec(1) = 0; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "exponential", paramVec, + "aic"); + double bic = informationCriterion(interArrival, "exponential", paramVec, + "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::exponentialMeFitting(const vec& interArrival, + vec& paramVec, vec& infoCriterion) +{ + paramVec(0) = 1.0 / mean(interArrival); + paramVec(1) = 0; + + //information criterion + double aic = informationCriterion(interArrival, "exponential", paramVec, + "aic"); + double bic = informationCriterion(interArrival, "exponential", paramVec, + "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::paretoLrFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //init + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + //linearization + vec y = log(1.00 + diferential - interArrivalCdf); + //vec y = log(1.00 - interArrivalCdf); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double pareto_alpha = -theta(1); + double pareto_xm = interArrival.min(); + paramVec(0) = pareto_alpha; + paramVec(1) = pareto_xm; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "pareto", paramVec, "aic"); + double bic = informationCriterion(interArrival, "pareto", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::paretoMlhFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + double pareto_xm = interArrival.min(); + int m = interArrival.size(); + //vec logDiff = log(interArrival) - log(ones(m) * pareto_xm); + vec logDiff = log(interArrival) - log(pareto_xm); + double pareto_alpha = double(m) / (sum(logDiff)); + paramVec(0) = pareto_alpha; + paramVec(1) = pareto_xm; + + //information criterion + double aic = informationCriterion(interArrival, "pareto", paramVec, "aic"); + double bic = informationCriterion(interArrival, "pareto", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::cauchyFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //initialization + int iterations = 1500; + double learning_rate = 0.01; + int m = interArrival.size(); + double minInterArrival = interArrival.min(); + double y_max = 1.0 / minInterArrival; + vec y = tan(datum::pi * (interArrivalCdf - 0.5)); + for (int i = 0; i < m; i++) + { + //avoid too high numbers when tan() tends to infinity + if (y(i) > y_max) + y(i) = y_max; + } + + //linearization + vec J_history = zeros(iterations); + vec theta = zeros(2); + mat* X = featureMatrix(interArrival); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double cauchy_gamma = double(1.0) / theta(1); + double cauchy_x0 = -theta(0) / theta(1); + paramVec(0) = cauchy_gamma; + paramVec(1) = cauchy_x0; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "cauchy", paramVec, "aic"); + double bic = informationCriterion(interArrival, "cauchy", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; + +} + +void DataProcessor::constantFitting(const vec& interArrival, vec& paramVec, + vec& informationCriterion) +{ + paramVec(0) = mean(interArrival); + paramVec(1) = 0; + informationCriterion(0) = datum::inf; + informationCriterion(1) = datum::inf; +} + +template bool DataProcessor::isEqual(const T* vet1, const T* vet2, + const int size) +{ + for (int i = 0; i < size; i++) + { + if (vet1[i] != vet2[i]) + { + return (false); + } + } + + return (true); +} + +template void DataProcessor::vectorC_to_list(list* theList, + T* vet, int size) +{ + for (int i = 0; i < size; i++) + { + theList->push_back(vet[i]); + } +} + +template +void DataProcessor::quickSort(T* vet, int left, int right) +{ + int p = left; + int i = 0; + T ch = 0; + int j = 0; + + for (i = left + 1; i <= right; i++) + { + j = i; + if (vet[j] < vet[p]) + { + ch = vet[j]; + while (j > p) + { + vet[j] = vet[j - 1]; + j--; + } + vet[j] = ch; + p++; + } + } + if (p - 1 >= left) + quickSort(vet, left, p - 1); + if (p + 1 <= right) + quickSort(vet, p + 1, right); +} + +template +T DataProcessor::mode(list* theList) +{ + T* vet; + int listSize = theList->size(); + int i = 0; + T candidate = 0; + T prev = 0; + int counter = 0; + int largerCounter = 0; + T mode = 0; + vet = new T[listSize]; + + if (listSize == 0) + { + return (0); + } + + i = 0; + + for (typename list::iterator it = theList->begin(); it != theList->end(); + it++) + { + vet[i] = *it; + i++; + } + + quickSort(vet, 0, listSize - 1); + + prev = vet[0]; + largerCounter = 0; + for (i = 0; i < listSize; i++) + { + candidate = vet[i]; + if (candidate == prev) + { + counter++; + if (counter > largerCounter) + { + largerCounter = counter; + mode = vet[i]; + } + } + else + counter = 1; + + prev = vet[i]; + } + + delete[] vet; + + return (mode); +} + +template +inline T* DataProcessor::list_to_cvector(list* theList) +{ + int listSize = theList->size(); + T* vet; + int i = 0; + + vet = new T[listSize]; + if (listSize == 0) + { + return (0); + } + + i = 0; + for (typename list::iterator it = theList->begin(); it != theList->end(); + it++) + { + vet[i] = *it; + i++; + } + + return (vet); +} +template +inline void DataProcessor::delete_cvector(T* c_vet) +{ + delete[] c_vet; +} + +inline vec* DataProcessor::empiricalCdf(list& empiricalData) +{ + double* cvet_empiricalData = list_to_cvector(&empiricalData); + int data_size = empiricalData.size(); + quickSort(cvet_empiricalData, 0, data_size - 1); + double x = cvet_empiricalData[0]; // anchor - fist element; + int i1 = 0; // fist index + int i2 = 0; + double prob = 0; + vec* interArrivalCdf = new vec(zeros(data_size)); + + for (int i = 0; i < data_size; i++) + { + if (cvet_empiricalData[i] > x) + { + i2 = i - 1; + prob = double(i) / data_size; + for (int j = i1; j <= i2; j++) + { + (*interArrivalCdf)(j) = prob; + } + i1 = i; + x = cvet_empiricalData[i]; + } + } + //last position == 1 + (*interArrivalCdf)(data_size - 1) = 1; + + delete_cvector(cvet_empiricalData); + return (interArrivalCdf); +} + +inline mat* DataProcessor::featureMatrix(list& empiricalData) +{ + int data_size = empiricalData.size(); + mat* featureMatrix = new mat(ones(data_size, 2)); + + int i = 0; + for (list::iterator it = empiricalData.begin(); + it != empiricalData.end(); it++) + { + (*featureMatrix)(i, 1) = *it; + i++; + } + + return (featureMatrix); + +} + +inline mat* DataProcessor::featureMatrix(const vec& empiricalData) +{ + int data_size = empiricalData.size(); + mat* featureMatrix = new mat(ones(data_size, 2)); + for (int i = 0; i < data_size; i++) + { + (*featureMatrix)(i, 1) = empiricalData(i); + } + + return (featureMatrix); +} + +inline double DataProcessor::computeCost(const mat& X, const vec& y, + const vec& theta) +{ + double J = .0; + double jtemp = .0; + int m = y.size(); + + for (int i = 0; i < m; i++) + { + jtemp = jtemp + pow(double(theta(0) + theta(1) * X(i, 1) - y(i)), 2); + + } + J = (1.0 / double(2 * m)) * jtemp; + + return (J); +} + +inline void DataProcessor::gradientDescendent(const mat& X, const vec& y, + const double learning_rate, const int num_iters, vec& theta, + vec& J_history) +{ + + int m = y.n_rows; //number of training examples + double temp1 = .0; + double temp2 = .0; + double delta1 = .0; + double delta2 = .0; + vec x = X.col(1); + + for (int i = 0; i < num_iters; i++) + { + temp1 = .0; + temp2 = .0; + delta1 = .0; + delta2 = .0; + + //slope + delta1 = sum(theta(0) + theta(1) * x - y) / double(m); + delta2 = sum((theta(0) + theta(1) * x - y) % x) / double(m); + + //linear regression + temp1 = theta(0) - learning_rate * delta1; + temp2 = theta(1) - learning_rate * delta2; + + theta(0) = temp1; + theta(1) = temp2; + + //Save the cost J in every iteration + J_history(i) = computeCost(X, y, theta); + + } + +} + +inline double DataProcessor::informationCriterion(const vec& data, + const string& functionName, const vec& paramVet, + const string& criterion) +{ + double criterionVal = .0; + double nEstimatedParameters = double(paramVet.size()); + double likehoodLogVal = logLikehood(data, functionName, paramVet); + double logDataLen = log(double(data.size())); + + if (criterion == "aic") + { + criterionVal = 2 * nEstimatedParameters - 2 * likehoodLogVal; + } + else if (criterion == "bic") + { + criterionVal = nEstimatedParameters * logDataLen - 2 * likehoodLogVal; + } + else + { + cout << "\nInvalid functionName or no functionName selected: " + << functionName << endl; + printf("Selecting default criterion: AIC\n"); + criterionVal = 2 * nEstimatedParameters - 2 * likehoodLogVal; + } + + return (criterionVal); + +} + +inline double DataProcessor::logLikehood(const vec& data, + const string& functionName, const vec& paramVet) +{ + double param1 = paramVet(0); + double param2 = paramVet(1); + double m = data.size(); + double L = .0; + int i = 0; + vec data_prob = zeros(size(data)); + + if (functionName == "weibull") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_weibull(data(i), param1, param2); + } + else if (functionName == "normal") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_normal(data(i), param1, param2); + } + else if (functionName == "uniform") + { + data_prob = ones(size(data)) * pdf_uniform(param1, param2); + } + else if (functionName == "exponential") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_exponential(data(i), param1); + } + else if (functionName == "pareto") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_pareto(data(i), param1, param2); + } + else if (functionName == "cauchy") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_cauchy(data(i), param1, param2); + } + else + { + cout << "Warning, no valid stochastic function selected: " + << functionName << endl; + printf("Likehood logarithm seted to -Inf (worst as possible)\n"); + return (datum::inf); + } + + L = sum(log(data_prob)); + return (L); + +} + +inline double DataProcessor::pdf_weibull(double x, double alpha, double betha) +{ + if (x >= 0) + return ((alpha / pow(betha, alpha)) * pow(x, alpha - 1.0) + * exp(-(pow(x / betha, alpha)))); + else + return (.0); +} + +inline double DataProcessor::cdf_weibull(double x, double alpha, double betha) +{ + if (x >= 0) + return (1.0 - exp(-pow(x / betha, alpha))); + else + return (.0); +} + +inline double DataProcessor::pdf_exponential(double x, double lambda) +{ + if (x >= 0) + return (lambda * exp(-lambda * x)); + else + return (.0); + +} + +inline double DataProcessor::cdf_exponential(double x, double lambda) +{ + if (x >= 0) + return (1.0 - exp(-lambda * x)); + else + return (.0); +} + +inline double DataProcessor::pdf_pareto(double x, double alpha, double xm) +{ + if (x >= xm) + return (alpha * pow(xm, alpha) / (pow(x, alpha + 1.0))); + else + return (.0); +} + +inline double DataProcessor::cdf_pareto(double x, double alpha, double xm) +{ + if (x >= xm) + return (1.0 - pow(xm / x, alpha)); + else + return (.0); +} + +inline double DataProcessor::pdf_cauchy(double x, double gamma, double x0) +{ + return (1 / (datum::pi * gamma) + * (pow(gamma, 2) / (pow(x - x0, 2) + pow(gamma, 2)))); +} + +inline double DataProcessor::cdf_cauchy(double x, double gamma, double x0) +{ + return ((1 / datum::pi) * atan((x - x0) / (gamma)) + 0.5); +} + +inline double DataProcessor::pdf_normal(double x, double mu, double sigma) +{ + return (1 / (sqrt(2 * datum::pi) * sigma) + * exp(-0.5 * pow((x - mu) / sigma, 2))); +} + +inline double DataProcessor::cdf_normal(double x, double mu, double sigma) +{ + return (0.5 * (1 + erf((x - mu) / (sigma * sqrt(2))))); +} + +inline double DataProcessor::pdf_uniform(double x_min, double x_max) +{ + return (1.0 / (x_max - x_min)); +} + +inline double DataProcessor::cdf_uniform(double x, double x_min, double x_max) +{ + if (x < x_min) + return (0); + else if (x > x_max) + return (1); + else + return ((x - x_min) / (x_max - x_min)); +} + +#ifdef TEST_FUNCTIONS + +void DataProcessor::printTestResult(string testName, bool result) +{ + string outRes; + if (result == true) + outRes = "ok"; + else + outRes = "failed"; + + cout << testName << ":\t\t" << outRes << endl; +} + +bool DataProcessor::compareDouble(double val1, double val2) +{ + double error = 0; + + error = fabs(double(val1) - double(val2)); + if (error > double(1e-5)) + return (false); + else + return (true); + +} + +bool DataProcessor::compareDouble(double val1, double val2, double acErr) +{ + double error = 0; + + error = fabs(double(val1) - double(val2)); + if (error > double(acErr)) + return (false); + else + return (true); + +} + +bool DataProcessor::compareMat(mat& mat1, mat& mat2) +{ + int mat1_nc = mat1.n_cols; + int mat1_nr = mat1.n_rows; + int mat2_nc = mat2.n_cols; + int mat2_nr = mat2.n_rows; + + if ((mat1_nc != mat2_nc) || (mat1_nr != mat2_nr)) + { + cout << "mat1.n_cols and mat2.n_cols dont match. " << mat1_nc << ":" + << mat2_nc << " " << mat1_nr << ":" << mat2_nr << endl; + return (false); + } + for (int i = 0; i < mat1_nr; i++) + { + for (int j = 0; j < mat1_nc; j++) + { + if (compareDouble(mat1(i, j), mat2(i, j), 1e-5)) + { + //cout << " mat1(" << i << ", " << j << " ) = " << mat1(i,j); + //cout << " mat2(" << i << ", " << j << " ) = " << mat2(i,j); + return (false); + } + } + } + + return (true); +} + +void DataProcessor::save_data_on_file(const string& fileName, const mat& vet1, + const mat& vet2) +{ + string file_out = fileName + ".txt"; + int m = vet1.size(); + + ofstream writeOnFile(file_out, ios::out); + if (!writeOnFile) + { + cerr << "file could not be oppeded" << endl; + exit(1); + } + + for (int i = 0; i < m; i++) + { + writeOnFile << vet1(i) << " " << vet2(i) << endl; + } + +} + +void DataProcessor::save_data_on_file(const string& fileName, + list& theList) +{ + string file_out = fileName + ".txt"; + //int m = theList.size(); + + ofstream writeOnFile(file_out, ios::out); + if (!writeOnFile) + { + cerr << "file could not be oppeded" << endl; + exit(1); + } + + for (list::iterator it = theList.begin(); it != theList.end(); it++) + { + //list::iterator it = randInt_list1.begin(); + writeOnFile << *it << " \n"; + } +} + +bool DataProcessor::test_Mode() +{ + + int randint1[] = + { 1, 8, 1, 13, 9, 2, 1, 15, 4, 3, 10, 4, 13, 2, 14, 7, 7 }; + int randint1_mode = 1; + list l_randint1; + vectorC_to_list(&l_randint1, randint1, 17); + + int randint2[] = + { 5, 3, 6, 8, 14, 9, 11, 9, 11, 15, 8, 7, 12, 13, 14 }; + int randint2_mode = 8; + list l_randint2; + vectorC_to_list(&l_randint2, randint2, 15); + + int randint3[] = + { 9, 10, 6, 3, 13, 13, 14, 7, 7, 1, 5, 1, 8, 5, 9, 2, 3, 4, 5, 6, 6, 6 }; + int randint3_mode = 6; + list l_randint3; + vectorC_to_list(&l_randint3, randint3, 22); + + int randint4[] = + { 2, 1 }; + int randint4_mode = 1; + list l_randint4; + vectorC_to_list(&l_randint4, randint4, 2); + + int randint5[] = + { 1, 1, 1, 1, 1, 2, 2, 2, 2, 2 }; + int randint5_mode = 1; + list l_randint5; + vectorC_to_list(&l_randint5, randint5, 10); + + if (mode(&l_randint1) != randint1_mode) + return (false); + if (mode(&l_randint2) != randint2_mode) + return (false); + if (mode(&l_randint3) != randint3_mode) + return (false); + if (mode(&l_randint4) != randint4_mode) + return (false); + if (mode(&l_randint5) != randint5_mode) + return (false); + + return (true); +} + +bool DataProcessor::test_QuickSort() +{ + int randIntA[] = + { 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; + int randIntA_size = 18; + int randIntA_sorted[] = + { 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9 }; + int randIntB[] = + { 9, 2, 3, 3, 12, 15, 8, 14, 2, 7, 4, 6, 10, 2, 12 }; + int randIntB_size = 15; + int randIntB_sorted[] = + { 2, 2, 2, 3, 3, 4, 6, 7, 8, 9, 10, 12, 12, 14, 15 }; + double randDoubleA[] = + { 0.20872, 12.25501, 5.88210, 2.77962, 8.74916, 2.97454, 4.39641, 12.19733, + 4.66014, 4.52477, 5.19375, 12.11314, 13.35458, 11.56941, 6.59435 }; + int randDoubleA_size = 15; + double randDoubleA_sorted[] = + { 0.20872, 2.77962, 2.97454, 4.39641, 4.52477, 4.66014, 5.19375, 5.88210, + 6.59435, 8.74916, 11.56941, 12.11314, 12.19733, 12.25501, 13.35458 }; + + quickSort(randIntA, 0, randIntA_size - 1); + + if (isEqual(randIntA, randIntA_sorted, randIntA_size) == false) + { + return (false); + } + + quickSort(randIntB, 0, randIntB_size - 1); + if (isEqual(randIntB, randIntB_sorted, randIntB_size) == false) + { + return (false); + } + + quickSort(randDoubleA, 0, randDoubleA_size - 1); + if (isEqual(randDoubleA, randDoubleA_sorted, randDoubleA_size) == false) + { + return (false); + } + + return (true); + +} + +bool DataProcessor::test_list_tocvector() +{ + list randInt_list1 = + { 9, 2, 3, 3, 12, 15, 8, 14, 2, 7, 4, 6, 10, 2, 12 }; + list randInt_list2 = + { 2.2, 2.111, 3.16, 6.66, 13, 2.61 }; + list randInt_list3 = + { 1, 2, 3, 4, 5, 6, 6, 5, 4, 3, 2, 1 }; + + int* cvet1 = NULL; + double* cvet2 = NULL; + int* cvet3 = NULL; + + cvet1 = list_to_cvector(&randInt_list1); + cvet2 = list_to_cvector(&randInt_list2); + cvet3 = list_to_cvector(&randInt_list3); + + int i = 0; + for (list::iterator it = randInt_list1.begin(); + it != randInt_list1.end(); it++) + { + if (cvet1[i] != *it) + { + return (false); + } + //cout << *it << " "; + i++; + } + i = 0; + for (list::iterator it = randInt_list2.begin(); + it != randInt_list2.end(); it++) + { + if (cvet2[i] != *it) + { + return (false); + } + //cout << *it << " "; + i++; + } + i = 0; + for (list::iterator it = randInt_list3.begin(); + it != randInt_list3.end(); it++) + { + if (cvet3[i] != *it) + { + return (false); + } + //cout << *it << " "; + i++; + } + + delete_cvector(cvet1); + delete_cvector(cvet2); + delete_cvector(cvet3); + + return (true); +} + +bool DataProcessor::test_empiricalCdf() +{ + list interArrival_sample = + { 5.0000e-07, 1.5000e-06, 1.5000e-06, 2.5000e-06, 2.5000e-06, 3.5000e-06, + 4.5000e-06, 7.5000e-06, 1.2500e-05, 1.9500e-05, 3.1500e-05, + 4.3500e-05, 6.0500e-05, 7.6500e-05, 1.1050e-04, 1.4050e-04, + 1.8150e-04, 2.1150e-04, 2.3350e-04, 2.4350e-04, 2.5650e-04, + 3.0350e-04, 4.1250e-04, 1.3655e-03, 1.1593e-02, 3.2483e-02, + 8.1235e-02, 2.0939e-01, 5.0755e-01, 1.7351e+00 }; + vec emCdf_octave = + { 0.033333, 0.100000, 0.100000, 0.166667, 0.166667, 0.200000, 0.233333, + 0.266667, 0.300000, 0.333333, 0.366667, 0.400000, 0.433333, + 0.466667, 0.500000, 0.533333, 0.566667, 0.600000, 0.633333, + 0.666667, 0.700000, 0.733333, 0.766667, 0.800000, 0.833333, + 0.866667, 0.900000, 0.933333, 0.966667, 1.000000 }; + //emCdf_octave = emCdf_octave.t(); + + vec* emCdf_cpp = empiricalCdf(interArrival_sample); + + int list_size = interArrival_sample.size(); + for (int i = 0; i < list_size; i++) + { + if (!compareDouble(emCdf_octave(i), (*emCdf_cpp)(i), 1e-6)) + { + cout << "cdf error @ " << "i:" << i << " res:" << (*emCdf_cpp)(i, 0) + << " expected:" << emCdf_octave(i, 0) << endl; + return (false); + } + } + + delete emCdf_cpp; + return (true); +} + +bool DataProcessor::test_computeCost() +{ + list interArrival_sample = + { 5.0000e-07, 1.5000e-06, 1.5000e-06, 2.5000e-06, 2.5000e-06, 3.5000e-06, + 4.5000e-06, 7.5000e-06, 1.2500e-05, 1.9500e-05, 3.1500e-05, + 4.3500e-05, 6.0500e-05, 7.6500e-05, 1.1050e-04, 1.4050e-04, + 1.8150e-04, 2.1150e-04, 2.3350e-04, 2.4350e-04, 2.5650e-04, + 3.0350e-04, 4.1250e-04, 1.3655e-03, 1.1593e-02, 3.2483e-02, + 8.1235e-02, 2.0939e-01, 5.0755e-01, 1.7351e+00 }; + mat* X = featureMatrix(interArrival_sample); + vec emCdf_octave = + { 0.033333, 0.100000, 0.100000, 0.166667, 0.166667, 0.200000, 0.233333, + 0.266667, 0.300000, 0.333333, 0.366667, 0.400000, 0.433333, + 0.466667, 0.500000, 0.533333, 0.566667, 0.600000, 0.633333, + 0.666667, 0.700000, 0.733333, 0.766667, 0.800000, 0.833333, + 0.866667, 0.900000, 0.933333, 0.966667, 1.000000 }; + //emCdf_octave = emCdf_octave.t(); + double J_expected1 = 0.17535; + double J_expected2 = 1.5341; + double J_expected3 = 9.0244; + + vec theta = zeros(2); + + double J = computeCost(*X, emCdf_octave, theta); + if (!compareDouble(J, J_expected1, 0.001)) + { + //cout << "J1 = " << J << "\nJ_expected1 = "<< J_expected1 << endl; + return (false); + } + theta(0) = 2; + theta(1) = 2; + J = computeCost(*X, emCdf_octave, theta); + if (!compareDouble(J, J_expected2, 0.001)) + { + //cout << "J2 = " << J << "\nJ_expected2 = "<< J_expected2 << endl; + return (false); + } + theta(0) = 1.5; + theta(1) = 12; + J = computeCost(*X, emCdf_octave, theta); + if (!compareDouble(J, J_expected3, 0.001)) + { + //cout << "J3 = " << J << "\nJ_expected3 = "<< J_expected3 << endl; + return (false); + } + + delete X; + return (true); +} + +bool DataProcessor::test_informationCriterion() +{ + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + + int m = interArrival.size(); + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + //gradient descendent + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + vec y = log(-log(1.0 + diferential - *interArrivalCdf)); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + double weibull_alpha = theta(1); + double weibull_betha = exp(-theta(0) / theta(1)); + vec paramVec = + { weibull_alpha, weibull_betha }; + double weibull_bic = informationCriterion(interArrival, "weibull", paramVec, + "bic"); + double weibull_aic = informationCriterion(interArrival, "weibull", paramVec, + "aic"); + + if (!compareDouble(weibull_bic, -33712.7042, 0.001)) + return (false); + else if (!compareDouble(weibull_aic, -33724.6567, 0.001)) + return (false); + + return (true); +} + +bool DataProcessor::test_pdf_weibull() +{ + double alpha = 1.5000; + double betha = 0.3; + vec data = + { 0.010000, 2.300000, 0.500000 }; + vec dataprob_eval1 = + { 9.0733e-01, 8.3571e-09, 7.5066e-01 }; + vec dataprob_test = zeros(3); + + dataprob_test(0) = pdf_weibull(data(0), alpha, betha); + dataprob_test(1) = pdf_weibull(data(1), alpha, betha); + dataprob_test(2) = pdf_weibull(data(2), alpha, betha); + + if (compareDouble(dataprob_test(0), dataprob_eval1(0)) + && compareDouble(dataprob_test(1), dataprob_eval1(1)) + && compareDouble(dataprob_test(2), dataprob_eval1(2))) + { + return (true); + } + + return (false); +} + +bool DataProcessor::test_cdf_weibull() +{ + double alpha = 0.5; + double betha = 1.5; + vec data = + { 0.010000, 2.300000, 0.500000 }; + vec dataprob_eval1 = + { 0.078405, 0.710117, 0.438616 }; + vec dataprob_test = zeros(3); + + dataprob_test(0) = cdf_weibull(data(0), alpha, betha); + dataprob_test(1) = cdf_weibull(data(1), alpha, betha); + dataprob_test(2) = cdf_weibull(data(2), alpha, betha); + //cout << dataprob_test(0) << " : " << dataprob_test(1) << " : " << dataprob_test(2) << endl; + + if (compareDouble(dataprob_test(0), dataprob_eval1(0)) + && compareDouble(dataprob_test(1), dataprob_eval1(1)) + && compareDouble(dataprob_test(2), dataprob_eval1(2))) + { + return (true); + } + + return (false); +} + +bool DataProcessor::test_gradientDescendent() +{ + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + + int m = interArrival.size(); + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + //gradient descendent + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + vec y = log(-log(1.0 + diferential - *interArrivalCdf)); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //expected values + double Jlast = 0.083359; + double theta0 = 1.660453; + double theta1 = 0.248811; + + if (!compareDouble(J_history(iterations - 1), Jlast)) + + { + return (false); + } + else if (!compareDouble(theta(0), theta0)) + { + return (false); + } + else if (!compareDouble(theta(1), theta1)) + { + return (false); + } + + delete interArrivalCdf; + delete X; + return (true); + +} + +bool DataProcessor::test_pdf_exponential() +{ + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double lambda1 = 0.50000; + vec val1 = + { 0.49751, 0.15832, 0.38940 }; + vec res1 = zeros(3); + + double lambda2 = 3.0; + vec val2 = + { 2.9113366, 0.0030234, 0.6693905 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = pdf_exponential(data(i), lambda1); + res2(i) = pdf_exponential(data(i), lambda2); + + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + + } + + return (true); +} + +bool DataProcessor::test_cdf_exponential() +{ + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double lambda1 = 0.50000; + vec val1 = + { 0.0049875, 0.6833632, 0.2211992 }; + vec res1 = zeros(3); + + double lambda2 = 3.0; + vec val2 = + { 0.029554, 0.998992, 0.776870 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = cdf_exponential(data(i), lambda1); + res2(i) = cdf_exponential(data(i), lambda2); + + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + + return (true); +} + +bool DataProcessor::test_pdf_pareto() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double alpha1 = 0.50000; + double xm1 = 1.0; + vec val1 = + { 0, 0.14334, 0 }; + vec res1 = zeros(3); + double xm2 = 0.00001; + double alpha2 = 3.0; + vec val2 = + { 3.0000e-07, 1.0720e-16, 4.8000e-14 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = pdf_pareto(data(i), alpha1, xm1); + res2(i) = pdf_pareto(data(i), alpha2, xm2); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + + return (true); +} + +bool DataProcessor::test_cdf_pareto() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double alpha1 = 0.50000; + double xm1 = 0.001; + vec val1 = + { 0.68377, 0.97915, 0.95528 }; + vec res1 = zeros(3); + double xm2 = 0.2; + double alpha2 = 1; + vec val2 = + { 0, 0.91304, 0.60000 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = cdf_pareto(data(i), alpha1, xm1); + res2(i) = cdf_pareto(data(i), alpha2, xm2); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + return (true); +} + +bool DataProcessor::test_pdf_cauchy() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + double gamma1 = 0.50000; + double x01 = 0.001; + + vec val1 = + { 0.636414, 0.028752, 0.318947 }; + vec res1 = zeros(3); + double x02 = 2; + double gamma2 = 2; + + vec val2 = + { 0.079976, 0.155653, 0.101859 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = pdf_cauchy(data(i), gamma1, x01); + res2(i) = pdf_cauchy(data(i), gamma2, x02); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + return (true); +} + +bool DataProcessor::test_cdf_cauchy() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + double gamma1 = 0.50000; + double x01 = 0.001; + + vec val1 = + { 0.50573, 0.93183, 0.74968 }; + vec res1 = zeros(3); + double x02 = 2; + double gamma2 = 2; + + vec val2 = + { 0.25080, 0.54739, 0.29517 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = cdf_cauchy(data(i), gamma1, x01); + res2(i) = cdf_cauchy(data(i), gamma2, x02); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + return (true); +} + +bool DataProcessor::test_fitModels() +{ + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + + int m = interArrival.size(); + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + //list of expected values + double weibull_alpha = 0.24881; + double weibull_betha = 0.0012639; + double normal_mu = 0.054792; + double normal_sigma = 0.205602; + double exponentialMe_lambda = 18.250783; + double exponentialLr_lambda = 2.023115; + double paretoLr_alpha = 0.225451; + double paretoLr_xm = 0.000000; + double paretoMlh_alpha = 0.171674; + double paretoMlh_xm = 0.000000; + double cauchy_gamma = 0.000067; + double cauchy_x0 = 0.005750; + double acErr = 0.001; + + vec paramVec = zeros(2); + vec infoCriterion = zeros(2); + + weibullFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), weibull_alpha, acErr)) + { + cout << "weibullFitting alpha" << endl; + return (false); + } + if (!compareDouble(paramVec(1), weibull_betha, acErr)) + { + cout << "weibullFitting betha" << endl; + return (false); + } + + normalFitting(interArrival, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), normal_mu, acErr)) + { + cout << "normalFitting mu" << endl; + return (false); + } + if (!compareDouble(paramVec(1), normal_sigma, acErr)) + { + cout << "normalFitting sigma" << endl; + return (false); + } + + exponentialMeFitting(interArrival, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), exponentialMe_lambda, acErr)) + { + cout << "exponentialLrFitting lambda" << endl; + return (false); + } + + exponentialLrFitting(interArrival, *interArrivalCdf, paramVec, + infoCriterion); + if (!compareDouble(paramVec(0), exponentialLr_lambda, acErr)) + { + cout << exponentialLr_lambda << ":" << paramVec(0) << endl; + cout << "exponentialLrFitting lambda" << endl; + return (false); + } + + paretoLrFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), paretoLr_alpha, acErr)) + { + cout << "paretoLrFitting alpha" << endl; + return (false); + } + if (!compareDouble(paramVec(1), paretoLr_xm, acErr)) + { + cout << "paretoLrFitting xm" << endl; + return (false); + } + + paretoMlhFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), paretoMlh_alpha, acErr)) + { + cout << "paretoMlhFitting alpha" << endl; + return (false); + } + if (!compareDouble(paramVec(1), paretoMlh_xm, acErr)) + { + cout << "paretoMlhFitting xm" << endl; + return (false); + } + + cauchyFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), cauchy_gamma, acErr)) + { + cout << "cauchyFitting" << endl; + return (false); + } + if (!compareDouble(paramVec(1), cauchy_x0, acErr)) + { + return (false); + } + + delete interArrivalCdf; + + return (true); +} + +bool DataProcessor::test_modelSelection() +{ + + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + int m = interArrival.size(); + + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + StochasticModelFit* modelVet = NULL; + modelVet = fitModels(list_interArrival, "aic"); + + //int numberOfModels = modelVet[0].size; + //for (int i = 0; i < numberOfModels; i++) + // cout << modelVet[i].modelName << " " << "modelVet[" << i << "] = " + // << modelVet[i].aic << endl; + + delete interArrivalCdf; + delete[] modelVet; + return (true); +} + +#endif //TEST_FUNCTIONS diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/26/a07619e28bb500161808a5c64fd2084a b/.metadata/.plugins/org.eclipse.core.resources/.history/26/a07619e28bb500161808a5c64fd2084a new file mode 100644 index 0000000..3f14925 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/26/a07619e28bb500161808a5c64fd2084a @@ -0,0 +1,1909 @@ +/* + * DataProcessor.cpp + * + * Created on: 14 de jun de 2016 + * Author: apaschoalon + */ + +#include "DataProcessor.h" + +DataProcessor::DataProcessor() +{ + //nothing to do at all +} + +DataProcessor::~DataProcessor() +{ + //nothing to do at all +} + +string DataProcessor::toString(void) +{ + string dataProcessor; + + dataProcessor = + "Used to calculate parameters of network flows; has no state."; + + return (dataProcessor); +} + +int DataProcessor::calculate(const string& experimentName, + DatabaseInterface* databaseInterface, NetworkTrace* netTrace) +{ + + //iterator variables + long int fcounter = 0; + long int nflows = 0; + databaseInterface->getNumberOfFlows(experimentName, &nflows); + +#ifdef DEBUG_DataProcessor_calculate + cout << "DataProcessor::calculate() -> Number of flows = " << nflows << endl; +#endif // DEBUG_DataProcessor_calculate + + //protocol variables + string flowStrData = ""; + long int flowIntData = 0; + double startDalay = 0; //time of the fist packet of the flow + double flowDuration = 0; //duration of the flow + list ttlList; + int ttl = 0; + + //flow-level variables + list relativeTime; //time relative to the 1st packet list + long int nKbytes = 0; //Number of kbytes (bytes/1024) of the + + //packetSize variables + list pslist; //packet-size list + long int ps_mostFrequent = 0; + double mean_packetRate = 0; + + //inter-deperture time variables + StochasticModelFit* modelVet = NULL; + list interArrival_list; // list of inter arrival times of a flow + double lastTime = 0; + double idt = 0; + + for (fcounter = 0; fcounter < nflows; fcounter++) + { + + //new network flow + NetworkFlow* netFlow = NetworkFlow::make_flow("dummy"); + + //TODO checar valor retornado de databaseInterface + + //reset temp vars + flowStrData = ""; + flowIntData = 0; + relativeTime.clear(); + pslist.clear(); + interArrival_list.clear(); + + //load packet-size data + databaseInterface->getFlowData(experimentName, fcounter, "frame__len", + pslist); + + //laod time-relative data + databaseInterface->getFlowData(experimentName, fcounter, + "frame__time_relative", relativeTime); + + //evaluate inter-arrival data + //time relative to the begin of the measurement + lastTime = 0; + for (list::iterator it = relativeTime.begin(); + it != relativeTime.end(); it++) + { + idt = *it - lastTime; + interArrival_list.push_back(idt); + lastTime = *it; + } + + //###################################################################### + //Flow-level Options + //###################################################################### + startDalay = relativeTime.front(); + netFlow->setFlowStartDelay(startDalay); + + flowDuration = relativeTime.back() - relativeTime.front(); + netFlow->setFlowDuration(flowDuration); + + //TODO DS byte configuration -- now it is just set to zero + netFlow->setFlowDsByte(0); + + //flow kbytes + for (list::iterator it = pslist.begin(); it != pslist.end(); + it++) + { + nKbytes = nKbytes + *it; + } + nKbytes = nKbytes / 1024; + + netFlow->setNumberOfKbytes(nKbytes); + netFlow->setNumberOfPackets(relativeTime.size()); + + //###################################################################### + //Protocol Options + //###################################################################### + + // + //L3 protocols + //reference http://www.iana.org/assignments/ieee-802-numbers/ieee-802-numbers.xhtml + // + + databaseInterface->getFlowData(experimentName, fcounter, "eth__type", + &flowIntData); + if (flowIntData == IPV4_CODE) + { //IPv4 + netFlow->setNetworkProtocol(PROTOCOL__IPV4); + databaseInterface->getFlowData(experimentName, fcounter, "ip__src", + &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, "ip__dst", + &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + else if (flowIntData == (ARP_CODE || ARP_CODE_REV)) + { //ARP, Frame Relay ARP + netFlow->setNetworkProtocol(PROTOCOL__ARP); + databaseInterface->getFlowData(experimentName, fcounter, "ip__src", + &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, "ip__dst", + &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + else if (flowIntData == IPV6_CODE) + { //IPv6 + netFlow->setNetworkProtocol(PROTOCOL__ICMPV6); + databaseInterface->getFlowData(experimentName, fcounter, + "ipv6__addr", &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, + "ipv6__dst", &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + else + { //default IPv4 + netFlow->setNetworkProtocol(PROTOCOL__IPV4); + databaseInterface->getFlowData(experimentName, fcounter, "ip__src", + &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, "ip__dst", + &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + + //set ttl as the most frequent + databaseInterface->getFlowData(experimentName, fcounter, "ip__ttl", + ttlList); + //ttl = (int) mode(ttlList); + ttl = (int) mode(&ttlList); + netFlow->setNetworkTtl(ttl); + + // + //L4 Protocols + //reference https://en.wikipedia.org/wiki/List_of_IP_protocol_numbers + // + databaseInterface->getFlowData(experimentName, fcounter, "ip__proto", + &flowIntData); + if (flowIntData == ICMP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__ICMP); + } + else if (flowIntData == TCP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__TCP); + databaseInterface->getFlowData(experimentName, fcounter, + "tcp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "tcp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else if (flowIntData == UDP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__UDP); + databaseInterface->getFlowData(experimentName, fcounter, + "udp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "udp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else if (flowIntData == DCCP_CODE) + { + netFlow->setTransportDstPort(PROTOCOL__DCCP); + databaseInterface->getFlowData(experimentName, fcounter, + "dccp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "dccp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else if (flowIntData == GRE_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__GRE); + //TODO não suportado pelo D-ITG + } + else if (flowIntData == ICMPV6_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__ICMPV6); + } + else if (flowIntData == SCTP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__SCTP); + databaseInterface->getFlowData(experimentName, fcounter, + "sctp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "sctp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else + { //default: UDP + netFlow->setTransportProtocol(PROTOCOL__NULL); + //databaseInterface->getFlowData(experimentName, fcounter, "udp__dstport", &flowIntData); + //netFlow->setL4SrcPort(flowIntData); + //databaseInterface->getFlowData(experimentName, fcounter, "udp__srcport", &flowIntData); + //netFlow->setL4DstPort(flowIntData); + } + + //###################################################################### + //Packet Size Model + //###################################################################### + + // + // Constant model: Just set the packet size as the most frequent value + // + //ps_mostFrequent = mode(pslist); + //ps_mostFrequent = mode(&pslist); + //mean_packetRate = ((double) pslist.size() / flowDuration); + //netFlow->setPsConstant(ps_mostFrequent); + //netFlow->setIdtConstant(mean_packetRate); + + // + // Algorithm to choose the priority order of the models + // 1st version: just the constant model + // + //TODO implement a best algorithm + //netFlow->setPsModel1(MODEL__CONSTANT); + + //###################################################################### + //Inter-arrival-time Model + //###################################################################### + netFlow->setInterDepertureTimeModels( + fitModels(interArrival_list, "aic")); + + //TODO set the right model + + //netFlow->setIdtModel1(MODEL__CONSTANT); + + //TODO + + //TODO + + //###################################################################### + //Push-back the flow to Trace Flow-list + //###################################################################### + + netTrace->pushback_Netflow(netFlow); + +#ifdef DEBUG_DataProcessor_calculate_loop + cout << fcounter << ": ps_mostFrequent=" << ps_mostFrequent << endl; + cout << fcounter << ": startDalay=" << startDalay << endl; + cout << fcounter << ": mean_packetRate=" << mean_packetRate << endl; + cout << fcounter << ": idt_constant=" << netFlow->getIdtConstant() << endl; +#endif //DEBUG_DataProcessor_calculate_loop +#ifdef DEBUG_DataProcessor_calculate_loop + cout << fcounter << ": netFlow->getTransportProtocol() = " << netFlow->getTransportProtocol() << endl; + cout << fcounter << ": netFlow->getNetworkProtocol() = " << netFlow->getNetworkProtocol() << endl; + cout << fcounter << ": netFlow->getTransportDstPort() = " << netFlow->getTransportDstPort() << endl; + cout << fcounter << ": netFlow->getFlowDsByte() = " << netFlow->getFlowDsByte() << endl; + cout << fcounter << ": netFlow->getNetworkDstAddr() = " << netFlow->getNetworkDstAddr() << endl << endl; + +#endif //DEBUG_DataProcessor_calculate_loop + + } + +#ifdef DEBUG_DataProcessor_calculate + cout << "netTrace->networkFlow.size() = " << netTrace->networkFlow.size() << endl; + cout << "netTrace->getNumberOfFlows() = " << netTrace->getNumberOfFlows() << endl; +#endif //DEBUG_DataProcessor_calculate + + return (0); +} + +StochasticModelFit* DataProcessor::fitModels(list& empiricalData, + const string& criterion) +{ + //constants + const int numberOfModels = 8; + const int m = empiricalData.size(); //empirical data-size + //vars + int counter = 0; + StochasticModelFit* modelVet = NULL; + vec paramVec = zeros(2); + vec infoCriterion = zeros(2); + + modelVet = new StochasticModelFit[numberOfModels]; + + //Inter-arrival vec + vec interArrival = zeros(m); + counter = 0; + for (list::iterator it = empiricalData.begin(); + it != empiricalData.end(); it++) + { + interArrival(counter) = *it + min_time; + counter++; + } + //Empirical CDF of interArrival + vec* interArrivalCdf = empiricalCdf(empiricalData); + + //Weibull + weibullFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[0].aic = infoCriterion(0); + modelVet[0].bic = infoCriterion(1); + modelVet[0].modelName = WEIBULL; + modelVet[0].param1 = paramVec(0); + modelVet[0].param2 = paramVec(1); + modelVet[0].size = numberOfModels; + + //normal + normalFitting(interArrival, paramVec, infoCriterion); + modelVet[1].aic = infoCriterion(0); + modelVet[1].bic = infoCriterion(1); + modelVet[1].modelName = NORMAL; + modelVet[1].param1 = paramVec(0); + modelVet[1].param2 = paramVec(1); + modelVet[1].size = numberOfModels; + + //exponential mean + exponentialMeFitting(interArrival, paramVec, infoCriterion); + modelVet[2].aic = infoCriterion(0); + modelVet[2].bic = infoCriterion(1); + modelVet[2].modelName = EXPONENTIAL_MEAN; + modelVet[2].param1 = paramVec(0); + modelVet[2].param2 = paramVec(1); + modelVet[2].size = numberOfModels; + + //exponential Linear Regression (LR) + exponentialLrFitting(interArrival, *interArrivalCdf, paramVec, + infoCriterion); + modelVet[3].aic = infoCriterion(0); + modelVet[3].bic = infoCriterion(1); + modelVet[3].modelName = EXPONENTIAL_LINEAR_REGRESSION; + modelVet[3].param1 = paramVec(0); + modelVet[3].param2 = paramVec(1); + modelVet[3].size = numberOfModels; + + //pareto linear regression + paretoLrFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[4].aic = infoCriterion(0); + modelVet[4].bic = infoCriterion(1); + modelVet[4].modelName = PARETO_LINEAR_REGRESSION; + modelVet[4].param1 = paramVec(0); + modelVet[4].param2 = paramVec(1); + modelVet[4].size = numberOfModels; + + //pareto maximum likehood + paretoMlhFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[5].aic = infoCriterion(0); + modelVet[5].bic = infoCriterion(1); + modelVet[5].modelName = PARETO_MAXIMUM_LIKEHOOD; + modelVet[5].param1 = paramVec(0); + modelVet[5].param2 = paramVec(1); + modelVet[5].size = numberOfModels; + + //Cauchy + cauchyFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[6].aic = infoCriterion(0); + modelVet[6].bic = infoCriterion(1); + modelVet[6].modelName = CAUCHY; + modelVet[6].param1 = paramVec(0); + modelVet[6].param2 = paramVec(1); + modelVet[6].size = numberOfModels; + + //Constant + constantFitting(interArrival, paramVec, infoCriterion); + modelVet[7].aic = infoCriterion(0); + modelVet[7].bic = infoCriterion(1); + modelVet[7].modelName = CONSTANT; + modelVet[7].param1 = paramVec(0); + modelVet[7].param2 = paramVec(1); + modelVet[7].size = numberOfModels; + + if (criterion == "bic") + { + qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), compareBic); + } + else if (criterion == "aic") + { + qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), compareAic); + } + else + { + cout + << "Error @ DataProcessor::fitModels -> Invalid criterion argument: " + << criterion << endl; + cout << "AIC set as default" << endl; + qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), compareAic); + + } + +#ifdef DEBUG_StochasticModelFit + //if (modelVet[0].modelName == WEIBULL) + //{ + // cout << modelVet[0].modelName << "aic:bic->" << modelVet[0].aic << ":" << modelVet[0].bic + // << " " << "alpha:betha->" << modelVet[0].param1 + // << modelVet[0].param2 << endl; + // string fileName = "weibulldata_" + std::to_string(abs(modelVet[0].aic)); + // save_data_on_file(fileName, interArrival, *interArrivalCdf); + //} +#endif DEBUG_StochasticModelFit + + delete interArrivalCdf; + + return (modelVet); +} + +inline void DataProcessor::weibullFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //init + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + //linearization + vec y = log(-log(1.0 + diferential - interArrivalCdf)); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double weibull_alpha = theta(1); + double weibull_betha = exp(-theta(0) / theta(1)); + paramVec(0) = weibull_alpha; + paramVec(1) = weibull_betha; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "weibull", paramVec, "aic"); + double bic = informationCriterion(interArrival, "weibull", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; + +} + +inline void DataProcessor::normalFitting(const vec& interArrival, vec& paramVec, + vec& infoCriterion) +{ + double sigma = stddev(interArrival); + double mu = mean(interArrival); + paramVec(0) = mu; + paramVec(1) = sigma; + + //information criterion + double aic = informationCriterion(interArrival, "normal", paramVec, "aic"); + double bic = informationCriterion(interArrival, "normal", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::exponentialLrFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //init + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + //linearization + vec y = log(1.00 + diferential - interArrivalCdf); + //vec y = log(1.00 - interArrivalCdf); + vec x = interArrival; + mat* X = featureMatrix(x); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double exp_lambda = -theta(1); + paramVec(0) = exp_lambda; + paramVec(1) = 0; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "exponential", paramVec, + "aic"); + double bic = informationCriterion(interArrival, "exponential", paramVec, + "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::exponentialMeFitting(const vec& interArrival, + vec& paramVec, vec& infoCriterion) +{ + paramVec(0) = 1.0 / mean(interArrival); + paramVec(1) = 0; + + //information criterion + double aic = informationCriterion(interArrival, "exponential", paramVec, + "aic"); + double bic = informationCriterion(interArrival, "exponential", paramVec, + "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::paretoLrFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //init + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + //linearization + vec y = log(1.00 + diferential - interArrivalCdf); + //vec y = log(1.00 - interArrivalCdf); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double pareto_alpha = -theta(1); + double pareto_xm = interArrival.min(); + paramVec(0) = pareto_alpha; + paramVec(1) = pareto_xm; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "pareto", paramVec, "aic"); + double bic = informationCriterion(interArrival, "pareto", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::paretoMlhFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + double pareto_xm = interArrival.min(); + int m = interArrival.size(); + //vec logDiff = log(interArrival) - log(ones(m) * pareto_xm); + vec logDiff = log(interArrival) - log(pareto_xm); + double pareto_alpha = double(m) / (sum(logDiff)); + paramVec(0) = pareto_alpha; + paramVec(1) = pareto_xm; + + //information criterion + double aic = informationCriterion(interArrival, "pareto", paramVec, "aic"); + double bic = informationCriterion(interArrival, "pareto", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::cauchyFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //initialization + int iterations = 1500; + double learning_rate = 0.01; + int m = interArrival.size(); + double minInterArrival = interArrival.min(); + double y_max = 1.0 / minInterArrival; + vec y = tan(datum::pi * (interArrivalCdf - 0.5)); + for (int i = 0; i < m; i++) + { + //avoid too high numbers when tan() tends to infinity + if (y(i) > y_max) + y(i) = y_max; + } + + //linearization + vec J_history = zeros(iterations); + vec theta = zeros(2); + mat* X = featureMatrix(interArrival); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double cauchy_gamma = double(1.0) / theta(1); + double cauchy_x0 = -theta(0) / theta(1); + paramVec(0) = cauchy_gamma; + paramVec(1) = cauchy_x0; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "cauchy", paramVec, "aic"); + double bic = informationCriterion(interArrival, "cauchy", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; + +} + +void DataProcessor::constantFitting(const vec& interArrival, vec& paramVec, + vec& informationCriterion) +{ + paramVec(0) = mean(interArrival); + paramVec(1) = 0; + informationCriterion(0) = datum::inf; + informationCriterion(1) = datum::inf; +} + +template bool DataProcessor::isEqual(const T* vet1, const T* vet2, + const int size) +{ + for (int i = 0; i < size; i++) + { + if (vet1[i] != vet2[i]) + { + return (false); + } + } + + return (true); +} + +template void DataProcessor::vectorC_to_list(list* theList, + T* vet, int size) +{ + for (int i = 0; i < size; i++) + { + theList->push_back(vet[i]); + } +} + +template +void DataProcessor::quickSort(T* vet, int left, int right) +{ + int p = left; + int i = 0; + T ch = 0; + int j = 0; + + for (i = left + 1; i <= right; i++) + { + j = i; + if (vet[j] < vet[p]) + { + ch = vet[j]; + while (j > p) + { + vet[j] = vet[j - 1]; + j--; + } + vet[j] = ch; + p++; + } + } + if (p - 1 >= left) + quickSort(vet, left, p - 1); + if (p + 1 <= right) + quickSort(vet, p + 1, right); +} + +template +T DataProcessor::mode(list* theList) +{ + T* vet; + int listSize = theList->size(); + int i = 0; + T candidate = 0; + T prev = 0; + int counter = 0; + int largerCounter = 0; + T mode = 0; + vet = new T[listSize]; + + if (listSize == 0) + { + return (0); + } + + i = 0; + + for (typename list::iterator it = theList->begin(); it != theList->end(); + it++) + { + vet[i] = *it; + i++; + } + + quickSort(vet, 0, listSize - 1); + + prev = vet[0]; + largerCounter = 0; + for (i = 0; i < listSize; i++) + { + candidate = vet[i]; + if (candidate == prev) + { + counter++; + if (counter > largerCounter) + { + largerCounter = counter; + mode = vet[i]; + } + } + else + counter = 1; + + prev = vet[i]; + } + + delete[] vet; + + return (mode); +} + +template +inline T* DataProcessor::list_to_cvector(list* theList) +{ + int listSize = theList->size(); + T* vet; + int i = 0; + + vet = new T[listSize]; + if (listSize == 0) + { + return (0); + } + + i = 0; + for (typename list::iterator it = theList->begin(); it != theList->end(); + it++) + { + vet[i] = *it; + i++; + } + + return (vet); +} +template +inline void DataProcessor::delete_cvector(T* c_vet) +{ + delete[] c_vet; +} + +inline vec* DataProcessor::empiricalCdf(list& empiricalData) +{ + double* cvet_empiricalData = list_to_cvector(&empiricalData); + int data_size = empiricalData.size(); + quickSort(cvet_empiricalData, 0, data_size - 1); + double x = cvet_empiricalData[0]; // anchor - fist element; + int i1 = 0; // fist index + int i2 = 0; + double prob = 0; + vec* interArrivalCdf = new vec(zeros(data_size)); + + for (int i = 0; i < data_size; i++) + { + if (cvet_empiricalData[i] > x) + { + i2 = i - 1; + prob = double(i) / data_size; + for (int j = i1; j <= i2; j++) + { + (*interArrivalCdf)(j) = prob; + } + i1 = i; + x = cvet_empiricalData[i]; + } + } + //last position == 1 + (*interArrivalCdf)(data_size - 1) = 1; + + delete_cvector(cvet_empiricalData); + return (interArrivalCdf); +} + +inline mat* DataProcessor::featureMatrix(list& empiricalData) +{ + int data_size = empiricalData.size(); + mat* featureMatrix = new mat(ones(data_size, 2)); + + int i = 0; + for (list::iterator it = empiricalData.begin(); + it != empiricalData.end(); it++) + { + (*featureMatrix)(i, 1) = *it; + i++; + } + + return (featureMatrix); + +} + +inline mat* DataProcessor::featureMatrix(const vec& empiricalData) +{ + int data_size = empiricalData.size(); + mat* featureMatrix = new mat(ones(data_size, 2)); + for (int i = 0; i < data_size; i++) + { + (*featureMatrix)(i, 1) = empiricalData(i); + } + + return (featureMatrix); +} + +inline double DataProcessor::computeCost(const mat& X, const vec& y, + const vec& theta) +{ + double J = .0; + double jtemp = .0; + int m = y.size(); + + for (int i = 0; i < m; i++) + { + jtemp = jtemp + pow(double(theta(0) + theta(1) * X(i, 1) - y(i)), 2); + + } + J = (1.0 / double(2 * m)) * jtemp; + + return (J); +} + +inline void DataProcessor::gradientDescendent(const mat& X, const vec& y, + const double learning_rate, const int num_iters, vec& theta, + vec& J_history) +{ + + int m = y.n_rows; //number of training examples + double temp1 = .0; + double temp2 = .0; + double delta1 = .0; + double delta2 = .0; + vec x = X.col(1); + + for (int i = 0; i < num_iters; i++) + { + temp1 = .0; + temp2 = .0; + delta1 = .0; + delta2 = .0; + + //slope + delta1 = sum(theta(0) + theta(1) * x - y) / double(m); + delta2 = sum((theta(0) + theta(1) * x - y) % x) / double(m); + + //linear regression + temp1 = theta(0) - learning_rate * delta1; + temp2 = theta(1) - learning_rate * delta2; + + theta(0) = temp1; + theta(1) = temp2; + + //Save the cost J in every iteration + J_history(i) = computeCost(X, y, theta); + + } + +} + +inline double DataProcessor::informationCriterion(const vec& data, + const string& functionName, const vec& paramVet, + const string& criterion) +{ + double criterionVal = .0; + double nEstimatedParameters = double(paramVet.size()); + double likehoodLogVal = logLikehood(data, functionName, paramVet); + double logDataLen = log(double(data.size())); + + if (criterion == "aic") + { + criterionVal = 2 * nEstimatedParameters - 2 * likehoodLogVal; + } + else if (criterion == "bic") + { + criterionVal = nEstimatedParameters * logDataLen - 2 * likehoodLogVal; + } + else + { + cout << "\nInvalid functionName or no functionName selected: " + << functionName << endl; + printf("Selecting default criterion: AIC\n"); + criterionVal = 2 * nEstimatedParameters - 2 * likehoodLogVal; + } + + return (criterionVal); + +} + +inline double DataProcessor::logLikehood(const vec& data, + const string& functionName, const vec& paramVet) +{ + double param1 = paramVet(0); + double param2 = paramVet(1); + double m = data.size(); + double L = .0; + int i = 0; + vec data_prob = zeros(size(data)); + + if (functionName == "weibull") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_weibull(data(i), param1, param2); + } + else if (functionName == "normal") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_normal(data(i), param1, param2); + } + else if (functionName == "uniform") + { + data_prob = ones(size(data)) * pdf_uniform(param1, param2); + } + else if (functionName == "exponential") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_exponential(data(i), param1); + } + else if (functionName == "pareto") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_pareto(data(i), param1, param2); + } + else if (functionName == "cauchy") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_cauchy(data(i), param1, param2); + } + else + { + cout << "Warning, no valid stochastic function selected: " + << functionName << endl; + printf("Likehood logarithm seted to -Inf (worst as possible)\n"); + return (datum::inf); + } + + L = sum(log(data_prob)); + return (L); + +} + +inline double DataProcessor::pdf_weibull(double x, double alpha, double betha) +{ + if (x >= 0) + return ((alpha / pow(betha, alpha)) * pow(x, alpha - 1.0) + * exp(-(pow(x / betha, alpha)))); + else + return (.0); +} + +inline double DataProcessor::cdf_weibull(double x, double alpha, double betha) +{ + if (x >= 0) + return (1.0 - exp(-pow(x / betha, alpha))); + else + return (.0); +} + +inline double DataProcessor::pdf_exponential(double x, double lambda) +{ + if (x >= 0) + return (lambda * exp(-lambda * x)); + else + return (.0); + +} + +inline double DataProcessor::cdf_exponential(double x, double lambda) +{ + if (x >= 0) + return (1.0 - exp(-lambda * x)); + else + return (.0); +} + +inline double DataProcessor::pdf_pareto(double x, double alpha, double xm) +{ + if (x >= xm) + return (alpha * pow(xm, alpha) / (pow(x, alpha + 1.0))); + else + return (.0); +} + +inline double DataProcessor::cdf_pareto(double x, double alpha, double xm) +{ + if (x >= xm) + return (1.0 - pow(xm / x, alpha)); + else + return (.0); +} + +inline double DataProcessor::pdf_cauchy(double x, double gamma, double x0) +{ + return (1 / (datum::pi * gamma) + * (pow(gamma, 2) / (pow(x - x0, 2) + pow(gamma, 2)))); +} + +inline double DataProcessor::cdf_cauchy(double x, double gamma, double x0) +{ + return ((1 / datum::pi) * atan((x - x0) / (gamma)) + 0.5); +} + +inline double DataProcessor::pdf_normal(double x, double mu, double sigma) +{ + return (1 / (sqrt(2 * datum::pi) * sigma) + * exp(-0.5 * pow((x - mu) / sigma, 2))); +} + +inline double DataProcessor::cdf_normal(double x, double mu, double sigma) +{ + return (0.5 * (1 + erf((x - mu) / (sigma * sqrt(2))))); +} + +inline double DataProcessor::pdf_uniform(double x_min, double x_max) +{ + return (1.0 / (x_max - x_min)); +} + +inline double DataProcessor::cdf_uniform(double x, double x_min, double x_max) +{ + if (x < x_min) + return (0); + else if (x > x_max) + return (1); + else + return ((x - x_min) / (x_max - x_min)); +} + +#ifdef TEST_FUNCTIONS + +void DataProcessor::printTestResult(string testName, bool result) +{ + string outRes; + if (result == true) + outRes = "ok"; + else + outRes = "failed"; + + cout << testName << ":\t\t" << outRes << endl; +} + +bool DataProcessor::compareDouble(double val1, double val2) +{ + double error = 0; + + error = fabs(double(val1) - double(val2)); + if (error > double(1e-5)) + return (false); + else + return (true); + +} + +bool DataProcessor::compareDouble(double val1, double val2, double acErr) +{ + double error = 0; + + error = fabs(double(val1) - double(val2)); + if (error > double(acErr)) + return (false); + else + return (true); + +} + +bool DataProcessor::compareMat(mat& mat1, mat& mat2) +{ + int mat1_nc = mat1.n_cols; + int mat1_nr = mat1.n_rows; + int mat2_nc = mat2.n_cols; + int mat2_nr = mat2.n_rows; + + if ((mat1_nc != mat2_nc) || (mat1_nr != mat2_nr)) + { + cout << "mat1.n_cols and mat2.n_cols dont match. " << mat1_nc << ":" + << mat2_nc << " " << mat1_nr << ":" << mat2_nr << endl; + return (false); + } + for (int i = 0; i < mat1_nr; i++) + { + for (int j = 0; j < mat1_nc; j++) + { + if (compareDouble(mat1(i, j), mat2(i, j), 1e-5)) + { + //cout << " mat1(" << i << ", " << j << " ) = " << mat1(i,j); + //cout << " mat2(" << i << ", " << j << " ) = " << mat2(i,j); + return (false); + } + } + } + + return (true); +} + +void DataProcessor::save_data_on_file(const string& fileName, const mat& vet1, + const mat& vet2) +{ + string file_out = fileName + ".txt"; + int m = vet1.size(); + + ofstream writeOnFile(file_out, ios::out); + if (!writeOnFile) + { + cerr << "file could not be oppeded" << endl; + exit(1); + } + + for (int i = 0; i < m; i++) + { + writeOnFile << vet1(i) << " " << vet2(i) << endl; + } + +} + +template +void DataProcessor::save_data_on_file(const string& fileName, const list theList) +{ + string file_out = fileName + ".txt"; + int m = theList.size(); + + ofstream writeOnFile(file_out, ios::out); + if (!writeOnFile) + { + cerr << "file could not be oppeded" << endl; + exit(1); + } + + for (list::iterator it = theList.begin(); it!= theList.end(); it++) + { + //list::iterator it = randInt_list1.begin(); + writeOnFile << *it << endl; + } +} + +bool DataProcessor::test_Mode() +{ + + int randint1[] = + { 1, 8, 1, 13, 9, 2, 1, 15, 4, 3, 10, 4, 13, 2, 14, 7, 7 }; + int randint1_mode = 1; + list l_randint1; + vectorC_to_list(&l_randint1, randint1, 17); + + int randint2[] = + { 5, 3, 6, 8, 14, 9, 11, 9, 11, 15, 8, 7, 12, 13, 14 }; + int randint2_mode = 8; + list l_randint2; + vectorC_to_list(&l_randint2, randint2, 15); + + int randint3[] = + { 9, 10, 6, 3, 13, 13, 14, 7, 7, 1, 5, 1, 8, 5, 9, 2, 3, 4, 5, 6, 6, 6 }; + int randint3_mode = 6; + list l_randint3; + vectorC_to_list(&l_randint3, randint3, 22); + + int randint4[] = + { 2, 1 }; + int randint4_mode = 1; + list l_randint4; + vectorC_to_list(&l_randint4, randint4, 2); + + int randint5[] = + { 1, 1, 1, 1, 1, 2, 2, 2, 2, 2 }; + int randint5_mode = 1; + list l_randint5; + vectorC_to_list(&l_randint5, randint5, 10); + + if (mode(&l_randint1) != randint1_mode) + return (false); + if (mode(&l_randint2) != randint2_mode) + return (false); + if (mode(&l_randint3) != randint3_mode) + return (false); + if (mode(&l_randint4) != randint4_mode) + return (false); + if (mode(&l_randint5) != randint5_mode) + return (false); + + return (true); +} + +bool DataProcessor::test_QuickSort() +{ + int randIntA[] = + { 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; + int randIntA_size = 18; + int randIntA_sorted[] = + { 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9 }; + int randIntB[] = + { 9, 2, 3, 3, 12, 15, 8, 14, 2, 7, 4, 6, 10, 2, 12 }; + int randIntB_size = 15; + int randIntB_sorted[] = + { 2, 2, 2, 3, 3, 4, 6, 7, 8, 9, 10, 12, 12, 14, 15 }; + double randDoubleA[] = + { 0.20872, 12.25501, 5.88210, 2.77962, 8.74916, 2.97454, 4.39641, 12.19733, + 4.66014, 4.52477, 5.19375, 12.11314, 13.35458, 11.56941, 6.59435 }; + int randDoubleA_size = 15; + double randDoubleA_sorted[] = + { 0.20872, 2.77962, 2.97454, 4.39641, 4.52477, 4.66014, 5.19375, 5.88210, + 6.59435, 8.74916, 11.56941, 12.11314, 12.19733, 12.25501, 13.35458 }; + + quickSort(randIntA, 0, randIntA_size - 1); + + if (isEqual(randIntA, randIntA_sorted, randIntA_size) == false) + { + return (false); + } + + quickSort(randIntB, 0, randIntB_size - 1); + if (isEqual(randIntB, randIntB_sorted, randIntB_size) == false) + { + return (false); + } + + quickSort(randDoubleA, 0, randDoubleA_size - 1); + if (isEqual(randDoubleA, randDoubleA_sorted, randDoubleA_size) == false) + { + return (false); + } + + return (true); + +} + +bool DataProcessor::test_list_tocvector() +{ + list randInt_list1 = + { 9, 2, 3, 3, 12, 15, 8, 14, 2, 7, 4, 6, 10, 2, 12 }; + list randInt_list2 = + { 2.2, 2.111, 3.16, 6.66, 13, 2.61 }; + list randInt_list3 = + { 1, 2, 3, 4, 5, 6, 6, 5, 4, 3, 2, 1 }; + + int* cvet1 = NULL; + double* cvet2 = NULL; + int* cvet3 = NULL; + + cvet1 = list_to_cvector(&randInt_list1); + cvet2 = list_to_cvector(&randInt_list2); + cvet3 = list_to_cvector(&randInt_list3); + + int i = 0; + for (list::iterator it = randInt_list1.begin(); + it != randInt_list1.end(); it++) + { + if (cvet1[i] != *it) + { + return (false); + } + //cout << *it << " "; + i++; + } + i = 0; + for (list::iterator it = randInt_list2.begin(); + it != randInt_list2.end(); it++) + { + if (cvet2[i] != *it) + { + return (false); + } + //cout << *it << " "; + i++; + } + i = 0; + for (list::iterator it = randInt_list3.begin(); + it != randInt_list3.end(); it++) + { + if (cvet3[i] != *it) + { + return (false); + } + //cout << *it << " "; + i++; + } + + delete_cvector(cvet1); + delete_cvector(cvet2); + delete_cvector(cvet3); + + return (true); +} + +bool DataProcessor::test_empiricalCdf() +{ + list interArrival_sample = + { 5.0000e-07, 1.5000e-06, 1.5000e-06, 2.5000e-06, 2.5000e-06, 3.5000e-06, + 4.5000e-06, 7.5000e-06, 1.2500e-05, 1.9500e-05, 3.1500e-05, + 4.3500e-05, 6.0500e-05, 7.6500e-05, 1.1050e-04, 1.4050e-04, + 1.8150e-04, 2.1150e-04, 2.3350e-04, 2.4350e-04, 2.5650e-04, + 3.0350e-04, 4.1250e-04, 1.3655e-03, 1.1593e-02, 3.2483e-02, + 8.1235e-02, 2.0939e-01, 5.0755e-01, 1.7351e+00 }; + vec emCdf_octave = + { 0.033333, 0.100000, 0.100000, 0.166667, 0.166667, 0.200000, 0.233333, + 0.266667, 0.300000, 0.333333, 0.366667, 0.400000, 0.433333, + 0.466667, 0.500000, 0.533333, 0.566667, 0.600000, 0.633333, + 0.666667, 0.700000, 0.733333, 0.766667, 0.800000, 0.833333, + 0.866667, 0.900000, 0.933333, 0.966667, 1.000000 }; + //emCdf_octave = emCdf_octave.t(); + + vec* emCdf_cpp = empiricalCdf(interArrival_sample); + + int list_size = interArrival_sample.size(); + for (int i = 0; i < list_size; i++) + { + if (!compareDouble(emCdf_octave(i), (*emCdf_cpp)(i), 1e-6)) + { + cout << "cdf error @ " << "i:" << i << " res:" << (*emCdf_cpp)(i, 0) + << " expected:" << emCdf_octave(i, 0) << endl; + return (false); + } + } + + delete emCdf_cpp; + return (true); +} + +bool DataProcessor::test_computeCost() +{ + list interArrival_sample = + { 5.0000e-07, 1.5000e-06, 1.5000e-06, 2.5000e-06, 2.5000e-06, 3.5000e-06, + 4.5000e-06, 7.5000e-06, 1.2500e-05, 1.9500e-05, 3.1500e-05, + 4.3500e-05, 6.0500e-05, 7.6500e-05, 1.1050e-04, 1.4050e-04, + 1.8150e-04, 2.1150e-04, 2.3350e-04, 2.4350e-04, 2.5650e-04, + 3.0350e-04, 4.1250e-04, 1.3655e-03, 1.1593e-02, 3.2483e-02, + 8.1235e-02, 2.0939e-01, 5.0755e-01, 1.7351e+00 }; + mat* X = featureMatrix(interArrival_sample); + vec emCdf_octave = + { 0.033333, 0.100000, 0.100000, 0.166667, 0.166667, 0.200000, 0.233333, + 0.266667, 0.300000, 0.333333, 0.366667, 0.400000, 0.433333, + 0.466667, 0.500000, 0.533333, 0.566667, 0.600000, 0.633333, + 0.666667, 0.700000, 0.733333, 0.766667, 0.800000, 0.833333, + 0.866667, 0.900000, 0.933333, 0.966667, 1.000000 }; + //emCdf_octave = emCdf_octave.t(); + double J_expected1 = 0.17535; + double J_expected2 = 1.5341; + double J_expected3 = 9.0244; + + vec theta = zeros(2); + + double J = computeCost(*X, emCdf_octave, theta); + if (!compareDouble(J, J_expected1, 0.001)) + { + //cout << "J1 = " << J << "\nJ_expected1 = "<< J_expected1 << endl; + return (false); + } + theta(0) = 2; + theta(1) = 2; + J = computeCost(*X, emCdf_octave, theta); + if (!compareDouble(J, J_expected2, 0.001)) + { + //cout << "J2 = " << J << "\nJ_expected2 = "<< J_expected2 << endl; + return (false); + } + theta(0) = 1.5; + theta(1) = 12; + J = computeCost(*X, emCdf_octave, theta); + if (!compareDouble(J, J_expected3, 0.001)) + { + //cout << "J3 = " << J << "\nJ_expected3 = "<< J_expected3 << endl; + return (false); + } + + delete X; + return (true); +} + +bool DataProcessor::test_informationCriterion() +{ + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + + int m = interArrival.size(); + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + //gradient descendent + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + vec y = log(-log(1.0 + diferential - *interArrivalCdf)); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + double weibull_alpha = theta(1); + double weibull_betha = exp(-theta(0) / theta(1)); + vec paramVec = + { weibull_alpha, weibull_betha }; + double weibull_bic = informationCriterion(interArrival, "weibull", paramVec, + "bic"); + double weibull_aic = informationCriterion(interArrival, "weibull", paramVec, + "aic"); + + if (!compareDouble(weibull_bic, -33712.7042, 0.001)) + return (false); + else if (!compareDouble(weibull_aic, -33724.6567, 0.001)) + return (false); + + return (true); +} + +bool DataProcessor::test_pdf_weibull() +{ + double alpha = 1.5000; + double betha = 0.3; + vec data = + { 0.010000, 2.300000, 0.500000 }; + vec dataprob_eval1 = + { 9.0733e-01, 8.3571e-09, 7.5066e-01 }; + vec dataprob_test = zeros(3); + + dataprob_test(0) = pdf_weibull(data(0), alpha, betha); + dataprob_test(1) = pdf_weibull(data(1), alpha, betha); + dataprob_test(2) = pdf_weibull(data(2), alpha, betha); + + if (compareDouble(dataprob_test(0), dataprob_eval1(0)) + && compareDouble(dataprob_test(1), dataprob_eval1(1)) + && compareDouble(dataprob_test(2), dataprob_eval1(2))) + { + return (true); + } + + return (false); +} + +bool DataProcessor::test_cdf_weibull() +{ + double alpha = 0.5; + double betha = 1.5; + vec data = + { 0.010000, 2.300000, 0.500000 }; + vec dataprob_eval1 = + { 0.078405, 0.710117, 0.438616 }; + vec dataprob_test = zeros(3); + + dataprob_test(0) = cdf_weibull(data(0), alpha, betha); + dataprob_test(1) = cdf_weibull(data(1), alpha, betha); + dataprob_test(2) = cdf_weibull(data(2), alpha, betha); + //cout << dataprob_test(0) << " : " << dataprob_test(1) << " : " << dataprob_test(2) << endl; + + if (compareDouble(dataprob_test(0), dataprob_eval1(0)) + && compareDouble(dataprob_test(1), dataprob_eval1(1)) + && compareDouble(dataprob_test(2), dataprob_eval1(2))) + { + return (true); + } + + return (false); +} + +bool DataProcessor::test_gradientDescendent() +{ + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + + int m = interArrival.size(); + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + //gradient descendent + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + vec y = log(-log(1.0 + diferential - *interArrivalCdf)); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //expected values + double Jlast = 0.083359; + double theta0 = 1.660453; + double theta1 = 0.248811; + + if (!compareDouble(J_history(iterations - 1), Jlast)) + + { + return (false); + } + else if (!compareDouble(theta(0), theta0)) + { + return (false); + } + else if (!compareDouble(theta(1), theta1)) + { + return (false); + } + + delete interArrivalCdf; + delete X; + return (true); + +} + +bool DataProcessor::test_pdf_exponential() +{ + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double lambda1 = 0.50000; + vec val1 = + { 0.49751, 0.15832, 0.38940 }; + vec res1 = zeros(3); + + double lambda2 = 3.0; + vec val2 = + { 2.9113366, 0.0030234, 0.6693905 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = pdf_exponential(data(i), lambda1); + res2(i) = pdf_exponential(data(i), lambda2); + + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + + } + + return (true); +} + +bool DataProcessor::test_cdf_exponential() +{ + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double lambda1 = 0.50000; + vec val1 = + { 0.0049875, 0.6833632, 0.2211992 }; + vec res1 = zeros(3); + + double lambda2 = 3.0; + vec val2 = + { 0.029554, 0.998992, 0.776870 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = cdf_exponential(data(i), lambda1); + res2(i) = cdf_exponential(data(i), lambda2); + + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + + return (true); +} + +bool DataProcessor::test_pdf_pareto() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double alpha1 = 0.50000; + double xm1 = 1.0; + vec val1 = + { 0, 0.14334, 0 }; + vec res1 = zeros(3); + double xm2 = 0.00001; + double alpha2 = 3.0; + vec val2 = + { 3.0000e-07, 1.0720e-16, 4.8000e-14 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = pdf_pareto(data(i), alpha1, xm1); + res2(i) = pdf_pareto(data(i), alpha2, xm2); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + + return (true); +} + +bool DataProcessor::test_cdf_pareto() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double alpha1 = 0.50000; + double xm1 = 0.001; + vec val1 = + { 0.68377, 0.97915, 0.95528 }; + vec res1 = zeros(3); + double xm2 = 0.2; + double alpha2 = 1; + vec val2 = + { 0, 0.91304, 0.60000 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = cdf_pareto(data(i), alpha1, xm1); + res2(i) = cdf_pareto(data(i), alpha2, xm2); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + return (true); +} + +bool DataProcessor::test_pdf_cauchy() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + double gamma1 = 0.50000; + double x01 = 0.001; + + vec val1 = + { 0.636414, 0.028752, 0.318947 }; + vec res1 = zeros(3); + double x02 = 2; + double gamma2 = 2; + + vec val2 = + { 0.079976, 0.155653, 0.101859 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = pdf_cauchy(data(i), gamma1, x01); + res2(i) = pdf_cauchy(data(i), gamma2, x02); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + return (true); +} + +bool DataProcessor::test_cdf_cauchy() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + double gamma1 = 0.50000; + double x01 = 0.001; + + vec val1 = + { 0.50573, 0.93183, 0.74968 }; + vec res1 = zeros(3); + double x02 = 2; + double gamma2 = 2; + + vec val2 = + { 0.25080, 0.54739, 0.29517 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = cdf_cauchy(data(i), gamma1, x01); + res2(i) = cdf_cauchy(data(i), gamma2, x02); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + return (true); +} + +bool DataProcessor::test_fitModels() +{ + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + + int m = interArrival.size(); + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + //list of expected values + double weibull_alpha = 0.24881; + double weibull_betha = 0.0012639; + double normal_mu = 0.054792; + double normal_sigma = 0.205602; + double exponentialMe_lambda = 18.250783; + double exponentialLr_lambda = 2.023115; + double paretoLr_alpha = 0.225451; + double paretoLr_xm = 0.000000; + double paretoMlh_alpha = 0.171674; + double paretoMlh_xm = 0.000000; + double cauchy_gamma = 0.000067; + double cauchy_x0 = 0.005750; + double acErr = 0.001; + + vec paramVec = zeros(2); + vec infoCriterion = zeros(2); + + weibullFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), weibull_alpha, acErr)) + { + cout << "weibullFitting alpha" << endl; + return (false); + } + if (!compareDouble(paramVec(1), weibull_betha, acErr)) + { + cout << "weibullFitting betha" << endl; + return (false); + } + + normalFitting(interArrival, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), normal_mu, acErr)) + { + cout << "normalFitting mu" << endl; + return (false); + } + if (!compareDouble(paramVec(1), normal_sigma, acErr)) + { + cout << "normalFitting sigma" << endl; + return (false); + } + + exponentialMeFitting(interArrival, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), exponentialMe_lambda, acErr)) + { + cout << "exponentialLrFitting lambda" << endl; + return (false); + } + + exponentialLrFitting(interArrival, *interArrivalCdf, paramVec, + infoCriterion); + if (!compareDouble(paramVec(0), exponentialLr_lambda, acErr)) + { + cout << exponentialLr_lambda << ":" << paramVec(0) << endl; + cout << "exponentialLrFitting lambda" << endl; + return (false); + } + + paretoLrFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), paretoLr_alpha, acErr)) + { + cout << "paretoLrFitting alpha" << endl; + return (false); + } + if (!compareDouble(paramVec(1), paretoLr_xm, acErr)) + { + cout << "paretoLrFitting xm" << endl; + return (false); + } + + paretoMlhFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), paretoMlh_alpha, acErr)) + { + cout << "paretoMlhFitting alpha" << endl; + return (false); + } + if (!compareDouble(paramVec(1), paretoMlh_xm, acErr)) + { + cout << "paretoMlhFitting xm" << endl; + return (false); + } + + cauchyFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), cauchy_gamma, acErr)) + { + cout << "cauchyFitting" << endl; + return (false); + } + if (!compareDouble(paramVec(1), cauchy_x0, acErr)) + { + return (false); + } + + delete interArrivalCdf; + + return (true); +} + +bool DataProcessor::test_modelSelection() +{ + + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + int m = interArrival.size(); + + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + StochasticModelFit* modelVet = NULL; + modelVet = fitModels(list_interArrival, "aic"); + + //int numberOfModels = modelVet[0].size; + //for (int i = 0; i < numberOfModels; i++) + // cout << modelVet[i].modelName << " " << "modelVet[" << i << "] = " + // << modelVet[i].aic << endl; + + delete interArrivalCdf; + delete[] modelVet; + return (true); +} + +#endif //TEST_FUNCTIONS diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/26/b034ba7bceb500161808a5c64fd2084a b/.metadata/.plugins/org.eclipse.core.resources/.history/26/b034ba7bceb500161808a5c64fd2084a new file mode 100644 index 0000000..d1721da --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/26/b034ba7bceb500161808a5c64fd2084a @@ -0,0 +1,231 @@ +/* + * NetworkFlow.h + * + * Created on: 15 de set de 2016 + * Author: apaschoalon + */ + +#ifndef NETWORKFLOW_H_ +#define NETWORKFLOW_H_ + +//external libraries +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +//local includes +#include "ITGapi.h" +#include "Defines.h" +#include "StochasticModelFit.h" + +//namespaces +using std::string; +using std::cout; +using std::cin; +using std::endl; + +typedef struct protocol_support +{ + bool ethernet; + bool arp; + bool use_ip_add_list; + bool ipv4; + bool ipv6; + bool igmp; + bool gre; + bool icmp; + bool dccp; + bool tcp; + bool udp; + bool smnp; + bool html; +} protocolSupport; + +class NetworkFlow +{ +public: + NetworkFlow(); + virtual ~NetworkFlow(); + static NetworkFlow *make_flow(string choise); + + virtual void flowGenerate() = 0; + virtual std::thread flowThread() = 0; + + virtual int randTranportPort() = 0; + virtual protocol getApplicationProtocol() const = 0; + virtual void setApplicationProtocol(protocol applicationProtocol) = 0; + virtual unsigned int getFlowDsByte() const = 0; + virtual void setFlowDsByte(unsigned int flowDsByte) = 0; + virtual double getFlowDuration() const = 0; + virtual void setFlowDuration(double flowDuration) = 0; + virtual double getFlowStartDelay() const = 0; + virtual void setFlowStartDelay(double flowStartDelay) = 0; + + virtual protocol getLinkProtocol() const = 0; + virtual void setLinkProtocol(protocol linkProtocol) = 0; + virtual long int getLinkSrcAddrCount() const = 0; + virtual void setLinkSrcAddrCount(long int linkSrcAddrCount) = 0; + virtual const string& getNetworkDstAddr() const = 0; + virtual void setNetworkDstAddr(const string& networkDstAddr) = 0; + virtual int getNetworkHostListConter() const = 0; + virtual void setNetworkHostListConter(int networkHostListConter) = 0; + virtual protocol getNetworkProtocol() const = 0; + virtual void setNetworkProtocol(protocol networkProtocol) = 0; + virtual const string& getNetworkSrcAddr() const = 0; + virtual void setNetworkSrcAddr(const string& networkSrcAddr) = 0; + virtual unsigned int getNetworkTtl() const = 0; + virtual void setNetworkTtl(unsigned int networkTtl) = 0; + virtual unsigned long long int getNumberOfKbytes() const = 0; + virtual void setNumberOfKbytes(unsigned long long int numberOfKbytes) = 0; + virtual unsigned long long int getNumberOfPackets() const = 0; + virtual void setNumberOfPackets(unsigned long long int numberOfPackets) = 0; + virtual const protocolSupport& getProtocols() const = 0; + virtual void setProtocols(const protocolSupport& protocols) = 0; + +//TODO +// virtual StochasticModelFit getPacketSizeModel_next() const = 0; +// virtual void setPacketSizeModel_next( +// StochasticModelFit* modelVet) const = 0; + virtual StochasticModelFit getInterDepertureTimeModel_next()= 0; + virtual void setInterDepertureTimeModels( + StochasticModelFit* modelVet) = 0; + + /* + virtual double getIdtCauchyScale() const = 0; + virtual void setIdtCauchyScale(double idtCauchyScale) = 0; + virtual double getIdtCauchyShape() const = 0; + virtual void setIdtCauchyShape(double idtCauchyShape) = 0; + virtual double getIdtConstant() const = 0; + virtual void setIdtConstant(double idtConstant) = 0; + virtual double getIdtExponential() const = 0; + virtual void setIdtExponential(double idtExponentialE) = 0; + virtual double getIdtGammaScale() const = 0; + virtual void setIdtGammaScale(double idtGammaScale) = 0; + virtual double getIdtGammaShape() const = 0; + virtual void setIdtGammaShape(double idtGammaShape) = 0; + virtual stochastic_model getIdtModel1() const = 0; + virtual void setIdtModel1(stochastic_model idtModel1) = 0; + virtual stochastic_model getIdtModel2() const = 0; + virtual void setIdtModel2(stochastic_model idtModel2) = 0; + virtual stochastic_model getIdtModel3() const = 0; + virtual void setIdtModel3(stochastic_model idtModel3) = 0; + virtual stochastic_model getIdtModel4() const = 0; + virtual void setIdtModel4(stochastic_model idtModel4) = 0; + virtual stochastic_model getIdtModel5() const = 0; + virtual void setIdtModel5(stochastic_model idtModel5) = 0; + virtual stochastic_model getIdtModel6() const = 0; + virtual void setIdtModel6(stochastic_model idtModel6) = 0; + virtual stochastic_model getIdtModel7() const = 0; + virtual void setIdtModel7(stochastic_model idtModel7) = 0; + virtual stochastic_model getIdtModel8() const = 0; + virtual void setIdtModel8(stochastic_model idtModel8) = 0; + virtual stochastic_model getIdtModel9() const = 0; + virtual void setIdtModel9(stochastic_model idtModel9) = 0; + virtual double getIdtNormalStdDev() const = 0; + virtual void setIdtNormalStdDev(double idtNormalStddev) = 0; + virtual double getIdtNormalMean() const = 0; + virtual void setIdtNormalMean(double idtNormalMean) = 0; + virtual double getIdtParetoScale() const = 0; + virtual void setIdtParetoScale(double idtParetoScale) = 0; + virtual double getIdtParetoShape() const = 0; + virtual void setIdtParetoShape(double idtParetoShape) = 0; + virtual double getIdtPoissonMean() const = 0; + virtual void setIdtPoissonMean(double idtPoissonMean) = 0; + virtual double getIdtUniformMaxpktsize() const = 0; + virtual void setIdtUniformMaxpktsize(double idtUniformMaxpktsize) = 0; + virtual double getIdtUniformMinpktsize() const = 0; + virtual void setIdtUniformMinpktsize(double idtUniformMinpktsize) = 0; + virtual double getIdtWeibullScale() const = 0; + virtual void setIdtWeibullScale(double idtWeibullScale) = 0; + virtual double getIdtWeibullShape() const = 0; + virtual void setIdtWeibullShape(double idtWeibullShape) = 0; + + virtual double getPsBimodalMode1Constant() const = 0; + virtual void setPsBimodalMode1Constant(double psBimodalMode1Constant) = 0; + virtual double getPsBimodalMode1NormalDevstd() const = 0; + virtual void setPsBimodalMode1NormalDevstd(double psBimodalMode1NormalDevstd) = 0; + virtual double getPsBimodalMode1NormalMean() const = 0; + virtual void setPsBimodalMode1NormalMean(double psBimodalMode1NormalMean) = 0; + virtual double getPsBimodalMode1WeibullScale() const = 0; + virtual void setPsBimodalMode1WeibullScale(double psBimodalMode1WeibullScale) = 0; + virtual double getPsBimodalMode1WeibullShape() const = 0; + virtual void setPsBimodalMode1WeibullShape(double psBimodalMode1WeibullShape) = 0; + virtual double getPsBimodalMode2Constant() const = 0; + virtual void setPsBimodalMode2Constant(double psBimodalMode2Constant) = 0; + virtual double getPsBimodalMode2NormalDevstd() const = 0; + virtual void setPsBimodalMode2NormalDevstd(double psBimodalMode2NormalDevstd) = 0; + virtual double getPsBimodalMode2NormalMean() const = 0; + virtual void setPsBimodalMode2NormalMean(double psBimodalMode2NormalMean) = 0; + virtual double getPsBimodalMode2WeibullScale() const = 0; + virtual void setPsBimodalMode2WeibullScale(double psBimodalMode2WeibullScale) = 0; + virtual double getPsBimodalMode2WeibullShape() const = 0; + virtual void setPsBimodalMode2WeibullShape(double psBimodalMode2WeibullShape) = 0; + virtual stochastic_model getPsBimodalTypeMode1() const = 0; + virtual void setPsBimodalTypeMode1(stochastic_model psBimodalTypeMode1) = 0; + virtual stochastic_model getPsBimodalTypeMode2() const = 0; + virtual void setPsBimodalTypeMode2(stochastic_model psBimodalTypeMode2) = 0; + virtual int getPsConstant() const = 0; + virtual void setPsConstant(int psConstant) = 0; + virtual double getPsExponential() const = 0; + virtual void setPsExponential(double psExponential) = 0; + virtual stochastic_model getPsModel1() const = 0; + virtual void setPsModel1(stochastic_model psModel1) = 0; + virtual stochastic_model getPsModel2() const = 0; + virtual void setPsModel2(stochastic_model psModel2) = 0; + virtual stochastic_model getPsModel3() const = 0; + virtual void setPsModel3(stochastic_model psModel3) = 0; + virtual stochastic_model getPsModel4() const = 0; + virtual void setPsModel4(stochastic_model psModel4) = 0; + virtual stochastic_model getPsModel5() const = 0; + virtual void setPsModel5(stochastic_model psModel5) = 0; + virtual stochastic_model getPsModel6() const = 0; + virtual void setPsModel6(stochastic_model psModel6) = 0; + virtual stochastic_model getPsModel7() const = 0; + virtual void setPsModel7(stochastic_model psModel7) = 0; + virtual stochastic_model getPsModel8() const = 0; + virtual void setPsModel8(stochastic_model psModel8) = 0; + virtual double getPsNormalMean() const = 0; + virtual void setPsNormalMean(double psNormalMean) = 0; + virtual double getPsNormalStdDev() const = 0; + virtual void setPsNormalStdDev(double psNormalStdDev) = 0; + virtual double getPsParetoScale() const = 0; + virtual void setPsParetoScale(double psParetoScale) = 0; + virtual double getPsParetoShape() const = 0; + virtual void setPsParetoShape(double psParetoShape) = 0; + virtual double getPsPoissonMean() const = 0; + virtual void setPsPoissonMean(double psPoissonMean) = 0; + virtual double getPsUniformMaxpktsize() const = 0; + virtual void setPsUniformMaxpktsize(double psUniformMaxpktsize) = 0; + virtual double getPsUniformMinpktsize() const = 0; + virtual void setPsUniformMinpktsize(double psUniformMinpktsize) = 0; + virtual double getPsWeibullScale() const = 0; + virtual void setPsWeibullScale(double psWeibullScale) = 0; + virtual double getPsWeibullShape() const = 0; + virtual void setPsWeibullShape(double psWeibullShape) = 0; + */ + + virtual unsigned int getTransportDstPort() const = 0; + virtual void setTransportDstPort(unsigned int transportDstPort) = 0; + virtual unsigned int getTransportSctpAssociationId() const = 0; + virtual void setTransportSctpAssociationId( + unsigned int transportSctpAssociationId) = 0; + virtual unsigned int getTransportSctpMaxStreams() const = 0; + virtual void setTransportSctpMaxStreams( + unsigned int transportSctpMaxStreams) = 0; + virtual unsigned int getTransportSrcPort() const = 0; + virtual void setTransportSrcPort(unsigned int transportSrcPort) = 0; + virtual protocol getTransportProtocol() const = 0; + virtual void setTransportProtocol(protocol transportProtocol) = 0; + +}; + +#endif /* NETWORKFLOW_H_ */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/29/504e2db4cdb500161808a5c64fd2084a b/.metadata/.plugins/org.eclipse.core.resources/.history/29/504e2db4cdb500161808a5c64fd2084a new file mode 100644 index 0000000..44b11c1 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/29/504e2db4cdb500161808a5c64fd2084a @@ -0,0 +1,885 @@ +/* + * DataProcessor.h + * + * Created on: 14 de jun de 2016 + * Author: apaschoalon + */ + +#ifndef DATAPROCESSOR_H_ +#define DATAPROCESSOR_H_ + +//external libs +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +//local libs +#include "DatabaseInterface.h" +#include "NetworkTrace.h" +#include "Defines.h" +#include "StochasticModelFit.h" + +//namespaces +using std::string; +using namespace arma; + +#define DEBUG_StochasticModelFit 1 + + +//TODO: this class must be static +class DataProcessor +{ +public: + + /** + * Default constructor + */ + DataProcessor(); + + /** + * Destructor. Clean any allocated memory + */ + virtual ~DataProcessor(); + + /** + * @brief Returns a string information about the class + * Returns a string information about the class + * + * @param void + * @return string + */ + string toString(void); + + /** + * @brief This method parameterize a network trace. + * Through the database interface class, this method retrieves all desired + * data from the database, in order to calculate and set parameters in a + * NetworkTrace class instance. This method knows all the labels and types + * of each database column, and how to deal with them correctly. So this + * method should be up to date with the database. After calculating all + * parameters, this class should save the data on the Network trace + * object and on its flows through netTrace.set() and netTace.flow[n].set() + * methods. + * + * @param experimentName experiment name string + * @param databaseInterface class interface to the database + * @param netTrace network trace class, which will be parameterized + * @return returns 0 in success + */ + int calculate(const string& experimentName, + DatabaseInterface* databaseInterface, NetworkTrace* netTrace); + +#ifdef TEST_FUNCTIONS + void save_data_on_file(const string& fileName, const mat& vet1, + const mat& vet2); + void save_data_on_file(const string& fileName, list& theList); + void printTestResult(string testName, bool result); + bool compareDouble(double val1, double val2); + bool compareDouble(double val1, double val2, double acErr); + bool compareMat(mat& mat1, mat& mat2); + bool test_QuickSort(); + bool test_Mode(); + bool test_list_tocvector(); + bool test_empiricalCdf(); + bool test_computeCost(); + bool test_informationCriterion(); + bool test_gradientDescendent(); + bool test_pdf_weibull(); + bool test_cdf_weibull(); + bool test_pdf_exponential(); + bool test_cdf_exponential(); + bool test_pdf_pareto(); + bool test_cdf_pareto(); + bool test_pdf_cauchy(); + bool test_cdf_cauchy(); + bool test_fitModels(); + bool test_modelSelection(); +#endif //TEST_FUNCTIONS + +private: + /** + * A time smaller than the min_time resolution. Once the current resolution + * is 1e-6, min_time is half of this value. This value is used as default + * as substitute for times equal to zero. + */ + double min_time = 5e-7; + + /** + * A very small time value. This is used to avoid evaluating the operation + * log(0), which is undefined. + */ + double diferential = 4e-14; + + // calculate the mean packet rate + int mean_packetRate(list& pakcetSizeList, double duration); + + //calculate the most frequent element from a list + long int mode(list& thelist); + + /** + * ACTUAL FUNCTIONS + */ + // Take as input a vector vet[], its first and last position to be + // sorted. After the execution vet[] will be sorted. + // T* vet : C vector + // int left: fist position of the C vector to be sorted, usually 0. + // int right: last position of the C vector to be sorted, usually size-1; + template void quickSort(T* vet, int left, int right); + // Evaluate the mode (the most frequent value) of a list list + template T mode(list* theList); + + /** + * @brief Converts a list to a C vector. + * Converts a list to a C vector. + * @param theList + * @return + */ + template T* list_to_cvector(list* theList); + + /** + * @brief Delete a C vector + * @param c_vet pointer to the C vector + */ + template void delete_cvector(T* c_vet); + + /** + * @brief Compare two C vectors T. + * Compare two C vectors of types T. If they are equal, returns "true". If + * they are not, returns "false". + * + * @param vet1 + * @param vet2 + * @param size + * @return + */ + template bool isEqual(const T* vet1, const T* vet2, + const int size); + /** + * \brief convert a C vector T to a list + * + * @param theList pointer to an empty list + * @param vet pointer to a C vector + * @param size size of the C vector + */ + template void vectorC_to_list(list* theList, T* vet, + int size); + + /** + * Return an empirical vector of the Cumulative distribution function. + * This method take as input a list of empirical data, and create a + * vector (of the same size) of an empirical evaluation of the cumulative + * distribution function. Return must be freed using delete. + * + * @param list + * @return vec* empirical cumulative vector + */ + vec* empiricalCdf(list& empiricalData); + + //feature matrix: return a matrix X(m, 2) = [1 data]. Must be freed using delete. + /** + * @brief Creates a feature matrix for linear regression + * Creates a feature matrix X(m, 2) = [1 data], for the linear regression. + * Must be freed using delete. + * + * @param empiricalData list of the empirical data. + * @return returns a pointer to the feature matrix + */ + mat* featureMatrix(list& empiricalData); + + /** + * @brief Creates a feature matrix for linear regression + * Creates a feature matrix X(m, 2) = [1 data], for the linear regression. + * Must be freed using delete. + * + * @param empiricalData vector vec of the empirical data. + * @return returns a pointer to the feature matrix + */ + mat* featureMatrix(const vec& empiricalData); + + /** + * @brief Compute cost of the gradient descendent function + * It returns the value of the cost function for the list of parameteres + * + * @param X feature matrix + * @param y expected values + * @param theta linear regression coeficients [theta1; theta2] + * @return cost value + */ + double computeCost(const mat& X, const vec& y, const vec& theta); + + /** + * @brief Gradient descendent algorithm + * Evaluates the gradient descendent + * + * @param X feature matrix + * @param y + * @param learning_rate + * @param num_iters + * @param theta + * @param J_history + */ + void gradientDescendent(const mat& X, const vec& y, + const double learning_rate, const int num_iters, vec& theta, + vec& J_history); + + /** + * @brief information criterion + * + * @param data + * @param functionName + * @param paramVet + * @param criterion + * @return + */ + double informationCriterion(const vec& data, const string& functionName, + const vec& paramVet, const string& criterion); + + /** + * @brief natural logarithm of likehood function + * + * @param data + * @param functionName + * @param paramVet + * @return + */ + double logLikehood(const vec& data, const string& functionName, + const vec& paramVet); + /** + * @brief fit weibull alpha and betha using linear regression + * + * @param interArrival + * @param interArrivalCdf + * @param paramVec + * @param informationCriterion + */ + void weibullFitting(const vec& interArrival, const vec& interArrivalCdf, + vec& paramVec, vec& informationCriterion); + + /** + * @brief evaluate mean and standard deviation + * + * @param interArrival + * @param paramVec + * @param informationCriterion + */ + void normalFitting(const vec& interArrival, vec& paramVec, + vec& informationCriterion); + + /** + * @brief evaluate lambda using linear regression + * + * @param interArrival + * @param interArrivalCdf + * @param paramVec + * @param informationCriterion + */ + void exponentialLrFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, + vec& informationCriterion); + + /** + * @brief evaluate lambda using mean estimation + * + * @param interArrival + * @param paramVec + * @param informationCriterion + */ + void exponentialMeFitting(const vec& interArrival, vec& paramVec, + vec& informationCriterion); + + /** + * @brief evaluate pareto's alpha and xm using Linear regression + * + * @param interArrival + * @param interArrivalCdf + * @param paramVec + * @param informationCriterion + */ + void paretoLrFitting(const vec& interArrival, const vec& interArrivalCdf, + vec& paramVec, vec& informationCriterion); + + /** + * @brief evaluate pareto's alpha and xm using maximum likehood method + * + * @param interArrival + * @param interArrivalCdf + * @param paramVec + * @param informationCriterion + */ + void paretoMlhFitting(const vec& interArrival, const vec& interArrivalCdf, + vec& paramVec, vec& informationCriterion); + + /** + * @brief evaluate cauchy's gamma and x0 using linear regression + * + * @param interArrival + * @param interArrivalCdf + * @param paramVec + * @param informationCriterion + */ + void cauchyFitting(const vec& interArrival, const vec& interArrivalCdf, + vec& paramVec, vec& informationCriterion); + + /** + * @brief + * + * @param interArrival + * @param paramVec + * @param informationCriterion + */ + void constantFitting(const vec& interArrival, vec& paramVec, + vec& informationCriterion); + + /** + * @brief returns probability of a given + * @param x + * @param alpha + * @param betha + * @return + */ + double pdf_weibull(double x, double alpha, double betha); + + /** + * + * @param x + * @param alpha + * @param betha + * @return + */ + double cdf_weibull(double x, double alpha, double betha); + + /** + * + * @param x + * @param lambda + * @return + */ + double pdf_exponential(double x, double lambda); + + /** + * + * @param x + * @param lambda + * @return + */ + double cdf_exponential(double x, double lambda); + + /** + * + * @param x + * @param alpha + * @param xm + * @return + */ + double pdf_pareto(double x, double alpha, double xm); + + /** + * + * @param x + * @param alpha + * @param xm + * @return + */ + double cdf_pareto(double x, double alpha, double xm); + + /** + * + * @param x + * @param gamma + * @param x0 + * @return + */ + double pdf_cauchy(double x, double gamma, double x0); + + /** + * + * @param x + * @param gamma + * @param x0 + * @return + */ + double cdf_cauchy(double x, double gamma, double x0); + + /** + * + * @param x + * @param mu + * @param sigma + * @return + */ + double pdf_normal(double x, double mu, double sigma); + + /** + * + * @param x + * @param mu + * @param sigma + * @return + */ + double cdf_normal(double x, double mu, double sigma); + + /** + * + * @param x_min + * @param x_max + * @return + */ + double pdf_uniform(double x_min, double x_max); + + /** + * + * @param x + * @param x_min + * @param x_max + * @return + */ + double cdf_uniform(double x, double x_min, double x_max); + + // Take as input a list o inter-arrival times, and a pointer to a C vector + // of the struct StochasticModelFit. The available models are ordered here, + // from the best to the worst, according to the specified criterion BIC or + // AIC. If it is not specified, it uses as default AIC. + + /** + * + * @param empiricalData + * @param criterion + * @return + */ + StochasticModelFit* fitModels(list& empiricalData, + const string& criterion); + +#ifdef TEST_FUNCTIONS + + vec interArrivalSample = + { 0, 0, 0.000203, 1e-05, 0.318392, 1.00003, 0.517214, 3.2e-05, 7.6e-05, + 0.159572, 0.028456, 0.000267, 1.6e-05, 0.000362, 0.001436, 0.012243, + 0.052051, 0.010572, 0.300375, 1.6e-05, 0.00012, 0.171993, 0.000161, + 0.180517, 0.336145, 9e-06, 0.007852, 0.044852, 0.020313, 0.030458, + 0.218979, 0.250961, 0.158453, 0.042762, 0.129894, 0.01578, 0.016078, + 3.1e-05, 2.2e-05, 0.000309, 1.8e-05, 7.1e-05, 3e-06, 0.00018, 6e-06, + 0.041497, 0.094336, 0.030568, 0.69278, 0.083745, + 0.09501999999999999, 0.246721, 0.000322, 1.5e-05, 6.4e-05, 0.00031, + 6.600000000000001e-05, 0.000203, 5.4e-05, 4e-06, 4.6e-05, + 0.0005509999999999999, 0.046676, 0.000133, 0.00025, 0.000106, 4e-06, + 6e-05, 0.000579, 0.020548, 0.020144, 0.00017, 4.3e-05, 3.8e-05, + 0.000403, 8.8e-05, 9.2e-05, 2.1e-05, 8.899999999999999e-05, 7.9e-05, + 0.037013, 0.003625, 0.000174, 0.001402, 0.01547, 0.000137, 0.000257, + 0.000181, 0.000249, 0.000175, 0.000262, 0.000188, 0.000245, + 0.000198, 0.000194, 0.039691, 0.377134, 0.025489, + 0.08887399999999999, 0.071201, 0.118396, 0.011301, 0.18306, + 0.471818, 1.2e-05, 0.057105, 0.158384, 0.033412, 0.279247, 0.615341, + 0.07193099999999999, 0.041286, 6e-06, 6.4e-05, 0.000615, 0.000159, + 1.5e-05, 0.179127, 0.003532, 0.087938, 0.128529, 0.003537, 0.555139, + 0.312737, 0.614656, 0.20354, 0.18178, 0.728741, 0.227757, 0.657457, + 1.122729, 0.000405, 1.1e-05, 0.876119, 1.999258, 0.936457, 0.000285, + 1.2e-05, 4.5e-05, 5.3e-05, 0.000321, 0.000137, 0.00026, 0.00031, + 0.000224, 2.5e-05, 0.000171, 3.7e-05, 0.000211, 9.3e-05, 0.000175, + 2.8e-05, 0.000447, 0.000124, 3e-06, 0.000121, 0.000124, 1.3e-05, + 0.000111, 0.000129, 3e-06, 3.6e-05, 3e-06, 1.8e-05, 3.9e-05, + 8.6e-05, 0.00021, 0.000239, 0.000161, 3.2e-05, 0.000224, 0.001489, + 0.00078, 0.000127, 7e-06, 0.000197, 0.000703, 2.5e-05, 0.000145, + 0.00263, 0.001061, 0.001058, 8e-06, 1.5e-05, 4.6e-05, 0.001069, + 0.013118, 6.4e-05, 0.016585, 0.008005, 0.004525, 0.01047, 1.1e-05, + 4e-06, 1e-06, 1e-06, 1e-06, 0.000346, 0.003028, 0.3629, 0.605291, + 0.024532, 0.13292, 6e-06, 2e-06, 2e-06, 2e-06, 2e-06, 3.5e-05, + 0.000585, 0.000348, 0.000227, 0.000171, 7e-06, 0.08057, 0.758265, + 0.999926, 0.026228, 0.430843, 0.460833, 0.076263, 0.682728, + 0.000663, 0.286479, 0.000348, 1.2e-05, 5e-05, 0.000407, 4.8e-05, + 0.000171, 5e-05, 0.000202, 3.5e-05, 0.000215, 2.7e-05, 0.000227, + 3.3e-05, 0.000461, 0.000124, 8e-06, 0.000109, 0.000124, 7e-06, + 0.000115, 0.000123, 1e-06, 0.000122, 0.000125, 3e-06, 0.000122, + 0.000121, 1.8e-05, 0.000105, 3.5e-05, 4e-06, 4.6e-05, 0.000216, + 8.6e-05, 0.000174, 0.000106, 0.00019, 7.8e-05, 0.000171, 7.1e-05, + 0.000256, 0.000219, 0.000174, 8.899999999999999e-05, 0.000168, + 0.000114, 8e-06, 4.5e-05, 0.000549, 0.041588, 9.399999999999999e-05, + 0.000272, 5.8e-05, 4e-06, 4.2e-05, 0.000563, 0.012524, 0.011557, + 0.000133, 0.033325, 8.1e-05, 3.4e-05, 0.000523, 0.041159, 5.2e-05, + 2.3e-05, 5.7e-05, 0.016827, 9.500000000000001e-05, 0.000229, + 7.1e-05, 0.000184, 7.2e-05, 0.000183, 5.3e-05, 0.000166, 3.2e-05, + 0.000225, 0.037247, 1.000281, 1.5e-05, 1.8e-05, 3.9e-05, 7e-06, + 6e-06, 5.9e-05, 8e-06, 4e-06, 4.7e-05, 0.000492, 4.2e-05, 7e-06, + 4e-06, 3e-06, 6e-06, 2.5e-05, 6e-05, 1.8e-05, 6e-06, 1.8e-05, 6e-06, + 5.7e-05, 1.5e-05, 0.000178, 3.4e-05, 6e-06, 4e-06, 4e-06, 7e-06, + 0.000154, 1.6e-05, 4e-06, 3e-06, 4e-06, 5.7e-05, 0.000236, 4.2e-05, + 7e-06, 3e-06, 4e-06, 0.000261, 4.1e-05, 6e-06, 8.3e-05, 4.9e-05, + 8e-06, 5e-06, 4e-06, 4e-06, 5e-06, 1.1e-05, 0.000377, 4.3e-05, + 8e-06, 4e-06, 4e-06, 6e-06, 4e-06, 9e-06, 0.000183, 2.7e-05, 6e-06, + 3e-06, 4e-06, 0.000203, 2.5e-05, 6e-06, 3e-06, 4e-06, 6e-06, 0.0002, + 2.8e-05, 6e-06, 4e-06, 4e-06, 7e-06, 0.000205, 2.7e-05, 6e-06, + 4e-06, 3e-06, 0.000183, 2.9e-05, 6e-06, 4e-06, 3e-06, 7e-06, + 0.000217, 2.6e-05, 6e-06, 4e-06, 3e-06, 6e-06, 0.000209, 3.5e-05, + 6e-06, 3e-06, 3e-06, 0.000247, 4.3e-05, 5e-06, 3e-06, 3e-06, 7e-06, + 8.000000000000001e-05, 1.4e-05, 4e-06, 4e-06, 3e-06, 7.6e-05, + 0.000233, 4.2e-05, 6e-06, 3e-06, 3e-06, 0.000108, 1.4e-05, 5e-06, + 4e-06, 5.5e-05, 0.000259, 3.3e-05, 3.4e-05, 0.000106, 0.000304, + 0.000247, 3.3e-05, 0.000169, 0.000276, 3.3e-05, 3.2e-05, 0.000112, + 0.000275, 0.000284, 0.000244, 6.4e-05, 0.00013, 0.000222, 0.000244, + 0.000377, 0.000136, 0.000324, 6.1e-05, 0.000101, 0.000304, 0.000205, + 0.000298, 0.000202, 0.000265, 4.3e-05, 0.000182, 0.000198, 3.6e-05, + 0.036618, 0.167993, 0.000405, 5.6e-05, 0.132945, 0.5075499999999999, + 1.839101, 0.160079, 0.856059, 0.00019, 0.814619, 0.001748, 0.326707, + 0.016594, 0.104517, 0.000487, 1.2e-05, 3.5e-05, 0.030896, 1.3e-05, + 2.5e-05, 2e-06, 5.6e-05, 2e-06, 0.00016, 8e-06, 1e-06, 4.4e-05, + 6e-06, 0.000232, 2e-06, 9.6e-05, 5e-06, 1e-06, 0.000219, 3e-06, + 1e-06, 0.000281, 4e-06, 1e-06, 0.000247, 2e-06, 1e-06, 0.000182, + 4e-06, 1e-06, 0.000234, 3e-06, 2e-06, 0.000331, 7e-06, 2e-06, + 0.000228, 7e-06, 0.000124, 0.000342, 0.000243, 0.000109, 8e-06, + 0.00015, 6.1e-05, 8e-06, 0.006888, 7.4e-05, 0.033877, 0.03964, + 0.031221, 0.027626, 0.029209, 0.027819, 0.008146, 0.003837, + 0.054232, 0.141787, 0.189477, 0.000731, 0.037917, 0.239763, + 0.016276, 0.101792, 0.121279, 0.569522, 0.162138, 0.167452, + 0.100904, 0.050978, 0.193571, 0.023699, 0.00188, 0.7299330000000001, + 0.14706, 0.069059, 0.000354, 2.1e-05, 0.000376, 0.051512, 4e-05, + 0.00026, 1.9e-05, 5.1e-05, 4e-06, 6e-05, 0.000322, 4.5e-05, 1.3e-05, + 9e-06, 7.8e-05, 3.9e-05, 0.000258, 5.4e-05, 6.9e-05, 8e-06, 6.2e-05, + 0.000148, 4.2e-05, 0.000136, 5.7e-05, 4.7e-05, 0.000226, 0.00012, + 0.000106, 5.4e-05, 0.000169, 9.7e-05, 0.000135, 5.3e-05, 0.000161, + 5.6e-05, 2.9e-05, 1.1e-05, 2.8e-05, 2.9e-05, 0.000329, 4.8e-05, + 2.4e-05, 1e-05, 3.4e-05, 2.8e-05, 0.000345, 0.000111, 0.000216, + 8e-06, 0.010716, 0.000189, 0.002223, 0.000222, 0.000261, 6.1e-05, + 0.000497, 0.000121, 6e-06, 3.1e-05, 7.4e-05, 0.000316, 0.000201, + 0.000241, 0.037019, 0.011593, 0.025272, 1.2e-05, 0.005462, 0.000153, + 0.000308, 1.8e-05, 0.000457, 0.000157, 1.2e-05, 0.000111, + 6.499999999999999e-05, 8.500000000000001e-05, 0.000121, 0.036178, + 0.062789, 0.209764, 2.2e-05, 0.000104, 0.000598, 0.000113, 0.000858, + 0.001237, 1.1e-05, 6.4e-05, 0.022295, 0.002239, 0.02595, 0.048743, + 2.3e-05, 0.048933, 0.000101, 3.8e-05, 0.134329, 0.013961, 1e-05, + 0.003331, 7e-06, 0.006234, 0.000175, 8e-06, 0.0002, 0.000699, + 2.4e-05, 0.001724, 6e-06, 0.000252, 1.3e-05, 0.00269, 0.000125, + 7e-06, 0.000158, 0.007282, 0.015473, 0.064868, 6e-06, 0.216, + 2.2e-05, 2.9e-05, 6.9e-05, 0.000317, 1.4e-05, 0.002346, 0.00051, + 0.005226, 2e-05, 0.019417, 0.001007, 0.000196, 0.005594, 0.005761, + 0.008026, 0.09038, 0.000229, 0.000128, 0.209391, 0.231852, 0.032119, + 5e-06, 5e-06, 2e-06, 2e-06, 1e-06, 2e-06, 3.3e-05, 0.000664, 1e-05, + 2e-06, 0, 1e-06, 1e-06, 8.899999999999999e-05, 1.8e-05, 2.7e-05, + 5e-06, 1e-06, 1e-06, 0.000308, 4e-06, 2e-06, 2e-06, 0.000159, 5e-06, + 1e-06, 1e-06, 0.000537, 8e-06, 2e-06, 2e-06, 1e-06, 1e-06, 1e-06, + 0.00044, 1e-05, 2e-06, 3e-06, 3e-06, 3e-06, 2e-06, 0.0001, 0.000368, + 1e-05, 1e-06, 3e-06, 3e-06, 4e-06, 2e-06, 0.000452, 5e-06, 3e-06, + 2e-06, 2e-06, 2e-06, 0.000215, 6e-06, 2e-06, 2e-06, 0.000259, 7e-06, + 3e-06, 1e-06, 0.000209, 5e-06, 2e-06, 1e-06, 0.000236, 4e-06, 1e-06, + 2e-06, 0.000238, 3e-06, 1e-06, 2e-06, 0.000252, 1.6e-05, 1e-06, + 1e-06, 0.000255, 1.2e-05, 1e-06, 2e-06, 0.000202, 1.5e-05, 1e-06, + 1e-06, 0.000251, 1.2e-05, 1e-06, 1e-06, 0.000198, 4e-06, 1e-06, + 2e-06, 0.000254, 4e-06, 1e-06, 1e-06, 0.00013, 0.000103, 2e-06, + 1e-06, 1e-06, 0.00023, 5e-06, 2e-06, 1e-06, 0.000244, 4e-06, 1e-06, + 0, 0.000233, 6e-06, 1e-06, 1e-06, 0.000241, 4e-06, 1e-06, 1e-06, + 0.000238, 6e-06, 3e-06, 1e-06, 0.000234, 6e-06, 2e-06, 1e-06, + 0.000234, 8e-06, 1e-06, 1e-06, 0.000236, 7e-06, 1e-06, 1e-06, + 0.000236, 4e-06, 1e-06, 1e-06, 0.000237, 5e-06, 1e-06, 2e-06, + 0.000236, 2e-06, 3e-06, 4e-06, 0.000237, 6e-06, 3e-06, 3e-06, + 0.000232, 4e-06, 2e-06, 1e-06, 0.000238, 4e-06, 1e-06, 2e-06, + 0.000239, 6e-06, 1e-06, 1e-06, 0.00024, 2e-06, 1e-06, 1e-06, + 0.000241, 3e-06, 2e-06, 1e-06, 0.000238, 4e-06, 2e-06, 1e-06, + 0.000237, 3e-06, 1e-06, 2e-06, 0.00024, 5e-06, 1e-06, 1e-06, + 0.000237, 4e-06, 1e-06, 1e-06, 0.00024, 3e-06, 2e-06, 1e-06, + 0.000305, 4e-06, 2e-06, 0.000194, 1.2e-05, 1e-06, 0.000223, 1.2e-05, + 1e-06, 0.000235, 1.5e-05, 1e-06, 0.000224, 1.2e-05, 2e-06, 0.000231, + 1.1e-05, 2e-06, 0.000225, 6e-06, 2e-06, 1e-06, 0.000245, 1.4e-05, + 1e-06, 0.000218, 2e-06, 1e-06, 0.000243, 3e-06, 2e-06, 0.00024, + 4e-06, 1e-06, 0.00024, 4e-06, 2e-06, 0.000238, 2e-06, 1e-06, 1e-06, + 0.000241, 2e-06, 1e-06, 0.000242, 4e-06, 1e-06, 0.000241, 2e-06, + 1e-06, 0.000242, 4e-06, 1e-06, 0.00024, 4e-06, 1e-06, 0.000243, + 1.6e-05, 2e-06, 0.000225, 1.2e-05, 2e-06, 0.000231, 1.5e-05, + 0.00023, 1.1e-05, 2e-06, 0.000231, 1.1e-05, 0.000237, 1.4e-05, + 0.000219, 4e-06, 2e-06, 0.000241, 5e-06, 0.000245, 3e-06, 0.000247, + 6e-06, 3e-06, 0.000229, 5e-06, 0.000238, 6e-06, 3e-06, 0.000244, + 1.3e-05, 0.000243, 2e-06, 0.000222, 0.000245, 3e-06, 2e-06, + 0.000239, 3e-06, 3e-06, 0.000238, 1e-06, 1e-06, 0.000244, 3e-06, + 2e-06, 0.000239, 2e-06, 0.000244, 1e-06, 0.000244, 0.000245, + 0.000255, 0.000243, 0.000251, 1.6e-05, 0.000231, 1.3e-05, 0.000228, + 1.2e-05, 0.000238, 5e-06, 0.000235, 1.3e-05, 0.000192, 7.8e-05, + 1.4e-05, 9.8e-05, 9.7e-05, 0.000236, 0.000256, 0.000247, 2e-05, + 8.4e-05, 1.2e-05, 0.000104, 6.9e-05, 1.3e-05, 0.000179, 0.000245, + 0.000256, 1e-06, 9.2e-05, 0.000124, 1.7e-05, 0.000242, 0.000143, + 1.7e-05, 0.064764, 0.268533, 0.000247, 0.000117, 4.6e-05, 0.0001, + 0.00026, 1.3e-05, 7.8e-05, 0.000413, 7.499999999999999e-05, + 0.000187, 7.6e-05, 0.00019, 0.015809, 0.000237, 4e-05, 2.3e-05, + 0.000115, 0.000268, 9e-06, 3.1e-05, 0.000317, 0.000248, 0.00025, + 0.000111, 0.00018, 3.2e-05, 0.000196, 5.3e-05, 0.000188, 4.7e-05, + 0.000197, 6.1e-05, 0.000184, 6.8e-05, 0.000187, 0.03969, 0.401298, + 0.191103, 0.038273, 0.155567, 2.8e-05, 0.000256, + 6.600000000000001e-05, 1.2e-05, 0.000205, 1.5e-05, 0.413707, + 0.02753, 0.142191, 0.120225, 0.761589, 0.148513, + 0.07999199999999999, 0.443199, 1.476141, 0.380089, 0.005695, + 0.000311, 1.2e-05, 0.008484999999999999, 0.849543, 0.00359, + 0.751508, 1.292865, 0.179771, 0.5266, 0.366045, 2e-05, 1.03151, + 1.2e-05, 0.6017670000000001, 0.705453, 1.29376, 0.388697, 0.000119, + 0.000292, 1.4e-05, 7e-06, 0.000235, 1e-05, 0.171773, + 0.07598100000000001, 0.310302, 0.0004, 1.7e-05, 8.1e-05, 0.000385, + 0.000118, 0.000302, 0.000114, 0.000281, 2.9e-05, 0.000209, 2.7e-05, + 0.000239, 2.5e-05, 0.000212, 6e-05, 0.000224, 9.1e-05, 0.000233, + 1.9e-05, 0.000198, 1.9e-05, 0.000289, 0.000267, 0.000198, 6e-05, + 0.000195, 7.6e-05, 3e-06, 2e-06, 1e-06, 2e-06, 2e-06, 6.9e-05, + 0.000555, 0.000244, 0.000241, 0.039375, 0.000124, 0.000288, + 9.899999999999999e-05, 3e-06, 6.2e-05, 0.000571, 0.048884, 0.000149, + 1.4e-05, 6e-06, 6e-06, 3.3e-05, 1.6e-05, 7e-06, 2.5e-05, 0.000324, + 0.000219, 9e-06, 0.000153, 0.000128, 0.00011, 0.000155, 9e-06, + 0.00017, 7.3e-05, 0.037596, 0.027548, 0.000148, 0.00018, 0.016617, + 7.499999999999999e-05, 0.000234, 3.3e-05, 0.000171, 2.8e-05, + 0.000231, 3.5e-05, 0.00019, 2.8e-05, 0.000209, 0.039791, 0.832296, + 1.999254, 0.048807, 0.016688, 0.103137, 0.855847, 0.655344, + 0.000661, 0.013452, 0.168439, 0.136821, 0.025272, 9e-06, + 0.007948999999999999, 0.037041, 0.047981, 0.008460000000000001, + 0.04047, 0.009528, 0.020497, 0.072979, 0.009079, 0.11388, 0.023627, + 0.016839, 0.235363, 0.200238, 0.259802, 0.133895, 0.19443, 0.003572, + 0.124423, 0.003563, 0.37003, 0.040397, 0.3915, 0.000331, 1.7e-05, + 0.186427, 0.003647, 0.000144, 0.004702, 0.542918, 0.227775, + 0.641863, 0.034463, 0.016594, 0.419727, 0.000376, 3.6e-05, 0.000115, + 0.000327, 0.0005330000000000001, 0.00028, 0.000207, 0.000324, + 0.000296, 1e-05, 7e-06, 4.2e-05, 0.000562, 0.010122, 3.8e-05, + 0.018846, 0.000187, 0.000264, 0.000181, 0.000292, 0.000118, + 0.000469, 0.01084, 0.000237, 3.8e-05, 0.019239, 2.8e-05, 0.000227, + 0.0001, 0.000213, 0.000112, 0.000241, 0.000121, 0.000312, 0.000149, + 0.000209, 0.000133, 0.000296, 0.000132, 0.000214, 0.00166, 0.02373, + 0.001922, 4e-06, 4.3e-05, 3e-06, 5.1e-05, 3e-06, 5.6e-05, 2e-06, + 5.4e-05, 1e-06, 0.000392, 8e-06, 1e-06, 4.8e-05, 3e-06, 3.7e-05, + 2e-06, 0.000158, 1e-05, 2e-06, 1e-06, 4.7e-05, 0.000205, 3e-06, + 1e-06, 1e-06, 0.000516, 0.000201, 0.000213, 0.000308, 0.000241, + 0.00026, 0.000234, 0.169798, 8.500000000000001e-05, 0.0003, + 0.000144, 3e-06, 2e-06, 6.8e-05, 0.000589, 0.03856, 0.035385, + 0.000115, 0.000179, 5.8e-05, 0.000143, 0.000343, 0.000129, 0.000214, + 7.2e-05, 0.000288, 8.1e-05, 0.000203, 5.1e-05, 0.000369, + 9.500000000000001e-05, 0.000176, 0.001365, 0.013006, 0.001368, + 3e-06, 1e-06, 1e-06, 1e-06, 2e-06, 5.2e-05, 2e-06, 6.3e-05, 1.3e-05, + 1e-06, 1e-06, 6.7e-05, 2e-06, 1e-06, 4.3e-05, 4e-06, 6.1e-05, 1e-06, + 1e-06, 7.1e-05, 2e-06, 7e-06, 0.0002, 0.000255, 0.000229, 0.000516, + 0.000282, 0.000244, 0.000256, 0.000238, 0.000242, 0.000245, + 0.029151, 8.3e-05, 0.000294, 0.000143, 5e-06, 2e-06, 6.4e-05, + 0.000604, 0.012818, 0.00022, 0.019331, 0.000117, 0.000224, 0.000222, + 0.000234, 7.6e-05, 0.000216, 6.7e-05, 0.00028, 7.1e-05, 0.000219, + 4.5e-05, 0.000249, 6.7e-05, 0.000193, 0.001358, 0.013339, 0.001356, + 4e-06, 1e-06, 1e-06, 1e-06, 2e-06, 1e-06, 3.5e-05, 1e-06, 3.2e-05, + 6e-06, 6.8e-05, 1e-06, 1e-06, 4e-05, 7e-06, 1.5e-05, 2.7e-05, 5e-06, + 3.2e-05, 6e-06, 2.5e-05, 3e-05, 0.000278, 0.000251, 0.000215, + 0.000489, 0.000514, 0.000257, 0.000257, 0.000243, 0.000218, + 0.010181, 0.001256, 3e-05, 0.017594, 6.499999999999999e-05, + 0.000246, 0.000173, 4e-06, 1e-06, 6.499999999999999e-05, 0.000554, + 0.032475, 0.000117, 0.000258, 0.00054, 0.000265, 0.000146, 0.000199, + 6.9e-05, 0.000292, 0.000126, 0.000205, 0.000109, 0.000287, 0.000119, + 0.00021, 0.001505, 0.01251, 0.001603, 3e-06, 2e-06, 1e-06, 1e-06, + 2e-06, 1e-06, 4.5e-05, 3e-06, 6.7e-05, 1.2e-05, 1e-06, 1e-06, + 6.7e-05, 1.9e-05, 1e-06, 1e-06, 1e-05, 1.9e-05, 5.9e-05, 2e-06, + 9.3e-05, 2e-06, 0.000219, 0.000245, 0.000208, 0.000262, 0.000498, + 0.000251, 0.000244, 0.000246, 0.000244, 0.000247, 0.02889, 8.1e-05, + 0.000216, 0.000107, 3e-06, 2e-06, 6.9e-05, 0.0005820000000000001, + 0.01628, 0.00018, 5.4e-05, 0.000269, 0.015699, 2.2e-05, 0.000102, + 0.000347, 0.00041, 0.000227, 7.7e-05, 0.0002, 6.2e-05, 0.000236, + 4.8e-05, 0.00018, 7.499999999999999e-05, 0.000302, 9.2e-05, + 0.000167, 0.001491, 0.012937, 0.001596, 3e-06, 2e-06, 2e-06, 1e-06, + 2e-06, 2e-06, 2e-06, 1e-06, 3.4e-05, 3e-06, 7.499999999999999e-05, + 1.8e-05, 1e-06, 1e-06, 1e-06, 6e-05, 2e-06, 9e-06, 5.3e-05, 5e-06, + 2e-05, 1e-05, 0.000295, 0.000242, 0.000245, 0.000522, 0.000488, + 0.000247, 0.000243, 0.000246, 0.000246, 0.028895, 8.2e-05, 0.000303, + 0.000144, 5e-06, 2e-06, 6.8e-05, 0.000595, 0.009254, 0.027474, + 0.012253, 0.000107, 0.000184, 5.8e-05, 0.000119, 0.000216, 4e-05, + 0.000201, 2.2e-05, 0.000263, 4.1e-05, 0.000208, + 6.999999999999999e-05, 0.000266, 3.7e-05, 0.000167, 0.001494, + 0.013389, 0.001558, 4e-06, 2e-06, 1e-06, 2e-06, 1e-06, 1e-06, + 3.8e-05, 3e-06, 6.1e-05, 1e-06, 1e-06, 4.2e-05, 4e-06, 5.6e-05, + 4e-06, 1e-06, 3e-05, 8e-06, 5.4e-05, 1e-06, 1e-06, 2.6e-05, + 0.000256, 0.000241, 0.000244, 0.000553, 0.000246, 0.00022, 0.00024, + 0.000244, 0.000247, 0.000213, 0.028935, 8.899999999999999e-05, + 0.000214, 8.2e-05, 4e-06, 2e-06, 5.9e-05, 0.000562, 0.032548, + 0.000119, 0.000226, 0.0003, 0.000213, 4e-05, 0.000167, 3.3e-05, + 0.000333, 0.000132, 0.000208, 9.1e-05, 0.000296, 0.000118, 0.000181, + 0.00152, 0.013032, 0.001587, 4e-06, 2e-06, 1e-06, 2e-06, 2e-06, + 2e-06, 3.8e-05, 2e-06, 8.1e-05, 1e-06, 0, 1.6e-05, 1e-06, 5e-05, + 4e-06, 5.6e-05, 1e-06, 1e-06, 3.1e-05, 9e-06, 2.8e-05, 9e-06, + 0.00026, 0.000242, 0.000249, 0.000486, 0.000245, 0.000245, 0.000348, + 0.000419, 0.000279, 0.028802, 8.3e-05, 0.000286, 0.000115, 4e-06, + 2e-06, 5.9e-05, 0.000559, 0.000241, 0.002101, 3.5e-05, 0.030066, + 0.000106, 0.000205, 0.001807, 0.000205, 7.2e-05, 0.000191, 3e-05, + 0.000302, 0.000137, 0.000201, 8.899999999999999e-05, 0.000306, + 0.000116, 0.000325, 0.001743, 0.011198, 0.001645, 3e-06, 2e-06, + 2e-06, 1e-06, 2e-06, 1e-06, 1e-05, 3.5e-05, 2e-06, 6.7e-05, 2e-06, + 0, 4.5e-05, 8e-06, 2.2e-05, 3.3e-05, 8e-06, 7.1e-05, 1.4e-05, 1e-06, + 1e-06, 2.7e-05, 0.000255, 0.00024, 0.000243, 0.0005240000000000001, + 0.000242, 0.000246, 0.000282, 0.000452, 0.000251, 0.045419, + 8.500000000000001e-05, 0.000254, 6.1e-05, 2e-06, 3e-06, 6.9e-05, + 0.000559, 0.032483, 7.2e-05, 0.000221, 0.000143, 0.000211, 7.4e-05, + 0.0002, 4.9e-05, 0.000301, 0.000129, 0.000212, 9.2e-05, 0.000262, + 6e-05, 0.000198, 0.001624, 0.013169, 0.001673, 3e-06, 1e-06, 1e-06, + 2e-06, 2e-06, 1e-06, 4e-05, 3e-06, 6.4e-05, 1e-06, 1e-06, 4.8e-05, + 6e-06, 1.2e-05, 6.3e-05, 2e-06, 5.2e-05, 2e-06, 1e-06, 0, 3.5e-05, + 1e-06, 0.000295, 0.000239, 0.000243, 0.000492, 0.000243, 0.000278, + 0.00031, 0.000424, 0.000219, 0.028386, 0.000228, 5.4e-05, 0.000213, + 3.5e-05, 0.000238, 0.007959000000000001, 2.2e-05, 7.1e-05, 0.000481, + 0.000111, 4e-06, 1e-06, 6.8e-05, 0.000623, 0.038715, 0.010124, + 0.000116, 0.000228, 6.2e-05, 0.002913, 0.000265, 2.1e-05, 0.000179, + 1.5e-05, 1.3e-05, 0.000229, 3.9e-05, 0.000196, 3.5e-05, 0.000269, + 7.3e-05, 0.000191, 5.3e-05, 0.000247, 2.2e-05, 0.000177, 0.001569, + 0.010022, 0.001705, 3e-06, 2e-06, 1e-06, 1e-06, 3e-06, 1e-06, 1e-06, + 1e-06, 3.6e-05, 2e-06, 6.499999999999999e-05, 1e-06, 1e-06, 6e-05, + 1e-06, 1e-06, 5.6e-05, 1e-06, 4.2e-05, 4e-06, 1.7e-05, 2e-06, + 0.000327, 0.000232, 0.00025, 0.000239, 0.000501, 0.000215, 0.000245, + 0.000244, 0.000246, 0.000325, 0.02873, 8.7e-05, 0.000337, 0.000112, + 3e-06, 2e-06, 5.5e-05, 0.00056, 0.032383, 0.000119, 0.000246, + 0.001701, 0.000251, 0.004701, 0.000195, 0.006657, 0.027981, 7.3e-05, + 0.00024, 0.019186, 0.000333, 7.7e-05, 0.000241, 0.037189, 0.272651, + 0.227517, 6e-06, 2e-06, 2e-06, 1e-06, 2e-06, 3.7e-05, 2e-06, + 3.4e-05, 2e-06, 0.0006089999999999999, 1.8e-05, 3e-06, + 6.499999999999999e-05, 3e-06, 5.6e-05, 9e-06, 3e-06, 1e-06, + 6.499999999999999e-05, 5e-06, 1e-06, 0.000207, 9e-06, 2e-06, 1e-06, + 1e-06, 0.000442, 9e-06, 1e-06, 2e-06, 1e-06, 1e-06, 3.5e-05, + 0.000105, 1.2e-05, 7.499999999999999e-05, 3e-06, 1e-06, 1e-06, + 1e-06, 1e-06, 1e-06, 0.00047, 3e-06, 2e-06, 1e-06, 1e-06, 1e-06, + 1e-06, 0.000255, 4e-06, 1e-06, 2e-06, 1e-06, 1e-06, 2e-06, 0.000462, + 4e-06, 2e-06, 1e-06, 1e-06, 1e-06, 1e-06, 0.000234, 4e-06, 1e-06, + 1e-06, 1e-06, 0.00024, 6e-06, 1e-06, 2e-06, 1e-06, 0.000236, 5e-06, + 1e-06, 1e-06, 1e-06, 0.000256, 4e-06, 1e-06, 1e-06, 1e-06, 0.00022, + 2e-06, 1e-06, 0.000242, 4e-06, 2e-06, 0.000241, 5e-06, 2e-06, + 0.000233, 3e-06, 2e-06, 0.000239, 5e-06, 2e-06, 0.000238, 4e-06, + 1e-06, 0.00024, 5e-06, 1e-06, 0.000239, 3e-06, 1e-06, 0.000245, + 0.000279, 0.000142, 0.000114, 8.7e-05, 5e-06, 0.000157, 0.000225, + 0.000241, 6.2e-05, 0.000185, 6.2e-05, 4e-06, 0.000144, 0.000247, + 0.000255, 6.600000000000001e-05, 0.00017, 7.499999999999999e-05, + 1.5e-05, 0.000168, 0.000258, 6.8e-05, 0.000165, 7.7e-05, 5e-06, + 0.000145, 0.000242, 6.8e-05, 0.00018, 9.8e-05, 5e-06, 0.000169, + 0.000265, 0.000232, 5.3e-05, 2.5e-05, 5e-06, 0.009259, 0.039637, + 0.00865, 2.8e-05, 5e-06, 5e-06, 0.009263, 2.7e-05, 0.087632, 6e-05, + 0.000318, 1.4e-05, 1.6e-05, 2e-06, 5e-06, 4.2e-05, 0.00032, + 0.037569, 0.703033, 0.214916, 0.64994, 0.04462, 0.302059, 0.999951, + 0.137821, 0.039703, 0.027832, 0.000366, 1.7e-05, 0.000111, 0.000346, + 0.000131, 0.00019, 4.5e-05, 4e-06, 2e-06, 3.8e-05, 0.000618, + 0.036949, 0.0052, 0.000138, 0.0002, 0.000107, 9.399999999999999e-05, + 4e-06, 5.9e-05, 0.000579, 0.032121, 0.000118, 1.5e-05, 3.3e-05, + 3e-06, 0.000374, 0.000259, 6e-06, 0.00016, 5.3e-05, + 6.600000000000001e-05, 0.036463, 0.00435, 0.000131, 0.0002, + 0.016695, 0.000124, 0.000254, 7.7e-05, 0.000202, 6.9e-05, 0.000174, + 4.5e-05, 0.000229, 6.7e-05, 0.000176, 0.038503, 0.271061, 0.036943, + 0.003036, 0.307457, 0.23321, 0.029976, 0.000198, 0.62617, 3e-05, + 0.000353, 1.9e-05, 1e-05, 2e-06, 0.109966, 0.651886, 0.213682, + 4.9e-05, 2.7e-05, 0.000236, 1e-05, 4.6e-05, 2e-06, 0.00011, 2e-06, + 0.000152, 1e-06, 0.133729, 0.609789, 0.031985, 2.2e-05, 9.6e-05, + 0.016657, 9.1e-05, 0.000312, 0.000155, 0.000175, 3.6e-05, 0.000326, + 0.000222, 5e-06, 4.3e-05, 4e-06, 3.9e-05, 1.9e-05, 2.4e-05, 2.7e-05, + 2e-06, 5.9e-05, 0.000446, 2e-05, 3e-06, 5.8e-05, 2e-06, 6e-05, + 3e-06, 5.8e-05, 1e-05, 3e-06, 2e-06, 6.2e-05, 0.000145, 4e-06, + 1e-06, 1e-06, 3.7e-05, 0.000475, 4e-06, 2e-06, 1e-06, 2e-06, + 3.5e-05, 9e-06, 3.5e-05, 1e-06, 0.00041, 8e-06, 2e-06, 1e-06, 1e-06, + 2e-06, 1e-06, 3.9e-05, 2e-06, 0.000412, 4e-06, 2e-06, 1e-06, 1e-06, + 2e-06, 1e-06, 1e-06, 3.9e-05, 0.000437, 4e-06, 2e-06, 1e-06, 2e-06, + 1e-06, 1e-06, 2e-06, 1e-06, 0.000476, 4e-06, 2e-06, 1e-06, 2e-06, + 1e-06, 1e-06, 1e-06, 1e-06, 0.000455, 5e-06, 1e-06, 1e-06, 1e-06, + 1e-06, 1e-06, 0.000236, 1e-06, 2e-06, 1e-06, 1e-06, 0.000242, 5e-06, + 2e-06, 1e-06, 0.000302, 7e-06, 1e-06, 2e-06, 0.000174, 4e-06, 2e-06, + 1e-06, 0.000263, 3e-06, 2e-06, 1e-06, 0.000206, 5e-06, 1e-06, 2e-06, + 0.000263, 9e-06, 2e-06, 1e-06, 0.000241, 1.1e-05, 2e-06, 1e-06, + 0.000262, 1.9e-05, 3e-06, 1e-06, 0.000223, 1.9e-05, 0.000224, + 0.000248, 0.000244, 0.000217, 0.00024, 0.000244, 0.000246, 0.000221, + 0.000274, 0.000241, 0.000212, 0.000277, 0.000213, 0.000281, + 0.000242, 0.000245, 0.000244, 0.000246, 0.000244, 0.00025, 0.00024, + 0.000247, 0.000244, 0.000242, 0.001342, 0.000379, 0.034867, + 0.000105, 0.000224, 9.3e-05, 0.000182, 2.7e-05, 0.00026, 3.4e-05, + 0.000379, 0.039497, 0.5442, 0.357434, 1.099135, 0.041655, 0.85846, + 0.09723900000000001, 0.311746, 0.29389, 0.394283, 0.308007, + 0.445888, 0.148214, 0.097913, 0.307962, 0.692039, 0.307906, + 0.593507, 0.056654, 0.041922, 0.033815, 0.274117, + 0.8501919999999999, 4.8e-05, 4e-05, 5.2e-05, 0.000176, 3.5e-05, + 7.8e-05, 4.1e-05, 3.9e-05, 1.4e-05, 3.8e-05, 2e-05, 1e-05, 5e-06, + 3e-05, 1.3e-05, 0.14915, 0.026055, 0.003791, 0.562937, 1.999277, + 1.065992, 0.000143, 0.523873, 0.311931, 0.028066, 0.069262, + 0.239786, 1.759471, 0.246945, 0.756221, 0.697726, 0.000743, + 0.297642, 0.003465, 0.913362, 1.3e-05, 0.0866, 0.081234, 0.025897, + 0.050497, 0.259128, 0.014569, 0.564476, 0.004333, 0.312601, + 0.003488, 0.683764, 0.995133, 0.004903, 0.270456, + 0.6224730000000001, 0.000158, 0.161523, 0.000449, 2e-05, 0.000129, + 0.000428, 0.000134, 0.000275, 0.000131, 0.000373, 8.8e-05, 0.000344, + 7.6e-05, 0.000289, 9.899999999999999e-05, 0.000266, 0.00011, + 0.000218, 0.000129, 0.000203, 3.2e-05, 0.000265, + 8.899999999999999e-05, 0.000232, 7.9e-05, 0.000238, 0.000368, + 0.000233, 0.000121, 0.000228, 0.000164, 5e-06, 3e-06, 2e-06, 1e-06, + 8.8e-05, 0.000565, 0.000216, 0.034407, 0.000127, 0.000216, 5.8e-05, + 3e-06, 5.7e-05, 0.000566, 0.032524, 0.000164, 1.9e-05, 8e-06, + 2.2e-05, 1.4e-05, 1.4e-05, 4.4e-05, 0.000401, 5.6e-05, 9.6e-05, + 7e-06, 0.000133, 8e-06, 0.000248, 1.3e-05, 1e-06, 0.000302, 7.6e-05, + 0.036992, 0.028077, 0.000239, 0.000188, 0.016701, 0.000103, + 0.000332, 0.000134, 0.000307, 0.00013, 0.000323, 0.000139, 0.000212, + 0.000116, 0.000175, 0.037659, 0.132015, 0.312029, 0.297586, + 1.336091, 0.663151, 1.295715, 0.703577, 0.296261, 0.101385, 0.22987, + 0.000233, 0.434696, 0.000419, 3.6e-05, 0.000159, 0.000332, 0.000899, + 0.000119, 0.00019, 0.0352, 0.144224, 0.05227, 0.149337, 0.185305, + 0.000393, 0.184107, 5.8e-05, 0.000343, 0.183449, 0.000685, 0.000284, + 1.5e-05, 0.000102, 0.000448, 0.00037, 1.8e-05, 0.000112, 0.000401, + 0.00012, 0.00029, 0.000119, 0.000243, 6.4e-05, 0.000177, 5.4e-05, + 0.000188, 5.4e-05, 0.000279, 9.2e-05, 0.000504, 0.000166, 1.5e-05, + 5.4e-05, 0.000175, 1.5e-05, 7.7e-05, 0.000155, 1.5e-05, 0.000101, + 0.000401, 0.000268, 0.000207, 0.0001, 0.000145, + 0.0009700000000000001, 7.2e-05, 0.036994, 0.14733, 0.010867, + 0.037774, 0.056528, 0.10916, 0.000384, 1e-05, 2.9e-05, 0.000265, + 0.037653, 0.175573, 1.9e-05, 0.676889, 0.702174, 0.297846, 1.701447, + 0.066121, 5e-06, 5e-06, 2e-06, 2e-06, 3e-06, 1e-06, 2e-06, 3e-06, + 2e-06, 0.000725, 1.9e-05, 2e-06, 1e-06, 1e-06, 1e-06, 1e-06, + 6.999999999999999e-05, 2e-05, 2e-06, 3e-06, 1e-06, 1e-06, 1e-06, + 0.000218, 7e-06, 1e-06, 1e-06, 1e-06, 7.2e-05, 0.000155, 6e-06, + 1e-06, 1e-06, 1e-06, 0.000256, 3e-06, 2e-06, 1e-06, 0.000559, + 1.6e-05, 0.000227, 0.000299, 2.6e-05, 0.00012, 0.000264, 1.5e-05, + 0.000238, 1.5e-05, 1.4e-05, 0.000224, 0.000234, 1.5e-05, 0.000223, + 0.006457, 2.2e-05, 0.016599, 0.07625899999999999, 0.238719, + 0.000408, 0.037377, 0.08400299999999999, 0.003761, 0.124235, + 0.003565, 1.337726, 1.999245, 1.075482, 2.9e-05, 0.000378, 2e-05, + 9e-06, 2e-06, 1.8e-05, 6e-06, 0.923339, 1.999252, 1.10893, 0.003052, + 0.887231, 1.999357, 1.735131, 0.000561, 0.263547, 1.066412, + 0.000189, 6.7e-05, 0.932557, 0.069161, 0.000414, 1.7e-05, 0.000328, + 0.076215, 0.148162, 1.6e-05, 0.000117, 0.119362, 0.000372, 1.7e-05, + 0.7902090000000001, 0.794934, 0.918648, 0.0002, 1.080404, 0.413585, + 3.6e-05, 0.000285, 5.5e-05, 4e-06, 2.5e-05, 5e-06, 0.091326, + 0.003882, 0.572217, 7e-06, 4e-06, 2e-06, 2e-06, 8e-06, 4.3e-05, + 2e-06, 2e-06, 3.3e-05, 0.000581, 2.4e-05, 3e-06, 2e-06, 2e-06, + 2e-06, 2e-06, 0.000154, 6e-06, 2e-06, 2e-06, 2e-06, 0.000242, + 1.4e-05, 3e-06, 6.600000000000001e-05, 9e-06, 0.00015, 6.8e-05, + 2e-05, 0.000135, 6.7e-05, 1.3e-05, 0.000447, 6.3e-05, 6e-06, + 0.000211, 5e-06, 0.000197, 0.000266, 1.8e-05, 1.8e-05, 0.000206, + 5.2e-05, 1e-05, 0.070046, 1.1e-05, 0.844631, 1.999285, 0.37526, + 0.269128, 0.000144, 0.428814, 0.000377, 2e-05, 0.000132, 0.000335, + 0.000146, 0.00032, 0.00014, 0.000315, 9.000000000000001e-05, + 0.000326, 7.8e-05, 0.000348, 0.000138, 0.000309, 0.000191, 0.000269, + 9.2e-05, 0.000228, 8.1e-05, 0.000333, 0.000478, 0.000208, 0.000122, + 0.000251, 0.000158, 6e-06, 3e-06, 2e-06, 2e-06, 3.7e-05, 0.000592, + 0.000243, 0.026904, 0.000156, 0.000307, 0.000234, 1.1e-05, 5.5e-05, + 0.000566, 0.032068, 0.000263, 5.9e-05, 4.3e-05, 4.5e-05, 4.2e-05, + 4.2e-05, 4e-05, 0.000202, 0.000138, 3.5e-05, 2.2e-05, 3e-05, + 0.000149, 0.000149, 3e-05, 5.4e-05, 0.000164, 2.8e-05, 0.000127, + 0.03696, 0.019837, 0.00032, 0.000252, 0.016369, 0.000222, 0.000284, + 0.000233, 0.000254, 0.00022, 0.000266, 0.000239, 0.000251, 0.000192, + 0.000192, 0.037031, 1.7e-05, 0.116766, 0.192277, 0.435377, 0.091586, + 3.1e-05, 0.000373, 1.9e-05, 1e-05, 2e-06, 0.000261, 1.4e-05, + 0.280014, 0.023348, 3.2e-05, 2.9e-05, 0.000314, 2.2e-05, 1.2e-05, + 2e-06, 0.000253, 1.7e-05, 0.975979, 0.62699, 0.37293, + 0.9999749999999999, 0.626341, 0.492913, 0.014529, 0.570348, + 0.076026, 0.235104, 0.003504, 0.606799, 0.126116, 0.99708, 0.306968, + 0.005815, 0.563343, 0.123881, 0.303074, 0.697012, 0.303014, + 0.075444, 0.000103, 0.496756, 0.124502, 0.303213, + 0.06970899999999999, 0.6271060000000001, 0.303057, 0.571645, + 0.428396, 1.129816, 0.441094, 1.216598, 0.184097, 0.598553, + 1.762639, 0.000133, 0.236455, 0.700106, 0.025727, 0.876292, + 0.003488, 0.124494, 0.00356, 0.265654, 0.031362, 0.997795, + 0.9701149999999999, 0.029865, 0.913193, 0.000163, + 0.08662400000000001, 0.969381, 0.030588, 1.000004, 0.968747, + 1.999191, 0.181717, 0.003031, 0.476371, 0.000189, 0.498117, + 0.001757, 0.094473, 0.070796, 0.257284, 0.415613, 0.324319, + 0.103689, 3e-05, 0.000304, 1.9e-05, 1.3e-05, 1e-06, + 0.09349499999999999, 2.2e-05, 0.042766, 0.496198, 0.263337, + 0.138729, 0.028411, 0.088029, 0.031219, 0.388701, 0.324931, + 0.266295, 0.268827, 0.235355, 0.105707, 1.7e-05, 0.123881, 0.381654, + 0.076361, 0.09857399999999999, 0.11765, 0.07213, 0.144328, 0.047985, + 0.061286, 0.019094, 0.083081, 0.000315, 1.3e-05, 0.171753, 0.072075, + 0.152366, 0.031976, 0.46934, 0.197771, 0.036378 }; +#endif //TEST_FUNCTIONS + +}; + +#endif /* DATAPROCESSOR_H_ */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/2d/001dfc91acb500161808a5c64fd2084a b/.metadata/.plugins/org.eclipse.core.resources/.history/2d/001dfc91acb500161808a5c64fd2084a new file mode 100644 index 0000000..d0a7adc --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/2d/001dfc91acb500161808a5c64fd2084a @@ -0,0 +1,1945 @@ +/* + * DataProcessor.cpp + * + * Created on: 14 de jun de 2016 + * Author: apaschoalon + */ + +#include "DataProcessor.h" + +DataProcessor::DataProcessor() +{ + //nothing to do at all +} + +DataProcessor::~DataProcessor() +{ + //nothing to do at all +} + +string DataProcessor::toString(void) +{ + string dataProcessor; + + dataProcessor = + "Used to calculate parameters of network flows; has no state."; + + return (dataProcessor); +} + +int DataProcessor::calculate(const string& experimentName, + DatabaseInterface* databaseInterface, NetworkTrace* netTrace) +{ + + //iterator variables + long int fcounter = 0; + long int nflows = 0; + databaseInterface->getNumberOfFlows(experimentName, &nflows); + +#ifdef DEBUG_DataProcessor_calculate + cout << "DataProcessor::calculate() -> Number of flows = " << nflows << endl; +#endif // DEBUG_DataProcessor_calculate + + //protocol variables + string flowStrData = ""; + long int flowIntData = 0; + double startDalay = 0; //time of the fist packet of the flow + double flowDuration = 0; //duration of the flow + list ttlList; + int ttl = 0; + + //flow-level variables + list relativeTime; //time relative to the 1st packet list + long int nKbytes = 0; //Number of kbytes (bytes/1024) of the + + //packetSize variables + list pslist; //packet-size list + long int ps_mostFrequent = 0; + double mean_packetRate = 0; + + //inter-deperture time variables + StochasticModelFit* modelVet = NULL; + list interArrival_list; // list of inter arrival times of a flow + list interArrival_fileStack; + list interArrival_interFileStack; + list interArrival_interSessionStack; + double lastTime = 0; + double idt = 0; + + for (fcounter = 0; fcounter < nflows; fcounter++) + { + + //new network flow + NetworkFlow* netFlow = NetworkFlow::make_flow("dummy"); + + //TODO checar valor retornado de databaseInterface + + //reset temp vars + flowStrData = ""; + flowIntData = 0; + relativeTime.clear(); + pslist.clear(); + interArrival_list.clear(); + interArrival_fileStack.clear(); + interArrival_interFileStack.clear(); + interArrival_interSessionStack.clear(); + + //load packet-size data + databaseInterface->getFlowData(experimentName, fcounter, "frame__len", + pslist); + + //laod time-relative data + databaseInterface->getFlowData(experimentName, fcounter, + "frame__time_relative", relativeTime); + + //evaluate inter-arrival data + //time relative to the begin of the measurement + lastTime = 0; + for (list::iterator it = relativeTime.begin(); + it != relativeTime.end(); it++) + { + idt = *it - lastTime; + interArrival_list.push_back(idt); + lastTime = *it; + } + + //###################################################################### + //Flow-level Options + //###################################################################### + startDalay = relativeTime.front(); + netFlow->setFlowStartDelay(startDalay); + + flowDuration = relativeTime.back() - relativeTime.front(); + netFlow->setFlowDuration(flowDuration); + + //TODO DS byte configuration -- now it is just set to zero + netFlow->setFlowDsByte(0); + + //flow kbytes + for (list::iterator it = pslist.begin(); it != pslist.end(); + it++) + { + nKbytes = nKbytes + *it; + } + nKbytes = nKbytes / 1024; + + netFlow->setNumberOfKbytes(nKbytes); + netFlow->setNumberOfPackets(relativeTime.size()); + + //###################################################################### + //Protocol Options + //###################################################################### + + // + //L3 protocols + //reference http://www.iana.org/assignments/ieee-802-numbers/ieee-802-numbers.xhtml + // + + databaseInterface->getFlowData(experimentName, fcounter, "eth__type", + &flowIntData); + if (flowIntData == IPV4_CODE) + { //IPv4 + netFlow->setNetworkProtocol(PROTOCOL__IPV4); + databaseInterface->getFlowData(experimentName, fcounter, "ip__src", + &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, "ip__dst", + &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + else if (flowIntData == (ARP_CODE || ARP_CODE_REV)) + { //ARP, Frame Relay ARP + netFlow->setNetworkProtocol(PROTOCOL__ARP); + databaseInterface->getFlowData(experimentName, fcounter, "ip__src", + &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, "ip__dst", + &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + else if (flowIntData == IPV6_CODE) + { //IPv6 + netFlow->setNetworkProtocol(PROTOCOL__ICMPV6); + databaseInterface->getFlowData(experimentName, fcounter, + "ipv6__addr", &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, + "ipv6__dst", &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + else + { //default IPv4 + netFlow->setNetworkProtocol(PROTOCOL__IPV4); + databaseInterface->getFlowData(experimentName, fcounter, "ip__src", + &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, "ip__dst", + &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + + //set ttl as the most frequent + databaseInterface->getFlowData(experimentName, fcounter, "ip__ttl", + ttlList); + //ttl = (int) mode(ttlList); + ttl = (int) mode(&ttlList); + netFlow->setNetworkTtl(ttl); + + // + //L4 Protocols + //reference https://en.wikipedia.org/wiki/List_of_IP_protocol_numbers + // + databaseInterface->getFlowData(experimentName, fcounter, "ip__proto", + &flowIntData); + if (flowIntData == ICMP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__ICMP); + } + else if (flowIntData == TCP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__TCP); + databaseInterface->getFlowData(experimentName, fcounter, + "tcp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "tcp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else if (flowIntData == UDP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__UDP); + databaseInterface->getFlowData(experimentName, fcounter, + "udp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "udp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else if (flowIntData == DCCP_CODE) + { + netFlow->setTransportDstPort(PROTOCOL__DCCP); + databaseInterface->getFlowData(experimentName, fcounter, + "dccp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "dccp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else if (flowIntData == GRE_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__GRE); + //TODO não suportado pelo D-ITG + } + else if (flowIntData == ICMPV6_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__ICMPV6); + } + else if (flowIntData == SCTP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__SCTP); + databaseInterface->getFlowData(experimentName, fcounter, + "sctp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "sctp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else + { //default: UDP + netFlow->setTransportProtocol(PROTOCOL__NULL); + //databaseInterface->getFlowData(experimentName, fcounter, "udp__dstport", &flowIntData); + //netFlow->setL4SrcPort(flowIntData); + //databaseInterface->getFlowData(experimentName, fcounter, "udp__srcport", &flowIntData); + //netFlow->setL4DstPort(flowIntData); + } + + //###################################################################### + //Packet Size Model + //###################################################################### + + // + // Constant model: Just set the packet size as the most frequent value + // + //ps_mostFrequent = mode(pslist); + //ps_mostFrequent = mode(&pslist); + //mean_packetRate = ((double) pslist.size() / flowDuration); + //netFlow->setPsConstant(ps_mostFrequent); + //netFlow->setIdtConstant(mean_packetRate); + + // + // Algorithm to choose the priority order of the models + // 1st version: just the constant model + // + //TODO implement a best algorithm + //netFlow->setPsModel1(MODEL__CONSTANT); + + //###################################################################### + //Inter-arrival-time Model + //###################################################################### + + for (list::iterator it = interArrival_list.begin(); + it != interArrival_list.end(); it++) + { + if(*it < FILE_CUT_TIME) + { + interArrival_fileStack.push_back(*it); + } + else if(*it < SESSION_CUT_TIME) + { + interArrival_interFileStack.push_back(*it); + } + else + { + interArrival_interSessionStack.push_back(*it); + } + } + +#ifdef DEBUG_DataProcessor_interArrival + if(fcounter == 0) + { + string file1 = "fileStack"; + string file2 = "interFileStack"; + string file3 = "interSessionStack"; + save_data_on_file(file1, interArrival_fileStack); + save_data_on_file(file2, interArrival_interFileStack); + save_data_on_file(file3, interArrival_interSessionStack); + } +#endif + + + netFlow->setInterDepertureTimeModels( + fitModels(interArrival_list, "aic")); + + //TODO set the right model + + //netFlow->setIdtModel1(MODEL__CONSTANT); + + //TODO + + //TODO + + //###################################################################### + //Push-back the flow to Trace Flow-list + //###################################################################### + + netTrace->pushback_Netflow(netFlow); + +#ifdef DEBUG_DataProcessor_calculate_loop + cout << fcounter << ": ps_mostFrequent=" << ps_mostFrequent << endl; + cout << fcounter << ": startDalay=" << startDalay << endl; + cout << fcounter << ": mean_packetRate=" << mean_packetRate << endl; + cout << fcounter << ": idt_constant=" << netFlow->getIdtConstant() << endl; +#endif //DEBUG_DataProcessor_calculate_loop +#ifdef DEBUG_DataProcessor_calculate_loop + cout << fcounter << ": netFlow->getTransportProtocol() = " << netFlow->getTransportProtocol() << endl; + cout << fcounter << ": netFlow->getNetworkProtocol() = " << netFlow->getNetworkProtocol() << endl; + cout << fcounter << ": netFlow->getTransportDstPort() = " << netFlow->getTransportDstPort() << endl; + cout << fcounter << ": netFlow->getFlowDsByte() = " << netFlow->getFlowDsByte() << endl; + cout << fcounter << ": netFlow->getNetworkDstAddr() = " << netFlow->getNetworkDstAddr() << endl << endl; + +#endif //DEBUG_DataProcessor_calculate_loop + + } + +#ifdef DEBUG_DataProcessor_calculate + cout << "netTrace->networkFlow.size() = " << netTrace->networkFlow.size() << endl; + cout << "netTrace->getNumberOfFlows() = " << netTrace->getNumberOfFlows() << endl; +#endif //DEBUG_DataProcessor_calculate + + return (0); +} + +StochasticModelFit* DataProcessor::fitModels(list& empiricalData, + const string& criterion) +{ + //constants + const int numberOfModels = 8; + const int m = empiricalData.size(); //empirical data-size + //vars + int counter = 0; + StochasticModelFit* modelVet = NULL; + vec paramVec = zeros(2); + vec infoCriterion = zeros(2); + + modelVet = new StochasticModelFit[numberOfModels]; + + //Inter-arrival vec + vec interArrival = zeros(m); + counter = 0; + for (list::iterator it = empiricalData.begin(); + it != empiricalData.end(); it++) + { + interArrival(counter) = *it + min_time; + counter++; + } + //Empirical CDF of interArrival + vec* interArrivalCdf = empiricalCdf(empiricalData); + + //Weibull + weibullFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[0].aic = infoCriterion(0); + modelVet[0].bic = infoCriterion(1); + modelVet[0].modelName = WEIBULL; + modelVet[0].param1 = paramVec(0); + modelVet[0].param2 = paramVec(1); + modelVet[0].size = numberOfModels; + + //normal + normalFitting(interArrival, paramVec, infoCriterion); + modelVet[1].aic = infoCriterion(0); + modelVet[1].bic = infoCriterion(1); + modelVet[1].modelName = NORMAL; + modelVet[1].param1 = paramVec(0); + modelVet[1].param2 = paramVec(1); + modelVet[1].size = numberOfModels; + + //exponential mean + exponentialMeFitting(interArrival, paramVec, infoCriterion); + modelVet[2].aic = infoCriterion(0); + modelVet[2].bic = infoCriterion(1); + modelVet[2].modelName = EXPONENTIAL_MEAN; + modelVet[2].param1 = paramVec(0); + modelVet[2].param2 = paramVec(1); + modelVet[2].size = numberOfModels; + + //exponential Linear Regression (LR) + exponentialLrFitting(interArrival, *interArrivalCdf, paramVec, + infoCriterion); + modelVet[3].aic = infoCriterion(0); + modelVet[3].bic = infoCriterion(1); + modelVet[3].modelName = EXPONENTIAL_LINEAR_REGRESSION; + modelVet[3].param1 = paramVec(0); + modelVet[3].param2 = paramVec(1); + modelVet[3].size = numberOfModels; + + //pareto linear regression + paretoLrFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[4].aic = infoCriterion(0); + modelVet[4].bic = infoCriterion(1); + modelVet[4].modelName = PARETO_LINEAR_REGRESSION; + modelVet[4].param1 = paramVec(0); + modelVet[4].param2 = paramVec(1); + modelVet[4].size = numberOfModels; + + //pareto maximum likehood + paretoMlhFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[5].aic = infoCriterion(0); + modelVet[5].bic = infoCriterion(1); + modelVet[5].modelName = PARETO_MAXIMUM_LIKEHOOD; + modelVet[5].param1 = paramVec(0); + modelVet[5].param2 = paramVec(1); + modelVet[5].size = numberOfModels; + + //Cauchy + cauchyFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[6].aic = infoCriterion(0); + modelVet[6].bic = infoCriterion(1); + modelVet[6].modelName = CAUCHY; + modelVet[6].param1 = paramVec(0); + modelVet[6].param2 = paramVec(1); + modelVet[6].size = numberOfModels; + + //Constant + constantFitting(interArrival, paramVec, infoCriterion); + modelVet[7].aic = infoCriterion(0); + modelVet[7].bic = infoCriterion(1); + modelVet[7].modelName = CONSTANT; + modelVet[7].param1 = paramVec(0); + modelVet[7].param2 = paramVec(1); + modelVet[7].size = numberOfModels; + + if (criterion == "bic") + { + qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), compareBic); + } + else if (criterion == "aic") + { + qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), compareAic); + } + else + { + cout + << "Error @ DataProcessor::fitModels -> Invalid criterion argument: " + << criterion << endl; + cout << "AIC set as default" << endl; + qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), compareAic); + + } + +#ifdef DEBUG_StochasticModelFit + //if (modelVet[0].modelName == WEIBULL) + //{ + // cout << modelVet[0].modelName << "aic:bic->" << modelVet[0].aic << ":" << modelVet[0].bic + // << " " << "alpha:betha->" << modelVet[0].param1 + // << modelVet[0].param2 << endl; + // string fileName = "weibulldata_" + std::to_string(abs(modelVet[0].aic)); + // save_data_on_file(fileName, interArrival, *interArrivalCdf); + //} +#endif //DEBUG_StochasticModelFit + + delete interArrivalCdf; + + return (modelVet); +} + +inline void DataProcessor::weibullFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //init + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + //linearization + vec y = log(-log(1.0 + diferential - interArrivalCdf)); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double weibull_alpha = theta(1); + double weibull_betha = exp(-theta(0) / theta(1)); + paramVec(0) = weibull_alpha; + paramVec(1) = weibull_betha; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "weibull", paramVec, "aic"); + double bic = informationCriterion(interArrival, "weibull", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; + +} + +inline void DataProcessor::normalFitting(const vec& interArrival, vec& paramVec, + vec& infoCriterion) +{ + double sigma = stddev(interArrival); + double mu = mean(interArrival); + paramVec(0) = mu; + paramVec(1) = sigma; + + //information criterion + double aic = informationCriterion(interArrival, "normal", paramVec, "aic"); + double bic = informationCriterion(interArrival, "normal", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::exponentialLrFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //init + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + //linearization + vec y = log(1.00 + diferential - interArrivalCdf); + //vec y = log(1.00 - interArrivalCdf); + vec x = interArrival; + mat* X = featureMatrix(x); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double exp_lambda = -theta(1); + paramVec(0) = exp_lambda; + paramVec(1) = 0; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "exponential", paramVec, + "aic"); + double bic = informationCriterion(interArrival, "exponential", paramVec, + "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::exponentialMeFitting(const vec& interArrival, + vec& paramVec, vec& infoCriterion) +{ + paramVec(0) = 1.0 / mean(interArrival); + paramVec(1) = 0; + + //information criterion + double aic = informationCriterion(interArrival, "exponential", paramVec, + "aic"); + double bic = informationCriterion(interArrival, "exponential", paramVec, + "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::paretoLrFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //init + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + //linearization + vec y = log(1.00 + diferential - interArrivalCdf); + //vec y = log(1.00 - interArrivalCdf); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double pareto_alpha = -theta(1); + double pareto_xm = interArrival.min(); + paramVec(0) = pareto_alpha; + paramVec(1) = pareto_xm; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "pareto", paramVec, "aic"); + double bic = informationCriterion(interArrival, "pareto", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::paretoMlhFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + double pareto_xm = interArrival.min(); + int m = interArrival.size(); + //vec logDiff = log(interArrival) - log(ones(m) * pareto_xm); + vec logDiff = log(interArrival) - log(pareto_xm); + double pareto_alpha = double(m) / (sum(logDiff)); + paramVec(0) = pareto_alpha; + paramVec(1) = pareto_xm; + + //information criterion + double aic = informationCriterion(interArrival, "pareto", paramVec, "aic"); + double bic = informationCriterion(interArrival, "pareto", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::cauchyFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //initialization + int iterations = 1500; + double learning_rate = 0.01; + int m = interArrival.size(); + double minInterArrival = interArrival.min(); + double y_max = 1.0 / minInterArrival; + vec y = tan(datum::pi * (interArrivalCdf - 0.5)); + for (int i = 0; i < m; i++) + { + //avoid too high numbers when tan() tends to infinity + if (y(i) > y_max) + y(i) = y_max; + } + + //linearization + vec J_history = zeros(iterations); + vec theta = zeros(2); + mat* X = featureMatrix(interArrival); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double cauchy_gamma = double(1.0) / theta(1); + double cauchy_x0 = -theta(0) / theta(1); + paramVec(0) = cauchy_gamma; + paramVec(1) = cauchy_x0; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "cauchy", paramVec, "aic"); + double bic = informationCriterion(interArrival, "cauchy", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; + +} + +void DataProcessor::constantFitting(const vec& interArrival, vec& paramVec, + vec& informationCriterion) +{ + paramVec(0) = mean(interArrival); + paramVec(1) = 0; + informationCriterion(0) = datum::inf; + informationCriterion(1) = datum::inf; +} + +template bool DataProcessor::isEqual(const T* vet1, const T* vet2, + const int size) +{ + for (int i = 0; i < size; i++) + { + if (vet1[i] != vet2[i]) + { + return (false); + } + } + + return (true); +} + +template void DataProcessor::vectorC_to_list(list* theList, + T* vet, int size) +{ + for (int i = 0; i < size; i++) + { + theList->push_back(vet[i]); + } +} + +template +void DataProcessor::quickSort(T* vet, int left, int right) +{ + int p = left; + int i = 0; + T ch = 0; + int j = 0; + + for (i = left + 1; i <= right; i++) + { + j = i; + if (vet[j] < vet[p]) + { + ch = vet[j]; + while (j > p) + { + vet[j] = vet[j - 1]; + j--; + } + vet[j] = ch; + p++; + } + } + if (p - 1 >= left) + quickSort(vet, left, p - 1); + if (p + 1 <= right) + quickSort(vet, p + 1, right); +} + +template +T DataProcessor::mode(list* theList) +{ + T* vet; + int listSize = theList->size(); + int i = 0; + T candidate = 0; + T prev = 0; + int counter = 0; + int largerCounter = 0; + T mode = 0; + vet = new T[listSize]; + + if (listSize == 0) + { + return (0); + } + + i = 0; + + for (typename list::iterator it = theList->begin(); it != theList->end(); + it++) + { + vet[i] = *it; + i++; + } + + quickSort(vet, 0, listSize - 1); + + prev = vet[0]; + largerCounter = 0; + for (i = 0; i < listSize; i++) + { + candidate = vet[i]; + if (candidate == prev) + { + counter++; + if (counter > largerCounter) + { + largerCounter = counter; + mode = vet[i]; + } + } + else + counter = 1; + + prev = vet[i]; + } + + delete[] vet; + + return (mode); +} + +template +inline T* DataProcessor::list_to_cvector(list* theList) +{ + int listSize = theList->size(); + T* vet; + int i = 0; + + vet = new T[listSize]; + if (listSize == 0) + { + return (0); + } + + i = 0; + for (typename list::iterator it = theList->begin(); it != theList->end(); + it++) + { + vet[i] = *it; + i++; + } + + return (vet); +} +template +inline void DataProcessor::delete_cvector(T* c_vet) +{ + delete[] c_vet; +} + +inline vec* DataProcessor::empiricalCdf(list& empiricalData) +{ + double* cvet_empiricalData = list_to_cvector(&empiricalData); + int data_size = empiricalData.size(); + quickSort(cvet_empiricalData, 0, data_size - 1); + double x = cvet_empiricalData[0]; // anchor - fist element; + int i1 = 0; // fist index + int i2 = 0; + double prob = 0; + vec* interArrivalCdf = new vec(zeros(data_size)); + + for (int i = 0; i < data_size; i++) + { + if (cvet_empiricalData[i] > x) + { + i2 = i - 1; + prob = double(i) / data_size; + for (int j = i1; j <= i2; j++) + { + (*interArrivalCdf)(j) = prob; + } + i1 = i; + x = cvet_empiricalData[i]; + } + } + //last position == 1 + (*interArrivalCdf)(data_size - 1) = 1; + + delete_cvector(cvet_empiricalData); + return (interArrivalCdf); +} + +inline mat* DataProcessor::featureMatrix(list& empiricalData) +{ + int data_size = empiricalData.size(); + mat* featureMatrix = new mat(ones(data_size, 2)); + + int i = 0; + for (list::iterator it = empiricalData.begin(); + it != empiricalData.end(); it++) + { + (*featureMatrix)(i, 1) = *it; + i++; + } + + return (featureMatrix); + +} + +inline mat* DataProcessor::featureMatrix(const vec& empiricalData) +{ + int data_size = empiricalData.size(); + mat* featureMatrix = new mat(ones(data_size, 2)); + for (int i = 0; i < data_size; i++) + { + (*featureMatrix)(i, 1) = empiricalData(i); + } + + return (featureMatrix); +} + +inline double DataProcessor::computeCost(const mat& X, const vec& y, + const vec& theta) +{ + double J = .0; + double jtemp = .0; + int m = y.size(); + + for (int i = 0; i < m; i++) + { + jtemp = jtemp + pow(double(theta(0) + theta(1) * X(i, 1) - y(i)), 2); + + } + J = (1.0 / double(2 * m)) * jtemp; + + return (J); +} + +inline void DataProcessor::gradientDescendent(const mat& X, const vec& y, + const double learning_rate, const int num_iters, vec& theta, + vec& J_history) +{ + + int m = y.n_rows; //number of training examples + double temp1 = .0; + double temp2 = .0; + double delta1 = .0; + double delta2 = .0; + vec x = X.col(1); + + for (int i = 0; i < num_iters; i++) + { + temp1 = .0; + temp2 = .0; + delta1 = .0; + delta2 = .0; + + //slope + delta1 = sum(theta(0) + theta(1) * x - y) / double(m); + delta2 = sum((theta(0) + theta(1) * x - y) % x) / double(m); + + //linear regression + temp1 = theta(0) - learning_rate * delta1; + temp2 = theta(1) - learning_rate * delta2; + + theta(0) = temp1; + theta(1) = temp2; + + //Save the cost J in every iteration + J_history(i) = computeCost(X, y, theta); + + } + +} + +inline double DataProcessor::informationCriterion(const vec& data, + const string& functionName, const vec& paramVet, + const string& criterion) +{ + double criterionVal = .0; + double nEstimatedParameters = double(paramVet.size()); + double likehoodLogVal = logLikehood(data, functionName, paramVet); + double logDataLen = log(double(data.size())); + + if (criterion == "aic") + { + criterionVal = 2 * nEstimatedParameters - 2 * likehoodLogVal; + } + else if (criterion == "bic") + { + criterionVal = nEstimatedParameters * logDataLen - 2 * likehoodLogVal; + } + else + { + cout << "\nInvalid functionName or no functionName selected: " + << functionName << endl; + printf("Selecting default criterion: AIC\n"); + criterionVal = 2 * nEstimatedParameters - 2 * likehoodLogVal; + } + + return (criterionVal); + +} + +inline double DataProcessor::logLikehood(const vec& data, + const string& functionName, const vec& paramVet) +{ + double param1 = paramVet(0); + double param2 = paramVet(1); + double m = data.size(); + double L = .0; + int i = 0; + vec data_prob = zeros(size(data)); + + if (functionName == "weibull") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_weibull(data(i), param1, param2); + } + else if (functionName == "normal") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_normal(data(i), param1, param2); + } + else if (functionName == "uniform") + { + data_prob = ones(size(data)) * pdf_uniform(param1, param2); + } + else if (functionName == "exponential") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_exponential(data(i), param1); + } + else if (functionName == "pareto") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_pareto(data(i), param1, param2); + } + else if (functionName == "cauchy") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_cauchy(data(i), param1, param2); + } + else + { + cout << "Warning, no valid stochastic function selected: " + << functionName << endl; + printf("Likehood logarithm seted to -Inf (worst as possible)\n"); + return (datum::inf); + } + + L = sum(log(data_prob)); + return (L); + +} + +inline double DataProcessor::pdf_weibull(double x, double alpha, double betha) +{ + if (x >= 0) + return ((alpha / pow(betha, alpha)) * pow(x, alpha - 1.0) + * exp(-(pow(x / betha, alpha)))); + else + return (.0); +} + +inline double DataProcessor::cdf_weibull(double x, double alpha, double betha) +{ + if (x >= 0) + return (1.0 - exp(-pow(x / betha, alpha))); + else + return (.0); +} + +inline double DataProcessor::pdf_exponential(double x, double lambda) +{ + if (x >= 0) + return (lambda * exp(-lambda * x)); + else + return (.0); + +} + +inline double DataProcessor::cdf_exponential(double x, double lambda) +{ + if (x >= 0) + return (1.0 - exp(-lambda * x)); + else + return (.0); +} + +inline double DataProcessor::pdf_pareto(double x, double alpha, double xm) +{ + if (x >= xm) + return (alpha * pow(xm, alpha) / (pow(x, alpha + 1.0))); + else + return (.0); +} + +inline double DataProcessor::cdf_pareto(double x, double alpha, double xm) +{ + if (x >= xm) + return (1.0 - pow(xm / x, alpha)); + else + return (.0); +} + +inline double DataProcessor::pdf_cauchy(double x, double gamma, double x0) +{ + return (1 / (datum::pi * gamma) + * (pow(gamma, 2) / (pow(x - x0, 2) + pow(gamma, 2)))); +} + +inline double DataProcessor::cdf_cauchy(double x, double gamma, double x0) +{ + return ((1 / datum::pi) * atan((x - x0) / (gamma)) + 0.5); +} + +inline double DataProcessor::pdf_normal(double x, double mu, double sigma) +{ + return (1 / (sqrt(2 * datum::pi) * sigma) + * exp(-0.5 * pow((x - mu) / sigma, 2))); +} + +inline double DataProcessor::cdf_normal(double x, double mu, double sigma) +{ + return (0.5 * (1 + erf((x - mu) / (sigma * sqrt(2))))); +} + +inline double DataProcessor::pdf_uniform(double x_min, double x_max) +{ + return (1.0 / (x_max - x_min)); +} + +inline double DataProcessor::cdf_uniform(double x, double x_min, double x_max) +{ + if (x < x_min) + return (0); + else if (x > x_max) + return (1); + else + return ((x - x_min) / (x_max - x_min)); +} + +#ifdef TEST_FUNCTIONS + +void DataProcessor::printTestResult(string testName, bool result) +{ + string outRes; + if (result == true) + outRes = "ok"; + else + outRes = "failed"; + + cout << testName << ":\t\t" << outRes << endl; +} + +bool DataProcessor::compareDouble(double val1, double val2) +{ + double error = 0; + + error = fabs(double(val1) - double(val2)); + if (error > double(1e-5)) + return (false); + else + return (true); + +} + +bool DataProcessor::compareDouble(double val1, double val2, double acErr) +{ + double error = 0; + + error = fabs(double(val1) - double(val2)); + if (error > double(acErr)) + return (false); + else + return (true); + +} + +bool DataProcessor::compareMat(mat& mat1, mat& mat2) +{ + int mat1_nc = mat1.n_cols; + int mat1_nr = mat1.n_rows; + int mat2_nc = mat2.n_cols; + int mat2_nr = mat2.n_rows; + + if ((mat1_nc != mat2_nc) || (mat1_nr != mat2_nr)) + { + cout << "mat1.n_cols and mat2.n_cols dont match. " << mat1_nc << ":" + << mat2_nc << " " << mat1_nr << ":" << mat2_nr << endl; + return (false); + } + for (int i = 0; i < mat1_nr; i++) + { + for (int j = 0; j < mat1_nc; j++) + { + if (compareDouble(mat1(i, j), mat2(i, j), 1e-5)) + { + //cout << " mat1(" << i << ", " << j << " ) = " << mat1(i,j); + //cout << " mat2(" << i << ", " << j << " ) = " << mat2(i,j); + return (false); + } + } + } + + return (true); +} + +void DataProcessor::save_data_on_file(const string& fileName, const mat& vet1, + const mat& vet2) +{ + string file_out = fileName + ".txt"; + int m = vet1.size(); + + ofstream writeOnFile(file_out, ios::out); + if (!writeOnFile) + { + cerr << "file could not be oppeded" << endl; + exit(1); + } + + for (int i = 0; i < m; i++) + { + writeOnFile << vet1(i) << " " << vet2(i) << endl; + } + +} + +void DataProcessor::save_data_on_file(const string& fileName, list theList) +{ + string file_out = fileName + ".txt"; + int m = theList.size(); + + ofstream writeOnFile(file_out, ios::out); + if (!writeOnFile) + { + cerr << "file could not be oppeded" << endl; + exit(1); + } + + for (list::iterator it = theList.begin(); it != theList.end(); it++) + { + //list::iterator it = randInt_list1.begin(); + writeOnFile << *it << " \n"; + } +} + +bool DataProcessor::test_Mode() +{ + + int randint1[] = + { 1, 8, 1, 13, 9, 2, 1, 15, 4, 3, 10, 4, 13, 2, 14, 7, 7 }; + int randint1_mode = 1; + list l_randint1; + vectorC_to_list(&l_randint1, randint1, 17); + + int randint2[] = + { 5, 3, 6, 8, 14, 9, 11, 9, 11, 15, 8, 7, 12, 13, 14 }; + int randint2_mode = 8; + list l_randint2; + vectorC_to_list(&l_randint2, randint2, 15); + + int randint3[] = + { 9, 10, 6, 3, 13, 13, 14, 7, 7, 1, 5, 1, 8, 5, 9, 2, 3, 4, 5, 6, 6, 6 }; + int randint3_mode = 6; + list l_randint3; + vectorC_to_list(&l_randint3, randint3, 22); + + int randint4[] = + { 2, 1 }; + int randint4_mode = 1; + list l_randint4; + vectorC_to_list(&l_randint4, randint4, 2); + + int randint5[] = + { 1, 1, 1, 1, 1, 2, 2, 2, 2, 2 }; + int randint5_mode = 1; + list l_randint5; + vectorC_to_list(&l_randint5, randint5, 10); + + if (mode(&l_randint1) != randint1_mode) + return (false); + if (mode(&l_randint2) != randint2_mode) + return (false); + if (mode(&l_randint3) != randint3_mode) + return (false); + if (mode(&l_randint4) != randint4_mode) + return (false); + if (mode(&l_randint5) != randint5_mode) + return (false); + + return (true); +} + +bool DataProcessor::test_QuickSort() +{ + int randIntA[] = + { 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; + int randIntA_size = 18; + int randIntA_sorted[] = + { 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9 }; + int randIntB[] = + { 9, 2, 3, 3, 12, 15, 8, 14, 2, 7, 4, 6, 10, 2, 12 }; + int randIntB_size = 15; + int randIntB_sorted[] = + { 2, 2, 2, 3, 3, 4, 6, 7, 8, 9, 10, 12, 12, 14, 15 }; + double randDoubleA[] = + { 0.20872, 12.25501, 5.88210, 2.77962, 8.74916, 2.97454, 4.39641, 12.19733, + 4.66014, 4.52477, 5.19375, 12.11314, 13.35458, 11.56941, 6.59435 }; + int randDoubleA_size = 15; + double randDoubleA_sorted[] = + { 0.20872, 2.77962, 2.97454, 4.39641, 4.52477, 4.66014, 5.19375, 5.88210, + 6.59435, 8.74916, 11.56941, 12.11314, 12.19733, 12.25501, 13.35458 }; + + quickSort(randIntA, 0, randIntA_size - 1); + + if (isEqual(randIntA, randIntA_sorted, randIntA_size) == false) + { + return (false); + } + + quickSort(randIntB, 0, randIntB_size - 1); + if (isEqual(randIntB, randIntB_sorted, randIntB_size) == false) + { + return (false); + } + + quickSort(randDoubleA, 0, randDoubleA_size - 1); + if (isEqual(randDoubleA, randDoubleA_sorted, randDoubleA_size) == false) + { + return (false); + } + + return (true); + +} + +bool DataProcessor::test_list_tocvector() +{ + list randInt_list1 = + { 9, 2, 3, 3, 12, 15, 8, 14, 2, 7, 4, 6, 10, 2, 12 }; + list randInt_list2 = + { 2.2, 2.111, 3.16, 6.66, 13, 2.61 }; + list randInt_list3 = + { 1, 2, 3, 4, 5, 6, 6, 5, 4, 3, 2, 1 }; + + int* cvet1 = NULL; + double* cvet2 = NULL; + int* cvet3 = NULL; + + cvet1 = list_to_cvector(&randInt_list1); + cvet2 = list_to_cvector(&randInt_list2); + cvet3 = list_to_cvector(&randInt_list3); + + int i = 0; + for (list::iterator it = randInt_list1.begin(); + it != randInt_list1.end(); it++) + { + if (cvet1[i] != *it) + { + return (false); + } + //cout << *it << " "; + i++; + } + i = 0; + for (list::iterator it = randInt_list2.begin(); + it != randInt_list2.end(); it++) + { + if (cvet2[i] != *it) + { + return (false); + } + //cout << *it << " "; + i++; + } + i = 0; + for (list::iterator it = randInt_list3.begin(); + it != randInt_list3.end(); it++) + { + if (cvet3[i] != *it) + { + return (false); + } + //cout << *it << " "; + i++; + } + + delete_cvector(cvet1); + delete_cvector(cvet2); + delete_cvector(cvet3); + + return (true); +} + +bool DataProcessor::test_empiricalCdf() +{ + list interArrival_sample = + { 5.0000e-07, 1.5000e-06, 1.5000e-06, 2.5000e-06, 2.5000e-06, 3.5000e-06, + 4.5000e-06, 7.5000e-06, 1.2500e-05, 1.9500e-05, 3.1500e-05, + 4.3500e-05, 6.0500e-05, 7.6500e-05, 1.1050e-04, 1.4050e-04, + 1.8150e-04, 2.1150e-04, 2.3350e-04, 2.4350e-04, 2.5650e-04, + 3.0350e-04, 4.1250e-04, 1.3655e-03, 1.1593e-02, 3.2483e-02, + 8.1235e-02, 2.0939e-01, 5.0755e-01, 1.7351e+00 }; + vec emCdf_octave = + { 0.033333, 0.100000, 0.100000, 0.166667, 0.166667, 0.200000, 0.233333, + 0.266667, 0.300000, 0.333333, 0.366667, 0.400000, 0.433333, + 0.466667, 0.500000, 0.533333, 0.566667, 0.600000, 0.633333, + 0.666667, 0.700000, 0.733333, 0.766667, 0.800000, 0.833333, + 0.866667, 0.900000, 0.933333, 0.966667, 1.000000 }; + //emCdf_octave = emCdf_octave.t(); + + vec* emCdf_cpp = empiricalCdf(interArrival_sample); + + int list_size = interArrival_sample.size(); + for (int i = 0; i < list_size; i++) + { + if (!compareDouble(emCdf_octave(i), (*emCdf_cpp)(i), 1e-6)) + { + cout << "cdf error @ " << "i:" << i << " res:" << (*emCdf_cpp)(i, 0) + << " expected:" << emCdf_octave(i, 0) << endl; + return (false); + } + } + + delete emCdf_cpp; + return (true); +} + +bool DataProcessor::test_computeCost() +{ + list interArrival_sample = + { 5.0000e-07, 1.5000e-06, 1.5000e-06, 2.5000e-06, 2.5000e-06, 3.5000e-06, + 4.5000e-06, 7.5000e-06, 1.2500e-05, 1.9500e-05, 3.1500e-05, + 4.3500e-05, 6.0500e-05, 7.6500e-05, 1.1050e-04, 1.4050e-04, + 1.8150e-04, 2.1150e-04, 2.3350e-04, 2.4350e-04, 2.5650e-04, + 3.0350e-04, 4.1250e-04, 1.3655e-03, 1.1593e-02, 3.2483e-02, + 8.1235e-02, 2.0939e-01, 5.0755e-01, 1.7351e+00 }; + mat* X = featureMatrix(interArrival_sample); + vec emCdf_octave = + { 0.033333, 0.100000, 0.100000, 0.166667, 0.166667, 0.200000, 0.233333, + 0.266667, 0.300000, 0.333333, 0.366667, 0.400000, 0.433333, + 0.466667, 0.500000, 0.533333, 0.566667, 0.600000, 0.633333, + 0.666667, 0.700000, 0.733333, 0.766667, 0.800000, 0.833333, + 0.866667, 0.900000, 0.933333, 0.966667, 1.000000 }; + //emCdf_octave = emCdf_octave.t(); + double J_expected1 = 0.17535; + double J_expected2 = 1.5341; + double J_expected3 = 9.0244; + + vec theta = zeros(2); + + double J = computeCost(*X, emCdf_octave, theta); + if (!compareDouble(J, J_expected1, 0.001)) + { + //cout << "J1 = " << J << "\nJ_expected1 = "<< J_expected1 << endl; + return (false); + } + theta(0) = 2; + theta(1) = 2; + J = computeCost(*X, emCdf_octave, theta); + if (!compareDouble(J, J_expected2, 0.001)) + { + //cout << "J2 = " << J << "\nJ_expected2 = "<< J_expected2 << endl; + return (false); + } + theta(0) = 1.5; + theta(1) = 12; + J = computeCost(*X, emCdf_octave, theta); + if (!compareDouble(J, J_expected3, 0.001)) + { + //cout << "J3 = " << J << "\nJ_expected3 = "<< J_expected3 << endl; + return (false); + } + + delete X; + return (true); +} + +bool DataProcessor::test_informationCriterion() +{ + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + + int m = interArrival.size(); + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + //gradient descendent + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + vec y = log(-log(1.0 + diferential - *interArrivalCdf)); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + double weibull_alpha = theta(1); + double weibull_betha = exp(-theta(0) / theta(1)); + vec paramVec = + { weibull_alpha, weibull_betha }; + double weibull_bic = informationCriterion(interArrival, "weibull", paramVec, + "bic"); + double weibull_aic = informationCriterion(interArrival, "weibull", paramVec, + "aic"); + + if (!compareDouble(weibull_bic, -33712.7042, 0.001)) + return (false); + else if (!compareDouble(weibull_aic, -33724.6567, 0.001)) + return (false); + + return (true); +} + +bool DataProcessor::test_pdf_weibull() +{ + double alpha = 1.5000; + double betha = 0.3; + vec data = + { 0.010000, 2.300000, 0.500000 }; + vec dataprob_eval1 = + { 9.0733e-01, 8.3571e-09, 7.5066e-01 }; + vec dataprob_test = zeros(3); + + dataprob_test(0) = pdf_weibull(data(0), alpha, betha); + dataprob_test(1) = pdf_weibull(data(1), alpha, betha); + dataprob_test(2) = pdf_weibull(data(2), alpha, betha); + + if (compareDouble(dataprob_test(0), dataprob_eval1(0)) + && compareDouble(dataprob_test(1), dataprob_eval1(1)) + && compareDouble(dataprob_test(2), dataprob_eval1(2))) + { + return (true); + } + + return (false); +} + +bool DataProcessor::test_cdf_weibull() +{ + double alpha = 0.5; + double betha = 1.5; + vec data = + { 0.010000, 2.300000, 0.500000 }; + vec dataprob_eval1 = + { 0.078405, 0.710117, 0.438616 }; + vec dataprob_test = zeros(3); + + dataprob_test(0) = cdf_weibull(data(0), alpha, betha); + dataprob_test(1) = cdf_weibull(data(1), alpha, betha); + dataprob_test(2) = cdf_weibull(data(2), alpha, betha); + //cout << dataprob_test(0) << " : " << dataprob_test(1) << " : " << dataprob_test(2) << endl; + + if (compareDouble(dataprob_test(0), dataprob_eval1(0)) + && compareDouble(dataprob_test(1), dataprob_eval1(1)) + && compareDouble(dataprob_test(2), dataprob_eval1(2))) + { + return (true); + } + + return (false); +} + +bool DataProcessor::test_gradientDescendent() +{ + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + + int m = interArrival.size(); + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + //gradient descendent + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + vec y = log(-log(1.0 + diferential - *interArrivalCdf)); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //expected values + double Jlast = 0.083359; + double theta0 = 1.660453; + double theta1 = 0.248811; + + if (!compareDouble(J_history(iterations - 1), Jlast)) + + { + return (false); + } + else if (!compareDouble(theta(0), theta0)) + { + return (false); + } + else if (!compareDouble(theta(1), theta1)) + { + return (false); + } + + delete interArrivalCdf; + delete X; + return (true); + +} + +bool DataProcessor::test_pdf_exponential() +{ + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double lambda1 = 0.50000; + vec val1 = + { 0.49751, 0.15832, 0.38940 }; + vec res1 = zeros(3); + + double lambda2 = 3.0; + vec val2 = + { 2.9113366, 0.0030234, 0.6693905 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = pdf_exponential(data(i), lambda1); + res2(i) = pdf_exponential(data(i), lambda2); + + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + + } + + return (true); +} + +bool DataProcessor::test_cdf_exponential() +{ + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double lambda1 = 0.50000; + vec val1 = + { 0.0049875, 0.6833632, 0.2211992 }; + vec res1 = zeros(3); + + double lambda2 = 3.0; + vec val2 = + { 0.029554, 0.998992, 0.776870 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = cdf_exponential(data(i), lambda1); + res2(i) = cdf_exponential(data(i), lambda2); + + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + + return (true); +} + +bool DataProcessor::test_pdf_pareto() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double alpha1 = 0.50000; + double xm1 = 1.0; + vec val1 = + { 0, 0.14334, 0 }; + vec res1 = zeros(3); + double xm2 = 0.00001; + double alpha2 = 3.0; + vec val2 = + { 3.0000e-07, 1.0720e-16, 4.8000e-14 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = pdf_pareto(data(i), alpha1, xm1); + res2(i) = pdf_pareto(data(i), alpha2, xm2); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + + return (true); +} + +bool DataProcessor::test_cdf_pareto() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double alpha1 = 0.50000; + double xm1 = 0.001; + vec val1 = + { 0.68377, 0.97915, 0.95528 }; + vec res1 = zeros(3); + double xm2 = 0.2; + double alpha2 = 1; + vec val2 = + { 0, 0.91304, 0.60000 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = cdf_pareto(data(i), alpha1, xm1); + res2(i) = cdf_pareto(data(i), alpha2, xm2); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + return (true); +} + +bool DataProcessor::test_pdf_cauchy() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + double gamma1 = 0.50000; + double x01 = 0.001; + + vec val1 = + { 0.636414, 0.028752, 0.318947 }; + vec res1 = zeros(3); + double x02 = 2; + double gamma2 = 2; + + vec val2 = + { 0.079976, 0.155653, 0.101859 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = pdf_cauchy(data(i), gamma1, x01); + res2(i) = pdf_cauchy(data(i), gamma2, x02); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + return (true); +} + +bool DataProcessor::test_cdf_cauchy() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + double gamma1 = 0.50000; + double x01 = 0.001; + + vec val1 = + { 0.50573, 0.93183, 0.74968 }; + vec res1 = zeros(3); + double x02 = 2; + double gamma2 = 2; + + vec val2 = + { 0.25080, 0.54739, 0.29517 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = cdf_cauchy(data(i), gamma1, x01); + res2(i) = cdf_cauchy(data(i), gamma2, x02); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + return (true); +} + +bool DataProcessor::test_fitModels() +{ + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + + int m = interArrival.size(); + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + //list of expected values + double weibull_alpha = 0.24881; + double weibull_betha = 0.0012639; + double normal_mu = 0.054792; + double normal_sigma = 0.205602; + double exponentialMe_lambda = 18.250783; + double exponentialLr_lambda = 2.023115; + double paretoLr_alpha = 0.225451; + double paretoLr_xm = 0.000000; + double paretoMlh_alpha = 0.171674; + double paretoMlh_xm = 0.000000; + double cauchy_gamma = 0.000067; + double cauchy_x0 = 0.005750; + double acErr = 0.001; + + vec paramVec = zeros(2); + vec infoCriterion = zeros(2); + + weibullFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), weibull_alpha, acErr)) + { + cout << "weibullFitting alpha" << endl; + return (false); + } + if (!compareDouble(paramVec(1), weibull_betha, acErr)) + { + cout << "weibullFitting betha" << endl; + return (false); + } + + normalFitting(interArrival, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), normal_mu, acErr)) + { + cout << "normalFitting mu" << endl; + return (false); + } + if (!compareDouble(paramVec(1), normal_sigma, acErr)) + { + cout << "normalFitting sigma" << endl; + return (false); + } + + exponentialMeFitting(interArrival, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), exponentialMe_lambda, acErr)) + { + cout << "exponentialLrFitting lambda" << endl; + return (false); + } + + exponentialLrFitting(interArrival, *interArrivalCdf, paramVec, + infoCriterion); + if (!compareDouble(paramVec(0), exponentialLr_lambda, acErr)) + { + cout << exponentialLr_lambda << ":" << paramVec(0) << endl; + cout << "exponentialLrFitting lambda" << endl; + return (false); + } + + paretoLrFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), paretoLr_alpha, acErr)) + { + cout << "paretoLrFitting alpha" << endl; + return (false); + } + if (!compareDouble(paramVec(1), paretoLr_xm, acErr)) + { + cout << "paretoLrFitting xm" << endl; + return (false); + } + + paretoMlhFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), paretoMlh_alpha, acErr)) + { + cout << "paretoMlhFitting alpha" << endl; + return (false); + } + if (!compareDouble(paramVec(1), paretoMlh_xm, acErr)) + { + cout << "paretoMlhFitting xm" << endl; + return (false); + } + + cauchyFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), cauchy_gamma, acErr)) + { + cout << "cauchyFitting" << endl; + return (false); + } + if (!compareDouble(paramVec(1), cauchy_x0, acErr)) + { + return (false); + } + + delete interArrivalCdf; + + return (true); +} + +bool DataProcessor::test_modelSelection() +{ + + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + int m = interArrival.size(); + + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + StochasticModelFit* modelVet = NULL; + modelVet = fitModels(list_interArrival, "aic"); + + //int numberOfModels = modelVet[0].size; + //for (int i = 0; i < numberOfModels; i++) + // cout << modelVet[i].modelName << " " << "modelVet[" << i << "] = " + // << modelVet[i].aic << endl; + + delete interArrivalCdf; + delete[] modelVet; + return (true); +} + +#endif //TEST_FUNCTIONS diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/36/909fc6c28ab500161808a5c64fd2084a b/.metadata/.plugins/org.eclipse.core.resources/.history/36/909fc6c28ab500161808a5c64fd2084a new file mode 100644 index 0000000..63b3f57 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/36/909fc6c28ab500161808a5c64fd2084a @@ -0,0 +1,1894 @@ +/* + * DataProcessor.cpp + * + * Created on: 14 de jun de 2016 + * Author: apaschoalon + */ + +#include "DataProcessor.h" + +DataProcessor::DataProcessor() +{ + //nothing to do at all +} + +DataProcessor::~DataProcessor() +{ + //nothing to do at all +} + +string DataProcessor::toString(void) +{ + string dataProcessor; + + dataProcessor = + "Used to calculate parameters of network flows; has no state."; + + return (dataProcessor); +} + +int DataProcessor::calculate(const string& experimentName, + DatabaseInterface* databaseInterface, NetworkTrace* netTrace) +{ + + //iterator variables + long int fcounter = 0; + long int nflows = 0; + databaseInterface->getNumberOfFlows(experimentName, &nflows); + +#ifdef DEBUG_DataProcessor_calculate + cout << "DataProcessor::calculate() -> Number of flows = " << nflows << endl; +#endif // DEBUG_DataProcessor_calculate + + //protocol variables + string flowStrData = ""; + long int flowIntData = 0; + double startDalay = 0; //time of the fist packet of the flow + double flowDuration = 0; //duration of the flow + list ttlList; + int ttl = 0; + + //flow-level variables + list relativeTime; //time relative to the 1st packet list + long int nKbytes = 0; //Number of kbytes (bytes/1024) of the + + //packetSize variables + list pslist; //packet-size list + long int ps_mostFrequent = 0; + double mean_packetRate = 0; + + //inter-deperture time variables + StochasticModelFit* modelVet = NULL; + list interArrival_list; + double lastTime = 0; + double idt = 0; + + for (fcounter = 0; fcounter < nflows; fcounter++) + { + + //new network flow + NetworkFlow* netFlow = NetworkFlow::make_flow("dummy"); + + //TODO chegar valor retornado de databaseInterface + + //reset temp vars + flowStrData = ""; + flowIntData = 0; + relativeTime.clear(); + pslist.clear(); + interArrival_list.clear(); + + //load packet-size data + databaseInterface->getFlowData(experimentName, fcounter, "frame__len", + pslist); + + //laod time-relative data + databaseInterface->getFlowData(experimentName, fcounter, + "frame__time_relative", relativeTime); + + //evaluate inter-arrival data + //time relative to the beguin of the measurement + lastTime = 0; + for (list::iterator it = relativeTime.begin(); + it != relativeTime.end(); it++) + { + idt = *it - lastTime; + interArrival_list.push_back(idt); + lastTime = *it; + } + + //###################################################################### + //Flow-level Options + //###################################################################### + startDalay = relativeTime.front(); + netFlow->setFlowStartDelay(startDalay); + flowDuration = relativeTime.back() - relativeTime.front(); + netFlow->setFlowDuration(flowDuration); + + //TODO DS byte configuration -- now just + netFlow->setFlowDsByte(0); + + //flow kbytes + for (list::iterator it = pslist.begin(); it != pslist.end(); + it++) + { + nKbytes = nKbytes + *it; + } + nKbytes = nKbytes / 1024; + + netFlow->setNumberOfKbytes(nKbytes); + netFlow->setNumberOfPackets(relativeTime.size()); + + //###################################################################### + //Protocol Options + //###################################################################### + + // + //L3 protocols + //reference http://www.iana.org/assignments/ieee-802-numbers/ieee-802-numbers.xhtml + // + + databaseInterface->getFlowData(experimentName, fcounter, "eth__type", + &flowIntData); + if (flowIntData == IPV4_CODE) + { //IPv4 + netFlow->setNetworkProtocol(PROTOCOL__IPV4); + databaseInterface->getFlowData(experimentName, fcounter, "ip__src", + &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, "ip__dst", + &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + else if (flowIntData == (ARP_CODE || ARP_CODE_REV)) + { //ARP, Frame Relay ARP + netFlow->setNetworkProtocol(PROTOCOL__ARP); + databaseInterface->getFlowData(experimentName, fcounter, "ip__src", + &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, "ip__dst", + &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + else if (flowIntData == IPV6_CODE) + { //IPv6 + netFlow->setNetworkProtocol(PROTOCOL__ICMPV6); + databaseInterface->getFlowData(experimentName, fcounter, + "ipv6__addr", &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, + "ipv6__dst", &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + else + { //default IPv4 + netFlow->setNetworkProtocol(PROTOCOL__IPV4); + databaseInterface->getFlowData(experimentName, fcounter, "ip__src", + &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, "ip__dst", + &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + + //set ttl as the most frequent + databaseInterface->getFlowData(experimentName, fcounter, "ip__ttl", + ttlList); + //ttl = (int) mode(ttlList); + ttl = (int) mode(&ttlList); + netFlow->setNetworkTtl(ttl); + + // + //L4 Protocols + //reference https://en.wikipedia.org/wiki/List_of_IP_protocol_numbers + // + databaseInterface->getFlowData(experimentName, fcounter, "ip__proto", + &flowIntData); + if (flowIntData == ICMP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__ICMP); + } + else if (flowIntData == TCP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__TCP); + databaseInterface->getFlowData(experimentName, fcounter, + "tcp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "tcp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else if (flowIntData == UDP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__UDP); + databaseInterface->getFlowData(experimentName, fcounter, + "udp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "udp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else if (flowIntData == DCCP_CODE) + { + netFlow->setTransportDstPort(PROTOCOL__DCCP); + databaseInterface->getFlowData(experimentName, fcounter, + "dccp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "dccp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else if (flowIntData == GRE_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__GRE); + //TODO não suportado pelo D-ITG + } + else if (flowIntData == ICMPV6_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__ICMPV6); + } + else if (flowIntData == SCTP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__SCTP); + databaseInterface->getFlowData(experimentName, fcounter, + "sctp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "sctp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else + { //default: UDP + netFlow->setTransportProtocol(PROTOCOL__NULL); + //databaseInterface->getFlowData(experimentName, fcounter, "udp__dstport", &flowIntData); + //netFlow->setL4SrcPort(flowIntData); + //databaseInterface->getFlowData(experimentName, fcounter, "udp__srcport", &flowIntData); + //netFlow->setL4DstPort(flowIntData); + } + + //###################################################################### + //Packet Size Model + //###################################################################### + + // + // Constant model: Just set the packet size as the most frequent value + // + //ps_mostFrequent = mode(pslist); + //ps_mostFrequent = mode(&pslist); + //mean_packetRate = ((double) pslist.size() / flowDuration); + //netFlow->setPsConstant(ps_mostFrequent); + //netFlow->setIdtConstant(mean_packetRate); + + // + // Algorithm to choose the priority order of the models + // 1st version: just the constant model + // + //TODO implement a best algorithm + //netFlow->setPsModel1(MODEL__CONSTANT); + + //###################################################################### + //Inter-arrival-time Model + //###################################################################### + netFlow->setInterDepertureTimeModels( + fitModels(interArrival_list, "aic")); + + //TODO set the right model + + //netFlow->setIdtModel1(MODEL__CONSTANT); + + //TODO + + //TODO + + //###################################################################### + //Push-back the flow to Trace Flow-list + //###################################################################### + + netTrace->pushback_Netflow(netFlow); + +#ifdef DEBUG_DataProcessor_calculate_loop + cout << fcounter << ": ps_mostFrequent=" << ps_mostFrequent << endl; + cout << fcounter << ": startDalay=" << startDalay << endl; + cout << fcounter << ": mean_packetRate=" << mean_packetRate << endl; + cout << fcounter << ": idt_constant=" << netFlow->getIdtConstant() << endl; +#endif //DEBUG_DataProcessor_calculate_loop +#ifdef DEBUG_DataProcessor_calculate_loop + cout << fcounter << ": netFlow->getTransportProtocol() = " << netFlow->getTransportProtocol() << endl; + cout << fcounter << ": netFlow->getNetworkProtocol() = " << netFlow->getNetworkProtocol() << endl; + cout << fcounter << ": netFlow->getTransportDstPort() = " << netFlow->getTransportDstPort() << endl; + cout << fcounter << ": netFlow->getFlowDsByte() = " << netFlow->getFlowDsByte() << endl; + cout << fcounter << ": netFlow->getNetworkDstAddr() = " << netFlow->getNetworkDstAddr() << endl << endl; + +#endif //DEBUG_DataProcessor_calculate_loop + + } + +#ifdef DEBUG_DataProcessor_calculate + cout << "netTrace->networkFlow.size() = " << netTrace->networkFlow.size() << endl; + cout << "netTrace->getNumberOfFlows() = " << netTrace->getNumberOfFlows() << endl; +#endif //DEBUG_DataProcessor_calculate + + return (0); +} + +void DataProcessor::save_data_on_file(const string& fileName, + const StochasticModelFit& data) +{ +} + +StochasticModelFit* DataProcessor::fitModels(list& empiricalData, + const string& criterion) +{ + //constants + const int numberOfModels = 8; + const int m = empiricalData.size(); //empirical data-size + //vars + int counter = 0; + StochasticModelFit* modelVet = NULL; + vec paramVec = zeros(2); + vec infoCriterion = zeros(2); + + modelVet = new StochasticModelFit[numberOfModels]; + + //Inter-arrival vec + vec interArrival = zeros(m); + counter = 0; + for (list::iterator it = empiricalData.begin(); + it != empiricalData.end(); it++) + { + interArrival(counter) = *it + min_time; + counter++; + } + //Empirical CDF of interArrival + vec* interArrivalCdf = empiricalCdf(empiricalData); + + //Weibull + weibullFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[0].aic = infoCriterion(0); + modelVet[0].bic = infoCriterion(1); + modelVet[0].modelName = WEIBULL; + modelVet[0].param1 = paramVec(0); + modelVet[0].param2 = paramVec(1); + modelVet[0].size = numberOfModels; + + //normal + normalFitting(interArrival, paramVec, infoCriterion); + modelVet[1].aic = infoCriterion(0); + modelVet[1].bic = infoCriterion(1); + modelVet[1].modelName = NORMAL; + modelVet[1].param1 = paramVec(0); + modelVet[1].param2 = paramVec(1); + modelVet[1].size = numberOfModels; + + //exponential mean + exponentialMeFitting(interArrival, paramVec, infoCriterion); + modelVet[2].aic = infoCriterion(0); + modelVet[2].bic = infoCriterion(1); + modelVet[2].modelName = EXPONENTIAL_MEAN; + modelVet[2].param1 = paramVec(0); + modelVet[2].param2 = paramVec(1); + modelVet[2].size = numberOfModels; + + //exponential Linear Regression (LR) + exponentialLrFitting(interArrival, *interArrivalCdf, paramVec, + infoCriterion); + modelVet[3].aic = infoCriterion(0); + modelVet[3].bic = infoCriterion(1); + modelVet[3].modelName = EXPONENTIAL_LINEAR_REGRESSION; + modelVet[3].param1 = paramVec(0); + modelVet[3].param2 = paramVec(1); + modelVet[3].size = numberOfModels; + + //pareto linear regression + paretoLrFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[4].aic = infoCriterion(0); + modelVet[4].bic = infoCriterion(1); + modelVet[4].modelName = PARETO_LINEAR_REGRESSION; + modelVet[4].param1 = paramVec(0); + modelVet[4].param2 = paramVec(1); + modelVet[4].size = numberOfModels; + + //pareto maximum likehood + paretoMlhFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[5].aic = infoCriterion(0); + modelVet[5].bic = infoCriterion(1); + modelVet[5].modelName = PARETO_MAXIMUM_LIKEHOOD; + modelVet[5].param1 = paramVec(0); + modelVet[5].param2 = paramVec(1); + modelVet[5].size = numberOfModels; + + //Cauchy + cauchyFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[6].aic = infoCriterion(0); + modelVet[6].bic = infoCriterion(1); + modelVet[6].modelName = CAUCHY; + modelVet[6].param1 = paramVec(0); + modelVet[6].param2 = paramVec(1); + modelVet[6].size = numberOfModels; + + //Constant + constantFitting(interArrival, paramVec, infoCriterion); + modelVet[7].aic = infoCriterion(0); + modelVet[7].bic = infoCriterion(1); + modelVet[7].modelName = CONSTANT; + modelVet[7].param1 = paramVec(0); + modelVet[7].param2 = paramVec(1); + modelVet[7].size = numberOfModels; + + if (criterion == "bic") + { + qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), compareBic); + } + else if (criterion == "aic") + { + qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), compareAic); + } + else + { + cout + << "Error @ DataProcessor::fitModels -> Invalid criterion argument: " + << criterion << endl; + cout << "AIC set as default" << endl; + qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), compareAic); + + } + +#ifdef DEBUG_StochasticModelFit + + //if (modelVet[0].modelName == WEIBULL) + //{ + cout << modelVet[0].modelName << "aic:bic->" << modelVet[0].aic << ":" << modelVet[0].bic + << " " << "alpha:betha->" << modelVet[0].param1 + << modelVet[0].param2 << endl; + string fileName = "weibulldata_" + std::to_string(abs(modelVet[0].aic)); + save_data_on_file(fileName, interArrival, *interArrivalCdf); + //} +#endif DEBUG_StochasticModelFit + + delete interArrivalCdf; + + return (modelVet); +} + +inline void DataProcessor::weibullFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //init + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + //linearization + vec y = log(-log(1.0 + diferential - interArrivalCdf)); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double weibull_alpha = theta(1); + double weibull_betha = exp(-theta(0) / theta(1)); + paramVec(0) = weibull_alpha; + paramVec(1) = weibull_betha; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "weibull", paramVec, "aic"); + double bic = informationCriterion(interArrival, "weibull", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; + +} + +inline void DataProcessor::normalFitting(const vec& interArrival, vec& paramVec, + vec& infoCriterion) +{ + double sigma = stddev(interArrival); + double mu = mean(interArrival); + paramVec(0) = mu; + paramVec(1) = sigma; + + //information criterion + double aic = informationCriterion(interArrival, "normal", paramVec, "aic"); + double bic = informationCriterion(interArrival, "normal", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::exponentialLrFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //init + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + //linearization + vec y = log(1.00 + diferential - interArrivalCdf); + //vec y = log(1.00 - interArrivalCdf); + vec x = interArrival; + mat* X = featureMatrix(x); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double exp_lambda = -theta(1); + paramVec(0) = exp_lambda; + paramVec(1) = 0; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "exponential", paramVec, + "aic"); + double bic = informationCriterion(interArrival, "exponential", paramVec, + "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::exponentialMeFitting(const vec& interArrival, + vec& paramVec, vec& infoCriterion) +{ + paramVec(0) = 1.0 / mean(interArrival); + paramVec(1) = 0; + + //information criterion + double aic = informationCriterion(interArrival, "exponential", paramVec, + "aic"); + double bic = informationCriterion(interArrival, "exponential", paramVec, + "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::paretoLrFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //init + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + //linearization + vec y = log(1.00 + diferential - interArrivalCdf); + //vec y = log(1.00 - interArrivalCdf); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double pareto_alpha = -theta(1); + double pareto_xm = interArrival.min(); + paramVec(0) = pareto_alpha; + paramVec(1) = pareto_xm; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "pareto", paramVec, "aic"); + double bic = informationCriterion(interArrival, "pareto", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::paretoMlhFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + double pareto_xm = interArrival.min(); + int m = interArrival.size(); + //vec logDiff = log(interArrival) - log(ones(m) * pareto_xm); + vec logDiff = log(interArrival) - log(pareto_xm); + double pareto_alpha = double(m) / (sum(logDiff)); + paramVec(0) = pareto_alpha; + paramVec(1) = pareto_xm; + + //information criterion + double aic = informationCriterion(interArrival, "pareto", paramVec, "aic"); + double bic = informationCriterion(interArrival, "pareto", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::cauchyFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //initialization + int iterations = 1500; + double learning_rate = 0.01; + int m = interArrival.size(); + double minInterArrival = interArrival.min(); + double y_max = 1.0 / minInterArrival; + vec y = tan(datum::pi * (interArrivalCdf - 0.5)); + for (int i = 0; i < m; i++) + { + //avoid too high numbers when tan() tends to infinity + if (y(i) > y_max) + y(i) = y_max; + } + + //linearization + vec J_history = zeros(iterations); + vec theta = zeros(2); + mat* X = featureMatrix(interArrival); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double cauchy_gamma = double(1.0) / theta(1); + double cauchy_x0 = -theta(0) / theta(1); + paramVec(0) = cauchy_gamma; + paramVec(1) = cauchy_x0; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "cauchy", paramVec, "aic"); + double bic = informationCriterion(interArrival, "cauchy", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; + +} + +void DataProcessor::constantFitting(const vec& interArrival, vec& paramVec, + vec& informationCriterion) +{ + paramVec(0) = mean(interArrival); + paramVec(1) = 0; + informationCriterion(0) = datum::inf; + informationCriterion(1) = datum::inf; +} + +template bool DataProcessor::isEqual(const T* vet1, const T* vet2, + const int size) +{ + for (int i = 0; i < size; i++) + { + if (vet1[i] != vet2[i]) + { + return (false); + } + } + + return (true); +} + +template void DataProcessor::vectorC_to_list(list* theList, + T* vet, int size) +{ + for (int i = 0; i < size; i++) + { + theList->push_back(vet[i]); + } +} + +template +void DataProcessor::quickSort(T* vet, int left, int right) +{ + int p = left; + int i = 0; + T ch = 0; + int j = 0; + + for (i = left + 1; i <= right; i++) + { + j = i; + if (vet[j] < vet[p]) + { + ch = vet[j]; + while (j > p) + { + vet[j] = vet[j - 1]; + j--; + } + vet[j] = ch; + p++; + } + } + if (p - 1 >= left) + quickSort(vet, left, p - 1); + if (p + 1 <= right) + quickSort(vet, p + 1, right); +} + +template +T DataProcessor::mode(list* theList) +{ + T* vet; + int listSize = theList->size(); + int i = 0; + T candidate = 0; + T prev = 0; + int counter = 0; + int largerCounter = 0; + T mode = 0; + vet = new T[listSize]; + + if (listSize == 0) + { + return (0); + } + + i = 0; + + for (typename list::iterator it = theList->begin(); it != theList->end(); + it++) + { + vet[i] = *it; + i++; + } + + quickSort(vet, 0, listSize - 1); + + prev = vet[0]; + largerCounter = 0; + for (i = 0; i < listSize; i++) + { + candidate = vet[i]; + if (candidate == prev) + { + counter++; + if (counter > largerCounter) + { + largerCounter = counter; + mode = vet[i]; + } + } + else + counter = 1; + + prev = vet[i]; + } + + delete[] vet; + + return (mode); +} + +template +inline T* DataProcessor::list_to_cvector(list* theList) +{ + int listSize = theList->size(); + T* vet; + int i = 0; + + vet = new T[listSize]; + if (listSize == 0) + { + return (0); + } + + i = 0; + for (typename list::iterator it = theList->begin(); it != theList->end(); + it++) + { + vet[i] = *it; + i++; + } + + return (vet); +} +template +inline void DataProcessor::delete_cvector(T* c_vet) +{ + delete[] c_vet; +} + +inline vec* DataProcessor::empiricalCdf(list& empiricalData) +{ + double* cvet_empiricalData = list_to_cvector(&empiricalData); + int data_size = empiricalData.size(); + quickSort(cvet_empiricalData, 0, data_size - 1); + double x = cvet_empiricalData[0]; // anchor - fist element; + int i1 = 0; // fist index + int i2 = 0; + double prob = 0; + vec* interArrivalCdf = new vec(zeros(data_size)); + + for (int i = 0; i < data_size; i++) + { + if (cvet_empiricalData[i] > x) + { + i2 = i - 1; + prob = double(i) / data_size; + for (int j = i1; j <= i2; j++) + { + (*interArrivalCdf)(j) = prob; + } + i1 = i; + x = cvet_empiricalData[i]; + } + } + //last position == 1 + (*interArrivalCdf)(data_size - 1) = 1; + + delete_cvector(cvet_empiricalData); + return (interArrivalCdf); +} + +inline mat* DataProcessor::featureMatrix(list& empiricalData) +{ + int data_size = empiricalData.size(); + mat* featureMatrix = new mat(ones(data_size, 2)); + + int i = 0; + for (list::iterator it = empiricalData.begin(); + it != empiricalData.end(); it++) + { + (*featureMatrix)(i, 1) = *it; + i++; + } + + return (featureMatrix); + +} + +inline mat* DataProcessor::featureMatrix(const vec& empiricalData) +{ + int data_size = empiricalData.size(); + mat* featureMatrix = new mat(ones(data_size, 2)); + for (int i = 0; i < data_size; i++) + { + (*featureMatrix)(i, 1) = empiricalData(i); + } + + return (featureMatrix); +} + +inline double DataProcessor::computeCost(const mat& X, const vec& y, + const vec& theta) +{ + double J = .0; + double jtemp = .0; + int m = y.size(); + + for (int i = 0; i < m; i++) + { + jtemp = jtemp + pow(double(theta(0) + theta(1) * X(i, 1) - y(i)), 2); + + } + J = (1.0 / double(2 * m)) * jtemp; + + return (J); +} + +inline void DataProcessor::gradientDescendent(const mat& X, const vec& y, + const double learning_rate, const int num_iters, vec& theta, + vec& J_history) +{ + + int m = y.n_rows; //number of training examples + double temp1 = .0; + double temp2 = .0; + double delta1 = .0; + double delta2 = .0; + vec x = X.col(1); + + for (int i = 0; i < num_iters; i++) + { + temp1 = .0; + temp2 = .0; + delta1 = .0; + delta2 = .0; + + //slope + delta1 = sum(theta(0) + theta(1) * x - y) / double(m); + delta2 = sum((theta(0) + theta(1) * x - y) % x) / double(m); + + //linear regression + temp1 = theta(0) - learning_rate * delta1; + temp2 = theta(1) - learning_rate * delta2; + + theta(0) = temp1; + theta(1) = temp2; + + //Save the cost J in every iteration + J_history(i) = computeCost(X, y, theta); + + } + +} + +inline double DataProcessor::informationCriterion(const vec& data, + const string& functionName, const vec& paramVet, + const string& criterion) +{ + double criterionVal = .0; + double nEstimatedParameters = double(paramVet.size()); + double likehoodLogVal = logLikehood(data, functionName, paramVet); + double logDataLen = log(double(data.size())); + + if (criterion == "aic") + { + criterionVal = 2 * nEstimatedParameters - 2 * likehoodLogVal; + } + else if (criterion == "bic") + { + criterionVal = nEstimatedParameters * logDataLen - 2 * likehoodLogVal; + } + else + { + cout << "\nInvalid functionName or no functionName selected: " + << functionName << endl; + printf("Selecting default criterion: AIC\n"); + criterionVal = 2 * nEstimatedParameters - 2 * likehoodLogVal; + } + + return (criterionVal); + +} + +inline double DataProcessor::logLikehood(const vec& data, + const string& functionName, const vec& paramVet) +{ + double param1 = paramVet(0); + double param2 = paramVet(1); + double m = data.size(); + double L = .0; + int i = 0; + vec data_prob = zeros(size(data)); + + if (functionName == "weibull") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_weibull(data(i), param1, param2); + } + else if (functionName == "normal") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_normal(data(i), param1, param2); + } + else if (functionName == "uniform") + { + data_prob = ones(size(data)) * pdf_uniform(param1, param2); + } + else if (functionName == "exponential") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_exponential(data(i), param1); + } + else if (functionName == "pareto") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_pareto(data(i), param1, param2); + } + else if (functionName == "cauchy") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_cauchy(data(i), param1, param2); + } + else + { + cout << "Warning, no valid stochastic function selected: " + << functionName << endl; + printf("Likehood logarithm seted to -Inf (worst as possible)\n"); + return (datum::inf); + } + + L = sum(log(data_prob)); + return (L); + +} + +inline double DataProcessor::pdf_weibull(double x, double alpha, double betha) +{ + if (x >= 0) + return ((alpha / pow(betha, alpha)) * pow(x, alpha - 1.0) + * exp(-(pow(x / betha, alpha)))); + else + return (.0); +} + +inline double DataProcessor::cdf_weibull(double x, double alpha, double betha) +{ + if (x >= 0) + return (1.0 - exp(-pow(x / betha, alpha))); + else + return (.0); +} + +inline double DataProcessor::pdf_exponential(double x, double lambda) +{ + if (x >= 0) + return (lambda * exp(-lambda * x)); + else + return (.0); + +} + +inline double DataProcessor::cdf_exponential(double x, double lambda) +{ + if (x >= 0) + return (1.0 - exp(-lambda * x)); + else + return (.0); +} + +inline double DataProcessor::pdf_pareto(double x, double alpha, double xm) +{ + if (x >= xm) + return (alpha * pow(xm, alpha) / (pow(x, alpha + 1.0))); + else + return (.0); +} + +inline double DataProcessor::cdf_pareto(double x, double alpha, double xm) +{ + if (x >= xm) + return (1.0 - pow(xm / x, alpha)); + else + return (.0); +} + +inline double DataProcessor::pdf_cauchy(double x, double gamma, double x0) +{ + return (1 / (datum::pi * gamma) + * (pow(gamma, 2) / (pow(x - x0, 2) + pow(gamma, 2)))); +} + +inline double DataProcessor::cdf_cauchy(double x, double gamma, double x0) +{ + return ((1 / datum::pi) * atan((x - x0) / (gamma)) + 0.5); +} + +inline double DataProcessor::pdf_normal(double x, double mu, double sigma) +{ + return (1 / (sqrt(2 * datum::pi) * sigma) + * exp(-0.5 * pow((x - mu) / sigma, 2))); +} + +inline double DataProcessor::cdf_normal(double x, double mu, double sigma) +{ + return (0.5 * (1 + erf((x - mu) / (sigma * sqrt(2))))); +} + +inline double DataProcessor::pdf_uniform(double x_min, double x_max) +{ + return (1.0 / (x_max - x_min)); +} + +inline double DataProcessor::cdf_uniform(double x, double x_min, double x_max) +{ + if (x < x_min) + return (0); + else if (x > x_max) + return (1); + else + return ((x - x_min) / (x_max - x_min)); +} + +#ifdef TEST_FUNCTIONS + +void DataProcessor::printTestResult(string testName, bool result) +{ + string outRes; + if (result == true) + outRes = "ok"; + else + outRes = "failed"; + + cout << testName << ":\t\t" << outRes << endl; +} + +bool DataProcessor::compareDouble(double val1, double val2) +{ + double error = 0; + + error = fabs(double(val1) - double(val2)); + if (error > double(1e-5)) + return (false); + else + return (true); + +} + +bool DataProcessor::compareDouble(double val1, double val2, double acErr) +{ + double error = 0; + + error = fabs(double(val1) - double(val2)); + if (error > double(acErr)) + return (false); + else + return (true); + +} + +bool DataProcessor::compareMat(mat& mat1, mat& mat2) +{ + int mat1_nc = mat1.n_cols; + int mat1_nr = mat1.n_rows; + int mat2_nc = mat2.n_cols; + int mat2_nr = mat2.n_rows; + + if ((mat1_nc != mat2_nc) || (mat1_nr != mat2_nr)) + { + cout << "mat1.n_cols and mat2.n_cols dont match. " << mat1_nc << ":" + << mat2_nc << " " << mat1_nr << ":" << mat2_nr << endl; + return (false); + } + for (int i = 0; i < mat1_nr; i++) + { + for (int j = 0; j < mat1_nc; j++) + { + if (compareDouble(mat1(i, j), mat2(i, j), 1e-5)) + { + //cout << " mat1(" << i << ", " << j << " ) = " << mat1(i,j); + //cout << " mat2(" << i << ", " << j << " ) = " << mat2(i,j); + return (false); + } + } + } + + return (true); +} + +void DataProcessor::save_data_on_file(const string& fileName, const mat& vet1, + const mat& vet2) +{ + string file_out = fileName + ".txt"; + int m = vet1.size(); + + ofstream writeOnFile(file_out, ios::out); + if (!writeOnFile) + { + cerr << "file could not be oppeded" << endl; + exit(1); + } + + for (int i = 0; i < m; i++) + { + writeOnFile << vet1(i) << " " << vet2(i) << endl; + } + +} + +bool DataProcessor::test_Mode() +{ + + int randint1[] = + { 1, 8, 1, 13, 9, 2, 1, 15, 4, 3, 10, 4, 13, 2, 14, 7, 7 }; + int randint1_mode = 1; + list l_randint1; + vectorC_to_list(&l_randint1, randint1, 17); + + int randint2[] = + { 5, 3, 6, 8, 14, 9, 11, 9, 11, 15, 8, 7, 12, 13, 14 }; + int randint2_mode = 8; + list l_randint2; + vectorC_to_list(&l_randint2, randint2, 15); + + int randint3[] = + { 9, 10, 6, 3, 13, 13, 14, 7, 7, 1, 5, 1, 8, 5, 9, 2, 3, 4, 5, 6, 6, 6 }; + int randint3_mode = 6; + list l_randint3; + vectorC_to_list(&l_randint3, randint3, 22); + + int randint4[] = + { 2, 1 }; + int randint4_mode = 1; + list l_randint4; + vectorC_to_list(&l_randint4, randint4, 2); + + int randint5[] = + { 1, 1, 1, 1, 1, 2, 2, 2, 2, 2 }; + int randint5_mode = 1; + list l_randint5; + vectorC_to_list(&l_randint5, randint5, 10); + + if (mode(&l_randint1) != randint1_mode) + return (false); + if (mode(&l_randint2) != randint2_mode) + return (false); + if (mode(&l_randint3) != randint3_mode) + return (false); + if (mode(&l_randint4) != randint4_mode) + return (false); + if (mode(&l_randint5) != randint5_mode) + return (false); + + return (true); +} + +bool DataProcessor::test_QuickSort() +{ + int randIntA[] = + { 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; + int randIntA_size = 18; + int randIntA_sorted[] = + { 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9 }; + int randIntB[] = + { 9, 2, 3, 3, 12, 15, 8, 14, 2, 7, 4, 6, 10, 2, 12 }; + int randIntB_size = 15; + int randIntB_sorted[] = + { 2, 2, 2, 3, 3, 4, 6, 7, 8, 9, 10, 12, 12, 14, 15 }; + double randDoubleA[] = + { 0.20872, 12.25501, 5.88210, 2.77962, 8.74916, 2.97454, 4.39641, 12.19733, + 4.66014, 4.52477, 5.19375, 12.11314, 13.35458, 11.56941, 6.59435 }; + int randDoubleA_size = 15; + double randDoubleA_sorted[] = + { 0.20872, 2.77962, 2.97454, 4.39641, 4.52477, 4.66014, 5.19375, 5.88210, + 6.59435, 8.74916, 11.56941, 12.11314, 12.19733, 12.25501, 13.35458 }; + + quickSort(randIntA, 0, randIntA_size - 1); + + if (isEqual(randIntA, randIntA_sorted, randIntA_size) == false) + { + return (false); + } + + quickSort(randIntB, 0, randIntB_size - 1); + if (isEqual(randIntB, randIntB_sorted, randIntB_size) == false) + { + return (false); + } + + quickSort(randDoubleA, 0, randDoubleA_size - 1); + if (isEqual(randDoubleA, randDoubleA_sorted, randDoubleA_size) == false) + { + return (false); + } + + return (true); + +} + +bool DataProcessor::test_list_tocvector() +{ + list randInt_list1 = + { 9, 2, 3, 3, 12, 15, 8, 14, 2, 7, 4, 6, 10, 2, 12 }; + list randInt_list2 = + { 2.2, 2.111, 3.16, 6.66, 13, 2.61 }; + list randInt_list3 = + { 1, 2, 3, 4, 5, 6, 6, 5, 4, 3, 2, 1 }; + + int* cvet1 = NULL; + double* cvet2 = NULL; + int* cvet3 = NULL; + + cvet1 = list_to_cvector(&randInt_list1); + cvet2 = list_to_cvector(&randInt_list2); + cvet3 = list_to_cvector(&randInt_list3); + + int i = 0; + for (list::iterator it = randInt_list1.begin(); + it != randInt_list1.end(); it++) + { + if (cvet1[i] != *it) + { + return (false); + } + //cout << *it << " "; + i++; + } + i = 0; + for (list::iterator it = randInt_list2.begin(); + it != randInt_list2.end(); it++) + { + if (cvet2[i] != *it) + { + return (false); + } + //cout << *it << " "; + i++; + } + i = 0; + for (list::iterator it = randInt_list3.begin(); + it != randInt_list3.end(); it++) + { + if (cvet3[i] != *it) + { + return (false); + } + //cout << *it << " "; + i++; + } + + delete_cvector(cvet1); + delete_cvector(cvet2); + delete_cvector(cvet3); + + return (true); +} + +bool DataProcessor::test_empiricalCdf() +{ + list interArrival_sample = + { 5.0000e-07, 1.5000e-06, 1.5000e-06, 2.5000e-06, 2.5000e-06, 3.5000e-06, + 4.5000e-06, 7.5000e-06, 1.2500e-05, 1.9500e-05, 3.1500e-05, + 4.3500e-05, 6.0500e-05, 7.6500e-05, 1.1050e-04, 1.4050e-04, + 1.8150e-04, 2.1150e-04, 2.3350e-04, 2.4350e-04, 2.5650e-04, + 3.0350e-04, 4.1250e-04, 1.3655e-03, 1.1593e-02, 3.2483e-02, + 8.1235e-02, 2.0939e-01, 5.0755e-01, 1.7351e+00 }; + vec emCdf_octave = + { 0.033333, 0.100000, 0.100000, 0.166667, 0.166667, 0.200000, 0.233333, + 0.266667, 0.300000, 0.333333, 0.366667, 0.400000, 0.433333, + 0.466667, 0.500000, 0.533333, 0.566667, 0.600000, 0.633333, + 0.666667, 0.700000, 0.733333, 0.766667, 0.800000, 0.833333, + 0.866667, 0.900000, 0.933333, 0.966667, 1.000000 }; + //emCdf_octave = emCdf_octave.t(); + + vec* emCdf_cpp = empiricalCdf(interArrival_sample); + + int list_size = interArrival_sample.size(); + for (int i = 0; i < list_size; i++) + { + if (!compareDouble(emCdf_octave(i), (*emCdf_cpp)(i), 1e-6)) + { + cout << "cdf error @ " << "i:" << i << " res:" << (*emCdf_cpp)(i, 0) + << " expected:" << emCdf_octave(i, 0) << endl; + return (false); + } + } + + delete emCdf_cpp; + return (true); +} + +bool DataProcessor::test_computeCost() +{ + list interArrival_sample = + { 5.0000e-07, 1.5000e-06, 1.5000e-06, 2.5000e-06, 2.5000e-06, 3.5000e-06, + 4.5000e-06, 7.5000e-06, 1.2500e-05, 1.9500e-05, 3.1500e-05, + 4.3500e-05, 6.0500e-05, 7.6500e-05, 1.1050e-04, 1.4050e-04, + 1.8150e-04, 2.1150e-04, 2.3350e-04, 2.4350e-04, 2.5650e-04, + 3.0350e-04, 4.1250e-04, 1.3655e-03, 1.1593e-02, 3.2483e-02, + 8.1235e-02, 2.0939e-01, 5.0755e-01, 1.7351e+00 }; + mat* X = featureMatrix(interArrival_sample); + vec emCdf_octave = + { 0.033333, 0.100000, 0.100000, 0.166667, 0.166667, 0.200000, 0.233333, + 0.266667, 0.300000, 0.333333, 0.366667, 0.400000, 0.433333, + 0.466667, 0.500000, 0.533333, 0.566667, 0.600000, 0.633333, + 0.666667, 0.700000, 0.733333, 0.766667, 0.800000, 0.833333, + 0.866667, 0.900000, 0.933333, 0.966667, 1.000000 }; + //emCdf_octave = emCdf_octave.t(); + double J_expected1 = 0.17535; + double J_expected2 = 1.5341; + double J_expected3 = 9.0244; + + vec theta = zeros(2); + + double J = computeCost(*X, emCdf_octave, theta); + if (!compareDouble(J, J_expected1, 0.001)) + { + //cout << "J1 = " << J << "\nJ_expected1 = "<< J_expected1 << endl; + return (false); + } + theta(0) = 2; + theta(1) = 2; + J = computeCost(*X, emCdf_octave, theta); + if (!compareDouble(J, J_expected2, 0.001)) + { + //cout << "J2 = " << J << "\nJ_expected2 = "<< J_expected2 << endl; + return (false); + } + theta(0) = 1.5; + theta(1) = 12; + J = computeCost(*X, emCdf_octave, theta); + if (!compareDouble(J, J_expected3, 0.001)) + { + //cout << "J3 = " << J << "\nJ_expected3 = "<< J_expected3 << endl; + return (false); + } + + delete X; + return (true); +} + +bool DataProcessor::test_informationCriterion() +{ + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + + int m = interArrival.size(); + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + //gradient descendent + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + vec y = log(-log(1.0 + diferential - *interArrivalCdf)); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + double weibull_alpha = theta(1); + double weibull_betha = exp(-theta(0) / theta(1)); + vec paramVec = + { weibull_alpha, weibull_betha }; + double weibull_bic = informationCriterion(interArrival, "weibull", paramVec, + "bic"); + double weibull_aic = informationCriterion(interArrival, "weibull", paramVec, + "aic"); + + if (!compareDouble(weibull_bic, -33712.7042, 0.001)) + return (false); + else if (!compareDouble(weibull_aic, -33724.6567, 0.001)) + return (false); + + return (true); +} + +bool DataProcessor::test_pdf_weibull() +{ + double alpha = 1.5000; + double betha = 0.3; + vec data = + { 0.010000, 2.300000, 0.500000 }; + vec dataprob_eval1 = + { 9.0733e-01, 8.3571e-09, 7.5066e-01 }; + vec dataprob_test = zeros(3); + + dataprob_test(0) = pdf_weibull(data(0), alpha, betha); + dataprob_test(1) = pdf_weibull(data(1), alpha, betha); + dataprob_test(2) = pdf_weibull(data(2), alpha, betha); + + if (compareDouble(dataprob_test(0), dataprob_eval1(0)) + && compareDouble(dataprob_test(1), dataprob_eval1(1)) + && compareDouble(dataprob_test(2), dataprob_eval1(2))) + { + return (true); + } + + return (false); +} + +bool DataProcessor::test_cdf_weibull() +{ + double alpha = 0.5; + double betha = 1.5; + vec data = + { 0.010000, 2.300000, 0.500000 }; + vec dataprob_eval1 = + { 0.078405, 0.710117, 0.438616 }; + vec dataprob_test = zeros(3); + + dataprob_test(0) = cdf_weibull(data(0), alpha, betha); + dataprob_test(1) = cdf_weibull(data(1), alpha, betha); + dataprob_test(2) = cdf_weibull(data(2), alpha, betha); + //cout << dataprob_test(0) << " : " << dataprob_test(1) << " : " << dataprob_test(2) << endl; + + if (compareDouble(dataprob_test(0), dataprob_eval1(0)) + && compareDouble(dataprob_test(1), dataprob_eval1(1)) + && compareDouble(dataprob_test(2), dataprob_eval1(2))) + { + return (true); + } + + return (false); +} + +bool DataProcessor::test_gradientDescendent() +{ + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + + int m = interArrival.size(); + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + //gradient descendent + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + vec y = log(-log(1.0 + diferential - *interArrivalCdf)); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //expected values + double Jlast = 0.083359; + double theta0 = 1.660453; + double theta1 = 0.248811; + + if (!compareDouble(J_history(iterations - 1), Jlast)) + + { + return (false); + } + else if (!compareDouble(theta(0), theta0)) + { + return (false); + } + else if (!compareDouble(theta(1), theta1)) + { + return (false); + } + + delete interArrivalCdf; + delete X; + return (true); + +} + +bool DataProcessor::test_pdf_exponential() +{ + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double lambda1 = 0.50000; + vec val1 = + { 0.49751, 0.15832, 0.38940 }; + vec res1 = zeros(3); + + double lambda2 = 3.0; + vec val2 = + { 2.9113366, 0.0030234, 0.6693905 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = pdf_exponential(data(i), lambda1); + res2(i) = pdf_exponential(data(i), lambda2); + + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + + } + + return (true); +} + +bool DataProcessor::test_cdf_exponential() +{ + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double lambda1 = 0.50000; + vec val1 = + { 0.0049875, 0.6833632, 0.2211992 }; + vec res1 = zeros(3); + + double lambda2 = 3.0; + vec val2 = + { 0.029554, 0.998992, 0.776870 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = cdf_exponential(data(i), lambda1); + res2(i) = cdf_exponential(data(i), lambda2); + + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + + return (true); +} + +bool DataProcessor::test_pdf_pareto() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double alpha1 = 0.50000; + double xm1 = 1.0; + vec val1 = + { 0, 0.14334, 0 }; + vec res1 = zeros(3); + double xm2 = 0.00001; + double alpha2 = 3.0; + vec val2 = + { 3.0000e-07, 1.0720e-16, 4.8000e-14 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = pdf_pareto(data(i), alpha1, xm1); + res2(i) = pdf_pareto(data(i), alpha2, xm2); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + + return (true); +} + +bool DataProcessor::test_cdf_pareto() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double alpha1 = 0.50000; + double xm1 = 0.001; + vec val1 = + { 0.68377, 0.97915, 0.95528 }; + vec res1 = zeros(3); + double xm2 = 0.2; + double alpha2 = 1; + vec val2 = + { 0, 0.91304, 0.60000 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = cdf_pareto(data(i), alpha1, xm1); + res2(i) = cdf_pareto(data(i), alpha2, xm2); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + return (true); +} + +bool DataProcessor::test_pdf_cauchy() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + double gamma1 = 0.50000; + double x01 = 0.001; + + vec val1 = + { 0.636414, 0.028752, 0.318947 }; + vec res1 = zeros(3); + double x02 = 2; + double gamma2 = 2; + + vec val2 = + { 0.079976, 0.155653, 0.101859 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = pdf_cauchy(data(i), gamma1, x01); + res2(i) = pdf_cauchy(data(i), gamma2, x02); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + return (true); +} + +bool DataProcessor::test_cdf_cauchy() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + double gamma1 = 0.50000; + double x01 = 0.001; + + vec val1 = + { 0.50573, 0.93183, 0.74968 }; + vec res1 = zeros(3); + double x02 = 2; + double gamma2 = 2; + + vec val2 = + { 0.25080, 0.54739, 0.29517 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = cdf_cauchy(data(i), gamma1, x01); + res2(i) = cdf_cauchy(data(i), gamma2, x02); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + return (true); +} + +bool DataProcessor::test_fitModels() +{ + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + + int m = interArrival.size(); + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + //list of expected values + double weibull_alpha = 0.24881; + double weibull_betha = 0.0012639; + double normal_mu = 0.054792; + double normal_sigma = 0.205602; + double exponentialMe_lambda = 18.250783; + double exponentialLr_lambda = 2.023115; + double paretoLr_alpha = 0.225451; + double paretoLr_xm = 0.000000; + double paretoMlh_alpha = 0.171674; + double paretoMlh_xm = 0.000000; + double cauchy_gamma = 0.000067; + double cauchy_x0 = 0.005750; + double acErr = 0.001; + + vec paramVec = zeros(2); + vec infoCriterion = zeros(2); + + weibullFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), weibull_alpha, acErr)) + { + cout << "weibullFitting alpha" << endl; + return (false); + } + if (!compareDouble(paramVec(1), weibull_betha, acErr)) + { + cout << "weibullFitting betha" << endl; + return (false); + } + + normalFitting(interArrival, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), normal_mu, acErr)) + { + cout << "normalFitting mu" << endl; + return (false); + } + if (!compareDouble(paramVec(1), normal_sigma, acErr)) + { + cout << "normalFitting sigma" << endl; + return (false); + } + + exponentialMeFitting(interArrival, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), exponentialMe_lambda, acErr)) + { + cout << "exponentialLrFitting lambda" << endl; + return (false); + } + + exponentialLrFitting(interArrival, *interArrivalCdf, paramVec, + infoCriterion); + if (!compareDouble(paramVec(0), exponentialLr_lambda, acErr)) + { + cout << exponentialLr_lambda << ":" << paramVec(0) << endl; + cout << "exponentialLrFitting lambda" << endl; + return (false); + } + + paretoLrFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), paretoLr_alpha, acErr)) + { + cout << "paretoLrFitting alpha" << endl; + return (false); + } + if (!compareDouble(paramVec(1), paretoLr_xm, acErr)) + { + cout << "paretoLrFitting xm" << endl; + return (false); + } + + paretoMlhFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), paretoMlh_alpha, acErr)) + { + cout << "paretoMlhFitting alpha" << endl; + return (false); + } + if (!compareDouble(paramVec(1), paretoMlh_xm, acErr)) + { + cout << "paretoMlhFitting xm" << endl; + return (false); + } + + cauchyFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), cauchy_gamma, acErr)) + { + cout << "cauchyFitting" << endl; + return (false); + } + if (!compareDouble(paramVec(1), cauchy_x0, acErr)) + { + return (false); + } + + delete interArrivalCdf; + + return (true); +} + +bool DataProcessor::test_modelSelection() +{ + + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + int m = interArrival.size(); + + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + StochasticModelFit* modelVet = NULL; + modelVet = fitModels(list_interArrival, "aic"); + + //int numberOfModels = modelVet[0].size; + //for (int i = 0; i < numberOfModels; i++) + // cout << modelVet[i].modelName << " " << "modelVet[" << i << "] = " + // << modelVet[i].aic << endl; + + delete interArrivalCdf; + delete[] modelVet; + return (true); +} + +#endif //TEST_FUNCTIONS diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/49/40b7149babb500161808a5c64fd2084a b/.metadata/.plugins/org.eclipse.core.resources/.history/49/40b7149babb500161808a5c64fd2084a new file mode 100644 index 0000000..2c82a04 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/49/40b7149babb500161808a5c64fd2084a @@ -0,0 +1,91 @@ +/* + * ConstantsDeinition.h + * + * Created on: 4 de jul de 2016 + * Author: apaschoalon + */ + +#ifndef DEFINES_H_ +#define DEFINES_H_ + +/******************************************************************************* + * Defines + ******************************************************************************/ +//Math +#define MEGA_POWER 1000000 + +//Stochastic Models +#define WEIBULL "weibull" +#define NORMAL "normal" +#define EXPONENTIAL_MEAN "exponential-mean" +#define EXPONENTIAL_LINEAR_REGRESSION "exponential-linear-regression" +#define PARETO_LINEAR_REGRESSION "pareto-linear-regression" +#define PARETO_MAXIMUM_LIKEHOOD "pareto-maximum-likehood" +#define CAUCHY "cauchy" +#define CONSTANT "constant" +#define NO_MODEL "no-model-selected" + +// Debug defines +//#define DEBUG 1 // basic debug +//#define DEBUG_DataProcessor_calculate_loop 1 +//#define DEBUG_DataProcessor_calculate 1 +//#define DEBUG_NetworkFlow 1 +//#define DEBUG_flowThread 1 +//#define DEBUG_DatabaseInterface 1 +//#define DEBUG_NetworkTrace_exec 1 + +//Misc +#define TEST_FUNCTIONS 1 //execute regression testes +#define HLINE "----------" +#define TAB "::" + +/******************************************************************************* + * Types + ******************************************************************************/ +typedef unsigned short int protocol; +typedef unsigned short int protocol_code; +typedef unsigned short int stochastic_model; +typedef unsigned int port_number; + +/******************************************************************************* + * Constants + ******************************************************************************/ +//packet analysis features +const double FILE_CUT_TIME = 0.1; +const double SESSION_CUT_TIME = 30; +const int PACKET_SIZE_MODE_CUT_VALUE = 500; + +//protocols +const protocol PROTOCOL__NULL = 0; +const protocol PROTOCOL__ETHERNET = 1; +const protocol PROTOCOL__IPV4 = 2; +const protocol PROTOCOL__IPV6 = 3; +const protocol PROTOCOL__ARP = 4; +const protocol PROTOCOL__ICMP = 5; +const protocol PROTOCOL__ICMPV6 = 6; +const protocol PROTOCOL__TCP = 7; +const protocol PROTOCOL__UDP = 8; +const protocol PROTOCOL__DCCP = 9; +const protocol PROTOCOL__GRE = 10; +const protocol PROTOCOL__SCTP = 11; +const protocol PROTOCOL__HTTP = 12; +const protocol PROTOCOL__HTML = 13; +const protocol PROTOCOL__SMTP = 14; + +//Protocol code +const protocol_code IPV4_CODE = 2048; +const protocol_code ARP_CODE = 2054; +const protocol_code ARP_CODE_REV = 2056; +const protocol_code IPV6_CODE = 34525; +const protocol_code ICMP_CODE = 1; +const protocol_code TCP_CODE = 6; +const protocol_code UDP_CODE = 17; +const protocol_code DCCP_CODE = 33; +const protocol_code GRE_CODE = 47; +const protocol_code ICMPV6_CODE = 58; +const protocol_code SCTP_CODE = 132; + +//Port number +const port_number MAX_TRANSPORT_PORT_NUMBER = 65535; + +#endif /* DEFINES_H_ */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/4c/d02ddb7dabb500161808a5c64fd2084a b/.metadata/.plugins/org.eclipse.core.resources/.history/4c/d02ddb7dabb500161808a5c64fd2084a new file mode 100644 index 0000000..1c4af9d --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/4c/d02ddb7dabb500161808a5c64fd2084a @@ -0,0 +1,105 @@ +/* + * ConstantsDeinition.h + * + * Created on: 4 de jul de 2016 + * Author: apaschoalon + */ + +#ifndef DEFINES_H_ +#define DEFINES_H_ + +/******************************************************************************* + * Defines + ******************************************************************************/ + +/******************************************************************************* + * Types + ******************************************************************************/ +typedef unsigned short int protocol; + +/******************************************************************************* + * Constants + ******************************************************************************/ +//packet analysis features +const double FILE_CUT_TIME = 0.1; +const double SESSION_CUT_TIME = 30; +const int PACKET_SIZE_MODE_CUT_VALUE = 500; + +//protocols +protocol PROTOCOL__NULL = 0; +protocol PROTOCOL__ETHERNET = 1; +protocol PROTOCOL__IPV4 = 2; +protocol PROTOCOL__IPV6 = 3; +protocol PROTOCOL__ARP = 4; +const unsigned short int PROTOCOL__ICMP = 5; +const unsigned short int PROTOCOL__ICMPV6 = 6; +const unsigned short int PROTOCOL__TCP = 7; +const unsigned short int PROTOCOL__UDP = 8; +const unsigned short int PROTOCOL__DCCP = 9; +const unsigned short int PROTOCOL__GRE = 10; +const unsigned short int PROTOCOL__SCTP = 11; +const unsigned short int PROTOCOL__HTTP = 12; +const unsigned short int PROTOCOL__HTML = 13; +const unsigned short int PROTOCOL__SMTP = 14; + + + + +// Debug defines +//#define DEBUG 1 // basic debug +//#define DEBUG_DataProcessor_calculate_loop 1 +//#define DEBUG_DataProcessor_calculate 1 +//#define DEBUG_NetworkFlow 1 +//#define DEBUG_flowThread 1 +//#define DEBUG_DatabaseInterface 1 +//#define DEBUG_NetworkTrace_exec 1 + +#define DEBUG_ + +//Math +#define MEGA_POWER 1000000 + +//Protocol code +typedef unsigned short int protocol_code; +#define IPV4_CODE 2048 +#define ARP_CODE 2054 +#define ARP_CODE_REV 2056 +#define IPV6_CODE 34525 +#define ICMP_CODE 1 +#define TCP_CODE 6 +#define UDP_CODE 17 +#define DCCP_CODE 33 +#define GRE_CODE 47 +#define ICMPV6_CODE 58 +#define SCTP_CODE 132 + +//Protocols + + + +//Stochastic models +typedef unsigned short int stochastic_model; +#define WEIBULL "weibull" +#define NORMAL "normal" +#define EXPONENTIAL_MEAN "exponential-mean" +#define EXPONENTIAL_LINEAR_REGRESSION "exponential-linear-regression" +#define PARETO_LINEAR_REGRESSION "pareto-linear-regression" +#define PARETO_MAXIMUM_LIKEHOOD "pareto-maximum-likehood" +#define CAUCHY "cauchy" +#define CONSTANT "constant" +#define NO_MODEL "no-model-selected" + + + + + +//Miscellaneous +//typedef string ip_addr; +typedef int port_number; +#define TEST_FUNCTIONS 1 //execute regression testes +#define HLINE "----------" +#define TAB "::" +const int MAX_TRANSPORT_PORT_NUMBER = 65535; + + +#endif /* DEFINES_H_ */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/4e/70cc001eacb500161808a5c64fd2084a b/.metadata/.plugins/org.eclipse.core.resources/.history/4e/70cc001eacb500161808a5c64fd2084a new file mode 100644 index 0000000..4f5e839 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/4e/70cc001eacb500161808a5c64fd2084a @@ -0,0 +1,1948 @@ +/* + * DataProcessor.cpp + * + * Created on: 14 de jun de 2016 + * Author: apaschoalon + */ + +#include "DataProcessor.h" + +DataProcessor::DataProcessor() +{ + //nothing to do at all +} + +DataProcessor::~DataProcessor() +{ + //nothing to do at all +} + +string DataProcessor::toString(void) +{ + string dataProcessor; + + dataProcessor = + "Used to calculate parameters of network flows; has no state."; + + return (dataProcessor); +} + +int DataProcessor::calculate(const string& experimentName, + DatabaseInterface* databaseInterface, NetworkTrace* netTrace) +{ + + //iterator variables + long int fcounter = 0; + long int nflows = 0; + databaseInterface->getNumberOfFlows(experimentName, &nflows); + +#ifdef DEBUG_DataProcessor_calculate + cout << "DataProcessor::calculate() -> Number of flows = " << nflows << endl; +#endif // DEBUG_DataProcessor_calculate + + //protocol variables + string flowStrData = ""; + long int flowIntData = 0; + double startDalay = 0; //time of the fist packet of the flow + double flowDuration = 0; //duration of the flow + list ttlList; + int ttl = 0; + + //flow-level variables + list relativeTime; //time relative to the 1st packet list + long int nKbytes = 0; //Number of kbytes (bytes/1024) of the + + //packetSize variables + list pslist; //packet-size list + long int ps_mostFrequent = 0; + double mean_packetRate = 0; + + //inter-deperture time variables + StochasticModelFit* modelVet = NULL; + list interArrival_list; // list of inter arrival times of a flow + list interArrival_fileStack; + list interArrival_interFileStack; + list interArrival_interSessionStack; + double lastTime = 0; + double idt = 0; + + for (fcounter = 0; fcounter < nflows; fcounter++) + { + + //new network flow + NetworkFlow* netFlow = NetworkFlow::make_flow("dummy"); + + //TODO checar valor retornado de databaseInterface + + //reset temp vars + flowStrData = ""; + flowIntData = 0; + relativeTime.clear(); + pslist.clear(); + interArrival_list.clear(); + interArrival_fileStack.clear(); + interArrival_interFileStack.clear(); + interArrival_interSessionStack.clear(); + + //load packet-size data + databaseInterface->getFlowData(experimentName, fcounter, "frame__len", + pslist); + + //laod time-relative data + databaseInterface->getFlowData(experimentName, fcounter, + "frame__time_relative", relativeTime); + + //evaluate inter-arrival data + //time relative to the begin of the measurement + lastTime = 0; + for (list::iterator it = relativeTime.begin(); + it != relativeTime.end(); it++) + { + idt = *it - lastTime; + interArrival_list.push_back(idt); + lastTime = *it; + } + + //###################################################################### + //Flow-level Options + //###################################################################### + startDalay = relativeTime.front(); + netFlow->setFlowStartDelay(startDalay); + + flowDuration = relativeTime.back() - relativeTime.front(); + netFlow->setFlowDuration(flowDuration); + + //TODO DS byte configuration -- now it is just set to zero + netFlow->setFlowDsByte(0); + + //flow kbytes + for (list::iterator it = pslist.begin(); it != pslist.end(); + it++) + { + nKbytes = nKbytes + *it; + } + nKbytes = nKbytes / 1024; + + netFlow->setNumberOfKbytes(nKbytes); + netFlow->setNumberOfPackets(relativeTime.size()); + + //###################################################################### + //Protocol Options + //###################################################################### + + // + //L3 protocols + //reference http://www.iana.org/assignments/ieee-802-numbers/ieee-802-numbers.xhtml + // + + databaseInterface->getFlowData(experimentName, fcounter, "eth__type", + &flowIntData); + if (flowIntData == IPV4_CODE) + { //IPv4 + netFlow->setNetworkProtocol(PROTOCOL__IPV4); + databaseInterface->getFlowData(experimentName, fcounter, "ip__src", + &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, "ip__dst", + &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + else if (flowIntData == (ARP_CODE || ARP_CODE_REV)) + { //ARP, Frame Relay ARP + netFlow->setNetworkProtocol(PROTOCOL__ARP); + databaseInterface->getFlowData(experimentName, fcounter, "ip__src", + &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, "ip__dst", + &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + else if (flowIntData == IPV6_CODE) + { //IPv6 + netFlow->setNetworkProtocol(PROTOCOL__ICMPV6); + databaseInterface->getFlowData(experimentName, fcounter, + "ipv6__addr", &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, + "ipv6__dst", &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + else + { //default IPv4 + netFlow->setNetworkProtocol(PROTOCOL__IPV4); + databaseInterface->getFlowData(experimentName, fcounter, "ip__src", + &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, "ip__dst", + &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + + //set ttl as the most frequent + databaseInterface->getFlowData(experimentName, fcounter, "ip__ttl", + ttlList); + //ttl = (int) mode(ttlList); + ttl = (int) mode(&ttlList); + netFlow->setNetworkTtl(ttl); + + // + //L4 Protocols + //reference https://en.wikipedia.org/wiki/List_of_IP_protocol_numbers + // + databaseInterface->getFlowData(experimentName, fcounter, "ip__proto", + &flowIntData); + if (flowIntData == ICMP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__ICMP); + } + else if (flowIntData == TCP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__TCP); + databaseInterface->getFlowData(experimentName, fcounter, + "tcp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "tcp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else if (flowIntData == UDP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__UDP); + databaseInterface->getFlowData(experimentName, fcounter, + "udp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "udp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else if (flowIntData == DCCP_CODE) + { + netFlow->setTransportDstPort(PROTOCOL__DCCP); + databaseInterface->getFlowData(experimentName, fcounter, + "dccp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "dccp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else if (flowIntData == GRE_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__GRE); + //TODO não suportado pelo D-ITG + } + else if (flowIntData == ICMPV6_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__ICMPV6); + } + else if (flowIntData == SCTP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__SCTP); + databaseInterface->getFlowData(experimentName, fcounter, + "sctp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "sctp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else + { //default: UDP + netFlow->setTransportProtocol(PROTOCOL__NULL); + //databaseInterface->getFlowData(experimentName, fcounter, "udp__dstport", &flowIntData); + //netFlow->setL4SrcPort(flowIntData); + //databaseInterface->getFlowData(experimentName, fcounter, "udp__srcport", &flowIntData); + //netFlow->setL4DstPort(flowIntData); + } + + //###################################################################### + //Packet Size Model + //###################################################################### + + // + // Constant model: Just set the packet size as the most frequent value + // + //ps_mostFrequent = mode(pslist); + //ps_mostFrequent = mode(&pslist); + //mean_packetRate = ((double) pslist.size() / flowDuration); + //netFlow->setPsConstant(ps_mostFrequent); + //netFlow->setIdtConstant(mean_packetRate); + + // + // Algorithm to choose the priority order of the models + // 1st version: just the constant model + // + //TODO implement a best algorithm + //netFlow->setPsModel1(MODEL__CONSTANT); + + //###################################################################### + //Inter-arrival-time Model + //###################################################################### + + for (list::iterator it = interArrival_list.begin(); + it != interArrival_list.end(); it++) + { + if(*it < FILE_CUT_TIME) + { + interArrival_fileStack.push_back(*it); + } + else if(*it < SESSION_CUT_TIME) + { + interArrival_interFileStack.push_back(*it); + } + else + { + interArrival_interSessionStack.push_back(*it); + } + } + +#ifdef DEBUG_DataProcessor_interArrival + + if(fcounter == 0) + { + string file1 = "fileStack"; + string file2 = "interFileStack"; + string file3 = "interSessionStack"; + save_data_on_file(file1, interArrival_fileStack); + save_data_on_file(file2, interArrival_interFileStack); + save_data_on_file(file3, interArrival_interSessionStack); + } + +#endif + + + netFlow->setInterDepertureTimeModels( + fitModels(interArrival_list, "aic")); + + //TODO set the right model + + //netFlow->setIdtModel1(MODEL__CONSTANT); + + //TODO + + //TODO + + //###################################################################### + //Push-back the flow to Trace Flow-list + //###################################################################### + + netTrace->pushback_Netflow(netFlow); + +#ifdef DEBUG_DataProcessor_calculate_loop + cout << fcounter << ": ps_mostFrequent=" << ps_mostFrequent << endl; + cout << fcounter << ": startDalay=" << startDalay << endl; + cout << fcounter << ": mean_packetRate=" << mean_packetRate << endl; + cout << fcounter << ": idt_constant=" << netFlow->getIdtConstant() << endl; +#endif //DEBUG_DataProcessor_calculate_loop +#ifdef DEBUG_DataProcessor_calculate_loop + cout << fcounter << ": netFlow->getTransportProtocol() = " << netFlow->getTransportProtocol() << endl; + cout << fcounter << ": netFlow->getNetworkProtocol() = " << netFlow->getNetworkProtocol() << endl; + cout << fcounter << ": netFlow->getTransportDstPort() = " << netFlow->getTransportDstPort() << endl; + cout << fcounter << ": netFlow->getFlowDsByte() = " << netFlow->getFlowDsByte() << endl; + cout << fcounter << ": netFlow->getNetworkDstAddr() = " << netFlow->getNetworkDstAddr() << endl << endl; + +#endif //DEBUG_DataProcessor_calculate_loop + + } + +#ifdef DEBUG_DataProcessor_calculate + cout << "netTrace->networkFlow.size() = " << netTrace->networkFlow.size() << endl; + cout << "netTrace->getNumberOfFlows() = " << netTrace->getNumberOfFlows() << endl; +#endif //DEBUG_DataProcessor_calculate + + return (0); +} + +StochasticModelFit* DataProcessor::fitModels(list& empiricalData, + const string& criterion) +{ + //constants + const int numberOfModels = 8; + const int m = empiricalData.size(); //empirical data-size + //vars + int counter = 0; + StochasticModelFit* modelVet = NULL; + vec paramVec = zeros(2); + vec infoCriterion = zeros(2); + + modelVet = new StochasticModelFit[numberOfModels]; + + //Inter-arrival vec + vec interArrival = zeros(m); + counter = 0; + for (list::iterator it = empiricalData.begin(); + it != empiricalData.end(); it++) + { + interArrival(counter) = *it + min_time; + counter++; + } + //Empirical CDF of interArrival + vec* interArrivalCdf = empiricalCdf(empiricalData); + + //Weibull + weibullFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[0].aic = infoCriterion(0); + modelVet[0].bic = infoCriterion(1); + modelVet[0].modelName = WEIBULL; + modelVet[0].param1 = paramVec(0); + modelVet[0].param2 = paramVec(1); + modelVet[0].size = numberOfModels; + + //normal + normalFitting(interArrival, paramVec, infoCriterion); + modelVet[1].aic = infoCriterion(0); + modelVet[1].bic = infoCriterion(1); + modelVet[1].modelName = NORMAL; + modelVet[1].param1 = paramVec(0); + modelVet[1].param2 = paramVec(1); + modelVet[1].size = numberOfModels; + + //exponential mean + exponentialMeFitting(interArrival, paramVec, infoCriterion); + modelVet[2].aic = infoCriterion(0); + modelVet[2].bic = infoCriterion(1); + modelVet[2].modelName = EXPONENTIAL_MEAN; + modelVet[2].param1 = paramVec(0); + modelVet[2].param2 = paramVec(1); + modelVet[2].size = numberOfModels; + + //exponential Linear Regression (LR) + exponentialLrFitting(interArrival, *interArrivalCdf, paramVec, + infoCriterion); + modelVet[3].aic = infoCriterion(0); + modelVet[3].bic = infoCriterion(1); + modelVet[3].modelName = EXPONENTIAL_LINEAR_REGRESSION; + modelVet[3].param1 = paramVec(0); + modelVet[3].param2 = paramVec(1); + modelVet[3].size = numberOfModels; + + //pareto linear regression + paretoLrFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[4].aic = infoCriterion(0); + modelVet[4].bic = infoCriterion(1); + modelVet[4].modelName = PARETO_LINEAR_REGRESSION; + modelVet[4].param1 = paramVec(0); + modelVet[4].param2 = paramVec(1); + modelVet[4].size = numberOfModels; + + //pareto maximum likehood + paretoMlhFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[5].aic = infoCriterion(0); + modelVet[5].bic = infoCriterion(1); + modelVet[5].modelName = PARETO_MAXIMUM_LIKEHOOD; + modelVet[5].param1 = paramVec(0); + modelVet[5].param2 = paramVec(1); + modelVet[5].size = numberOfModels; + + //Cauchy + cauchyFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[6].aic = infoCriterion(0); + modelVet[6].bic = infoCriterion(1); + modelVet[6].modelName = CAUCHY; + modelVet[6].param1 = paramVec(0); + modelVet[6].param2 = paramVec(1); + modelVet[6].size = numberOfModels; + + //Constant + constantFitting(interArrival, paramVec, infoCriterion); + modelVet[7].aic = infoCriterion(0); + modelVet[7].bic = infoCriterion(1); + modelVet[7].modelName = CONSTANT; + modelVet[7].param1 = paramVec(0); + modelVet[7].param2 = paramVec(1); + modelVet[7].size = numberOfModels; + + if (criterion == "bic") + { + qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), compareBic); + } + else if (criterion == "aic") + { + qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), compareAic); + } + else + { + cout + << "Error @ DataProcessor::fitModels -> Invalid criterion argument: " + << criterion << endl; + cout << "AIC set as default" << endl; + qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), compareAic); + + } + +#ifdef DEBUG_StochasticModelFit + //if (modelVet[0].modelName == WEIBULL) + //{ + // cout << modelVet[0].modelName << "aic:bic->" << modelVet[0].aic << ":" << modelVet[0].bic + // << " " << "alpha:betha->" << modelVet[0].param1 + // << modelVet[0].param2 << endl; + // string fileName = "weibulldata_" + std::to_string(abs(modelVet[0].aic)); + // save_data_on_file(fileName, interArrival, *interArrivalCdf); + //} +#endif //DEBUG_StochasticModelFit + + delete interArrivalCdf; + + return (modelVet); +} + +inline void DataProcessor::weibullFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //init + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + //linearization + vec y = log(-log(1.0 + diferential - interArrivalCdf)); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double weibull_alpha = theta(1); + double weibull_betha = exp(-theta(0) / theta(1)); + paramVec(0) = weibull_alpha; + paramVec(1) = weibull_betha; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "weibull", paramVec, "aic"); + double bic = informationCriterion(interArrival, "weibull", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; + +} + +inline void DataProcessor::normalFitting(const vec& interArrival, vec& paramVec, + vec& infoCriterion) +{ + double sigma = stddev(interArrival); + double mu = mean(interArrival); + paramVec(0) = mu; + paramVec(1) = sigma; + + //information criterion + double aic = informationCriterion(interArrival, "normal", paramVec, "aic"); + double bic = informationCriterion(interArrival, "normal", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::exponentialLrFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //init + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + //linearization + vec y = log(1.00 + diferential - interArrivalCdf); + //vec y = log(1.00 - interArrivalCdf); + vec x = interArrival; + mat* X = featureMatrix(x); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double exp_lambda = -theta(1); + paramVec(0) = exp_lambda; + paramVec(1) = 0; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "exponential", paramVec, + "aic"); + double bic = informationCriterion(interArrival, "exponential", paramVec, + "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::exponentialMeFitting(const vec& interArrival, + vec& paramVec, vec& infoCriterion) +{ + paramVec(0) = 1.0 / mean(interArrival); + paramVec(1) = 0; + + //information criterion + double aic = informationCriterion(interArrival, "exponential", paramVec, + "aic"); + double bic = informationCriterion(interArrival, "exponential", paramVec, + "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::paretoLrFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //init + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + //linearization + vec y = log(1.00 + diferential - interArrivalCdf); + //vec y = log(1.00 - interArrivalCdf); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double pareto_alpha = -theta(1); + double pareto_xm = interArrival.min(); + paramVec(0) = pareto_alpha; + paramVec(1) = pareto_xm; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "pareto", paramVec, "aic"); + double bic = informationCriterion(interArrival, "pareto", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::paretoMlhFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + double pareto_xm = interArrival.min(); + int m = interArrival.size(); + //vec logDiff = log(interArrival) - log(ones(m) * pareto_xm); + vec logDiff = log(interArrival) - log(pareto_xm); + double pareto_alpha = double(m) / (sum(logDiff)); + paramVec(0) = pareto_alpha; + paramVec(1) = pareto_xm; + + //information criterion + double aic = informationCriterion(interArrival, "pareto", paramVec, "aic"); + double bic = informationCriterion(interArrival, "pareto", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::cauchyFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //initialization + int iterations = 1500; + double learning_rate = 0.01; + int m = interArrival.size(); + double minInterArrival = interArrival.min(); + double y_max = 1.0 / minInterArrival; + vec y = tan(datum::pi * (interArrivalCdf - 0.5)); + for (int i = 0; i < m; i++) + { + //avoid too high numbers when tan() tends to infinity + if (y(i) > y_max) + y(i) = y_max; + } + + //linearization + vec J_history = zeros(iterations); + vec theta = zeros(2); + mat* X = featureMatrix(interArrival); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double cauchy_gamma = double(1.0) / theta(1); + double cauchy_x0 = -theta(0) / theta(1); + paramVec(0) = cauchy_gamma; + paramVec(1) = cauchy_x0; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "cauchy", paramVec, "aic"); + double bic = informationCriterion(interArrival, "cauchy", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; + +} + +void DataProcessor::constantFitting(const vec& interArrival, vec& paramVec, + vec& informationCriterion) +{ + paramVec(0) = mean(interArrival); + paramVec(1) = 0; + informationCriterion(0) = datum::inf; + informationCriterion(1) = datum::inf; +} + +template bool DataProcessor::isEqual(const T* vet1, const T* vet2, + const int size) +{ + for (int i = 0; i < size; i++) + { + if (vet1[i] != vet2[i]) + { + return (false); + } + } + + return (true); +} + +template void DataProcessor::vectorC_to_list(list* theList, + T* vet, int size) +{ + for (int i = 0; i < size; i++) + { + theList->push_back(vet[i]); + } +} + +template +void DataProcessor::quickSort(T* vet, int left, int right) +{ + int p = left; + int i = 0; + T ch = 0; + int j = 0; + + for (i = left + 1; i <= right; i++) + { + j = i; + if (vet[j] < vet[p]) + { + ch = vet[j]; + while (j > p) + { + vet[j] = vet[j - 1]; + j--; + } + vet[j] = ch; + p++; + } + } + if (p - 1 >= left) + quickSort(vet, left, p - 1); + if (p + 1 <= right) + quickSort(vet, p + 1, right); +} + +template +T DataProcessor::mode(list* theList) +{ + T* vet; + int listSize = theList->size(); + int i = 0; + T candidate = 0; + T prev = 0; + int counter = 0; + int largerCounter = 0; + T mode = 0; + vet = new T[listSize]; + + if (listSize == 0) + { + return (0); + } + + i = 0; + + for (typename list::iterator it = theList->begin(); it != theList->end(); + it++) + { + vet[i] = *it; + i++; + } + + quickSort(vet, 0, listSize - 1); + + prev = vet[0]; + largerCounter = 0; + for (i = 0; i < listSize; i++) + { + candidate = vet[i]; + if (candidate == prev) + { + counter++; + if (counter > largerCounter) + { + largerCounter = counter; + mode = vet[i]; + } + } + else + counter = 1; + + prev = vet[i]; + } + + delete[] vet; + + return (mode); +} + +template +inline T* DataProcessor::list_to_cvector(list* theList) +{ + int listSize = theList->size(); + T* vet; + int i = 0; + + vet = new T[listSize]; + if (listSize == 0) + { + return (0); + } + + i = 0; + for (typename list::iterator it = theList->begin(); it != theList->end(); + it++) + { + vet[i] = *it; + i++; + } + + return (vet); +} +template +inline void DataProcessor::delete_cvector(T* c_vet) +{ + delete[] c_vet; +} + +inline vec* DataProcessor::empiricalCdf(list& empiricalData) +{ + double* cvet_empiricalData = list_to_cvector(&empiricalData); + int data_size = empiricalData.size(); + quickSort(cvet_empiricalData, 0, data_size - 1); + double x = cvet_empiricalData[0]; // anchor - fist element; + int i1 = 0; // fist index + int i2 = 0; + double prob = 0; + vec* interArrivalCdf = new vec(zeros(data_size)); + + for (int i = 0; i < data_size; i++) + { + if (cvet_empiricalData[i] > x) + { + i2 = i - 1; + prob = double(i) / data_size; + for (int j = i1; j <= i2; j++) + { + (*interArrivalCdf)(j) = prob; + } + i1 = i; + x = cvet_empiricalData[i]; + } + } + //last position == 1 + (*interArrivalCdf)(data_size - 1) = 1; + + delete_cvector(cvet_empiricalData); + return (interArrivalCdf); +} + +inline mat* DataProcessor::featureMatrix(list& empiricalData) +{ + int data_size = empiricalData.size(); + mat* featureMatrix = new mat(ones(data_size, 2)); + + int i = 0; + for (list::iterator it = empiricalData.begin(); + it != empiricalData.end(); it++) + { + (*featureMatrix)(i, 1) = *it; + i++; + } + + return (featureMatrix); + +} + +inline mat* DataProcessor::featureMatrix(const vec& empiricalData) +{ + int data_size = empiricalData.size(); + mat* featureMatrix = new mat(ones(data_size, 2)); + for (int i = 0; i < data_size; i++) + { + (*featureMatrix)(i, 1) = empiricalData(i); + } + + return (featureMatrix); +} + +inline double DataProcessor::computeCost(const mat& X, const vec& y, + const vec& theta) +{ + double J = .0; + double jtemp = .0; + int m = y.size(); + + for (int i = 0; i < m; i++) + { + jtemp = jtemp + pow(double(theta(0) + theta(1) * X(i, 1) - y(i)), 2); + + } + J = (1.0 / double(2 * m)) * jtemp; + + return (J); +} + +inline void DataProcessor::gradientDescendent(const mat& X, const vec& y, + const double learning_rate, const int num_iters, vec& theta, + vec& J_history) +{ + + int m = y.n_rows; //number of training examples + double temp1 = .0; + double temp2 = .0; + double delta1 = .0; + double delta2 = .0; + vec x = X.col(1); + + for (int i = 0; i < num_iters; i++) + { + temp1 = .0; + temp2 = .0; + delta1 = .0; + delta2 = .0; + + //slope + delta1 = sum(theta(0) + theta(1) * x - y) / double(m); + delta2 = sum((theta(0) + theta(1) * x - y) % x) / double(m); + + //linear regression + temp1 = theta(0) - learning_rate * delta1; + temp2 = theta(1) - learning_rate * delta2; + + theta(0) = temp1; + theta(1) = temp2; + + //Save the cost J in every iteration + J_history(i) = computeCost(X, y, theta); + + } + +} + +inline double DataProcessor::informationCriterion(const vec& data, + const string& functionName, const vec& paramVet, + const string& criterion) +{ + double criterionVal = .0; + double nEstimatedParameters = double(paramVet.size()); + double likehoodLogVal = logLikehood(data, functionName, paramVet); + double logDataLen = log(double(data.size())); + + if (criterion == "aic") + { + criterionVal = 2 * nEstimatedParameters - 2 * likehoodLogVal; + } + else if (criterion == "bic") + { + criterionVal = nEstimatedParameters * logDataLen - 2 * likehoodLogVal; + } + else + { + cout << "\nInvalid functionName or no functionName selected: " + << functionName << endl; + printf("Selecting default criterion: AIC\n"); + criterionVal = 2 * nEstimatedParameters - 2 * likehoodLogVal; + } + + return (criterionVal); + +} + +inline double DataProcessor::logLikehood(const vec& data, + const string& functionName, const vec& paramVet) +{ + double param1 = paramVet(0); + double param2 = paramVet(1); + double m = data.size(); + double L = .0; + int i = 0; + vec data_prob = zeros(size(data)); + + if (functionName == "weibull") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_weibull(data(i), param1, param2); + } + else if (functionName == "normal") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_normal(data(i), param1, param2); + } + else if (functionName == "uniform") + { + data_prob = ones(size(data)) * pdf_uniform(param1, param2); + } + else if (functionName == "exponential") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_exponential(data(i), param1); + } + else if (functionName == "pareto") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_pareto(data(i), param1, param2); + } + else if (functionName == "cauchy") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_cauchy(data(i), param1, param2); + } + else + { + cout << "Warning, no valid stochastic function selected: " + << functionName << endl; + printf("Likehood logarithm seted to -Inf (worst as possible)\n"); + return (datum::inf); + } + + L = sum(log(data_prob)); + return (L); + +} + +inline double DataProcessor::pdf_weibull(double x, double alpha, double betha) +{ + if (x >= 0) + return ((alpha / pow(betha, alpha)) * pow(x, alpha - 1.0) + * exp(-(pow(x / betha, alpha)))); + else + return (.0); +} + +inline double DataProcessor::cdf_weibull(double x, double alpha, double betha) +{ + if (x >= 0) + return (1.0 - exp(-pow(x / betha, alpha))); + else + return (.0); +} + +inline double DataProcessor::pdf_exponential(double x, double lambda) +{ + if (x >= 0) + return (lambda * exp(-lambda * x)); + else + return (.0); + +} + +inline double DataProcessor::cdf_exponential(double x, double lambda) +{ + if (x >= 0) + return (1.0 - exp(-lambda * x)); + else + return (.0); +} + +inline double DataProcessor::pdf_pareto(double x, double alpha, double xm) +{ + if (x >= xm) + return (alpha * pow(xm, alpha) / (pow(x, alpha + 1.0))); + else + return (.0); +} + +inline double DataProcessor::cdf_pareto(double x, double alpha, double xm) +{ + if (x >= xm) + return (1.0 - pow(xm / x, alpha)); + else + return (.0); +} + +inline double DataProcessor::pdf_cauchy(double x, double gamma, double x0) +{ + return (1 / (datum::pi * gamma) + * (pow(gamma, 2) / (pow(x - x0, 2) + pow(gamma, 2)))); +} + +inline double DataProcessor::cdf_cauchy(double x, double gamma, double x0) +{ + return ((1 / datum::pi) * atan((x - x0) / (gamma)) + 0.5); +} + +inline double DataProcessor::pdf_normal(double x, double mu, double sigma) +{ + return (1 / (sqrt(2 * datum::pi) * sigma) + * exp(-0.5 * pow((x - mu) / sigma, 2))); +} + +inline double DataProcessor::cdf_normal(double x, double mu, double sigma) +{ + return (0.5 * (1 + erf((x - mu) / (sigma * sqrt(2))))); +} + +inline double DataProcessor::pdf_uniform(double x_min, double x_max) +{ + return (1.0 / (x_max - x_min)); +} + +inline double DataProcessor::cdf_uniform(double x, double x_min, double x_max) +{ + if (x < x_min) + return (0); + else if (x > x_max) + return (1); + else + return ((x - x_min) / (x_max - x_min)); +} + +#ifdef TEST_FUNCTIONS + +void DataProcessor::printTestResult(string testName, bool result) +{ + string outRes; + if (result == true) + outRes = "ok"; + else + outRes = "failed"; + + cout << testName << ":\t\t" << outRes << endl; +} + +bool DataProcessor::compareDouble(double val1, double val2) +{ + double error = 0; + + error = fabs(double(val1) - double(val2)); + if (error > double(1e-5)) + return (false); + else + return (true); + +} + +bool DataProcessor::compareDouble(double val1, double val2, double acErr) +{ + double error = 0; + + error = fabs(double(val1) - double(val2)); + if (error > double(acErr)) + return (false); + else + return (true); + +} + +bool DataProcessor::compareMat(mat& mat1, mat& mat2) +{ + int mat1_nc = mat1.n_cols; + int mat1_nr = mat1.n_rows; + int mat2_nc = mat2.n_cols; + int mat2_nr = mat2.n_rows; + + if ((mat1_nc != mat2_nc) || (mat1_nr != mat2_nr)) + { + cout << "mat1.n_cols and mat2.n_cols dont match. " << mat1_nc << ":" + << mat2_nc << " " << mat1_nr << ":" << mat2_nr << endl; + return (false); + } + for (int i = 0; i < mat1_nr; i++) + { + for (int j = 0; j < mat1_nc; j++) + { + if (compareDouble(mat1(i, j), mat2(i, j), 1e-5)) + { + //cout << " mat1(" << i << ", " << j << " ) = " << mat1(i,j); + //cout << " mat2(" << i << ", " << j << " ) = " << mat2(i,j); + return (false); + } + } + } + + return (true); +} + +void DataProcessor::save_data_on_file(const string& fileName, const mat& vet1, + const mat& vet2) +{ + string file_out = fileName + ".txt"; + int m = vet1.size(); + + ofstream writeOnFile(file_out, ios::out); + if (!writeOnFile) + { + cerr << "file could not be oppeded" << endl; + exit(1); + } + + for (int i = 0; i < m; i++) + { + writeOnFile << vet1(i) << " " << vet2(i) << endl; + } + +} + +template +void DataProcessor::save_data_on_file(const string& fileName, list theList) +{ + string file_out = fileName + ".txt"; + int m = theList.size(); + + ofstream writeOnFile(file_out, ios::out); + if (!writeOnFile) + { + cerr << "file could not be oppeded" << endl; + exit(1); + } + + for (list::iterator it = theList.begin(); it != theList.end(); it++) + { + //list::iterator it = randInt_list1.begin(); + writeOnFile << *it << " \n"; + } +} + +bool DataProcessor::test_Mode() +{ + + int randint1[] = + { 1, 8, 1, 13, 9, 2, 1, 15, 4, 3, 10, 4, 13, 2, 14, 7, 7 }; + int randint1_mode = 1; + list l_randint1; + vectorC_to_list(&l_randint1, randint1, 17); + + int randint2[] = + { 5, 3, 6, 8, 14, 9, 11, 9, 11, 15, 8, 7, 12, 13, 14 }; + int randint2_mode = 8; + list l_randint2; + vectorC_to_list(&l_randint2, randint2, 15); + + int randint3[] = + { 9, 10, 6, 3, 13, 13, 14, 7, 7, 1, 5, 1, 8, 5, 9, 2, 3, 4, 5, 6, 6, 6 }; + int randint3_mode = 6; + list l_randint3; + vectorC_to_list(&l_randint3, randint3, 22); + + int randint4[] = + { 2, 1 }; + int randint4_mode = 1; + list l_randint4; + vectorC_to_list(&l_randint4, randint4, 2); + + int randint5[] = + { 1, 1, 1, 1, 1, 2, 2, 2, 2, 2 }; + int randint5_mode = 1; + list l_randint5; + vectorC_to_list(&l_randint5, randint5, 10); + + if (mode(&l_randint1) != randint1_mode) + return (false); + if (mode(&l_randint2) != randint2_mode) + return (false); + if (mode(&l_randint3) != randint3_mode) + return (false); + if (mode(&l_randint4) != randint4_mode) + return (false); + if (mode(&l_randint5) != randint5_mode) + return (false); + + return (true); +} + +bool DataProcessor::test_QuickSort() +{ + int randIntA[] = + { 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; + int randIntA_size = 18; + int randIntA_sorted[] = + { 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9 }; + int randIntB[] = + { 9, 2, 3, 3, 12, 15, 8, 14, 2, 7, 4, 6, 10, 2, 12 }; + int randIntB_size = 15; + int randIntB_sorted[] = + { 2, 2, 2, 3, 3, 4, 6, 7, 8, 9, 10, 12, 12, 14, 15 }; + double randDoubleA[] = + { 0.20872, 12.25501, 5.88210, 2.77962, 8.74916, 2.97454, 4.39641, 12.19733, + 4.66014, 4.52477, 5.19375, 12.11314, 13.35458, 11.56941, 6.59435 }; + int randDoubleA_size = 15; + double randDoubleA_sorted[] = + { 0.20872, 2.77962, 2.97454, 4.39641, 4.52477, 4.66014, 5.19375, 5.88210, + 6.59435, 8.74916, 11.56941, 12.11314, 12.19733, 12.25501, 13.35458 }; + + quickSort(randIntA, 0, randIntA_size - 1); + + if (isEqual(randIntA, randIntA_sorted, randIntA_size) == false) + { + return (false); + } + + quickSort(randIntB, 0, randIntB_size - 1); + if (isEqual(randIntB, randIntB_sorted, randIntB_size) == false) + { + return (false); + } + + quickSort(randDoubleA, 0, randDoubleA_size - 1); + if (isEqual(randDoubleA, randDoubleA_sorted, randDoubleA_size) == false) + { + return (false); + } + + return (true); + +} + +bool DataProcessor::test_list_tocvector() +{ + list randInt_list1 = + { 9, 2, 3, 3, 12, 15, 8, 14, 2, 7, 4, 6, 10, 2, 12 }; + list randInt_list2 = + { 2.2, 2.111, 3.16, 6.66, 13, 2.61 }; + list randInt_list3 = + { 1, 2, 3, 4, 5, 6, 6, 5, 4, 3, 2, 1 }; + + int* cvet1 = NULL; + double* cvet2 = NULL; + int* cvet3 = NULL; + + cvet1 = list_to_cvector(&randInt_list1); + cvet2 = list_to_cvector(&randInt_list2); + cvet3 = list_to_cvector(&randInt_list3); + + int i = 0; + for (list::iterator it = randInt_list1.begin(); + it != randInt_list1.end(); it++) + { + if (cvet1[i] != *it) + { + return (false); + } + //cout << *it << " "; + i++; + } + i = 0; + for (list::iterator it = randInt_list2.begin(); + it != randInt_list2.end(); it++) + { + if (cvet2[i] != *it) + { + return (false); + } + //cout << *it << " "; + i++; + } + i = 0; + for (list::iterator it = randInt_list3.begin(); + it != randInt_list3.end(); it++) + { + if (cvet3[i] != *it) + { + return (false); + } + //cout << *it << " "; + i++; + } + + delete_cvector(cvet1); + delete_cvector(cvet2); + delete_cvector(cvet3); + + return (true); +} + +bool DataProcessor::test_empiricalCdf() +{ + list interArrival_sample = + { 5.0000e-07, 1.5000e-06, 1.5000e-06, 2.5000e-06, 2.5000e-06, 3.5000e-06, + 4.5000e-06, 7.5000e-06, 1.2500e-05, 1.9500e-05, 3.1500e-05, + 4.3500e-05, 6.0500e-05, 7.6500e-05, 1.1050e-04, 1.4050e-04, + 1.8150e-04, 2.1150e-04, 2.3350e-04, 2.4350e-04, 2.5650e-04, + 3.0350e-04, 4.1250e-04, 1.3655e-03, 1.1593e-02, 3.2483e-02, + 8.1235e-02, 2.0939e-01, 5.0755e-01, 1.7351e+00 }; + vec emCdf_octave = + { 0.033333, 0.100000, 0.100000, 0.166667, 0.166667, 0.200000, 0.233333, + 0.266667, 0.300000, 0.333333, 0.366667, 0.400000, 0.433333, + 0.466667, 0.500000, 0.533333, 0.566667, 0.600000, 0.633333, + 0.666667, 0.700000, 0.733333, 0.766667, 0.800000, 0.833333, + 0.866667, 0.900000, 0.933333, 0.966667, 1.000000 }; + //emCdf_octave = emCdf_octave.t(); + + vec* emCdf_cpp = empiricalCdf(interArrival_sample); + + int list_size = interArrival_sample.size(); + for (int i = 0; i < list_size; i++) + { + if (!compareDouble(emCdf_octave(i), (*emCdf_cpp)(i), 1e-6)) + { + cout << "cdf error @ " << "i:" << i << " res:" << (*emCdf_cpp)(i, 0) + << " expected:" << emCdf_octave(i, 0) << endl; + return (false); + } + } + + delete emCdf_cpp; + return (true); +} + +bool DataProcessor::test_computeCost() +{ + list interArrival_sample = + { 5.0000e-07, 1.5000e-06, 1.5000e-06, 2.5000e-06, 2.5000e-06, 3.5000e-06, + 4.5000e-06, 7.5000e-06, 1.2500e-05, 1.9500e-05, 3.1500e-05, + 4.3500e-05, 6.0500e-05, 7.6500e-05, 1.1050e-04, 1.4050e-04, + 1.8150e-04, 2.1150e-04, 2.3350e-04, 2.4350e-04, 2.5650e-04, + 3.0350e-04, 4.1250e-04, 1.3655e-03, 1.1593e-02, 3.2483e-02, + 8.1235e-02, 2.0939e-01, 5.0755e-01, 1.7351e+00 }; + mat* X = featureMatrix(interArrival_sample); + vec emCdf_octave = + { 0.033333, 0.100000, 0.100000, 0.166667, 0.166667, 0.200000, 0.233333, + 0.266667, 0.300000, 0.333333, 0.366667, 0.400000, 0.433333, + 0.466667, 0.500000, 0.533333, 0.566667, 0.600000, 0.633333, + 0.666667, 0.700000, 0.733333, 0.766667, 0.800000, 0.833333, + 0.866667, 0.900000, 0.933333, 0.966667, 1.000000 }; + //emCdf_octave = emCdf_octave.t(); + double J_expected1 = 0.17535; + double J_expected2 = 1.5341; + double J_expected3 = 9.0244; + + vec theta = zeros(2); + + double J = computeCost(*X, emCdf_octave, theta); + if (!compareDouble(J, J_expected1, 0.001)) + { + //cout << "J1 = " << J << "\nJ_expected1 = "<< J_expected1 << endl; + return (false); + } + theta(0) = 2; + theta(1) = 2; + J = computeCost(*X, emCdf_octave, theta); + if (!compareDouble(J, J_expected2, 0.001)) + { + //cout << "J2 = " << J << "\nJ_expected2 = "<< J_expected2 << endl; + return (false); + } + theta(0) = 1.5; + theta(1) = 12; + J = computeCost(*X, emCdf_octave, theta); + if (!compareDouble(J, J_expected3, 0.001)) + { + //cout << "J3 = " << J << "\nJ_expected3 = "<< J_expected3 << endl; + return (false); + } + + delete X; + return (true); +} + +bool DataProcessor::test_informationCriterion() +{ + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + + int m = interArrival.size(); + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + //gradient descendent + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + vec y = log(-log(1.0 + diferential - *interArrivalCdf)); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + double weibull_alpha = theta(1); + double weibull_betha = exp(-theta(0) / theta(1)); + vec paramVec = + { weibull_alpha, weibull_betha }; + double weibull_bic = informationCriterion(interArrival, "weibull", paramVec, + "bic"); + double weibull_aic = informationCriterion(interArrival, "weibull", paramVec, + "aic"); + + if (!compareDouble(weibull_bic, -33712.7042, 0.001)) + return (false); + else if (!compareDouble(weibull_aic, -33724.6567, 0.001)) + return (false); + + return (true); +} + +bool DataProcessor::test_pdf_weibull() +{ + double alpha = 1.5000; + double betha = 0.3; + vec data = + { 0.010000, 2.300000, 0.500000 }; + vec dataprob_eval1 = + { 9.0733e-01, 8.3571e-09, 7.5066e-01 }; + vec dataprob_test = zeros(3); + + dataprob_test(0) = pdf_weibull(data(0), alpha, betha); + dataprob_test(1) = pdf_weibull(data(1), alpha, betha); + dataprob_test(2) = pdf_weibull(data(2), alpha, betha); + + if (compareDouble(dataprob_test(0), dataprob_eval1(0)) + && compareDouble(dataprob_test(1), dataprob_eval1(1)) + && compareDouble(dataprob_test(2), dataprob_eval1(2))) + { + return (true); + } + + return (false); +} + +bool DataProcessor::test_cdf_weibull() +{ + double alpha = 0.5; + double betha = 1.5; + vec data = + { 0.010000, 2.300000, 0.500000 }; + vec dataprob_eval1 = + { 0.078405, 0.710117, 0.438616 }; + vec dataprob_test = zeros(3); + + dataprob_test(0) = cdf_weibull(data(0), alpha, betha); + dataprob_test(1) = cdf_weibull(data(1), alpha, betha); + dataprob_test(2) = cdf_weibull(data(2), alpha, betha); + //cout << dataprob_test(0) << " : " << dataprob_test(1) << " : " << dataprob_test(2) << endl; + + if (compareDouble(dataprob_test(0), dataprob_eval1(0)) + && compareDouble(dataprob_test(1), dataprob_eval1(1)) + && compareDouble(dataprob_test(2), dataprob_eval1(2))) + { + return (true); + } + + return (false); +} + +bool DataProcessor::test_gradientDescendent() +{ + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + + int m = interArrival.size(); + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + //gradient descendent + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + vec y = log(-log(1.0 + diferential - *interArrivalCdf)); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //expected values + double Jlast = 0.083359; + double theta0 = 1.660453; + double theta1 = 0.248811; + + if (!compareDouble(J_history(iterations - 1), Jlast)) + + { + return (false); + } + else if (!compareDouble(theta(0), theta0)) + { + return (false); + } + else if (!compareDouble(theta(1), theta1)) + { + return (false); + } + + delete interArrivalCdf; + delete X; + return (true); + +} + +bool DataProcessor::test_pdf_exponential() +{ + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double lambda1 = 0.50000; + vec val1 = + { 0.49751, 0.15832, 0.38940 }; + vec res1 = zeros(3); + + double lambda2 = 3.0; + vec val2 = + { 2.9113366, 0.0030234, 0.6693905 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = pdf_exponential(data(i), lambda1); + res2(i) = pdf_exponential(data(i), lambda2); + + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + + } + + return (true); +} + +bool DataProcessor::test_cdf_exponential() +{ + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double lambda1 = 0.50000; + vec val1 = + { 0.0049875, 0.6833632, 0.2211992 }; + vec res1 = zeros(3); + + double lambda2 = 3.0; + vec val2 = + { 0.029554, 0.998992, 0.776870 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = cdf_exponential(data(i), lambda1); + res2(i) = cdf_exponential(data(i), lambda2); + + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + + return (true); +} + +bool DataProcessor::test_pdf_pareto() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double alpha1 = 0.50000; + double xm1 = 1.0; + vec val1 = + { 0, 0.14334, 0 }; + vec res1 = zeros(3); + double xm2 = 0.00001; + double alpha2 = 3.0; + vec val2 = + { 3.0000e-07, 1.0720e-16, 4.8000e-14 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = pdf_pareto(data(i), alpha1, xm1); + res2(i) = pdf_pareto(data(i), alpha2, xm2); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + + return (true); +} + +bool DataProcessor::test_cdf_pareto() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double alpha1 = 0.50000; + double xm1 = 0.001; + vec val1 = + { 0.68377, 0.97915, 0.95528 }; + vec res1 = zeros(3); + double xm2 = 0.2; + double alpha2 = 1; + vec val2 = + { 0, 0.91304, 0.60000 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = cdf_pareto(data(i), alpha1, xm1); + res2(i) = cdf_pareto(data(i), alpha2, xm2); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + return (true); +} + +bool DataProcessor::test_pdf_cauchy() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + double gamma1 = 0.50000; + double x01 = 0.001; + + vec val1 = + { 0.636414, 0.028752, 0.318947 }; + vec res1 = zeros(3); + double x02 = 2; + double gamma2 = 2; + + vec val2 = + { 0.079976, 0.155653, 0.101859 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = pdf_cauchy(data(i), gamma1, x01); + res2(i) = pdf_cauchy(data(i), gamma2, x02); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + return (true); +} + +bool DataProcessor::test_cdf_cauchy() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + double gamma1 = 0.50000; + double x01 = 0.001; + + vec val1 = + { 0.50573, 0.93183, 0.74968 }; + vec res1 = zeros(3); + double x02 = 2; + double gamma2 = 2; + + vec val2 = + { 0.25080, 0.54739, 0.29517 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = cdf_cauchy(data(i), gamma1, x01); + res2(i) = cdf_cauchy(data(i), gamma2, x02); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + return (true); +} + +bool DataProcessor::test_fitModels() +{ + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + + int m = interArrival.size(); + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + //list of expected values + double weibull_alpha = 0.24881; + double weibull_betha = 0.0012639; + double normal_mu = 0.054792; + double normal_sigma = 0.205602; + double exponentialMe_lambda = 18.250783; + double exponentialLr_lambda = 2.023115; + double paretoLr_alpha = 0.225451; + double paretoLr_xm = 0.000000; + double paretoMlh_alpha = 0.171674; + double paretoMlh_xm = 0.000000; + double cauchy_gamma = 0.000067; + double cauchy_x0 = 0.005750; + double acErr = 0.001; + + vec paramVec = zeros(2); + vec infoCriterion = zeros(2); + + weibullFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), weibull_alpha, acErr)) + { + cout << "weibullFitting alpha" << endl; + return (false); + } + if (!compareDouble(paramVec(1), weibull_betha, acErr)) + { + cout << "weibullFitting betha" << endl; + return (false); + } + + normalFitting(interArrival, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), normal_mu, acErr)) + { + cout << "normalFitting mu" << endl; + return (false); + } + if (!compareDouble(paramVec(1), normal_sigma, acErr)) + { + cout << "normalFitting sigma" << endl; + return (false); + } + + exponentialMeFitting(interArrival, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), exponentialMe_lambda, acErr)) + { + cout << "exponentialLrFitting lambda" << endl; + return (false); + } + + exponentialLrFitting(interArrival, *interArrivalCdf, paramVec, + infoCriterion); + if (!compareDouble(paramVec(0), exponentialLr_lambda, acErr)) + { + cout << exponentialLr_lambda << ":" << paramVec(0) << endl; + cout << "exponentialLrFitting lambda" << endl; + return (false); + } + + paretoLrFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), paretoLr_alpha, acErr)) + { + cout << "paretoLrFitting alpha" << endl; + return (false); + } + if (!compareDouble(paramVec(1), paretoLr_xm, acErr)) + { + cout << "paretoLrFitting xm" << endl; + return (false); + } + + paretoMlhFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), paretoMlh_alpha, acErr)) + { + cout << "paretoMlhFitting alpha" << endl; + return (false); + } + if (!compareDouble(paramVec(1), paretoMlh_xm, acErr)) + { + cout << "paretoMlhFitting xm" << endl; + return (false); + } + + cauchyFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), cauchy_gamma, acErr)) + { + cout << "cauchyFitting" << endl; + return (false); + } + if (!compareDouble(paramVec(1), cauchy_x0, acErr)) + { + return (false); + } + + delete interArrivalCdf; + + return (true); +} + +bool DataProcessor::test_modelSelection() +{ + + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + int m = interArrival.size(); + + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + StochasticModelFit* modelVet = NULL; + modelVet = fitModels(list_interArrival, "aic"); + + //int numberOfModels = modelVet[0].size; + //for (int i = 0; i < numberOfModels; i++) + // cout << modelVet[i].modelName << " " << "modelVet[" << i << "] = " + // << modelVet[i].aic << endl; + + delete interArrivalCdf; + delete[] modelVet; + return (true); +} + +#endif //TEST_FUNCTIONS diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/50/b05d7843a2b500161808a5c64fd2084a b/.metadata/.plugins/org.eclipse.core.resources/.history/50/b05d7843a2b500161808a5c64fd2084a new file mode 100644 index 0000000..10db3d2 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/50/b05d7843a2b500161808a5c64fd2084a @@ -0,0 +1,84 @@ +/* + * ConstantsDeinition.h + * + * Created on: 4 de jul de 2016 + * Author: apaschoalon + */ + +#ifndef DEFINES_H_ +#define DEFINES_H_ + +// Debug defines +//#define DEBUG 1 // basic debug +//#define DEBUG_DataProcessor_calculate_loop 1 +//#define DEBUG_DataProcessor_calculate 1 +//#define DEBUG_NetworkFlow 1 +//#define DEBUG_flowThread 1 +//#define DEBUG_DatabaseInterface 1 +//#define DEBUG_NetworkTrace_exec 1 +#define TEST_FUNCTIONS 1 + + +//Math +#define MEGA_POWER 1000000 + +//Protocol code +typedef unsigned short int protocol_code; +#define IPV4_CODE 2048 +#define ARP_CODE 2054 +#define ARP_CODE_REV 2056 +#define IPV6_CODE 34525 +#define ICMP_CODE 1 +#define TCP_CODE 6 +#define UDP_CODE 17 +#define DCCP_CODE 33 +#define GRE_CODE 47 +#define ICMPV6_CODE 58 +#define SCTP_CODE 132 + +//Protocols +typedef unsigned short int protocol; +#define PROTOCOL__NULL 0 +#define PROTOCOL__ETHERNET 1 +#define PROTOCOL__IPV4 2 +#define PROTOCOL__IPV6 3 +#define PROTOCOL__ARP 4 +#define PROTOCOL__ICMP 5 +#define PROTOCOL__ICMPV6 6 +#define PROTOCOL__TCP 7 +#define PROTOCOL__UDP 8 +#define PROTOCOL__DCCP 9 +#define PROTOCOL__GRE 10 +#define PROTOCOL__SCTP 11 +#define PROTOCOL__HTTP 12 +#define PROTOCOL__HTML 13 +#define PROTOCOL__SMTP 14 + +//Stochastic models +typedef unsigned short int stochastic_model; +#define WEIBULL "weibull" +#define NORMAL "normal" +#define EXPONENTIAL_MEAN "exponential-mean" +#define EXPONENTIAL_LINEAR_REGRESSION "exponential-linear-regression" +#define PARETO_LINEAR_REGRESSION "pareto-linear-regression" +#define PARETO_MAXIMUM_LIKEHOOD "pareto-maximum-likehood" +#define CAUCHY "cauchy" +#define CONSTANT "constant" +#define NO_MODEL "no-model-selected" + + +//packet analysis features +const double FILE_CUT_TIME = 0.1; +const double SESSION_CUT_TIME = 30; +const int PACKET_SIZE_MODE_CUT_VALUE = 500; + + +//Miscellaneous +//typedef string ip_addr; +typedef int port_number; +#define HLINE "----------" +#define TAB "::" +#define MAX_TRANSPORT_PORT_NUMBER 65535 + + +#endif /* DEFINES_H_ */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/57/f081141bacb500161808a5c64fd2084a b/.metadata/.plugins/org.eclipse.core.resources/.history/57/f081141bacb500161808a5c64fd2084a new file mode 100644 index 0000000..c349b24 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/57/f081141bacb500161808a5c64fd2084a @@ -0,0 +1,1948 @@ +/* + * DataProcessor.cpp + * + * Created on: 14 de jun de 2016 + * Author: apaschoalon + */ + +#include "DataProcessor.h" + +DataProcessor::DataProcessor() +{ + //nothing to do at all +} + +DataProcessor::~DataProcessor() +{ + //nothing to do at all +} + +string DataProcessor::toString(void) +{ + string dataProcessor; + + dataProcessor = + "Used to calculate parameters of network flows; has no state."; + + return (dataProcessor); +} + +int DataProcessor::calculate(const string& experimentName, + DatabaseInterface* databaseInterface, NetworkTrace* netTrace) +{ + + //iterator variables + long int fcounter = 0; + long int nflows = 0; + databaseInterface->getNumberOfFlows(experimentName, &nflows); + +#ifdef DEBUG_DataProcessor_calculate + cout << "DataProcessor::calculate() -> Number of flows = " << nflows << endl; +#endif // DEBUG_DataProcessor_calculate + + //protocol variables + string flowStrData = ""; + long int flowIntData = 0; + double startDalay = 0; //time of the fist packet of the flow + double flowDuration = 0; //duration of the flow + list ttlList; + int ttl = 0; + + //flow-level variables + list relativeTime; //time relative to the 1st packet list + long int nKbytes = 0; //Number of kbytes (bytes/1024) of the + + //packetSize variables + list pslist; //packet-size list + long int ps_mostFrequent = 0; + double mean_packetRate = 0; + + //inter-deperture time variables + StochasticModelFit* modelVet = NULL; + list interArrival_list; // list of inter arrival times of a flow + list interArrival_fileStack; + list interArrival_interFileStack; + list interArrival_interSessionStack; + double lastTime = 0; + double idt = 0; + + for (fcounter = 0; fcounter < nflows; fcounter++) + { + + //new network flow + NetworkFlow* netFlow = NetworkFlow::make_flow("dummy"); + + //TODO checar valor retornado de databaseInterface + + //reset temp vars + flowStrData = ""; + flowIntData = 0; + relativeTime.clear(); + pslist.clear(); + interArrival_list.clear(); + interArrival_fileStack.clear(); + interArrival_interFileStack.clear(); + interArrival_interSessionStack.clear(); + + //load packet-size data + databaseInterface->getFlowData(experimentName, fcounter, "frame__len", + pslist); + + //laod time-relative data + databaseInterface->getFlowData(experimentName, fcounter, + "frame__time_relative", relativeTime); + + //evaluate inter-arrival data + //time relative to the begin of the measurement + lastTime = 0; + for (list::iterator it = relativeTime.begin(); + it != relativeTime.end(); it++) + { + idt = *it - lastTime; + interArrival_list.push_back(idt); + lastTime = *it; + } + + //###################################################################### + //Flow-level Options + //###################################################################### + startDalay = relativeTime.front(); + netFlow->setFlowStartDelay(startDalay); + + flowDuration = relativeTime.back() - relativeTime.front(); + netFlow->setFlowDuration(flowDuration); + + //TODO DS byte configuration -- now it is just set to zero + netFlow->setFlowDsByte(0); + + //flow kbytes + for (list::iterator it = pslist.begin(); it != pslist.end(); + it++) + { + nKbytes = nKbytes + *it; + } + nKbytes = nKbytes / 1024; + + netFlow->setNumberOfKbytes(nKbytes); + netFlow->setNumberOfPackets(relativeTime.size()); + + //###################################################################### + //Protocol Options + //###################################################################### + + // + //L3 protocols + //reference http://www.iana.org/assignments/ieee-802-numbers/ieee-802-numbers.xhtml + // + + databaseInterface->getFlowData(experimentName, fcounter, "eth__type", + &flowIntData); + if (flowIntData == IPV4_CODE) + { //IPv4 + netFlow->setNetworkProtocol(PROTOCOL__IPV4); + databaseInterface->getFlowData(experimentName, fcounter, "ip__src", + &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, "ip__dst", + &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + else if (flowIntData == (ARP_CODE || ARP_CODE_REV)) + { //ARP, Frame Relay ARP + netFlow->setNetworkProtocol(PROTOCOL__ARP); + databaseInterface->getFlowData(experimentName, fcounter, "ip__src", + &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, "ip__dst", + &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + else if (flowIntData == IPV6_CODE) + { //IPv6 + netFlow->setNetworkProtocol(PROTOCOL__ICMPV6); + databaseInterface->getFlowData(experimentName, fcounter, + "ipv6__addr", &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, + "ipv6__dst", &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + else + { //default IPv4 + netFlow->setNetworkProtocol(PROTOCOL__IPV4); + databaseInterface->getFlowData(experimentName, fcounter, "ip__src", + &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, "ip__dst", + &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + + //set ttl as the most frequent + databaseInterface->getFlowData(experimentName, fcounter, "ip__ttl", + ttlList); + //ttl = (int) mode(ttlList); + ttl = (int) mode(&ttlList); + netFlow->setNetworkTtl(ttl); + + // + //L4 Protocols + //reference https://en.wikipedia.org/wiki/List_of_IP_protocol_numbers + // + databaseInterface->getFlowData(experimentName, fcounter, "ip__proto", + &flowIntData); + if (flowIntData == ICMP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__ICMP); + } + else if (flowIntData == TCP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__TCP); + databaseInterface->getFlowData(experimentName, fcounter, + "tcp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "tcp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else if (flowIntData == UDP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__UDP); + databaseInterface->getFlowData(experimentName, fcounter, + "udp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "udp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else if (flowIntData == DCCP_CODE) + { + netFlow->setTransportDstPort(PROTOCOL__DCCP); + databaseInterface->getFlowData(experimentName, fcounter, + "dccp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "dccp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else if (flowIntData == GRE_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__GRE); + //TODO não suportado pelo D-ITG + } + else if (flowIntData == ICMPV6_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__ICMPV6); + } + else if (flowIntData == SCTP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__SCTP); + databaseInterface->getFlowData(experimentName, fcounter, + "sctp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "sctp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else + { //default: UDP + netFlow->setTransportProtocol(PROTOCOL__NULL); + //databaseInterface->getFlowData(experimentName, fcounter, "udp__dstport", &flowIntData); + //netFlow->setL4SrcPort(flowIntData); + //databaseInterface->getFlowData(experimentName, fcounter, "udp__srcport", &flowIntData); + //netFlow->setL4DstPort(flowIntData); + } + + //###################################################################### + //Packet Size Model + //###################################################################### + + // + // Constant model: Just set the packet size as the most frequent value + // + //ps_mostFrequent = mode(pslist); + //ps_mostFrequent = mode(&pslist); + //mean_packetRate = ((double) pslist.size() / flowDuration); + //netFlow->setPsConstant(ps_mostFrequent); + //netFlow->setIdtConstant(mean_packetRate); + + // + // Algorithm to choose the priority order of the models + // 1st version: just the constant model + // + //TODO implement a best algorithm + //netFlow->setPsModel1(MODEL__CONSTANT); + + //###################################################################### + //Inter-arrival-time Model + //###################################################################### + + for (list::iterator it = interArrival_list.begin(); + it != interArrival_list.end(); it++) + { + if(*it < FILE_CUT_TIME) + { + interArrival_fileStack.push_back(*it); + } + else if(*it < SESSION_CUT_TIME) + { + interArrival_interFileStack.push_back(*it); + } + else + { + interArrival_interSessionStack.push_back(*it); + } + } + +#ifdef DEBUG_DataProcessor_interArrival + + if(fcounter == 1) + { + string file1 = "fileStack"; + string file2 = "interFileStack"; + string file3 = "interSessionStack"; + save_data_on_file(file1, interArrival_fileStack); + save_data_on_file(file2, interArrival_interFileStack); + save_data_on_file(file3, interArrival_interSessionStack); + } + +#endif + + + netFlow->setInterDepertureTimeModels( + fitModels(interArrival_list, "aic")); + + //TODO set the right model + + //netFlow->setIdtModel1(MODEL__CONSTANT); + + //TODO + + //TODO + + //###################################################################### + //Push-back the flow to Trace Flow-list + //###################################################################### + + netTrace->pushback_Netflow(netFlow); + +#ifdef DEBUG_DataProcessor_calculate_loop + cout << fcounter << ": ps_mostFrequent=" << ps_mostFrequent << endl; + cout << fcounter << ": startDalay=" << startDalay << endl; + cout << fcounter << ": mean_packetRate=" << mean_packetRate << endl; + cout << fcounter << ": idt_constant=" << netFlow->getIdtConstant() << endl; +#endif //DEBUG_DataProcessor_calculate_loop +#ifdef DEBUG_DataProcessor_calculate_loop + cout << fcounter << ": netFlow->getTransportProtocol() = " << netFlow->getTransportProtocol() << endl; + cout << fcounter << ": netFlow->getNetworkProtocol() = " << netFlow->getNetworkProtocol() << endl; + cout << fcounter << ": netFlow->getTransportDstPort() = " << netFlow->getTransportDstPort() << endl; + cout << fcounter << ": netFlow->getFlowDsByte() = " << netFlow->getFlowDsByte() << endl; + cout << fcounter << ": netFlow->getNetworkDstAddr() = " << netFlow->getNetworkDstAddr() << endl << endl; + +#endif //DEBUG_DataProcessor_calculate_loop + + } + +#ifdef DEBUG_DataProcessor_calculate + cout << "netTrace->networkFlow.size() = " << netTrace->networkFlow.size() << endl; + cout << "netTrace->getNumberOfFlows() = " << netTrace->getNumberOfFlows() << endl; +#endif //DEBUG_DataProcessor_calculate + + return (0); +} + +StochasticModelFit* DataProcessor::fitModels(list& empiricalData, + const string& criterion) +{ + //constants + const int numberOfModels = 8; + const int m = empiricalData.size(); //empirical data-size + //vars + int counter = 0; + StochasticModelFit* modelVet = NULL; + vec paramVec = zeros(2); + vec infoCriterion = zeros(2); + + modelVet = new StochasticModelFit[numberOfModels]; + + //Inter-arrival vec + vec interArrival = zeros(m); + counter = 0; + for (list::iterator it = empiricalData.begin(); + it != empiricalData.end(); it++) + { + interArrival(counter) = *it + min_time; + counter++; + } + //Empirical CDF of interArrival + vec* interArrivalCdf = empiricalCdf(empiricalData); + + //Weibull + weibullFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[0].aic = infoCriterion(0); + modelVet[0].bic = infoCriterion(1); + modelVet[0].modelName = WEIBULL; + modelVet[0].param1 = paramVec(0); + modelVet[0].param2 = paramVec(1); + modelVet[0].size = numberOfModels; + + //normal + normalFitting(interArrival, paramVec, infoCriterion); + modelVet[1].aic = infoCriterion(0); + modelVet[1].bic = infoCriterion(1); + modelVet[1].modelName = NORMAL; + modelVet[1].param1 = paramVec(0); + modelVet[1].param2 = paramVec(1); + modelVet[1].size = numberOfModels; + + //exponential mean + exponentialMeFitting(interArrival, paramVec, infoCriterion); + modelVet[2].aic = infoCriterion(0); + modelVet[2].bic = infoCriterion(1); + modelVet[2].modelName = EXPONENTIAL_MEAN; + modelVet[2].param1 = paramVec(0); + modelVet[2].param2 = paramVec(1); + modelVet[2].size = numberOfModels; + + //exponential Linear Regression (LR) + exponentialLrFitting(interArrival, *interArrivalCdf, paramVec, + infoCriterion); + modelVet[3].aic = infoCriterion(0); + modelVet[3].bic = infoCriterion(1); + modelVet[3].modelName = EXPONENTIAL_LINEAR_REGRESSION; + modelVet[3].param1 = paramVec(0); + modelVet[3].param2 = paramVec(1); + modelVet[3].size = numberOfModels; + + //pareto linear regression + paretoLrFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[4].aic = infoCriterion(0); + modelVet[4].bic = infoCriterion(1); + modelVet[4].modelName = PARETO_LINEAR_REGRESSION; + modelVet[4].param1 = paramVec(0); + modelVet[4].param2 = paramVec(1); + modelVet[4].size = numberOfModels; + + //pareto maximum likehood + paretoMlhFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[5].aic = infoCriterion(0); + modelVet[5].bic = infoCriterion(1); + modelVet[5].modelName = PARETO_MAXIMUM_LIKEHOOD; + modelVet[5].param1 = paramVec(0); + modelVet[5].param2 = paramVec(1); + modelVet[5].size = numberOfModels; + + //Cauchy + cauchyFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[6].aic = infoCriterion(0); + modelVet[6].bic = infoCriterion(1); + modelVet[6].modelName = CAUCHY; + modelVet[6].param1 = paramVec(0); + modelVet[6].param2 = paramVec(1); + modelVet[6].size = numberOfModels; + + //Constant + constantFitting(interArrival, paramVec, infoCriterion); + modelVet[7].aic = infoCriterion(0); + modelVet[7].bic = infoCriterion(1); + modelVet[7].modelName = CONSTANT; + modelVet[7].param1 = paramVec(0); + modelVet[7].param2 = paramVec(1); + modelVet[7].size = numberOfModels; + + if (criterion == "bic") + { + qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), compareBic); + } + else if (criterion == "aic") + { + qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), compareAic); + } + else + { + cout + << "Error @ DataProcessor::fitModels -> Invalid criterion argument: " + << criterion << endl; + cout << "AIC set as default" << endl; + qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), compareAic); + + } + +#ifdef DEBUG_StochasticModelFit + //if (modelVet[0].modelName == WEIBULL) + //{ + // cout << modelVet[0].modelName << "aic:bic->" << modelVet[0].aic << ":" << modelVet[0].bic + // << " " << "alpha:betha->" << modelVet[0].param1 + // << modelVet[0].param2 << endl; + // string fileName = "weibulldata_" + std::to_string(abs(modelVet[0].aic)); + // save_data_on_file(fileName, interArrival, *interArrivalCdf); + //} +#endif //DEBUG_StochasticModelFit + + delete interArrivalCdf; + + return (modelVet); +} + +inline void DataProcessor::weibullFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //init + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + //linearization + vec y = log(-log(1.0 + diferential - interArrivalCdf)); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double weibull_alpha = theta(1); + double weibull_betha = exp(-theta(0) / theta(1)); + paramVec(0) = weibull_alpha; + paramVec(1) = weibull_betha; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "weibull", paramVec, "aic"); + double bic = informationCriterion(interArrival, "weibull", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; + +} + +inline void DataProcessor::normalFitting(const vec& interArrival, vec& paramVec, + vec& infoCriterion) +{ + double sigma = stddev(interArrival); + double mu = mean(interArrival); + paramVec(0) = mu; + paramVec(1) = sigma; + + //information criterion + double aic = informationCriterion(interArrival, "normal", paramVec, "aic"); + double bic = informationCriterion(interArrival, "normal", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::exponentialLrFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //init + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + //linearization + vec y = log(1.00 + diferential - interArrivalCdf); + //vec y = log(1.00 - interArrivalCdf); + vec x = interArrival; + mat* X = featureMatrix(x); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double exp_lambda = -theta(1); + paramVec(0) = exp_lambda; + paramVec(1) = 0; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "exponential", paramVec, + "aic"); + double bic = informationCriterion(interArrival, "exponential", paramVec, + "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::exponentialMeFitting(const vec& interArrival, + vec& paramVec, vec& infoCriterion) +{ + paramVec(0) = 1.0 / mean(interArrival); + paramVec(1) = 0; + + //information criterion + double aic = informationCriterion(interArrival, "exponential", paramVec, + "aic"); + double bic = informationCriterion(interArrival, "exponential", paramVec, + "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::paretoLrFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //init + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + //linearization + vec y = log(1.00 + diferential - interArrivalCdf); + //vec y = log(1.00 - interArrivalCdf); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double pareto_alpha = -theta(1); + double pareto_xm = interArrival.min(); + paramVec(0) = pareto_alpha; + paramVec(1) = pareto_xm; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "pareto", paramVec, "aic"); + double bic = informationCriterion(interArrival, "pareto", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::paretoMlhFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + double pareto_xm = interArrival.min(); + int m = interArrival.size(); + //vec logDiff = log(interArrival) - log(ones(m) * pareto_xm); + vec logDiff = log(interArrival) - log(pareto_xm); + double pareto_alpha = double(m) / (sum(logDiff)); + paramVec(0) = pareto_alpha; + paramVec(1) = pareto_xm; + + //information criterion + double aic = informationCriterion(interArrival, "pareto", paramVec, "aic"); + double bic = informationCriterion(interArrival, "pareto", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::cauchyFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //initialization + int iterations = 1500; + double learning_rate = 0.01; + int m = interArrival.size(); + double minInterArrival = interArrival.min(); + double y_max = 1.0 / minInterArrival; + vec y = tan(datum::pi * (interArrivalCdf - 0.5)); + for (int i = 0; i < m; i++) + { + //avoid too high numbers when tan() tends to infinity + if (y(i) > y_max) + y(i) = y_max; + } + + //linearization + vec J_history = zeros(iterations); + vec theta = zeros(2); + mat* X = featureMatrix(interArrival); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double cauchy_gamma = double(1.0) / theta(1); + double cauchy_x0 = -theta(0) / theta(1); + paramVec(0) = cauchy_gamma; + paramVec(1) = cauchy_x0; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "cauchy", paramVec, "aic"); + double bic = informationCriterion(interArrival, "cauchy", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; + +} + +void DataProcessor::constantFitting(const vec& interArrival, vec& paramVec, + vec& informationCriterion) +{ + paramVec(0) = mean(interArrival); + paramVec(1) = 0; + informationCriterion(0) = datum::inf; + informationCriterion(1) = datum::inf; +} + +template bool DataProcessor::isEqual(const T* vet1, const T* vet2, + const int size) +{ + for (int i = 0; i < size; i++) + { + if (vet1[i] != vet2[i]) + { + return (false); + } + } + + return (true); +} + +template void DataProcessor::vectorC_to_list(list* theList, + T* vet, int size) +{ + for (int i = 0; i < size; i++) + { + theList->push_back(vet[i]); + } +} + +template +void DataProcessor::quickSort(T* vet, int left, int right) +{ + int p = left; + int i = 0; + T ch = 0; + int j = 0; + + for (i = left + 1; i <= right; i++) + { + j = i; + if (vet[j] < vet[p]) + { + ch = vet[j]; + while (j > p) + { + vet[j] = vet[j - 1]; + j--; + } + vet[j] = ch; + p++; + } + } + if (p - 1 >= left) + quickSort(vet, left, p - 1); + if (p + 1 <= right) + quickSort(vet, p + 1, right); +} + +template +T DataProcessor::mode(list* theList) +{ + T* vet; + int listSize = theList->size(); + int i = 0; + T candidate = 0; + T prev = 0; + int counter = 0; + int largerCounter = 0; + T mode = 0; + vet = new T[listSize]; + + if (listSize == 0) + { + return (0); + } + + i = 0; + + for (typename list::iterator it = theList->begin(); it != theList->end(); + it++) + { + vet[i] = *it; + i++; + } + + quickSort(vet, 0, listSize - 1); + + prev = vet[0]; + largerCounter = 0; + for (i = 0; i < listSize; i++) + { + candidate = vet[i]; + if (candidate == prev) + { + counter++; + if (counter > largerCounter) + { + largerCounter = counter; + mode = vet[i]; + } + } + else + counter = 1; + + prev = vet[i]; + } + + delete[] vet; + + return (mode); +} + +template +inline T* DataProcessor::list_to_cvector(list* theList) +{ + int listSize = theList->size(); + T* vet; + int i = 0; + + vet = new T[listSize]; + if (listSize == 0) + { + return (0); + } + + i = 0; + for (typename list::iterator it = theList->begin(); it != theList->end(); + it++) + { + vet[i] = *it; + i++; + } + + return (vet); +} +template +inline void DataProcessor::delete_cvector(T* c_vet) +{ + delete[] c_vet; +} + +inline vec* DataProcessor::empiricalCdf(list& empiricalData) +{ + double* cvet_empiricalData = list_to_cvector(&empiricalData); + int data_size = empiricalData.size(); + quickSort(cvet_empiricalData, 0, data_size - 1); + double x = cvet_empiricalData[0]; // anchor - fist element; + int i1 = 0; // fist index + int i2 = 0; + double prob = 0; + vec* interArrivalCdf = new vec(zeros(data_size)); + + for (int i = 0; i < data_size; i++) + { + if (cvet_empiricalData[i] > x) + { + i2 = i - 1; + prob = double(i) / data_size; + for (int j = i1; j <= i2; j++) + { + (*interArrivalCdf)(j) = prob; + } + i1 = i; + x = cvet_empiricalData[i]; + } + } + //last position == 1 + (*interArrivalCdf)(data_size - 1) = 1; + + delete_cvector(cvet_empiricalData); + return (interArrivalCdf); +} + +inline mat* DataProcessor::featureMatrix(list& empiricalData) +{ + int data_size = empiricalData.size(); + mat* featureMatrix = new mat(ones(data_size, 2)); + + int i = 0; + for (list::iterator it = empiricalData.begin(); + it != empiricalData.end(); it++) + { + (*featureMatrix)(i, 1) = *it; + i++; + } + + return (featureMatrix); + +} + +inline mat* DataProcessor::featureMatrix(const vec& empiricalData) +{ + int data_size = empiricalData.size(); + mat* featureMatrix = new mat(ones(data_size, 2)); + for (int i = 0; i < data_size; i++) + { + (*featureMatrix)(i, 1) = empiricalData(i); + } + + return (featureMatrix); +} + +inline double DataProcessor::computeCost(const mat& X, const vec& y, + const vec& theta) +{ + double J = .0; + double jtemp = .0; + int m = y.size(); + + for (int i = 0; i < m; i++) + { + jtemp = jtemp + pow(double(theta(0) + theta(1) * X(i, 1) - y(i)), 2); + + } + J = (1.0 / double(2 * m)) * jtemp; + + return (J); +} + +inline void DataProcessor::gradientDescendent(const mat& X, const vec& y, + const double learning_rate, const int num_iters, vec& theta, + vec& J_history) +{ + + int m = y.n_rows; //number of training examples + double temp1 = .0; + double temp2 = .0; + double delta1 = .0; + double delta2 = .0; + vec x = X.col(1); + + for (int i = 0; i < num_iters; i++) + { + temp1 = .0; + temp2 = .0; + delta1 = .0; + delta2 = .0; + + //slope + delta1 = sum(theta(0) + theta(1) * x - y) / double(m); + delta2 = sum((theta(0) + theta(1) * x - y) % x) / double(m); + + //linear regression + temp1 = theta(0) - learning_rate * delta1; + temp2 = theta(1) - learning_rate * delta2; + + theta(0) = temp1; + theta(1) = temp2; + + //Save the cost J in every iteration + J_history(i) = computeCost(X, y, theta); + + } + +} + +inline double DataProcessor::informationCriterion(const vec& data, + const string& functionName, const vec& paramVet, + const string& criterion) +{ + double criterionVal = .0; + double nEstimatedParameters = double(paramVet.size()); + double likehoodLogVal = logLikehood(data, functionName, paramVet); + double logDataLen = log(double(data.size())); + + if (criterion == "aic") + { + criterionVal = 2 * nEstimatedParameters - 2 * likehoodLogVal; + } + else if (criterion == "bic") + { + criterionVal = nEstimatedParameters * logDataLen - 2 * likehoodLogVal; + } + else + { + cout << "\nInvalid functionName or no functionName selected: " + << functionName << endl; + printf("Selecting default criterion: AIC\n"); + criterionVal = 2 * nEstimatedParameters - 2 * likehoodLogVal; + } + + return (criterionVal); + +} + +inline double DataProcessor::logLikehood(const vec& data, + const string& functionName, const vec& paramVet) +{ + double param1 = paramVet(0); + double param2 = paramVet(1); + double m = data.size(); + double L = .0; + int i = 0; + vec data_prob = zeros(size(data)); + + if (functionName == "weibull") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_weibull(data(i), param1, param2); + } + else if (functionName == "normal") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_normal(data(i), param1, param2); + } + else if (functionName == "uniform") + { + data_prob = ones(size(data)) * pdf_uniform(param1, param2); + } + else if (functionName == "exponential") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_exponential(data(i), param1); + } + else if (functionName == "pareto") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_pareto(data(i), param1, param2); + } + else if (functionName == "cauchy") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_cauchy(data(i), param1, param2); + } + else + { + cout << "Warning, no valid stochastic function selected: " + << functionName << endl; + printf("Likehood logarithm seted to -Inf (worst as possible)\n"); + return (datum::inf); + } + + L = sum(log(data_prob)); + return (L); + +} + +inline double DataProcessor::pdf_weibull(double x, double alpha, double betha) +{ + if (x >= 0) + return ((alpha / pow(betha, alpha)) * pow(x, alpha - 1.0) + * exp(-(pow(x / betha, alpha)))); + else + return (.0); +} + +inline double DataProcessor::cdf_weibull(double x, double alpha, double betha) +{ + if (x >= 0) + return (1.0 - exp(-pow(x / betha, alpha))); + else + return (.0); +} + +inline double DataProcessor::pdf_exponential(double x, double lambda) +{ + if (x >= 0) + return (lambda * exp(-lambda * x)); + else + return (.0); + +} + +inline double DataProcessor::cdf_exponential(double x, double lambda) +{ + if (x >= 0) + return (1.0 - exp(-lambda * x)); + else + return (.0); +} + +inline double DataProcessor::pdf_pareto(double x, double alpha, double xm) +{ + if (x >= xm) + return (alpha * pow(xm, alpha) / (pow(x, alpha + 1.0))); + else + return (.0); +} + +inline double DataProcessor::cdf_pareto(double x, double alpha, double xm) +{ + if (x >= xm) + return (1.0 - pow(xm / x, alpha)); + else + return (.0); +} + +inline double DataProcessor::pdf_cauchy(double x, double gamma, double x0) +{ + return (1 / (datum::pi * gamma) + * (pow(gamma, 2) / (pow(x - x0, 2) + pow(gamma, 2)))); +} + +inline double DataProcessor::cdf_cauchy(double x, double gamma, double x0) +{ + return ((1 / datum::pi) * atan((x - x0) / (gamma)) + 0.5); +} + +inline double DataProcessor::pdf_normal(double x, double mu, double sigma) +{ + return (1 / (sqrt(2 * datum::pi) * sigma) + * exp(-0.5 * pow((x - mu) / sigma, 2))); +} + +inline double DataProcessor::cdf_normal(double x, double mu, double sigma) +{ + return (0.5 * (1 + erf((x - mu) / (sigma * sqrt(2))))); +} + +inline double DataProcessor::pdf_uniform(double x_min, double x_max) +{ + return (1.0 / (x_max - x_min)); +} + +inline double DataProcessor::cdf_uniform(double x, double x_min, double x_max) +{ + if (x < x_min) + return (0); + else if (x > x_max) + return (1); + else + return ((x - x_min) / (x_max - x_min)); +} + +#ifdef TEST_FUNCTIONS + +void DataProcessor::printTestResult(string testName, bool result) +{ + string outRes; + if (result == true) + outRes = "ok"; + else + outRes = "failed"; + + cout << testName << ":\t\t" << outRes << endl; +} + +bool DataProcessor::compareDouble(double val1, double val2) +{ + double error = 0; + + error = fabs(double(val1) - double(val2)); + if (error > double(1e-5)) + return (false); + else + return (true); + +} + +bool DataProcessor::compareDouble(double val1, double val2, double acErr) +{ + double error = 0; + + error = fabs(double(val1) - double(val2)); + if (error > double(acErr)) + return (false); + else + return (true); + +} + +bool DataProcessor::compareMat(mat& mat1, mat& mat2) +{ + int mat1_nc = mat1.n_cols; + int mat1_nr = mat1.n_rows; + int mat2_nc = mat2.n_cols; + int mat2_nr = mat2.n_rows; + + if ((mat1_nc != mat2_nc) || (mat1_nr != mat2_nr)) + { + cout << "mat1.n_cols and mat2.n_cols dont match. " << mat1_nc << ":" + << mat2_nc << " " << mat1_nr << ":" << mat2_nr << endl; + return (false); + } + for (int i = 0; i < mat1_nr; i++) + { + for (int j = 0; j < mat1_nc; j++) + { + if (compareDouble(mat1(i, j), mat2(i, j), 1e-5)) + { + //cout << " mat1(" << i << ", " << j << " ) = " << mat1(i,j); + //cout << " mat2(" << i << ", " << j << " ) = " << mat2(i,j); + return (false); + } + } + } + + return (true); +} + +void DataProcessor::save_data_on_file(const string& fileName, const mat& vet1, + const mat& vet2) +{ + string file_out = fileName + ".txt"; + int m = vet1.size(); + + ofstream writeOnFile(file_out, ios::out); + if (!writeOnFile) + { + cerr << "file could not be oppeded" << endl; + exit(1); + } + + for (int i = 0; i < m; i++) + { + writeOnFile << vet1(i) << " " << vet2(i) << endl; + } + +} + +template +void DataProcessor::save_data_on_file(const string& fileName, list theList) +{ + string file_out = fileName + ".txt"; + int m = theList.size(); + + ofstream writeOnFile(file_out, ios::out); + if (!writeOnFile) + { + cerr << "file could not be oppeded" << endl; + exit(1); + } + + for (list::iterator it = theList.begin(); it != theList.end(); it++) + { + //list::iterator it = randInt_list1.begin(); + writeOnFile << *it << " \n"; + } +} + +bool DataProcessor::test_Mode() +{ + + int randint1[] = + { 1, 8, 1, 13, 9, 2, 1, 15, 4, 3, 10, 4, 13, 2, 14, 7, 7 }; + int randint1_mode = 1; + list l_randint1; + vectorC_to_list(&l_randint1, randint1, 17); + + int randint2[] = + { 5, 3, 6, 8, 14, 9, 11, 9, 11, 15, 8, 7, 12, 13, 14 }; + int randint2_mode = 8; + list l_randint2; + vectorC_to_list(&l_randint2, randint2, 15); + + int randint3[] = + { 9, 10, 6, 3, 13, 13, 14, 7, 7, 1, 5, 1, 8, 5, 9, 2, 3, 4, 5, 6, 6, 6 }; + int randint3_mode = 6; + list l_randint3; + vectorC_to_list(&l_randint3, randint3, 22); + + int randint4[] = + { 2, 1 }; + int randint4_mode = 1; + list l_randint4; + vectorC_to_list(&l_randint4, randint4, 2); + + int randint5[] = + { 1, 1, 1, 1, 1, 2, 2, 2, 2, 2 }; + int randint5_mode = 1; + list l_randint5; + vectorC_to_list(&l_randint5, randint5, 10); + + if (mode(&l_randint1) != randint1_mode) + return (false); + if (mode(&l_randint2) != randint2_mode) + return (false); + if (mode(&l_randint3) != randint3_mode) + return (false); + if (mode(&l_randint4) != randint4_mode) + return (false); + if (mode(&l_randint5) != randint5_mode) + return (false); + + return (true); +} + +bool DataProcessor::test_QuickSort() +{ + int randIntA[] = + { 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; + int randIntA_size = 18; + int randIntA_sorted[] = + { 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9 }; + int randIntB[] = + { 9, 2, 3, 3, 12, 15, 8, 14, 2, 7, 4, 6, 10, 2, 12 }; + int randIntB_size = 15; + int randIntB_sorted[] = + { 2, 2, 2, 3, 3, 4, 6, 7, 8, 9, 10, 12, 12, 14, 15 }; + double randDoubleA[] = + { 0.20872, 12.25501, 5.88210, 2.77962, 8.74916, 2.97454, 4.39641, 12.19733, + 4.66014, 4.52477, 5.19375, 12.11314, 13.35458, 11.56941, 6.59435 }; + int randDoubleA_size = 15; + double randDoubleA_sorted[] = + { 0.20872, 2.77962, 2.97454, 4.39641, 4.52477, 4.66014, 5.19375, 5.88210, + 6.59435, 8.74916, 11.56941, 12.11314, 12.19733, 12.25501, 13.35458 }; + + quickSort(randIntA, 0, randIntA_size - 1); + + if (isEqual(randIntA, randIntA_sorted, randIntA_size) == false) + { + return (false); + } + + quickSort(randIntB, 0, randIntB_size - 1); + if (isEqual(randIntB, randIntB_sorted, randIntB_size) == false) + { + return (false); + } + + quickSort(randDoubleA, 0, randDoubleA_size - 1); + if (isEqual(randDoubleA, randDoubleA_sorted, randDoubleA_size) == false) + { + return (false); + } + + return (true); + +} + +bool DataProcessor::test_list_tocvector() +{ + list randInt_list1 = + { 9, 2, 3, 3, 12, 15, 8, 14, 2, 7, 4, 6, 10, 2, 12 }; + list randInt_list2 = + { 2.2, 2.111, 3.16, 6.66, 13, 2.61 }; + list randInt_list3 = + { 1, 2, 3, 4, 5, 6, 6, 5, 4, 3, 2, 1 }; + + int* cvet1 = NULL; + double* cvet2 = NULL; + int* cvet3 = NULL; + + cvet1 = list_to_cvector(&randInt_list1); + cvet2 = list_to_cvector(&randInt_list2); + cvet3 = list_to_cvector(&randInt_list3); + + int i = 0; + for (list::iterator it = randInt_list1.begin(); + it != randInt_list1.end(); it++) + { + if (cvet1[i] != *it) + { + return (false); + } + //cout << *it << " "; + i++; + } + i = 0; + for (list::iterator it = randInt_list2.begin(); + it != randInt_list2.end(); it++) + { + if (cvet2[i] != *it) + { + return (false); + } + //cout << *it << " "; + i++; + } + i = 0; + for (list::iterator it = randInt_list3.begin(); + it != randInt_list3.end(); it++) + { + if (cvet3[i] != *it) + { + return (false); + } + //cout << *it << " "; + i++; + } + + delete_cvector(cvet1); + delete_cvector(cvet2); + delete_cvector(cvet3); + + return (true); +} + +bool DataProcessor::test_empiricalCdf() +{ + list interArrival_sample = + { 5.0000e-07, 1.5000e-06, 1.5000e-06, 2.5000e-06, 2.5000e-06, 3.5000e-06, + 4.5000e-06, 7.5000e-06, 1.2500e-05, 1.9500e-05, 3.1500e-05, + 4.3500e-05, 6.0500e-05, 7.6500e-05, 1.1050e-04, 1.4050e-04, + 1.8150e-04, 2.1150e-04, 2.3350e-04, 2.4350e-04, 2.5650e-04, + 3.0350e-04, 4.1250e-04, 1.3655e-03, 1.1593e-02, 3.2483e-02, + 8.1235e-02, 2.0939e-01, 5.0755e-01, 1.7351e+00 }; + vec emCdf_octave = + { 0.033333, 0.100000, 0.100000, 0.166667, 0.166667, 0.200000, 0.233333, + 0.266667, 0.300000, 0.333333, 0.366667, 0.400000, 0.433333, + 0.466667, 0.500000, 0.533333, 0.566667, 0.600000, 0.633333, + 0.666667, 0.700000, 0.733333, 0.766667, 0.800000, 0.833333, + 0.866667, 0.900000, 0.933333, 0.966667, 1.000000 }; + //emCdf_octave = emCdf_octave.t(); + + vec* emCdf_cpp = empiricalCdf(interArrival_sample); + + int list_size = interArrival_sample.size(); + for (int i = 0; i < list_size; i++) + { + if (!compareDouble(emCdf_octave(i), (*emCdf_cpp)(i), 1e-6)) + { + cout << "cdf error @ " << "i:" << i << " res:" << (*emCdf_cpp)(i, 0) + << " expected:" << emCdf_octave(i, 0) << endl; + return (false); + } + } + + delete emCdf_cpp; + return (true); +} + +bool DataProcessor::test_computeCost() +{ + list interArrival_sample = + { 5.0000e-07, 1.5000e-06, 1.5000e-06, 2.5000e-06, 2.5000e-06, 3.5000e-06, + 4.5000e-06, 7.5000e-06, 1.2500e-05, 1.9500e-05, 3.1500e-05, + 4.3500e-05, 6.0500e-05, 7.6500e-05, 1.1050e-04, 1.4050e-04, + 1.8150e-04, 2.1150e-04, 2.3350e-04, 2.4350e-04, 2.5650e-04, + 3.0350e-04, 4.1250e-04, 1.3655e-03, 1.1593e-02, 3.2483e-02, + 8.1235e-02, 2.0939e-01, 5.0755e-01, 1.7351e+00 }; + mat* X = featureMatrix(interArrival_sample); + vec emCdf_octave = + { 0.033333, 0.100000, 0.100000, 0.166667, 0.166667, 0.200000, 0.233333, + 0.266667, 0.300000, 0.333333, 0.366667, 0.400000, 0.433333, + 0.466667, 0.500000, 0.533333, 0.566667, 0.600000, 0.633333, + 0.666667, 0.700000, 0.733333, 0.766667, 0.800000, 0.833333, + 0.866667, 0.900000, 0.933333, 0.966667, 1.000000 }; + //emCdf_octave = emCdf_octave.t(); + double J_expected1 = 0.17535; + double J_expected2 = 1.5341; + double J_expected3 = 9.0244; + + vec theta = zeros(2); + + double J = computeCost(*X, emCdf_octave, theta); + if (!compareDouble(J, J_expected1, 0.001)) + { + //cout << "J1 = " << J << "\nJ_expected1 = "<< J_expected1 << endl; + return (false); + } + theta(0) = 2; + theta(1) = 2; + J = computeCost(*X, emCdf_octave, theta); + if (!compareDouble(J, J_expected2, 0.001)) + { + //cout << "J2 = " << J << "\nJ_expected2 = "<< J_expected2 << endl; + return (false); + } + theta(0) = 1.5; + theta(1) = 12; + J = computeCost(*X, emCdf_octave, theta); + if (!compareDouble(J, J_expected3, 0.001)) + { + //cout << "J3 = " << J << "\nJ_expected3 = "<< J_expected3 << endl; + return (false); + } + + delete X; + return (true); +} + +bool DataProcessor::test_informationCriterion() +{ + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + + int m = interArrival.size(); + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + //gradient descendent + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + vec y = log(-log(1.0 + diferential - *interArrivalCdf)); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + double weibull_alpha = theta(1); + double weibull_betha = exp(-theta(0) / theta(1)); + vec paramVec = + { weibull_alpha, weibull_betha }; + double weibull_bic = informationCriterion(interArrival, "weibull", paramVec, + "bic"); + double weibull_aic = informationCriterion(interArrival, "weibull", paramVec, + "aic"); + + if (!compareDouble(weibull_bic, -33712.7042, 0.001)) + return (false); + else if (!compareDouble(weibull_aic, -33724.6567, 0.001)) + return (false); + + return (true); +} + +bool DataProcessor::test_pdf_weibull() +{ + double alpha = 1.5000; + double betha = 0.3; + vec data = + { 0.010000, 2.300000, 0.500000 }; + vec dataprob_eval1 = + { 9.0733e-01, 8.3571e-09, 7.5066e-01 }; + vec dataprob_test = zeros(3); + + dataprob_test(0) = pdf_weibull(data(0), alpha, betha); + dataprob_test(1) = pdf_weibull(data(1), alpha, betha); + dataprob_test(2) = pdf_weibull(data(2), alpha, betha); + + if (compareDouble(dataprob_test(0), dataprob_eval1(0)) + && compareDouble(dataprob_test(1), dataprob_eval1(1)) + && compareDouble(dataprob_test(2), dataprob_eval1(2))) + { + return (true); + } + + return (false); +} + +bool DataProcessor::test_cdf_weibull() +{ + double alpha = 0.5; + double betha = 1.5; + vec data = + { 0.010000, 2.300000, 0.500000 }; + vec dataprob_eval1 = + { 0.078405, 0.710117, 0.438616 }; + vec dataprob_test = zeros(3); + + dataprob_test(0) = cdf_weibull(data(0), alpha, betha); + dataprob_test(1) = cdf_weibull(data(1), alpha, betha); + dataprob_test(2) = cdf_weibull(data(2), alpha, betha); + //cout << dataprob_test(0) << " : " << dataprob_test(1) << " : " << dataprob_test(2) << endl; + + if (compareDouble(dataprob_test(0), dataprob_eval1(0)) + && compareDouble(dataprob_test(1), dataprob_eval1(1)) + && compareDouble(dataprob_test(2), dataprob_eval1(2))) + { + return (true); + } + + return (false); +} + +bool DataProcessor::test_gradientDescendent() +{ + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + + int m = interArrival.size(); + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + //gradient descendent + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + vec y = log(-log(1.0 + diferential - *interArrivalCdf)); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //expected values + double Jlast = 0.083359; + double theta0 = 1.660453; + double theta1 = 0.248811; + + if (!compareDouble(J_history(iterations - 1), Jlast)) + + { + return (false); + } + else if (!compareDouble(theta(0), theta0)) + { + return (false); + } + else if (!compareDouble(theta(1), theta1)) + { + return (false); + } + + delete interArrivalCdf; + delete X; + return (true); + +} + +bool DataProcessor::test_pdf_exponential() +{ + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double lambda1 = 0.50000; + vec val1 = + { 0.49751, 0.15832, 0.38940 }; + vec res1 = zeros(3); + + double lambda2 = 3.0; + vec val2 = + { 2.9113366, 0.0030234, 0.6693905 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = pdf_exponential(data(i), lambda1); + res2(i) = pdf_exponential(data(i), lambda2); + + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + + } + + return (true); +} + +bool DataProcessor::test_cdf_exponential() +{ + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double lambda1 = 0.50000; + vec val1 = + { 0.0049875, 0.6833632, 0.2211992 }; + vec res1 = zeros(3); + + double lambda2 = 3.0; + vec val2 = + { 0.029554, 0.998992, 0.776870 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = cdf_exponential(data(i), lambda1); + res2(i) = cdf_exponential(data(i), lambda2); + + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + + return (true); +} + +bool DataProcessor::test_pdf_pareto() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double alpha1 = 0.50000; + double xm1 = 1.0; + vec val1 = + { 0, 0.14334, 0 }; + vec res1 = zeros(3); + double xm2 = 0.00001; + double alpha2 = 3.0; + vec val2 = + { 3.0000e-07, 1.0720e-16, 4.8000e-14 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = pdf_pareto(data(i), alpha1, xm1); + res2(i) = pdf_pareto(data(i), alpha2, xm2); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + + return (true); +} + +bool DataProcessor::test_cdf_pareto() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double alpha1 = 0.50000; + double xm1 = 0.001; + vec val1 = + { 0.68377, 0.97915, 0.95528 }; + vec res1 = zeros(3); + double xm2 = 0.2; + double alpha2 = 1; + vec val2 = + { 0, 0.91304, 0.60000 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = cdf_pareto(data(i), alpha1, xm1); + res2(i) = cdf_pareto(data(i), alpha2, xm2); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + return (true); +} + +bool DataProcessor::test_pdf_cauchy() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + double gamma1 = 0.50000; + double x01 = 0.001; + + vec val1 = + { 0.636414, 0.028752, 0.318947 }; + vec res1 = zeros(3); + double x02 = 2; + double gamma2 = 2; + + vec val2 = + { 0.079976, 0.155653, 0.101859 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = pdf_cauchy(data(i), gamma1, x01); + res2(i) = pdf_cauchy(data(i), gamma2, x02); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + return (true); +} + +bool DataProcessor::test_cdf_cauchy() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + double gamma1 = 0.50000; + double x01 = 0.001; + + vec val1 = + { 0.50573, 0.93183, 0.74968 }; + vec res1 = zeros(3); + double x02 = 2; + double gamma2 = 2; + + vec val2 = + { 0.25080, 0.54739, 0.29517 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = cdf_cauchy(data(i), gamma1, x01); + res2(i) = cdf_cauchy(data(i), gamma2, x02); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + return (true); +} + +bool DataProcessor::test_fitModels() +{ + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + + int m = interArrival.size(); + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + //list of expected values + double weibull_alpha = 0.24881; + double weibull_betha = 0.0012639; + double normal_mu = 0.054792; + double normal_sigma = 0.205602; + double exponentialMe_lambda = 18.250783; + double exponentialLr_lambda = 2.023115; + double paretoLr_alpha = 0.225451; + double paretoLr_xm = 0.000000; + double paretoMlh_alpha = 0.171674; + double paretoMlh_xm = 0.000000; + double cauchy_gamma = 0.000067; + double cauchy_x0 = 0.005750; + double acErr = 0.001; + + vec paramVec = zeros(2); + vec infoCriterion = zeros(2); + + weibullFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), weibull_alpha, acErr)) + { + cout << "weibullFitting alpha" << endl; + return (false); + } + if (!compareDouble(paramVec(1), weibull_betha, acErr)) + { + cout << "weibullFitting betha" << endl; + return (false); + } + + normalFitting(interArrival, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), normal_mu, acErr)) + { + cout << "normalFitting mu" << endl; + return (false); + } + if (!compareDouble(paramVec(1), normal_sigma, acErr)) + { + cout << "normalFitting sigma" << endl; + return (false); + } + + exponentialMeFitting(interArrival, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), exponentialMe_lambda, acErr)) + { + cout << "exponentialLrFitting lambda" << endl; + return (false); + } + + exponentialLrFitting(interArrival, *interArrivalCdf, paramVec, + infoCriterion); + if (!compareDouble(paramVec(0), exponentialLr_lambda, acErr)) + { + cout << exponentialLr_lambda << ":" << paramVec(0) << endl; + cout << "exponentialLrFitting lambda" << endl; + return (false); + } + + paretoLrFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), paretoLr_alpha, acErr)) + { + cout << "paretoLrFitting alpha" << endl; + return (false); + } + if (!compareDouble(paramVec(1), paretoLr_xm, acErr)) + { + cout << "paretoLrFitting xm" << endl; + return (false); + } + + paretoMlhFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), paretoMlh_alpha, acErr)) + { + cout << "paretoMlhFitting alpha" << endl; + return (false); + } + if (!compareDouble(paramVec(1), paretoMlh_xm, acErr)) + { + cout << "paretoMlhFitting xm" << endl; + return (false); + } + + cauchyFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), cauchy_gamma, acErr)) + { + cout << "cauchyFitting" << endl; + return (false); + } + if (!compareDouble(paramVec(1), cauchy_x0, acErr)) + { + return (false); + } + + delete interArrivalCdf; + + return (true); +} + +bool DataProcessor::test_modelSelection() +{ + + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + int m = interArrival.size(); + + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + StochasticModelFit* modelVet = NULL; + modelVet = fitModels(list_interArrival, "aic"); + + //int numberOfModels = modelVet[0].size; + //for (int i = 0; i < numberOfModels; i++) + // cout << modelVet[i].modelName << " " << "modelVet[" << i << "] = " + // << modelVet[i].aic << endl; + + delete interArrivalCdf; + delete[] modelVet; + return (true); +} + +#endif //TEST_FUNCTIONS diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/6/e03e0d93acb500161808a5c64fd2084a b/.metadata/.plugins/org.eclipse.core.resources/.history/6/e03e0d93acb500161808a5c64fd2084a new file mode 100644 index 0000000..0f67087 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/6/e03e0d93acb500161808a5c64fd2084a @@ -0,0 +1,885 @@ +/* + * DataProcessor.h + * + * Created on: 14 de jun de 2016 + * Author: apaschoalon + */ + +#ifndef DATAPROCESSOR_H_ +#define DATAPROCESSOR_H_ + +//external libs +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +//local libs +#include "DatabaseInterface.h" +#include "NetworkTrace.h" +#include "Defines.h" +#include "StochasticModelFit.h" + +//namespaces +using std::string; +using namespace arma; + +#define DEBUG_StochasticModelFit 1 + + +//TODO: this class must be static +class DataProcessor +{ +public: + + /** + * Default constructor + */ + DataProcessor(); + + /** + * Destructor. Clean any allocated memory + */ + virtual ~DataProcessor(); + + /** + * @brief Returns a string information about the class + * Returns a string information about the class + * + * @param void + * @return string + */ + string toString(void); + + /** + * @brief This method parameterize a network trace. + * Through the database interface class, this method retrieves all desired + * data from the database, in order to calculate and set parameters in a + * NetworkTrace class instance. This method knows all the labels and types + * of each database column, and how to deal with them correctly. So this + * method should be up to date with the database. After calculating all + * parameters, this class should save the data on the Network trace + * object and on its flows through netTrace.set() and netTace.flow[n].set() + * methods. + * + * @param experimentName experiment name string + * @param databaseInterface class interface to the database + * @param netTrace network trace class, which will be parameterized + * @return returns 0 in success + */ + int calculate(const string& experimentName, + DatabaseInterface* databaseInterface, NetworkTrace* netTrace); + +#ifdef TEST_FUNCTIONS + void save_data_on_file(const string& fileName, const mat& vet1, + const mat& vet2); + void DataProcessor::save_data_on_file(const string& fileName, list theList); + void printTestResult(string testName, bool result); + bool compareDouble(double val1, double val2); + bool compareDouble(double val1, double val2, double acErr); + bool compareMat(mat& mat1, mat& mat2); + bool test_QuickSort(); + bool test_Mode(); + bool test_list_tocvector(); + bool test_empiricalCdf(); + bool test_computeCost(); + bool test_informationCriterion(); + bool test_gradientDescendent(); + bool test_pdf_weibull(); + bool test_cdf_weibull(); + bool test_pdf_exponential(); + bool test_cdf_exponential(); + bool test_pdf_pareto(); + bool test_cdf_pareto(); + bool test_pdf_cauchy(); + bool test_cdf_cauchy(); + bool test_fitModels(); + bool test_modelSelection(); +#endif //TEST_FUNCTIONS + +private: + /** + * A time smaller than the min_time resolution. Once the current resolution + * is 1e-6, min_time is half of this value. This value is used as default + * as substitute for times equal to zero. + */ + double min_time = 5e-7; + + /** + * A very small time value. This is used to avoid evaluating the operation + * log(0), which is undefined. + */ + double diferential = 4e-14; + + // calculate the mean packet rate + int mean_packetRate(list& pakcetSizeList, double duration); + + //calculate the most frequent element from a list + long int mode(list& thelist); + + /** + * ACTUAL FUNCTIONS + */ + // Take as input a vector vet[], its first and last position to be + // sorted. After the execution vet[] will be sorted. + // T* vet : C vector + // int left: fist position of the C vector to be sorted, usually 0. + // int right: last position of the C vector to be sorted, usually size-1; + template void quickSort(T* vet, int left, int right); + // Evaluate the mode (the most frequent value) of a list list + template T mode(list* theList); + + /** + * @brief Converts a list to a C vector. + * Converts a list to a C vector. + * @param theList + * @return + */ + template T* list_to_cvector(list* theList); + + /** + * @brief Delete a C vector + * @param c_vet pointer to the C vector + */ + template void delete_cvector(T* c_vet); + + /** + * @brief Compare two C vectors T. + * Compare two C vectors of types T. If they are equal, returns "true". If + * they are not, returns "false". + * + * @param vet1 + * @param vet2 + * @param size + * @return + */ + template bool isEqual(const T* vet1, const T* vet2, + const int size); + /** + * \brief convert a C vector T to a list + * + * @param theList pointer to an empty list + * @param vet pointer to a C vector + * @param size size of the C vector + */ + template void vectorC_to_list(list* theList, T* vet, + int size); + + /** + * Return an empirical vector of the Cumulative distribution function. + * This method take as input a list of empirical data, and create a + * vector (of the same size) of an empirical evaluation of the cumulative + * distribution function. Return must be freed using delete. + * + * @param list + * @return vec* empirical cumulative vector + */ + vec* empiricalCdf(list& empiricalData); + + //feature matrix: return a matrix X(m, 2) = [1 data]. Must be freed using delete. + /** + * @brief Creates a feature matrix for linear regression + * Creates a feature matrix X(m, 2) = [1 data], for the linear regression. + * Must be freed using delete. + * + * @param empiricalData list of the empirical data. + * @return returns a pointer to the feature matrix + */ + mat* featureMatrix(list& empiricalData); + + /** + * @brief Creates a feature matrix for linear regression + * Creates a feature matrix X(m, 2) = [1 data], for the linear regression. + * Must be freed using delete. + * + * @param empiricalData vector vec of the empirical data. + * @return returns a pointer to the feature matrix + */ + mat* featureMatrix(const vec& empiricalData); + + /** + * @brief Compute cost of the gradient descendent function + * It returns the value of the cost function for the list of parameteres + * + * @param X feature matrix + * @param y expected values + * @param theta linear regression coeficients [theta1; theta2] + * @return cost value + */ + double computeCost(const mat& X, const vec& y, const vec& theta); + + /** + * @brief Gradient descendent algorithm + * Evaluates the gradient descendent + * + * @param X feature matrix + * @param y + * @param learning_rate + * @param num_iters + * @param theta + * @param J_history + */ + void gradientDescendent(const mat& X, const vec& y, + const double learning_rate, const int num_iters, vec& theta, + vec& J_history); + + /** + * @brief information criterion + * + * @param data + * @param functionName + * @param paramVet + * @param criterion + * @return + */ + double informationCriterion(const vec& data, const string& functionName, + const vec& paramVet, const string& criterion); + + /** + * @brief natural logarithm of likehood function + * + * @param data + * @param functionName + * @param paramVet + * @return + */ + double logLikehood(const vec& data, const string& functionName, + const vec& paramVet); + /** + * @brief fit weibull alpha and betha using linear regression + * + * @param interArrival + * @param interArrivalCdf + * @param paramVec + * @param informationCriterion + */ + void weibullFitting(const vec& interArrival, const vec& interArrivalCdf, + vec& paramVec, vec& informationCriterion); + + /** + * @brief evaluate mean and standard deviation + * + * @param interArrival + * @param paramVec + * @param informationCriterion + */ + void normalFitting(const vec& interArrival, vec& paramVec, + vec& informationCriterion); + + /** + * @brief evaluate lambda using linear regression + * + * @param interArrival + * @param interArrivalCdf + * @param paramVec + * @param informationCriterion + */ + void exponentialLrFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, + vec& informationCriterion); + + /** + * @brief evaluate lambda using mean estimation + * + * @param interArrival + * @param paramVec + * @param informationCriterion + */ + void exponentialMeFitting(const vec& interArrival, vec& paramVec, + vec& informationCriterion); + + /** + * @brief evaluate pareto's alpha and xm using Linear regression + * + * @param interArrival + * @param interArrivalCdf + * @param paramVec + * @param informationCriterion + */ + void paretoLrFitting(const vec& interArrival, const vec& interArrivalCdf, + vec& paramVec, vec& informationCriterion); + + /** + * @brief evaluate pareto's alpha and xm using maximum likehood method + * + * @param interArrival + * @param interArrivalCdf + * @param paramVec + * @param informationCriterion + */ + void paretoMlhFitting(const vec& interArrival, const vec& interArrivalCdf, + vec& paramVec, vec& informationCriterion); + + /** + * @brief evaluate cauchy's gamma and x0 using linear regression + * + * @param interArrival + * @param interArrivalCdf + * @param paramVec + * @param informationCriterion + */ + void cauchyFitting(const vec& interArrival, const vec& interArrivalCdf, + vec& paramVec, vec& informationCriterion); + + /** + * @brief + * + * @param interArrival + * @param paramVec + * @param informationCriterion + */ + void constantFitting(const vec& interArrival, vec& paramVec, + vec& informationCriterion); + + /** + * @brief returns probability of a given + * @param x + * @param alpha + * @param betha + * @return + */ + double pdf_weibull(double x, double alpha, double betha); + + /** + * + * @param x + * @param alpha + * @param betha + * @return + */ + double cdf_weibull(double x, double alpha, double betha); + + /** + * + * @param x + * @param lambda + * @return + */ + double pdf_exponential(double x, double lambda); + + /** + * + * @param x + * @param lambda + * @return + */ + double cdf_exponential(double x, double lambda); + + /** + * + * @param x + * @param alpha + * @param xm + * @return + */ + double pdf_pareto(double x, double alpha, double xm); + + /** + * + * @param x + * @param alpha + * @param xm + * @return + */ + double cdf_pareto(double x, double alpha, double xm); + + /** + * + * @param x + * @param gamma + * @param x0 + * @return + */ + double pdf_cauchy(double x, double gamma, double x0); + + /** + * + * @param x + * @param gamma + * @param x0 + * @return + */ + double cdf_cauchy(double x, double gamma, double x0); + + /** + * + * @param x + * @param mu + * @param sigma + * @return + */ + double pdf_normal(double x, double mu, double sigma); + + /** + * + * @param x + * @param mu + * @param sigma + * @return + */ + double cdf_normal(double x, double mu, double sigma); + + /** + * + * @param x_min + * @param x_max + * @return + */ + double pdf_uniform(double x_min, double x_max); + + /** + * + * @param x + * @param x_min + * @param x_max + * @return + */ + double cdf_uniform(double x, double x_min, double x_max); + + // Take as input a list o inter-arrival times, and a pointer to a C vector + // of the struct StochasticModelFit. The available models are ordered here, + // from the best to the worst, according to the specified criterion BIC or + // AIC. If it is not specified, it uses as default AIC. + + /** + * + * @param empiricalData + * @param criterion + * @return + */ + StochasticModelFit* fitModels(list& empiricalData, + const string& criterion); + +#ifdef TEST_FUNCTIONS + + vec interArrivalSample = + { 0, 0, 0.000203, 1e-05, 0.318392, 1.00003, 0.517214, 3.2e-05, 7.6e-05, + 0.159572, 0.028456, 0.000267, 1.6e-05, 0.000362, 0.001436, 0.012243, + 0.052051, 0.010572, 0.300375, 1.6e-05, 0.00012, 0.171993, 0.000161, + 0.180517, 0.336145, 9e-06, 0.007852, 0.044852, 0.020313, 0.030458, + 0.218979, 0.250961, 0.158453, 0.042762, 0.129894, 0.01578, 0.016078, + 3.1e-05, 2.2e-05, 0.000309, 1.8e-05, 7.1e-05, 3e-06, 0.00018, 6e-06, + 0.041497, 0.094336, 0.030568, 0.69278, 0.083745, + 0.09501999999999999, 0.246721, 0.000322, 1.5e-05, 6.4e-05, 0.00031, + 6.600000000000001e-05, 0.000203, 5.4e-05, 4e-06, 4.6e-05, + 0.0005509999999999999, 0.046676, 0.000133, 0.00025, 0.000106, 4e-06, + 6e-05, 0.000579, 0.020548, 0.020144, 0.00017, 4.3e-05, 3.8e-05, + 0.000403, 8.8e-05, 9.2e-05, 2.1e-05, 8.899999999999999e-05, 7.9e-05, + 0.037013, 0.003625, 0.000174, 0.001402, 0.01547, 0.000137, 0.000257, + 0.000181, 0.000249, 0.000175, 0.000262, 0.000188, 0.000245, + 0.000198, 0.000194, 0.039691, 0.377134, 0.025489, + 0.08887399999999999, 0.071201, 0.118396, 0.011301, 0.18306, + 0.471818, 1.2e-05, 0.057105, 0.158384, 0.033412, 0.279247, 0.615341, + 0.07193099999999999, 0.041286, 6e-06, 6.4e-05, 0.000615, 0.000159, + 1.5e-05, 0.179127, 0.003532, 0.087938, 0.128529, 0.003537, 0.555139, + 0.312737, 0.614656, 0.20354, 0.18178, 0.728741, 0.227757, 0.657457, + 1.122729, 0.000405, 1.1e-05, 0.876119, 1.999258, 0.936457, 0.000285, + 1.2e-05, 4.5e-05, 5.3e-05, 0.000321, 0.000137, 0.00026, 0.00031, + 0.000224, 2.5e-05, 0.000171, 3.7e-05, 0.000211, 9.3e-05, 0.000175, + 2.8e-05, 0.000447, 0.000124, 3e-06, 0.000121, 0.000124, 1.3e-05, + 0.000111, 0.000129, 3e-06, 3.6e-05, 3e-06, 1.8e-05, 3.9e-05, + 8.6e-05, 0.00021, 0.000239, 0.000161, 3.2e-05, 0.000224, 0.001489, + 0.00078, 0.000127, 7e-06, 0.000197, 0.000703, 2.5e-05, 0.000145, + 0.00263, 0.001061, 0.001058, 8e-06, 1.5e-05, 4.6e-05, 0.001069, + 0.013118, 6.4e-05, 0.016585, 0.008005, 0.004525, 0.01047, 1.1e-05, + 4e-06, 1e-06, 1e-06, 1e-06, 0.000346, 0.003028, 0.3629, 0.605291, + 0.024532, 0.13292, 6e-06, 2e-06, 2e-06, 2e-06, 2e-06, 3.5e-05, + 0.000585, 0.000348, 0.000227, 0.000171, 7e-06, 0.08057, 0.758265, + 0.999926, 0.026228, 0.430843, 0.460833, 0.076263, 0.682728, + 0.000663, 0.286479, 0.000348, 1.2e-05, 5e-05, 0.000407, 4.8e-05, + 0.000171, 5e-05, 0.000202, 3.5e-05, 0.000215, 2.7e-05, 0.000227, + 3.3e-05, 0.000461, 0.000124, 8e-06, 0.000109, 0.000124, 7e-06, + 0.000115, 0.000123, 1e-06, 0.000122, 0.000125, 3e-06, 0.000122, + 0.000121, 1.8e-05, 0.000105, 3.5e-05, 4e-06, 4.6e-05, 0.000216, + 8.6e-05, 0.000174, 0.000106, 0.00019, 7.8e-05, 0.000171, 7.1e-05, + 0.000256, 0.000219, 0.000174, 8.899999999999999e-05, 0.000168, + 0.000114, 8e-06, 4.5e-05, 0.000549, 0.041588, 9.399999999999999e-05, + 0.000272, 5.8e-05, 4e-06, 4.2e-05, 0.000563, 0.012524, 0.011557, + 0.000133, 0.033325, 8.1e-05, 3.4e-05, 0.000523, 0.041159, 5.2e-05, + 2.3e-05, 5.7e-05, 0.016827, 9.500000000000001e-05, 0.000229, + 7.1e-05, 0.000184, 7.2e-05, 0.000183, 5.3e-05, 0.000166, 3.2e-05, + 0.000225, 0.037247, 1.000281, 1.5e-05, 1.8e-05, 3.9e-05, 7e-06, + 6e-06, 5.9e-05, 8e-06, 4e-06, 4.7e-05, 0.000492, 4.2e-05, 7e-06, + 4e-06, 3e-06, 6e-06, 2.5e-05, 6e-05, 1.8e-05, 6e-06, 1.8e-05, 6e-06, + 5.7e-05, 1.5e-05, 0.000178, 3.4e-05, 6e-06, 4e-06, 4e-06, 7e-06, + 0.000154, 1.6e-05, 4e-06, 3e-06, 4e-06, 5.7e-05, 0.000236, 4.2e-05, + 7e-06, 3e-06, 4e-06, 0.000261, 4.1e-05, 6e-06, 8.3e-05, 4.9e-05, + 8e-06, 5e-06, 4e-06, 4e-06, 5e-06, 1.1e-05, 0.000377, 4.3e-05, + 8e-06, 4e-06, 4e-06, 6e-06, 4e-06, 9e-06, 0.000183, 2.7e-05, 6e-06, + 3e-06, 4e-06, 0.000203, 2.5e-05, 6e-06, 3e-06, 4e-06, 6e-06, 0.0002, + 2.8e-05, 6e-06, 4e-06, 4e-06, 7e-06, 0.000205, 2.7e-05, 6e-06, + 4e-06, 3e-06, 0.000183, 2.9e-05, 6e-06, 4e-06, 3e-06, 7e-06, + 0.000217, 2.6e-05, 6e-06, 4e-06, 3e-06, 6e-06, 0.000209, 3.5e-05, + 6e-06, 3e-06, 3e-06, 0.000247, 4.3e-05, 5e-06, 3e-06, 3e-06, 7e-06, + 8.000000000000001e-05, 1.4e-05, 4e-06, 4e-06, 3e-06, 7.6e-05, + 0.000233, 4.2e-05, 6e-06, 3e-06, 3e-06, 0.000108, 1.4e-05, 5e-06, + 4e-06, 5.5e-05, 0.000259, 3.3e-05, 3.4e-05, 0.000106, 0.000304, + 0.000247, 3.3e-05, 0.000169, 0.000276, 3.3e-05, 3.2e-05, 0.000112, + 0.000275, 0.000284, 0.000244, 6.4e-05, 0.00013, 0.000222, 0.000244, + 0.000377, 0.000136, 0.000324, 6.1e-05, 0.000101, 0.000304, 0.000205, + 0.000298, 0.000202, 0.000265, 4.3e-05, 0.000182, 0.000198, 3.6e-05, + 0.036618, 0.167993, 0.000405, 5.6e-05, 0.132945, 0.5075499999999999, + 1.839101, 0.160079, 0.856059, 0.00019, 0.814619, 0.001748, 0.326707, + 0.016594, 0.104517, 0.000487, 1.2e-05, 3.5e-05, 0.030896, 1.3e-05, + 2.5e-05, 2e-06, 5.6e-05, 2e-06, 0.00016, 8e-06, 1e-06, 4.4e-05, + 6e-06, 0.000232, 2e-06, 9.6e-05, 5e-06, 1e-06, 0.000219, 3e-06, + 1e-06, 0.000281, 4e-06, 1e-06, 0.000247, 2e-06, 1e-06, 0.000182, + 4e-06, 1e-06, 0.000234, 3e-06, 2e-06, 0.000331, 7e-06, 2e-06, + 0.000228, 7e-06, 0.000124, 0.000342, 0.000243, 0.000109, 8e-06, + 0.00015, 6.1e-05, 8e-06, 0.006888, 7.4e-05, 0.033877, 0.03964, + 0.031221, 0.027626, 0.029209, 0.027819, 0.008146, 0.003837, + 0.054232, 0.141787, 0.189477, 0.000731, 0.037917, 0.239763, + 0.016276, 0.101792, 0.121279, 0.569522, 0.162138, 0.167452, + 0.100904, 0.050978, 0.193571, 0.023699, 0.00188, 0.7299330000000001, + 0.14706, 0.069059, 0.000354, 2.1e-05, 0.000376, 0.051512, 4e-05, + 0.00026, 1.9e-05, 5.1e-05, 4e-06, 6e-05, 0.000322, 4.5e-05, 1.3e-05, + 9e-06, 7.8e-05, 3.9e-05, 0.000258, 5.4e-05, 6.9e-05, 8e-06, 6.2e-05, + 0.000148, 4.2e-05, 0.000136, 5.7e-05, 4.7e-05, 0.000226, 0.00012, + 0.000106, 5.4e-05, 0.000169, 9.7e-05, 0.000135, 5.3e-05, 0.000161, + 5.6e-05, 2.9e-05, 1.1e-05, 2.8e-05, 2.9e-05, 0.000329, 4.8e-05, + 2.4e-05, 1e-05, 3.4e-05, 2.8e-05, 0.000345, 0.000111, 0.000216, + 8e-06, 0.010716, 0.000189, 0.002223, 0.000222, 0.000261, 6.1e-05, + 0.000497, 0.000121, 6e-06, 3.1e-05, 7.4e-05, 0.000316, 0.000201, + 0.000241, 0.037019, 0.011593, 0.025272, 1.2e-05, 0.005462, 0.000153, + 0.000308, 1.8e-05, 0.000457, 0.000157, 1.2e-05, 0.000111, + 6.499999999999999e-05, 8.500000000000001e-05, 0.000121, 0.036178, + 0.062789, 0.209764, 2.2e-05, 0.000104, 0.000598, 0.000113, 0.000858, + 0.001237, 1.1e-05, 6.4e-05, 0.022295, 0.002239, 0.02595, 0.048743, + 2.3e-05, 0.048933, 0.000101, 3.8e-05, 0.134329, 0.013961, 1e-05, + 0.003331, 7e-06, 0.006234, 0.000175, 8e-06, 0.0002, 0.000699, + 2.4e-05, 0.001724, 6e-06, 0.000252, 1.3e-05, 0.00269, 0.000125, + 7e-06, 0.000158, 0.007282, 0.015473, 0.064868, 6e-06, 0.216, + 2.2e-05, 2.9e-05, 6.9e-05, 0.000317, 1.4e-05, 0.002346, 0.00051, + 0.005226, 2e-05, 0.019417, 0.001007, 0.000196, 0.005594, 0.005761, + 0.008026, 0.09038, 0.000229, 0.000128, 0.209391, 0.231852, 0.032119, + 5e-06, 5e-06, 2e-06, 2e-06, 1e-06, 2e-06, 3.3e-05, 0.000664, 1e-05, + 2e-06, 0, 1e-06, 1e-06, 8.899999999999999e-05, 1.8e-05, 2.7e-05, + 5e-06, 1e-06, 1e-06, 0.000308, 4e-06, 2e-06, 2e-06, 0.000159, 5e-06, + 1e-06, 1e-06, 0.000537, 8e-06, 2e-06, 2e-06, 1e-06, 1e-06, 1e-06, + 0.00044, 1e-05, 2e-06, 3e-06, 3e-06, 3e-06, 2e-06, 0.0001, 0.000368, + 1e-05, 1e-06, 3e-06, 3e-06, 4e-06, 2e-06, 0.000452, 5e-06, 3e-06, + 2e-06, 2e-06, 2e-06, 0.000215, 6e-06, 2e-06, 2e-06, 0.000259, 7e-06, + 3e-06, 1e-06, 0.000209, 5e-06, 2e-06, 1e-06, 0.000236, 4e-06, 1e-06, + 2e-06, 0.000238, 3e-06, 1e-06, 2e-06, 0.000252, 1.6e-05, 1e-06, + 1e-06, 0.000255, 1.2e-05, 1e-06, 2e-06, 0.000202, 1.5e-05, 1e-06, + 1e-06, 0.000251, 1.2e-05, 1e-06, 1e-06, 0.000198, 4e-06, 1e-06, + 2e-06, 0.000254, 4e-06, 1e-06, 1e-06, 0.00013, 0.000103, 2e-06, + 1e-06, 1e-06, 0.00023, 5e-06, 2e-06, 1e-06, 0.000244, 4e-06, 1e-06, + 0, 0.000233, 6e-06, 1e-06, 1e-06, 0.000241, 4e-06, 1e-06, 1e-06, + 0.000238, 6e-06, 3e-06, 1e-06, 0.000234, 6e-06, 2e-06, 1e-06, + 0.000234, 8e-06, 1e-06, 1e-06, 0.000236, 7e-06, 1e-06, 1e-06, + 0.000236, 4e-06, 1e-06, 1e-06, 0.000237, 5e-06, 1e-06, 2e-06, + 0.000236, 2e-06, 3e-06, 4e-06, 0.000237, 6e-06, 3e-06, 3e-06, + 0.000232, 4e-06, 2e-06, 1e-06, 0.000238, 4e-06, 1e-06, 2e-06, + 0.000239, 6e-06, 1e-06, 1e-06, 0.00024, 2e-06, 1e-06, 1e-06, + 0.000241, 3e-06, 2e-06, 1e-06, 0.000238, 4e-06, 2e-06, 1e-06, + 0.000237, 3e-06, 1e-06, 2e-06, 0.00024, 5e-06, 1e-06, 1e-06, + 0.000237, 4e-06, 1e-06, 1e-06, 0.00024, 3e-06, 2e-06, 1e-06, + 0.000305, 4e-06, 2e-06, 0.000194, 1.2e-05, 1e-06, 0.000223, 1.2e-05, + 1e-06, 0.000235, 1.5e-05, 1e-06, 0.000224, 1.2e-05, 2e-06, 0.000231, + 1.1e-05, 2e-06, 0.000225, 6e-06, 2e-06, 1e-06, 0.000245, 1.4e-05, + 1e-06, 0.000218, 2e-06, 1e-06, 0.000243, 3e-06, 2e-06, 0.00024, + 4e-06, 1e-06, 0.00024, 4e-06, 2e-06, 0.000238, 2e-06, 1e-06, 1e-06, + 0.000241, 2e-06, 1e-06, 0.000242, 4e-06, 1e-06, 0.000241, 2e-06, + 1e-06, 0.000242, 4e-06, 1e-06, 0.00024, 4e-06, 1e-06, 0.000243, + 1.6e-05, 2e-06, 0.000225, 1.2e-05, 2e-06, 0.000231, 1.5e-05, + 0.00023, 1.1e-05, 2e-06, 0.000231, 1.1e-05, 0.000237, 1.4e-05, + 0.000219, 4e-06, 2e-06, 0.000241, 5e-06, 0.000245, 3e-06, 0.000247, + 6e-06, 3e-06, 0.000229, 5e-06, 0.000238, 6e-06, 3e-06, 0.000244, + 1.3e-05, 0.000243, 2e-06, 0.000222, 0.000245, 3e-06, 2e-06, + 0.000239, 3e-06, 3e-06, 0.000238, 1e-06, 1e-06, 0.000244, 3e-06, + 2e-06, 0.000239, 2e-06, 0.000244, 1e-06, 0.000244, 0.000245, + 0.000255, 0.000243, 0.000251, 1.6e-05, 0.000231, 1.3e-05, 0.000228, + 1.2e-05, 0.000238, 5e-06, 0.000235, 1.3e-05, 0.000192, 7.8e-05, + 1.4e-05, 9.8e-05, 9.7e-05, 0.000236, 0.000256, 0.000247, 2e-05, + 8.4e-05, 1.2e-05, 0.000104, 6.9e-05, 1.3e-05, 0.000179, 0.000245, + 0.000256, 1e-06, 9.2e-05, 0.000124, 1.7e-05, 0.000242, 0.000143, + 1.7e-05, 0.064764, 0.268533, 0.000247, 0.000117, 4.6e-05, 0.0001, + 0.00026, 1.3e-05, 7.8e-05, 0.000413, 7.499999999999999e-05, + 0.000187, 7.6e-05, 0.00019, 0.015809, 0.000237, 4e-05, 2.3e-05, + 0.000115, 0.000268, 9e-06, 3.1e-05, 0.000317, 0.000248, 0.00025, + 0.000111, 0.00018, 3.2e-05, 0.000196, 5.3e-05, 0.000188, 4.7e-05, + 0.000197, 6.1e-05, 0.000184, 6.8e-05, 0.000187, 0.03969, 0.401298, + 0.191103, 0.038273, 0.155567, 2.8e-05, 0.000256, + 6.600000000000001e-05, 1.2e-05, 0.000205, 1.5e-05, 0.413707, + 0.02753, 0.142191, 0.120225, 0.761589, 0.148513, + 0.07999199999999999, 0.443199, 1.476141, 0.380089, 0.005695, + 0.000311, 1.2e-05, 0.008484999999999999, 0.849543, 0.00359, + 0.751508, 1.292865, 0.179771, 0.5266, 0.366045, 2e-05, 1.03151, + 1.2e-05, 0.6017670000000001, 0.705453, 1.29376, 0.388697, 0.000119, + 0.000292, 1.4e-05, 7e-06, 0.000235, 1e-05, 0.171773, + 0.07598100000000001, 0.310302, 0.0004, 1.7e-05, 8.1e-05, 0.000385, + 0.000118, 0.000302, 0.000114, 0.000281, 2.9e-05, 0.000209, 2.7e-05, + 0.000239, 2.5e-05, 0.000212, 6e-05, 0.000224, 9.1e-05, 0.000233, + 1.9e-05, 0.000198, 1.9e-05, 0.000289, 0.000267, 0.000198, 6e-05, + 0.000195, 7.6e-05, 3e-06, 2e-06, 1e-06, 2e-06, 2e-06, 6.9e-05, + 0.000555, 0.000244, 0.000241, 0.039375, 0.000124, 0.000288, + 9.899999999999999e-05, 3e-06, 6.2e-05, 0.000571, 0.048884, 0.000149, + 1.4e-05, 6e-06, 6e-06, 3.3e-05, 1.6e-05, 7e-06, 2.5e-05, 0.000324, + 0.000219, 9e-06, 0.000153, 0.000128, 0.00011, 0.000155, 9e-06, + 0.00017, 7.3e-05, 0.037596, 0.027548, 0.000148, 0.00018, 0.016617, + 7.499999999999999e-05, 0.000234, 3.3e-05, 0.000171, 2.8e-05, + 0.000231, 3.5e-05, 0.00019, 2.8e-05, 0.000209, 0.039791, 0.832296, + 1.999254, 0.048807, 0.016688, 0.103137, 0.855847, 0.655344, + 0.000661, 0.013452, 0.168439, 0.136821, 0.025272, 9e-06, + 0.007948999999999999, 0.037041, 0.047981, 0.008460000000000001, + 0.04047, 0.009528, 0.020497, 0.072979, 0.009079, 0.11388, 0.023627, + 0.016839, 0.235363, 0.200238, 0.259802, 0.133895, 0.19443, 0.003572, + 0.124423, 0.003563, 0.37003, 0.040397, 0.3915, 0.000331, 1.7e-05, + 0.186427, 0.003647, 0.000144, 0.004702, 0.542918, 0.227775, + 0.641863, 0.034463, 0.016594, 0.419727, 0.000376, 3.6e-05, 0.000115, + 0.000327, 0.0005330000000000001, 0.00028, 0.000207, 0.000324, + 0.000296, 1e-05, 7e-06, 4.2e-05, 0.000562, 0.010122, 3.8e-05, + 0.018846, 0.000187, 0.000264, 0.000181, 0.000292, 0.000118, + 0.000469, 0.01084, 0.000237, 3.8e-05, 0.019239, 2.8e-05, 0.000227, + 0.0001, 0.000213, 0.000112, 0.000241, 0.000121, 0.000312, 0.000149, + 0.000209, 0.000133, 0.000296, 0.000132, 0.000214, 0.00166, 0.02373, + 0.001922, 4e-06, 4.3e-05, 3e-06, 5.1e-05, 3e-06, 5.6e-05, 2e-06, + 5.4e-05, 1e-06, 0.000392, 8e-06, 1e-06, 4.8e-05, 3e-06, 3.7e-05, + 2e-06, 0.000158, 1e-05, 2e-06, 1e-06, 4.7e-05, 0.000205, 3e-06, + 1e-06, 1e-06, 0.000516, 0.000201, 0.000213, 0.000308, 0.000241, + 0.00026, 0.000234, 0.169798, 8.500000000000001e-05, 0.0003, + 0.000144, 3e-06, 2e-06, 6.8e-05, 0.000589, 0.03856, 0.035385, + 0.000115, 0.000179, 5.8e-05, 0.000143, 0.000343, 0.000129, 0.000214, + 7.2e-05, 0.000288, 8.1e-05, 0.000203, 5.1e-05, 0.000369, + 9.500000000000001e-05, 0.000176, 0.001365, 0.013006, 0.001368, + 3e-06, 1e-06, 1e-06, 1e-06, 2e-06, 5.2e-05, 2e-06, 6.3e-05, 1.3e-05, + 1e-06, 1e-06, 6.7e-05, 2e-06, 1e-06, 4.3e-05, 4e-06, 6.1e-05, 1e-06, + 1e-06, 7.1e-05, 2e-06, 7e-06, 0.0002, 0.000255, 0.000229, 0.000516, + 0.000282, 0.000244, 0.000256, 0.000238, 0.000242, 0.000245, + 0.029151, 8.3e-05, 0.000294, 0.000143, 5e-06, 2e-06, 6.4e-05, + 0.000604, 0.012818, 0.00022, 0.019331, 0.000117, 0.000224, 0.000222, + 0.000234, 7.6e-05, 0.000216, 6.7e-05, 0.00028, 7.1e-05, 0.000219, + 4.5e-05, 0.000249, 6.7e-05, 0.000193, 0.001358, 0.013339, 0.001356, + 4e-06, 1e-06, 1e-06, 1e-06, 2e-06, 1e-06, 3.5e-05, 1e-06, 3.2e-05, + 6e-06, 6.8e-05, 1e-06, 1e-06, 4e-05, 7e-06, 1.5e-05, 2.7e-05, 5e-06, + 3.2e-05, 6e-06, 2.5e-05, 3e-05, 0.000278, 0.000251, 0.000215, + 0.000489, 0.000514, 0.000257, 0.000257, 0.000243, 0.000218, + 0.010181, 0.001256, 3e-05, 0.017594, 6.499999999999999e-05, + 0.000246, 0.000173, 4e-06, 1e-06, 6.499999999999999e-05, 0.000554, + 0.032475, 0.000117, 0.000258, 0.00054, 0.000265, 0.000146, 0.000199, + 6.9e-05, 0.000292, 0.000126, 0.000205, 0.000109, 0.000287, 0.000119, + 0.00021, 0.001505, 0.01251, 0.001603, 3e-06, 2e-06, 1e-06, 1e-06, + 2e-06, 1e-06, 4.5e-05, 3e-06, 6.7e-05, 1.2e-05, 1e-06, 1e-06, + 6.7e-05, 1.9e-05, 1e-06, 1e-06, 1e-05, 1.9e-05, 5.9e-05, 2e-06, + 9.3e-05, 2e-06, 0.000219, 0.000245, 0.000208, 0.000262, 0.000498, + 0.000251, 0.000244, 0.000246, 0.000244, 0.000247, 0.02889, 8.1e-05, + 0.000216, 0.000107, 3e-06, 2e-06, 6.9e-05, 0.0005820000000000001, + 0.01628, 0.00018, 5.4e-05, 0.000269, 0.015699, 2.2e-05, 0.000102, + 0.000347, 0.00041, 0.000227, 7.7e-05, 0.0002, 6.2e-05, 0.000236, + 4.8e-05, 0.00018, 7.499999999999999e-05, 0.000302, 9.2e-05, + 0.000167, 0.001491, 0.012937, 0.001596, 3e-06, 2e-06, 2e-06, 1e-06, + 2e-06, 2e-06, 2e-06, 1e-06, 3.4e-05, 3e-06, 7.499999999999999e-05, + 1.8e-05, 1e-06, 1e-06, 1e-06, 6e-05, 2e-06, 9e-06, 5.3e-05, 5e-06, + 2e-05, 1e-05, 0.000295, 0.000242, 0.000245, 0.000522, 0.000488, + 0.000247, 0.000243, 0.000246, 0.000246, 0.028895, 8.2e-05, 0.000303, + 0.000144, 5e-06, 2e-06, 6.8e-05, 0.000595, 0.009254, 0.027474, + 0.012253, 0.000107, 0.000184, 5.8e-05, 0.000119, 0.000216, 4e-05, + 0.000201, 2.2e-05, 0.000263, 4.1e-05, 0.000208, + 6.999999999999999e-05, 0.000266, 3.7e-05, 0.000167, 0.001494, + 0.013389, 0.001558, 4e-06, 2e-06, 1e-06, 2e-06, 1e-06, 1e-06, + 3.8e-05, 3e-06, 6.1e-05, 1e-06, 1e-06, 4.2e-05, 4e-06, 5.6e-05, + 4e-06, 1e-06, 3e-05, 8e-06, 5.4e-05, 1e-06, 1e-06, 2.6e-05, + 0.000256, 0.000241, 0.000244, 0.000553, 0.000246, 0.00022, 0.00024, + 0.000244, 0.000247, 0.000213, 0.028935, 8.899999999999999e-05, + 0.000214, 8.2e-05, 4e-06, 2e-06, 5.9e-05, 0.000562, 0.032548, + 0.000119, 0.000226, 0.0003, 0.000213, 4e-05, 0.000167, 3.3e-05, + 0.000333, 0.000132, 0.000208, 9.1e-05, 0.000296, 0.000118, 0.000181, + 0.00152, 0.013032, 0.001587, 4e-06, 2e-06, 1e-06, 2e-06, 2e-06, + 2e-06, 3.8e-05, 2e-06, 8.1e-05, 1e-06, 0, 1.6e-05, 1e-06, 5e-05, + 4e-06, 5.6e-05, 1e-06, 1e-06, 3.1e-05, 9e-06, 2.8e-05, 9e-06, + 0.00026, 0.000242, 0.000249, 0.000486, 0.000245, 0.000245, 0.000348, + 0.000419, 0.000279, 0.028802, 8.3e-05, 0.000286, 0.000115, 4e-06, + 2e-06, 5.9e-05, 0.000559, 0.000241, 0.002101, 3.5e-05, 0.030066, + 0.000106, 0.000205, 0.001807, 0.000205, 7.2e-05, 0.000191, 3e-05, + 0.000302, 0.000137, 0.000201, 8.899999999999999e-05, 0.000306, + 0.000116, 0.000325, 0.001743, 0.011198, 0.001645, 3e-06, 2e-06, + 2e-06, 1e-06, 2e-06, 1e-06, 1e-05, 3.5e-05, 2e-06, 6.7e-05, 2e-06, + 0, 4.5e-05, 8e-06, 2.2e-05, 3.3e-05, 8e-06, 7.1e-05, 1.4e-05, 1e-06, + 1e-06, 2.7e-05, 0.000255, 0.00024, 0.000243, 0.0005240000000000001, + 0.000242, 0.000246, 0.000282, 0.000452, 0.000251, 0.045419, + 8.500000000000001e-05, 0.000254, 6.1e-05, 2e-06, 3e-06, 6.9e-05, + 0.000559, 0.032483, 7.2e-05, 0.000221, 0.000143, 0.000211, 7.4e-05, + 0.0002, 4.9e-05, 0.000301, 0.000129, 0.000212, 9.2e-05, 0.000262, + 6e-05, 0.000198, 0.001624, 0.013169, 0.001673, 3e-06, 1e-06, 1e-06, + 2e-06, 2e-06, 1e-06, 4e-05, 3e-06, 6.4e-05, 1e-06, 1e-06, 4.8e-05, + 6e-06, 1.2e-05, 6.3e-05, 2e-06, 5.2e-05, 2e-06, 1e-06, 0, 3.5e-05, + 1e-06, 0.000295, 0.000239, 0.000243, 0.000492, 0.000243, 0.000278, + 0.00031, 0.000424, 0.000219, 0.028386, 0.000228, 5.4e-05, 0.000213, + 3.5e-05, 0.000238, 0.007959000000000001, 2.2e-05, 7.1e-05, 0.000481, + 0.000111, 4e-06, 1e-06, 6.8e-05, 0.000623, 0.038715, 0.010124, + 0.000116, 0.000228, 6.2e-05, 0.002913, 0.000265, 2.1e-05, 0.000179, + 1.5e-05, 1.3e-05, 0.000229, 3.9e-05, 0.000196, 3.5e-05, 0.000269, + 7.3e-05, 0.000191, 5.3e-05, 0.000247, 2.2e-05, 0.000177, 0.001569, + 0.010022, 0.001705, 3e-06, 2e-06, 1e-06, 1e-06, 3e-06, 1e-06, 1e-06, + 1e-06, 3.6e-05, 2e-06, 6.499999999999999e-05, 1e-06, 1e-06, 6e-05, + 1e-06, 1e-06, 5.6e-05, 1e-06, 4.2e-05, 4e-06, 1.7e-05, 2e-06, + 0.000327, 0.000232, 0.00025, 0.000239, 0.000501, 0.000215, 0.000245, + 0.000244, 0.000246, 0.000325, 0.02873, 8.7e-05, 0.000337, 0.000112, + 3e-06, 2e-06, 5.5e-05, 0.00056, 0.032383, 0.000119, 0.000246, + 0.001701, 0.000251, 0.004701, 0.000195, 0.006657, 0.027981, 7.3e-05, + 0.00024, 0.019186, 0.000333, 7.7e-05, 0.000241, 0.037189, 0.272651, + 0.227517, 6e-06, 2e-06, 2e-06, 1e-06, 2e-06, 3.7e-05, 2e-06, + 3.4e-05, 2e-06, 0.0006089999999999999, 1.8e-05, 3e-06, + 6.499999999999999e-05, 3e-06, 5.6e-05, 9e-06, 3e-06, 1e-06, + 6.499999999999999e-05, 5e-06, 1e-06, 0.000207, 9e-06, 2e-06, 1e-06, + 1e-06, 0.000442, 9e-06, 1e-06, 2e-06, 1e-06, 1e-06, 3.5e-05, + 0.000105, 1.2e-05, 7.499999999999999e-05, 3e-06, 1e-06, 1e-06, + 1e-06, 1e-06, 1e-06, 0.00047, 3e-06, 2e-06, 1e-06, 1e-06, 1e-06, + 1e-06, 0.000255, 4e-06, 1e-06, 2e-06, 1e-06, 1e-06, 2e-06, 0.000462, + 4e-06, 2e-06, 1e-06, 1e-06, 1e-06, 1e-06, 0.000234, 4e-06, 1e-06, + 1e-06, 1e-06, 0.00024, 6e-06, 1e-06, 2e-06, 1e-06, 0.000236, 5e-06, + 1e-06, 1e-06, 1e-06, 0.000256, 4e-06, 1e-06, 1e-06, 1e-06, 0.00022, + 2e-06, 1e-06, 0.000242, 4e-06, 2e-06, 0.000241, 5e-06, 2e-06, + 0.000233, 3e-06, 2e-06, 0.000239, 5e-06, 2e-06, 0.000238, 4e-06, + 1e-06, 0.00024, 5e-06, 1e-06, 0.000239, 3e-06, 1e-06, 0.000245, + 0.000279, 0.000142, 0.000114, 8.7e-05, 5e-06, 0.000157, 0.000225, + 0.000241, 6.2e-05, 0.000185, 6.2e-05, 4e-06, 0.000144, 0.000247, + 0.000255, 6.600000000000001e-05, 0.00017, 7.499999999999999e-05, + 1.5e-05, 0.000168, 0.000258, 6.8e-05, 0.000165, 7.7e-05, 5e-06, + 0.000145, 0.000242, 6.8e-05, 0.00018, 9.8e-05, 5e-06, 0.000169, + 0.000265, 0.000232, 5.3e-05, 2.5e-05, 5e-06, 0.009259, 0.039637, + 0.00865, 2.8e-05, 5e-06, 5e-06, 0.009263, 2.7e-05, 0.087632, 6e-05, + 0.000318, 1.4e-05, 1.6e-05, 2e-06, 5e-06, 4.2e-05, 0.00032, + 0.037569, 0.703033, 0.214916, 0.64994, 0.04462, 0.302059, 0.999951, + 0.137821, 0.039703, 0.027832, 0.000366, 1.7e-05, 0.000111, 0.000346, + 0.000131, 0.00019, 4.5e-05, 4e-06, 2e-06, 3.8e-05, 0.000618, + 0.036949, 0.0052, 0.000138, 0.0002, 0.000107, 9.399999999999999e-05, + 4e-06, 5.9e-05, 0.000579, 0.032121, 0.000118, 1.5e-05, 3.3e-05, + 3e-06, 0.000374, 0.000259, 6e-06, 0.00016, 5.3e-05, + 6.600000000000001e-05, 0.036463, 0.00435, 0.000131, 0.0002, + 0.016695, 0.000124, 0.000254, 7.7e-05, 0.000202, 6.9e-05, 0.000174, + 4.5e-05, 0.000229, 6.7e-05, 0.000176, 0.038503, 0.271061, 0.036943, + 0.003036, 0.307457, 0.23321, 0.029976, 0.000198, 0.62617, 3e-05, + 0.000353, 1.9e-05, 1e-05, 2e-06, 0.109966, 0.651886, 0.213682, + 4.9e-05, 2.7e-05, 0.000236, 1e-05, 4.6e-05, 2e-06, 0.00011, 2e-06, + 0.000152, 1e-06, 0.133729, 0.609789, 0.031985, 2.2e-05, 9.6e-05, + 0.016657, 9.1e-05, 0.000312, 0.000155, 0.000175, 3.6e-05, 0.000326, + 0.000222, 5e-06, 4.3e-05, 4e-06, 3.9e-05, 1.9e-05, 2.4e-05, 2.7e-05, + 2e-06, 5.9e-05, 0.000446, 2e-05, 3e-06, 5.8e-05, 2e-06, 6e-05, + 3e-06, 5.8e-05, 1e-05, 3e-06, 2e-06, 6.2e-05, 0.000145, 4e-06, + 1e-06, 1e-06, 3.7e-05, 0.000475, 4e-06, 2e-06, 1e-06, 2e-06, + 3.5e-05, 9e-06, 3.5e-05, 1e-06, 0.00041, 8e-06, 2e-06, 1e-06, 1e-06, + 2e-06, 1e-06, 3.9e-05, 2e-06, 0.000412, 4e-06, 2e-06, 1e-06, 1e-06, + 2e-06, 1e-06, 1e-06, 3.9e-05, 0.000437, 4e-06, 2e-06, 1e-06, 2e-06, + 1e-06, 1e-06, 2e-06, 1e-06, 0.000476, 4e-06, 2e-06, 1e-06, 2e-06, + 1e-06, 1e-06, 1e-06, 1e-06, 0.000455, 5e-06, 1e-06, 1e-06, 1e-06, + 1e-06, 1e-06, 0.000236, 1e-06, 2e-06, 1e-06, 1e-06, 0.000242, 5e-06, + 2e-06, 1e-06, 0.000302, 7e-06, 1e-06, 2e-06, 0.000174, 4e-06, 2e-06, + 1e-06, 0.000263, 3e-06, 2e-06, 1e-06, 0.000206, 5e-06, 1e-06, 2e-06, + 0.000263, 9e-06, 2e-06, 1e-06, 0.000241, 1.1e-05, 2e-06, 1e-06, + 0.000262, 1.9e-05, 3e-06, 1e-06, 0.000223, 1.9e-05, 0.000224, + 0.000248, 0.000244, 0.000217, 0.00024, 0.000244, 0.000246, 0.000221, + 0.000274, 0.000241, 0.000212, 0.000277, 0.000213, 0.000281, + 0.000242, 0.000245, 0.000244, 0.000246, 0.000244, 0.00025, 0.00024, + 0.000247, 0.000244, 0.000242, 0.001342, 0.000379, 0.034867, + 0.000105, 0.000224, 9.3e-05, 0.000182, 2.7e-05, 0.00026, 3.4e-05, + 0.000379, 0.039497, 0.5442, 0.357434, 1.099135, 0.041655, 0.85846, + 0.09723900000000001, 0.311746, 0.29389, 0.394283, 0.308007, + 0.445888, 0.148214, 0.097913, 0.307962, 0.692039, 0.307906, + 0.593507, 0.056654, 0.041922, 0.033815, 0.274117, + 0.8501919999999999, 4.8e-05, 4e-05, 5.2e-05, 0.000176, 3.5e-05, + 7.8e-05, 4.1e-05, 3.9e-05, 1.4e-05, 3.8e-05, 2e-05, 1e-05, 5e-06, + 3e-05, 1.3e-05, 0.14915, 0.026055, 0.003791, 0.562937, 1.999277, + 1.065992, 0.000143, 0.523873, 0.311931, 0.028066, 0.069262, + 0.239786, 1.759471, 0.246945, 0.756221, 0.697726, 0.000743, + 0.297642, 0.003465, 0.913362, 1.3e-05, 0.0866, 0.081234, 0.025897, + 0.050497, 0.259128, 0.014569, 0.564476, 0.004333, 0.312601, + 0.003488, 0.683764, 0.995133, 0.004903, 0.270456, + 0.6224730000000001, 0.000158, 0.161523, 0.000449, 2e-05, 0.000129, + 0.000428, 0.000134, 0.000275, 0.000131, 0.000373, 8.8e-05, 0.000344, + 7.6e-05, 0.000289, 9.899999999999999e-05, 0.000266, 0.00011, + 0.000218, 0.000129, 0.000203, 3.2e-05, 0.000265, + 8.899999999999999e-05, 0.000232, 7.9e-05, 0.000238, 0.000368, + 0.000233, 0.000121, 0.000228, 0.000164, 5e-06, 3e-06, 2e-06, 1e-06, + 8.8e-05, 0.000565, 0.000216, 0.034407, 0.000127, 0.000216, 5.8e-05, + 3e-06, 5.7e-05, 0.000566, 0.032524, 0.000164, 1.9e-05, 8e-06, + 2.2e-05, 1.4e-05, 1.4e-05, 4.4e-05, 0.000401, 5.6e-05, 9.6e-05, + 7e-06, 0.000133, 8e-06, 0.000248, 1.3e-05, 1e-06, 0.000302, 7.6e-05, + 0.036992, 0.028077, 0.000239, 0.000188, 0.016701, 0.000103, + 0.000332, 0.000134, 0.000307, 0.00013, 0.000323, 0.000139, 0.000212, + 0.000116, 0.000175, 0.037659, 0.132015, 0.312029, 0.297586, + 1.336091, 0.663151, 1.295715, 0.703577, 0.296261, 0.101385, 0.22987, + 0.000233, 0.434696, 0.000419, 3.6e-05, 0.000159, 0.000332, 0.000899, + 0.000119, 0.00019, 0.0352, 0.144224, 0.05227, 0.149337, 0.185305, + 0.000393, 0.184107, 5.8e-05, 0.000343, 0.183449, 0.000685, 0.000284, + 1.5e-05, 0.000102, 0.000448, 0.00037, 1.8e-05, 0.000112, 0.000401, + 0.00012, 0.00029, 0.000119, 0.000243, 6.4e-05, 0.000177, 5.4e-05, + 0.000188, 5.4e-05, 0.000279, 9.2e-05, 0.000504, 0.000166, 1.5e-05, + 5.4e-05, 0.000175, 1.5e-05, 7.7e-05, 0.000155, 1.5e-05, 0.000101, + 0.000401, 0.000268, 0.000207, 0.0001, 0.000145, + 0.0009700000000000001, 7.2e-05, 0.036994, 0.14733, 0.010867, + 0.037774, 0.056528, 0.10916, 0.000384, 1e-05, 2.9e-05, 0.000265, + 0.037653, 0.175573, 1.9e-05, 0.676889, 0.702174, 0.297846, 1.701447, + 0.066121, 5e-06, 5e-06, 2e-06, 2e-06, 3e-06, 1e-06, 2e-06, 3e-06, + 2e-06, 0.000725, 1.9e-05, 2e-06, 1e-06, 1e-06, 1e-06, 1e-06, + 6.999999999999999e-05, 2e-05, 2e-06, 3e-06, 1e-06, 1e-06, 1e-06, + 0.000218, 7e-06, 1e-06, 1e-06, 1e-06, 7.2e-05, 0.000155, 6e-06, + 1e-06, 1e-06, 1e-06, 0.000256, 3e-06, 2e-06, 1e-06, 0.000559, + 1.6e-05, 0.000227, 0.000299, 2.6e-05, 0.00012, 0.000264, 1.5e-05, + 0.000238, 1.5e-05, 1.4e-05, 0.000224, 0.000234, 1.5e-05, 0.000223, + 0.006457, 2.2e-05, 0.016599, 0.07625899999999999, 0.238719, + 0.000408, 0.037377, 0.08400299999999999, 0.003761, 0.124235, + 0.003565, 1.337726, 1.999245, 1.075482, 2.9e-05, 0.000378, 2e-05, + 9e-06, 2e-06, 1.8e-05, 6e-06, 0.923339, 1.999252, 1.10893, 0.003052, + 0.887231, 1.999357, 1.735131, 0.000561, 0.263547, 1.066412, + 0.000189, 6.7e-05, 0.932557, 0.069161, 0.000414, 1.7e-05, 0.000328, + 0.076215, 0.148162, 1.6e-05, 0.000117, 0.119362, 0.000372, 1.7e-05, + 0.7902090000000001, 0.794934, 0.918648, 0.0002, 1.080404, 0.413585, + 3.6e-05, 0.000285, 5.5e-05, 4e-06, 2.5e-05, 5e-06, 0.091326, + 0.003882, 0.572217, 7e-06, 4e-06, 2e-06, 2e-06, 8e-06, 4.3e-05, + 2e-06, 2e-06, 3.3e-05, 0.000581, 2.4e-05, 3e-06, 2e-06, 2e-06, + 2e-06, 2e-06, 0.000154, 6e-06, 2e-06, 2e-06, 2e-06, 0.000242, + 1.4e-05, 3e-06, 6.600000000000001e-05, 9e-06, 0.00015, 6.8e-05, + 2e-05, 0.000135, 6.7e-05, 1.3e-05, 0.000447, 6.3e-05, 6e-06, + 0.000211, 5e-06, 0.000197, 0.000266, 1.8e-05, 1.8e-05, 0.000206, + 5.2e-05, 1e-05, 0.070046, 1.1e-05, 0.844631, 1.999285, 0.37526, + 0.269128, 0.000144, 0.428814, 0.000377, 2e-05, 0.000132, 0.000335, + 0.000146, 0.00032, 0.00014, 0.000315, 9.000000000000001e-05, + 0.000326, 7.8e-05, 0.000348, 0.000138, 0.000309, 0.000191, 0.000269, + 9.2e-05, 0.000228, 8.1e-05, 0.000333, 0.000478, 0.000208, 0.000122, + 0.000251, 0.000158, 6e-06, 3e-06, 2e-06, 2e-06, 3.7e-05, 0.000592, + 0.000243, 0.026904, 0.000156, 0.000307, 0.000234, 1.1e-05, 5.5e-05, + 0.000566, 0.032068, 0.000263, 5.9e-05, 4.3e-05, 4.5e-05, 4.2e-05, + 4.2e-05, 4e-05, 0.000202, 0.000138, 3.5e-05, 2.2e-05, 3e-05, + 0.000149, 0.000149, 3e-05, 5.4e-05, 0.000164, 2.8e-05, 0.000127, + 0.03696, 0.019837, 0.00032, 0.000252, 0.016369, 0.000222, 0.000284, + 0.000233, 0.000254, 0.00022, 0.000266, 0.000239, 0.000251, 0.000192, + 0.000192, 0.037031, 1.7e-05, 0.116766, 0.192277, 0.435377, 0.091586, + 3.1e-05, 0.000373, 1.9e-05, 1e-05, 2e-06, 0.000261, 1.4e-05, + 0.280014, 0.023348, 3.2e-05, 2.9e-05, 0.000314, 2.2e-05, 1.2e-05, + 2e-06, 0.000253, 1.7e-05, 0.975979, 0.62699, 0.37293, + 0.9999749999999999, 0.626341, 0.492913, 0.014529, 0.570348, + 0.076026, 0.235104, 0.003504, 0.606799, 0.126116, 0.99708, 0.306968, + 0.005815, 0.563343, 0.123881, 0.303074, 0.697012, 0.303014, + 0.075444, 0.000103, 0.496756, 0.124502, 0.303213, + 0.06970899999999999, 0.6271060000000001, 0.303057, 0.571645, + 0.428396, 1.129816, 0.441094, 1.216598, 0.184097, 0.598553, + 1.762639, 0.000133, 0.236455, 0.700106, 0.025727, 0.876292, + 0.003488, 0.124494, 0.00356, 0.265654, 0.031362, 0.997795, + 0.9701149999999999, 0.029865, 0.913193, 0.000163, + 0.08662400000000001, 0.969381, 0.030588, 1.000004, 0.968747, + 1.999191, 0.181717, 0.003031, 0.476371, 0.000189, 0.498117, + 0.001757, 0.094473, 0.070796, 0.257284, 0.415613, 0.324319, + 0.103689, 3e-05, 0.000304, 1.9e-05, 1.3e-05, 1e-06, + 0.09349499999999999, 2.2e-05, 0.042766, 0.496198, 0.263337, + 0.138729, 0.028411, 0.088029, 0.031219, 0.388701, 0.324931, + 0.266295, 0.268827, 0.235355, 0.105707, 1.7e-05, 0.123881, 0.381654, + 0.076361, 0.09857399999999999, 0.11765, 0.07213, 0.144328, 0.047985, + 0.061286, 0.019094, 0.083081, 0.000315, 1.3e-05, 0.171753, 0.072075, + 0.152366, 0.031976, 0.46934, 0.197771, 0.036378 }; +#endif //TEST_FUNCTIONS + +}; + +#endif /* DATAPROCESSOR_H_ */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/72/2071569cceb500161808a5c64fd2084a b/.metadata/.plugins/org.eclipse.core.resources/.history/72/2071569cceb500161808a5c64fd2084a new file mode 100644 index 0000000..5889852 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/72/2071569cceb500161808a5c64fd2084a @@ -0,0 +1,1967 @@ +/* + * DataProcessor.cpp + * + * Created on: 14 de jun de 2016 + * Author: apaschoalon + */ + +#include "DataProcessor.h" + +DataProcessor::DataProcessor() +{ + //nothing to do at all +} + +DataProcessor::~DataProcessor() +{ + //nothing to do at all +} + +string DataProcessor::toString(void) +{ + string dataProcessor; + + dataProcessor = + "Used to calculate parameters of network flows; has no state."; + + return (dataProcessor); +} + +int DataProcessor::calculate(const string& experimentName, + DatabaseInterface* databaseInterface, NetworkTrace* netTrace) +{ + + //iterator variables + long int fcounter = 0; + long int nflows = 0; + databaseInterface->getNumberOfFlows(experimentName, &nflows); + +#ifdef DEBUG_DataProcessor_calculate + cout << "DataProcessor::calculate() -> Number of flows = " << nflows << endl; +#endif // DEBUG_DataProcessor_calculate + + //protocol variables + string flowStrData = ""; + long int flowIntData = 0; + double startDalay = 0; //time of the fist packet of the flow + double flowDuration = 0; //duration of the flow + list ttlList; + int ttl = 0; + + //flow-level variables + list relativeTime; //time relative to the 1st packet list + long int nKbytes = 0; //Number of kbytes (bytes/1024) of the + + //packetSize variables + list pslist; //packet-size list + long int ps_mostFrequent = 0; + double mean_packetRate = 0; + + //inter-deperture time variables + StochasticModelFit* modelVet = NULL; + list interArrival_list; // list of inter arrival times of a flow + list interArrival_fileStack; + list interArrival_interFileStack; + list interArrival_interSessionStack; + double lastTime = 0; + double idt = 0; + + for (fcounter = 0; fcounter < nflows; fcounter++) + { + + //new network flow + NetworkFlow* netFlow = NetworkFlow::make_flow("dummy"); + + //TODO checar valor retornado de databaseInterface + + //reset temp vars + flowStrData = ""; + flowIntData = 0; + relativeTime.clear(); + pslist.clear(); + interArrival_list.clear(); + interArrival_fileStack.clear(); + interArrival_interFileStack.clear(); + interArrival_interSessionStack.clear(); + + //load packet-size data + databaseInterface->getFlowData(experimentName, fcounter, "frame__len", + pslist); + + //laod time-relative data + databaseInterface->getFlowData(experimentName, fcounter, + "frame__time_relative", relativeTime); + + //evaluate inter-arrival data + //time relative to the begin of the measurement + lastTime = 0; + for (list::iterator it = relativeTime.begin(); + it != relativeTime.end(); it++) + { + idt = *it - lastTime; + interArrival_list.push_back(idt); + lastTime = *it; + } + + //###################################################################### + //Flow-level Options + //###################################################################### + startDalay = relativeTime.front(); + netFlow->setFlowStartDelay(startDalay); + + flowDuration = relativeTime.back() - relativeTime.front(); + netFlow->setFlowDuration(flowDuration); + + //TODO DS byte configuration -- now it is just set to zero + netFlow->setFlowDsByte(0); + + //flow kbytes + for (list::iterator it = pslist.begin(); it != pslist.end(); + it++) + { + nKbytes = nKbytes + *it; + } + nKbytes = nKbytes / 1024; + + netFlow->setNumberOfKbytes(nKbytes); + netFlow->setNumberOfPackets(relativeTime.size()); + + //###################################################################### + //Protocol Options + //###################################################################### + + // + //L3 protocols + //reference http://www.iana.org/assignments/ieee-802-numbers/ieee-802-numbers.xhtml + // + + databaseInterface->getFlowData(experimentName, fcounter, "eth__type", + &flowIntData); + if (flowIntData == IPV4_CODE) + { //IPv4 + netFlow->setNetworkProtocol(PROTOCOL__IPV4); + databaseInterface->getFlowData(experimentName, fcounter, "ip__src", + &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, "ip__dst", + &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + else if (flowIntData == (ARP_CODE || ARP_CODE_REV)) + { //ARP, Frame Relay ARP + netFlow->setNetworkProtocol(PROTOCOL__ARP); + databaseInterface->getFlowData(experimentName, fcounter, "ip__src", + &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, "ip__dst", + &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + else if (flowIntData == IPV6_CODE) + { //IPv6 + netFlow->setNetworkProtocol(PROTOCOL__ICMPV6); + databaseInterface->getFlowData(experimentName, fcounter, + "ipv6__addr", &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, + "ipv6__dst", &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + else + { //default IPv4 + netFlow->setNetworkProtocol(PROTOCOL__IPV4); + databaseInterface->getFlowData(experimentName, fcounter, "ip__src", + &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, "ip__dst", + &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + + //set ttl as the most frequent + databaseInterface->getFlowData(experimentName, fcounter, "ip__ttl", + ttlList); + //ttl = (int) mode(ttlList); + ttl = (int) mode(&ttlList); + netFlow->setNetworkTtl(ttl); + + // + //L4 Protocols + //reference https://en.wikipedia.org/wiki/List_of_IP_protocol_numbers + // + databaseInterface->getFlowData(experimentName, fcounter, "ip__proto", + &flowIntData); + if (flowIntData == ICMP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__ICMP); + } + else if (flowIntData == TCP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__TCP); + databaseInterface->getFlowData(experimentName, fcounter, + "tcp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "tcp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else if (flowIntData == UDP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__UDP); + databaseInterface->getFlowData(experimentName, fcounter, + "udp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "udp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else if (flowIntData == DCCP_CODE) + { + netFlow->setTransportDstPort(PROTOCOL__DCCP); + databaseInterface->getFlowData(experimentName, fcounter, + "dccp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "dccp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else if (flowIntData == GRE_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__GRE); + //TODO não suportado pelo D-ITG + } + else if (flowIntData == ICMPV6_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__ICMPV6); + } + else if (flowIntData == SCTP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__SCTP); + databaseInterface->getFlowData(experimentName, fcounter, + "sctp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "sctp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else + { //default: UDP + netFlow->setTransportProtocol(PROTOCOL__NULL); + //databaseInterface->getFlowData(experimentName, fcounter, "udp__dstport", &flowIntData); + //netFlow->setL4SrcPort(flowIntData); + //databaseInterface->getFlowData(experimentName, fcounter, "udp__srcport", &flowIntData); + //netFlow->setL4DstPort(flowIntData); + } + + //###################################################################### + //Packet Size Model + //###################################################################### + + // + // Constant model: Just set the packet size as the most frequent value + // + //ps_mostFrequent = mode(pslist); + //ps_mostFrequent = mode(&pslist); + //mean_packetRate = ((double) pslist.size() / flowDuration); + //netFlow->setPsConstant(ps_mostFrequent); + //netFlow->setIdtConstant(mean_packetRate); + + // + // Algorithm to choose the priority order of the models + // 1st version: just the constant model + // + //TODO implement a best algorithm + //netFlow->setPsModel1(MODEL__CONSTANT); + + //###################################################################### + //Inter-arrival-time Model + //###################################################################### + + for (list::iterator it = interArrival_list.begin(); + it != interArrival_list.end(); it++) + { + if (*it < FILE_CUT_TIME) + { + interArrival_fileStack.push_back(*it); + } + else if (*it < SESSION_CUT_TIME) + { + interArrival_interFileStack.push_back(*it); + } + else + { + interArrival_interSessionStack.push_back(*it); + } + } + +#ifdef DEBUG_DataProcessor_interArrival + if (fcounter == 0) + { + string file1 = "fileStack"; + string file2 = "interFileStack"; + string file3 = "interSessionStack"; + save_data_on_file(file1, interArrival_fileStack); + save_data_on_file(file2, interArrival_interFileStack); + save_data_on_file(file3, interArrival_interSessionStack); + } +#endif + + netFlow->setInterDepertureTimeModels( + fitModels(interArrival_list, "aic")); + + //TODO set the right model + + //netFlow->setIdtModel1(MODEL__CONSTANT); + + //TODO + + //TODO + + //###################################################################### + //Push-back the flow to Trace Flow-list + //###################################################################### + + netTrace->pushback_Netflow(netFlow); + +#ifdef DEBUG_DataProcessor_calculate_loop + cout << fcounter << ": ps_mostFrequent=" << ps_mostFrequent << endl; + cout << fcounter << ": startDalay=" << startDalay << endl; + cout << fcounter << ": mean_packetRate=" << mean_packetRate << endl; + cout << fcounter << ": idt_constant=" << netFlow->getIdtConstant() << endl; +#endif //DEBUG_DataProcessor_calculate_loop +#ifdef DEBUG_DataProcessor_calculate_loop + cout << fcounter << ": netFlow->getTransportProtocol() = " << netFlow->getTransportProtocol() << endl; + cout << fcounter << ": netFlow->getNetworkProtocol() = " << netFlow->getNetworkProtocol() << endl; + cout << fcounter << ": netFlow->getTransportDstPort() = " << netFlow->getTransportDstPort() << endl; + cout << fcounter << ": netFlow->getFlowDsByte() = " << netFlow->getFlowDsByte() << endl; + cout << fcounter << ": netFlow->getNetworkDstAddr() = " << netFlow->getNetworkDstAddr() << endl << endl; + +#endif //DEBUG_DataProcessor_calculate_loop + + } + +#ifdef DEBUG_DataProcessor_calculate + cout << "netTrace->networkFlow.size() = " << netTrace->networkFlow.size() << endl; + cout << "netTrace->getNumberOfFlows() = " << netTrace->getNumberOfFlows() << endl; +#endif //DEBUG_DataProcessor_calculate + + return (0); +} + +StochasticModelFit* DataProcessor::fitModels(list& empiricalData, + const string& criterion) +{ + //constants + const int numberOfModels = 8; + const int m = empiricalData.size(); //empirical data-size + //vars + int counter = 0; + StochasticModelFit* modelVet = NULL; + vec paramVec = zeros(2); + vec infoCriterion = zeros(2); + + if (m == 1) + { + modelVet = new StochasticModelFit[1]; + + //Constant + modelVet[0].aic = datum::inf; + modelVet[0].bic = datum::inf; + modelVet[0].modelName = CONSTANT; + modelVet[0].param1 = 0; + modelVet[0].param2 = 0; + modelVet[0].size = 1; + + } + else + { + + modelVet = new StochasticModelFit[numberOfModels]; + + //Inter-arrival vec + vec interArrival = zeros(m); + counter = 0; + for (list::iterator it = empiricalData.begin(); + it != empiricalData.end(); it++) + { + interArrival(counter) = *it + min_time; + counter++; + } + //Empirical CDF of interArrival + vec* interArrivalCdf = empiricalCdf(empiricalData); + + //Weibull + weibullFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[0].aic = infoCriterion(0); + modelVet[0].bic = infoCriterion(1); + modelVet[0].modelName = WEIBULL; + modelVet[0].param1 = paramVec(0); + modelVet[0].param2 = paramVec(1); + modelVet[0].size = numberOfModels; + + //normal + normalFitting(interArrival, paramVec, infoCriterion); + modelVet[1].aic = infoCriterion(0); + modelVet[1].bic = infoCriterion(1); + modelVet[1].modelName = NORMAL; + modelVet[1].param1 = paramVec(0); + modelVet[1].param2 = paramVec(1); + modelVet[1].size = numberOfModels; + + //exponential mean + exponentialMeFitting(interArrival, paramVec, infoCriterion); + modelVet[2].aic = infoCriterion(0); + modelVet[2].bic = infoCriterion(1); + modelVet[2].modelName = EXPONENTIAL_MEAN; + modelVet[2].param1 = paramVec(0); + modelVet[2].param2 = paramVec(1); + modelVet[2].size = numberOfModels; + + //exponential Linear Regression (LR) + exponentialLrFitting(interArrival, *interArrivalCdf, paramVec, + infoCriterion); + modelVet[3].aic = infoCriterion(0); + modelVet[3].bic = infoCriterion(1); + modelVet[3].modelName = EXPONENTIAL_LINEAR_REGRESSION; + modelVet[3].param1 = paramVec(0); + modelVet[3].param2 = paramVec(1); + modelVet[3].size = numberOfModels; + + //pareto linear regression + paretoLrFitting(interArrival, *interArrivalCdf, paramVec, + infoCriterion); + modelVet[4].aic = infoCriterion(0); + modelVet[4].bic = infoCriterion(1); + modelVet[4].modelName = PARETO_LINEAR_REGRESSION; + modelVet[4].param1 = paramVec(0); + modelVet[4].param2 = paramVec(1); + modelVet[4].size = numberOfModels; + + //pareto maximum likehood + paretoMlhFitting(interArrival, *interArrivalCdf, paramVec, + infoCriterion); + modelVet[5].aic = infoCriterion(0); + modelVet[5].bic = infoCriterion(1); + modelVet[5].modelName = PARETO_MAXIMUM_LIKEHOOD; + modelVet[5].param1 = paramVec(0); + modelVet[5].param2 = paramVec(1); + modelVet[5].size = numberOfModels; + + //Cauchy + cauchyFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[6].aic = infoCriterion(0); + modelVet[6].bic = infoCriterion(1); + modelVet[6].modelName = CAUCHY; + modelVet[6].param1 = paramVec(0); + modelVet[6].param2 = paramVec(1); + modelVet[6].size = numberOfModels; + + //Constant + constantFitting(interArrival, paramVec, infoCriterion); + modelVet[7].aic = infoCriterion(0); + modelVet[7].bic = infoCriterion(1); + modelVet[7].modelName = CONSTANT; + modelVet[7].param1 = paramVec(0); + modelVet[7].param2 = paramVec(1); + modelVet[7].size = numberOfModels; + + if (criterion == "bic") + { + qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), + compareBic); + } + else if (criterion == "aic") + { + qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), + compareAic); + } + else + { + cout + << "Error @ DataProcessor::fitModels -> Invalid criterion argument: " + << criterion << endl; + cout << "AIC set as default" << endl; + qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), + compareAic); + + } + +#ifdef DEBUG_StochasticModelFit + //if (modelVet[0].modelName == WEIBULL) + //{ + // cout << modelVet[0].modelName << "aic:bic->" << modelVet[0].aic << ":" << modelVet[0].bic + // << " " << "alpha:betha->" << modelVet[0].param1 + // << modelVet[0].param2 << endl; + // string fileName = "weibulldata_" + std::to_string(abs(modelVet[0].aic)); + // save_data_on_file(fileName, interArrival, *interArrivalCdf); + //} +#endif //DEBUG_StochasticModelFit + + delete interArrivalCdf; + } + + return (modelVet); +} + +inline void DataProcessor::weibullFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //init + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + //linearization + vec y = log(-log(1.0 + diferential - interArrivalCdf)); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double weibull_alpha = theta(1); + double weibull_betha = exp(-theta(0) / theta(1)); + paramVec(0) = weibull_alpha; + paramVec(1) = weibull_betha; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "weibull", paramVec, "aic"); + double bic = informationCriterion(interArrival, "weibull", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; + +} + +inline void DataProcessor::normalFitting(const vec& interArrival, vec& paramVec, + vec& infoCriterion) +{ + double sigma = stddev(interArrival); + double mu = mean(interArrival); + paramVec(0) = mu; + paramVec(1) = sigma; + + //information criterion + double aic = informationCriterion(interArrival, "normal", paramVec, "aic"); + double bic = informationCriterion(interArrival, "normal", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::exponentialLrFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //init + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + //linearization + vec y = log(1.00 + diferential - interArrivalCdf); + //vec y = log(1.00 - interArrivalCdf); + vec x = interArrival; + mat* X = featureMatrix(x); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double exp_lambda = -theta(1); + paramVec(0) = exp_lambda; + paramVec(1) = 0; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "exponential", paramVec, + "aic"); + double bic = informationCriterion(interArrival, "exponential", paramVec, + "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::exponentialMeFitting(const vec& interArrival, + vec& paramVec, vec& infoCriterion) +{ + paramVec(0) = 1.0 / mean(interArrival); + paramVec(1) = 0; + + //information criterion + double aic = informationCriterion(interArrival, "exponential", paramVec, + "aic"); + double bic = informationCriterion(interArrival, "exponential", paramVec, + "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::paretoLrFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //init + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + //linearization + vec y = log(1.00 + diferential - interArrivalCdf); + //vec y = log(1.00 - interArrivalCdf); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double pareto_alpha = -theta(1); + double pareto_xm = interArrival.min(); + paramVec(0) = pareto_alpha; + paramVec(1) = pareto_xm; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "pareto", paramVec, "aic"); + double bic = informationCriterion(interArrival, "pareto", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::paretoMlhFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + double pareto_xm = interArrival.min(); + int m = interArrival.size(); + //vec logDiff = log(interArrival) - log(ones(m) * pareto_xm); + vec logDiff = log(interArrival) - log(pareto_xm); + double pareto_alpha = double(m) / (sum(logDiff)); + paramVec(0) = pareto_alpha; + paramVec(1) = pareto_xm; + + //information criterion + double aic = informationCriterion(interArrival, "pareto", paramVec, "aic"); + double bic = informationCriterion(interArrival, "pareto", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::cauchyFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //initialization + int iterations = 1500; + double learning_rate = 0.01; + int m = interArrival.size(); + double minInterArrival = interArrival.min(); + double y_max = 1.0 / minInterArrival; + vec y = tan(datum::pi * (interArrivalCdf - 0.5)); + for (int i = 0; i < m; i++) + { + //avoid too high numbers when tan() tends to infinity + if (y(i) > y_max) + y(i) = y_max; + } + + //linearization + vec J_history = zeros(iterations); + vec theta = zeros(2); + mat* X = featureMatrix(interArrival); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double cauchy_gamma = double(1.0) / theta(1); + double cauchy_x0 = -theta(0) / theta(1); + paramVec(0) = cauchy_gamma; + paramVec(1) = cauchy_x0; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "cauchy", paramVec, "aic"); + double bic = informationCriterion(interArrival, "cauchy", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; + +} + +void DataProcessor::constantFitting(const vec& interArrival, vec& paramVec, + vec& informationCriterion) +{ + paramVec(0) = mean(interArrival); + paramVec(1) = 0; + informationCriterion(0) = datum::inf; + informationCriterion(1) = datum::inf; +} + +template bool DataProcessor::isEqual(const T* vet1, const T* vet2, + const int size) +{ + for (int i = 0; i < size; i++) + { + if (vet1[i] != vet2[i]) + { + return (false); + } + } + + return (true); +} + +template void DataProcessor::vectorC_to_list(list* theList, + T* vet, int size) +{ + for (int i = 0; i < size; i++) + { + theList->push_back(vet[i]); + } +} + +template +void DataProcessor::quickSort(T* vet, int left, int right) +{ + int p = left; + int i = 0; + T ch = 0; + int j = 0; + + for (i = left + 1; i <= right; i++) + { + j = i; + if (vet[j] < vet[p]) + { + ch = vet[j]; + while (j > p) + { + vet[j] = vet[j - 1]; + j--; + } + vet[j] = ch; + p++; + } + } + if (p - 1 >= left) + quickSort(vet, left, p - 1); + if (p + 1 <= right) + quickSort(vet, p + 1, right); +} + +template +T DataProcessor::mode(list* theList) +{ + T* vet; + int listSize = theList->size(); + int i = 0; + T candidate = 0; + T prev = 0; + int counter = 0; + int largerCounter = 0; + T mode = 0; + vet = new T[listSize]; + + if (listSize == 0) + { + return (0); + } + + i = 0; + + for (typename list::iterator it = theList->begin(); it != theList->end(); + it++) + { + vet[i] = *it; + i++; + } + + quickSort(vet, 0, listSize - 1); + + prev = vet[0]; + largerCounter = 0; + for (i = 0; i < listSize; i++) + { + candidate = vet[i]; + if (candidate == prev) + { + counter++; + if (counter > largerCounter) + { + largerCounter = counter; + mode = vet[i]; + } + } + else + counter = 1; + + prev = vet[i]; + } + + delete[] vet; + + return (mode); +} + +template +inline T* DataProcessor::list_to_cvector(list* theList) +{ + int listSize = theList->size(); + T* vet; + int i = 0; + + vet = new T[listSize]; + if (listSize == 0) + { + return (0); + } + + i = 0; + for (typename list::iterator it = theList->begin(); it != theList->end(); + it++) + { + vet[i] = *it; + i++; + } + + return (vet); +} +template +inline void DataProcessor::delete_cvector(T* c_vet) +{ + delete[] c_vet; +} + +inline vec* DataProcessor::empiricalCdf(list& empiricalData) +{ + double* cvet_empiricalData = list_to_cvector(&empiricalData); + int data_size = empiricalData.size(); + quickSort(cvet_empiricalData, 0, data_size - 1); + double x = cvet_empiricalData[0]; // anchor - fist element; + int i1 = 0; // fist index + int i2 = 0; + double prob = 0; + vec* interArrivalCdf = new vec(zeros(data_size)); + + for (int i = 0; i < data_size; i++) + { + if (cvet_empiricalData[i] > x) + { + i2 = i - 1; + prob = double(i) / data_size; + for (int j = i1; j <= i2; j++) + { + (*interArrivalCdf)(j) = prob; + } + i1 = i; + x = cvet_empiricalData[i]; + } + } + //last position == 1 + (*interArrivalCdf)(data_size - 1) = 1; + + delete_cvector(cvet_empiricalData); + return (interArrivalCdf); +} + +inline mat* DataProcessor::featureMatrix(list& empiricalData) +{ + int data_size = empiricalData.size(); + mat* featureMatrix = new mat(ones(data_size, 2)); + + int i = 0; + for (list::iterator it = empiricalData.begin(); + it != empiricalData.end(); it++) + { + (*featureMatrix)(i, 1) = *it; + i++; + } + + return (featureMatrix); + +} + +inline mat* DataProcessor::featureMatrix(const vec& empiricalData) +{ + int data_size = empiricalData.size(); + mat* featureMatrix = new mat(ones(data_size, 2)); + for (int i = 0; i < data_size; i++) + { + (*featureMatrix)(i, 1) = empiricalData(i); + } + + return (featureMatrix); +} + +inline double DataProcessor::computeCost(const mat& X, const vec& y, + const vec& theta) +{ + double J = .0; + double jtemp = .0; + int m = y.size(); + + for (int i = 0; i < m; i++) + { + jtemp = jtemp + pow(double(theta(0) + theta(1) * X(i, 1) - y(i)), 2); + + } + J = (1.0 / double(2 * m)) * jtemp; + + return (J); +} + +inline void DataProcessor::gradientDescendent(const mat& X, const vec& y, + const double learning_rate, const int num_iters, vec& theta, + vec& J_history) +{ + + int m = y.n_rows; //number of training examples + double temp1 = .0; + double temp2 = .0; + double delta1 = .0; + double delta2 = .0; + vec x = X.col(1); + + for (int i = 0; i < num_iters; i++) + { + temp1 = .0; + temp2 = .0; + delta1 = .0; + delta2 = .0; + + //slope + delta1 = sum(theta(0) + theta(1) * x - y) / double(m); + delta2 = sum((theta(0) + theta(1) * x - y) % x) / double(m); + + //linear regression + temp1 = theta(0) - learning_rate * delta1; + temp2 = theta(1) - learning_rate * delta2; + + theta(0) = temp1; + theta(1) = temp2; + + //Save the cost J in every iteration + J_history(i) = computeCost(X, y, theta); + + } + +} + +inline double DataProcessor::informationCriterion(const vec& data, + const string& functionName, const vec& paramVet, + const string& criterion) +{ + double criterionVal = .0; + double nEstimatedParameters = double(paramVet.size()); + double likehoodLogVal = logLikehood(data, functionName, paramVet); + double logDataLen = log(double(data.size())); + + if (criterion == "aic") + { + criterionVal = 2 * nEstimatedParameters - 2 * likehoodLogVal; + } + else if (criterion == "bic") + { + criterionVal = nEstimatedParameters * logDataLen - 2 * likehoodLogVal; + } + else + { + cout << "\nInvalid functionName or no functionName selected: " + << functionName << endl; + printf("Selecting default criterion: AIC\n"); + criterionVal = 2 * nEstimatedParameters - 2 * likehoodLogVal; + } + + return (criterionVal); + +} + +inline double DataProcessor::logLikehood(const vec& data, + const string& functionName, const vec& paramVet) +{ + double param1 = paramVet(0); + double param2 = paramVet(1); + double m = data.size(); + double L = .0; + int i = 0; + vec data_prob = zeros(size(data)); + + if (functionName == "weibull") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_weibull(data(i), param1, param2); + } + else if (functionName == "normal") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_normal(data(i), param1, param2); + } + else if (functionName == "uniform") + { + data_prob = ones(size(data)) * pdf_uniform(param1, param2); + } + else if (functionName == "exponential") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_exponential(data(i), param1); + } + else if (functionName == "pareto") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_pareto(data(i), param1, param2); + } + else if (functionName == "cauchy") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_cauchy(data(i), param1, param2); + } + else + { + cout << "Warning, no valid stochastic function selected: " + << functionName << endl; + printf("Likehood logarithm seted to -Inf (worst as possible)\n"); + return (datum::inf); + } + + L = sum(log(data_prob)); + return (L); + +} + +inline double DataProcessor::pdf_weibull(double x, double alpha, double betha) +{ + if (x >= 0) + return ((alpha / pow(betha, alpha)) * pow(x, alpha - 1.0) + * exp(-(pow(x / betha, alpha)))); + else + return (.0); +} + +inline double DataProcessor::cdf_weibull(double x, double alpha, double betha) +{ + if (x >= 0) + return (1.0 - exp(-pow(x / betha, alpha))); + else + return (.0); +} + +inline double DataProcessor::pdf_exponential(double x, double lambda) +{ + if (x >= 0) + return (lambda * exp(-lambda * x)); + else + return (.0); + +} + +inline double DataProcessor::cdf_exponential(double x, double lambda) +{ + if (x >= 0) + return (1.0 - exp(-lambda * x)); + else + return (.0); +} + +inline double DataProcessor::pdf_pareto(double x, double alpha, double xm) +{ + if (x >= xm) + return (alpha * pow(xm, alpha) / (pow(x, alpha + 1.0))); + else + return (.0); +} + +inline double DataProcessor::cdf_pareto(double x, double alpha, double xm) +{ + if (x >= xm) + return (1.0 - pow(xm / x, alpha)); + else + return (.0); +} + +inline double DataProcessor::pdf_cauchy(double x, double gamma, double x0) +{ + return (1 / (datum::pi * gamma) + * (pow(gamma, 2) / (pow(x - x0, 2) + pow(gamma, 2)))); +} + +inline double DataProcessor::cdf_cauchy(double x, double gamma, double x0) +{ + return ((1 / datum::pi) * atan((x - x0) / (gamma)) + 0.5); +} + +inline double DataProcessor::pdf_normal(double x, double mu, double sigma) +{ + return (1 / (sqrt(2 * datum::pi) * sigma) + * exp(-0.5 * pow((x - mu) / sigma, 2))); +} + +inline double DataProcessor::cdf_normal(double x, double mu, double sigma) +{ + return (0.5 * (1 + erf((x - mu) / (sigma * sqrt(2))))); +} + +inline double DataProcessor::pdf_uniform(double x_min, double x_max) +{ + return (1.0 / (x_max - x_min)); +} + +inline double DataProcessor::cdf_uniform(double x, double x_min, double x_max) +{ + if (x < x_min) + return (0); + else if (x > x_max) + return (1); + else + return ((x - x_min) / (x_max - x_min)); +} + +#ifdef TEST_FUNCTIONS + +void DataProcessor::printTestResult(string testName, bool result) +{ + string outRes; + if (result == true) + outRes = "ok"; + else + outRes = "failed"; + + cout << testName << ":\t\t" << outRes << endl; +} + +bool DataProcessor::compareDouble(double val1, double val2) +{ + double error = 0; + + error = fabs(double(val1) - double(val2)); + if (error > double(1e-5)) + return (false); + else + return (true); + +} + +bool DataProcessor::compareDouble(double val1, double val2, double acErr) +{ + double error = 0; + + error = fabs(double(val1) - double(val2)); + if (error > double(acErr)) + return (false); + else + return (true); + +} + +bool DataProcessor::compareMat(mat& mat1, mat& mat2) +{ + int mat1_nc = mat1.n_cols; + int mat1_nr = mat1.n_rows; + int mat2_nc = mat2.n_cols; + int mat2_nr = mat2.n_rows; + + if ((mat1_nc != mat2_nc) || (mat1_nr != mat2_nr)) + { + cout << "mat1.n_cols and mat2.n_cols dont match. " << mat1_nc << ":" + << mat2_nc << " " << mat1_nr << ":" << mat2_nr << endl; + return (false); + } + for (int i = 0; i < mat1_nr; i++) + { + for (int j = 0; j < mat1_nc; j++) + { + if (compareDouble(mat1(i, j), mat2(i, j), 1e-5)) + { + //cout << " mat1(" << i << ", " << j << " ) = " << mat1(i,j); + //cout << " mat2(" << i << ", " << j << " ) = " << mat2(i,j); + return (false); + } + } + } + + return (true); +} + +void DataProcessor::save_data_on_file(const string& fileName, const mat& vet1, + const mat& vet2) +{ + string file_out = fileName + ".txt"; + int m = vet1.size(); + + ofstream writeOnFile(file_out, ios::out); + if (!writeOnFile) + { + cerr << "file could not be oppeded" << endl; + exit(1); + } + + for (int i = 0; i < m; i++) + { + writeOnFile << vet1(i) << " " << vet2(i) << endl; + } + +} + +void DataProcessor::save_data_on_file(const string& fileName, + list& theList) +{ + string file_out = fileName + ".txt"; + //int m = theList.size(); + + ofstream writeOnFile(file_out, ios::out); + if (!writeOnFile) + { + cerr << "file could not be oppeded" << endl; + exit(1); + } + + for (list::iterator it = theList.begin(); it != theList.end(); it++) + { + //list::iterator it = randInt_list1.begin(); + writeOnFile << *it << " \n"; + } +} + +bool DataProcessor::test_Mode() +{ + + int randint1[] = + { 1, 8, 1, 13, 9, 2, 1, 15, 4, 3, 10, 4, 13, 2, 14, 7, 7 }; + int randint1_mode = 1; + list l_randint1; + vectorC_to_list(&l_randint1, randint1, 17); + + int randint2[] = + { 5, 3, 6, 8, 14, 9, 11, 9, 11, 15, 8, 7, 12, 13, 14 }; + int randint2_mode = 8; + list l_randint2; + vectorC_to_list(&l_randint2, randint2, 15); + + int randint3[] = + { 9, 10, 6, 3, 13, 13, 14, 7, 7, 1, 5, 1, 8, 5, 9, 2, 3, 4, 5, 6, 6, 6 }; + int randint3_mode = 6; + list l_randint3; + vectorC_to_list(&l_randint3, randint3, 22); + + int randint4[] = + { 2, 1 }; + int randint4_mode = 1; + list l_randint4; + vectorC_to_list(&l_randint4, randint4, 2); + + int randint5[] = + { 1, 1, 1, 1, 1, 2, 2, 2, 2, 2 }; + int randint5_mode = 1; + list l_randint5; + vectorC_to_list(&l_randint5, randint5, 10); + + if (mode(&l_randint1) != randint1_mode) + return (false); + if (mode(&l_randint2) != randint2_mode) + return (false); + if (mode(&l_randint3) != randint3_mode) + return (false); + if (mode(&l_randint4) != randint4_mode) + return (false); + if (mode(&l_randint5) != randint5_mode) + return (false); + + return (true); +} + +bool DataProcessor::test_QuickSort() +{ + int randIntA[] = + { 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; + int randIntA_size = 18; + int randIntA_sorted[] = + { 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9 }; + int randIntB[] = + { 9, 2, 3, 3, 12, 15, 8, 14, 2, 7, 4, 6, 10, 2, 12 }; + int randIntB_size = 15; + int randIntB_sorted[] = + { 2, 2, 2, 3, 3, 4, 6, 7, 8, 9, 10, 12, 12, 14, 15 }; + double randDoubleA[] = + { 0.20872, 12.25501, 5.88210, 2.77962, 8.74916, 2.97454, 4.39641, 12.19733, + 4.66014, 4.52477, 5.19375, 12.11314, 13.35458, 11.56941, 6.59435 }; + int randDoubleA_size = 15; + double randDoubleA_sorted[] = + { 0.20872, 2.77962, 2.97454, 4.39641, 4.52477, 4.66014, 5.19375, 5.88210, + 6.59435, 8.74916, 11.56941, 12.11314, 12.19733, 12.25501, 13.35458 }; + + quickSort(randIntA, 0, randIntA_size - 1); + + if (isEqual(randIntA, randIntA_sorted, randIntA_size) == false) + { + return (false); + } + + quickSort(randIntB, 0, randIntB_size - 1); + if (isEqual(randIntB, randIntB_sorted, randIntB_size) == false) + { + return (false); + } + + quickSort(randDoubleA, 0, randDoubleA_size - 1); + if (isEqual(randDoubleA, randDoubleA_sorted, randDoubleA_size) == false) + { + return (false); + } + + return (true); + +} + +bool DataProcessor::test_list_tocvector() +{ + list randInt_list1 = + { 9, 2, 3, 3, 12, 15, 8, 14, 2, 7, 4, 6, 10, 2, 12 }; + list randInt_list2 = + { 2.2, 2.111, 3.16, 6.66, 13, 2.61 }; + list randInt_list3 = + { 1, 2, 3, 4, 5, 6, 6, 5, 4, 3, 2, 1 }; + + int* cvet1 = NULL; + double* cvet2 = NULL; + int* cvet3 = NULL; + + cvet1 = list_to_cvector(&randInt_list1); + cvet2 = list_to_cvector(&randInt_list2); + cvet3 = list_to_cvector(&randInt_list3); + + int i = 0; + for (list::iterator it = randInt_list1.begin(); + it != randInt_list1.end(); it++) + { + if (cvet1[i] != *it) + { + return (false); + } + //cout << *it << " "; + i++; + } + i = 0; + for (list::iterator it = randInt_list2.begin(); + it != randInt_list2.end(); it++) + { + if (cvet2[i] != *it) + { + return (false); + } + //cout << *it << " "; + i++; + } + i = 0; + for (list::iterator it = randInt_list3.begin(); + it != randInt_list3.end(); it++) + { + if (cvet3[i] != *it) + { + return (false); + } + //cout << *it << " "; + i++; + } + + delete_cvector(cvet1); + delete_cvector(cvet2); + delete_cvector(cvet3); + + return (true); +} + +bool DataProcessor::test_empiricalCdf() +{ + list interArrival_sample = + { 5.0000e-07, 1.5000e-06, 1.5000e-06, 2.5000e-06, 2.5000e-06, 3.5000e-06, + 4.5000e-06, 7.5000e-06, 1.2500e-05, 1.9500e-05, 3.1500e-05, + 4.3500e-05, 6.0500e-05, 7.6500e-05, 1.1050e-04, 1.4050e-04, + 1.8150e-04, 2.1150e-04, 2.3350e-04, 2.4350e-04, 2.5650e-04, + 3.0350e-04, 4.1250e-04, 1.3655e-03, 1.1593e-02, 3.2483e-02, + 8.1235e-02, 2.0939e-01, 5.0755e-01, 1.7351e+00 }; + vec emCdf_octave = + { 0.033333, 0.100000, 0.100000, 0.166667, 0.166667, 0.200000, 0.233333, + 0.266667, 0.300000, 0.333333, 0.366667, 0.400000, 0.433333, + 0.466667, 0.500000, 0.533333, 0.566667, 0.600000, 0.633333, + 0.666667, 0.700000, 0.733333, 0.766667, 0.800000, 0.833333, + 0.866667, 0.900000, 0.933333, 0.966667, 1.000000 }; + //emCdf_octave = emCdf_octave.t(); + + vec* emCdf_cpp = empiricalCdf(interArrival_sample); + + int list_size = interArrival_sample.size(); + for (int i = 0; i < list_size; i++) + { + if (!compareDouble(emCdf_octave(i), (*emCdf_cpp)(i), 1e-6)) + { + cout << "cdf error @ " << "i:" << i << " res:" << (*emCdf_cpp)(i, 0) + << " expected:" << emCdf_octave(i, 0) << endl; + return (false); + } + } + + delete emCdf_cpp; + return (true); +} + +bool DataProcessor::test_computeCost() +{ + list interArrival_sample = + { 5.0000e-07, 1.5000e-06, 1.5000e-06, 2.5000e-06, 2.5000e-06, 3.5000e-06, + 4.5000e-06, 7.5000e-06, 1.2500e-05, 1.9500e-05, 3.1500e-05, + 4.3500e-05, 6.0500e-05, 7.6500e-05, 1.1050e-04, 1.4050e-04, + 1.8150e-04, 2.1150e-04, 2.3350e-04, 2.4350e-04, 2.5650e-04, + 3.0350e-04, 4.1250e-04, 1.3655e-03, 1.1593e-02, 3.2483e-02, + 8.1235e-02, 2.0939e-01, 5.0755e-01, 1.7351e+00 }; + mat* X = featureMatrix(interArrival_sample); + vec emCdf_octave = + { 0.033333, 0.100000, 0.100000, 0.166667, 0.166667, 0.200000, 0.233333, + 0.266667, 0.300000, 0.333333, 0.366667, 0.400000, 0.433333, + 0.466667, 0.500000, 0.533333, 0.566667, 0.600000, 0.633333, + 0.666667, 0.700000, 0.733333, 0.766667, 0.800000, 0.833333, + 0.866667, 0.900000, 0.933333, 0.966667, 1.000000 }; + //emCdf_octave = emCdf_octave.t(); + double J_expected1 = 0.17535; + double J_expected2 = 1.5341; + double J_expected3 = 9.0244; + + vec theta = zeros(2); + + double J = computeCost(*X, emCdf_octave, theta); + if (!compareDouble(J, J_expected1, 0.001)) + { + //cout << "J1 = " << J << "\nJ_expected1 = "<< J_expected1 << endl; + return (false); + } + theta(0) = 2; + theta(1) = 2; + J = computeCost(*X, emCdf_octave, theta); + if (!compareDouble(J, J_expected2, 0.001)) + { + //cout << "J2 = " << J << "\nJ_expected2 = "<< J_expected2 << endl; + return (false); + } + theta(0) = 1.5; + theta(1) = 12; + J = computeCost(*X, emCdf_octave, theta); + if (!compareDouble(J, J_expected3, 0.001)) + { + //cout << "J3 = " << J << "\nJ_expected3 = "<< J_expected3 << endl; + return (false); + } + + delete X; + return (true); +} + +bool DataProcessor::test_informationCriterion() +{ + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + + int m = interArrival.size(); + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + //gradient descendent + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + vec y = log(-log(1.0 + diferential - *interArrivalCdf)); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + double weibull_alpha = theta(1); + double weibull_betha = exp(-theta(0) / theta(1)); + vec paramVec = + { weibull_alpha, weibull_betha }; + double weibull_bic = informationCriterion(interArrival, "weibull", paramVec, + "bic"); + double weibull_aic = informationCriterion(interArrival, "weibull", paramVec, + "aic"); + + if (!compareDouble(weibull_bic, -33712.7042, 0.001)) + return (false); + else if (!compareDouble(weibull_aic, -33724.6567, 0.001)) + return (false); + + return (true); +} + +bool DataProcessor::test_pdf_weibull() +{ + double alpha = 1.5000; + double betha = 0.3; + vec data = + { 0.010000, 2.300000, 0.500000 }; + vec dataprob_eval1 = + { 9.0733e-01, 8.3571e-09, 7.5066e-01 }; + vec dataprob_test = zeros(3); + + dataprob_test(0) = pdf_weibull(data(0), alpha, betha); + dataprob_test(1) = pdf_weibull(data(1), alpha, betha); + dataprob_test(2) = pdf_weibull(data(2), alpha, betha); + + if (compareDouble(dataprob_test(0), dataprob_eval1(0)) + && compareDouble(dataprob_test(1), dataprob_eval1(1)) + && compareDouble(dataprob_test(2), dataprob_eval1(2))) + { + return (true); + } + + return (false); +} + +bool DataProcessor::test_cdf_weibull() +{ + double alpha = 0.5; + double betha = 1.5; + vec data = + { 0.010000, 2.300000, 0.500000 }; + vec dataprob_eval1 = + { 0.078405, 0.710117, 0.438616 }; + vec dataprob_test = zeros(3); + + dataprob_test(0) = cdf_weibull(data(0), alpha, betha); + dataprob_test(1) = cdf_weibull(data(1), alpha, betha); + dataprob_test(2) = cdf_weibull(data(2), alpha, betha); + //cout << dataprob_test(0) << " : " << dataprob_test(1) << " : " << dataprob_test(2) << endl; + + if (compareDouble(dataprob_test(0), dataprob_eval1(0)) + && compareDouble(dataprob_test(1), dataprob_eval1(1)) + && compareDouble(dataprob_test(2), dataprob_eval1(2))) + { + return (true); + } + + return (false); +} + +bool DataProcessor::test_gradientDescendent() +{ + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + + int m = interArrival.size(); + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + //gradient descendent + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + vec y = log(-log(1.0 + diferential - *interArrivalCdf)); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //expected values + double Jlast = 0.083359; + double theta0 = 1.660453; + double theta1 = 0.248811; + + if (!compareDouble(J_history(iterations - 1), Jlast)) + + { + return (false); + } + else if (!compareDouble(theta(0), theta0)) + { + return (false); + } + else if (!compareDouble(theta(1), theta1)) + { + return (false); + } + + delete interArrivalCdf; + delete X; + return (true); + +} + +bool DataProcessor::test_pdf_exponential() +{ + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double lambda1 = 0.50000; + vec val1 = + { 0.49751, 0.15832, 0.38940 }; + vec res1 = zeros(3); + + double lambda2 = 3.0; + vec val2 = + { 2.9113366, 0.0030234, 0.6693905 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = pdf_exponential(data(i), lambda1); + res2(i) = pdf_exponential(data(i), lambda2); + + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + + } + + return (true); +} + +bool DataProcessor::test_cdf_exponential() +{ + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double lambda1 = 0.50000; + vec val1 = + { 0.0049875, 0.6833632, 0.2211992 }; + vec res1 = zeros(3); + + double lambda2 = 3.0; + vec val2 = + { 0.029554, 0.998992, 0.776870 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = cdf_exponential(data(i), lambda1); + res2(i) = cdf_exponential(data(i), lambda2); + + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + + return (true); +} + +bool DataProcessor::test_pdf_pareto() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double alpha1 = 0.50000; + double xm1 = 1.0; + vec val1 = + { 0, 0.14334, 0 }; + vec res1 = zeros(3); + double xm2 = 0.00001; + double alpha2 = 3.0; + vec val2 = + { 3.0000e-07, 1.0720e-16, 4.8000e-14 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = pdf_pareto(data(i), alpha1, xm1); + res2(i) = pdf_pareto(data(i), alpha2, xm2); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + + return (true); +} + +bool DataProcessor::test_cdf_pareto() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double alpha1 = 0.50000; + double xm1 = 0.001; + vec val1 = + { 0.68377, 0.97915, 0.95528 }; + vec res1 = zeros(3); + double xm2 = 0.2; + double alpha2 = 1; + vec val2 = + { 0, 0.91304, 0.60000 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = cdf_pareto(data(i), alpha1, xm1); + res2(i) = cdf_pareto(data(i), alpha2, xm2); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + return (true); +} + +bool DataProcessor::test_pdf_cauchy() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + double gamma1 = 0.50000; + double x01 = 0.001; + + vec val1 = + { 0.636414, 0.028752, 0.318947 }; + vec res1 = zeros(3); + double x02 = 2; + double gamma2 = 2; + + vec val2 = + { 0.079976, 0.155653, 0.101859 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = pdf_cauchy(data(i), gamma1, x01); + res2(i) = pdf_cauchy(data(i), gamma2, x02); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + return (true); +} + +bool DataProcessor::test_cdf_cauchy() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + double gamma1 = 0.50000; + double x01 = 0.001; + + vec val1 = + { 0.50573, 0.93183, 0.74968 }; + vec res1 = zeros(3); + double x02 = 2; + double gamma2 = 2; + + vec val2 = + { 0.25080, 0.54739, 0.29517 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = cdf_cauchy(data(i), gamma1, x01); + res2(i) = cdf_cauchy(data(i), gamma2, x02); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + return (true); +} + +bool DataProcessor::test_fitModels() +{ + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + + int m = interArrival.size(); + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + //list of expected values + double weibull_alpha = 0.24881; + double weibull_betha = 0.0012639; + double normal_mu = 0.054792; + double normal_sigma = 0.205602; + double exponentialMe_lambda = 18.250783; + double exponentialLr_lambda = 2.023115; + double paretoLr_alpha = 0.225451; + double paretoLr_xm = 0.000000; + double paretoMlh_alpha = 0.171674; + double paretoMlh_xm = 0.000000; + double cauchy_gamma = 0.000067; + double cauchy_x0 = 0.005750; + double acErr = 0.001; + + vec paramVec = zeros(2); + vec infoCriterion = zeros(2); + + weibullFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), weibull_alpha, acErr)) + { + cout << "weibullFitting alpha" << endl; + return (false); + } + if (!compareDouble(paramVec(1), weibull_betha, acErr)) + { + cout << "weibullFitting betha" << endl; + return (false); + } + + normalFitting(interArrival, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), normal_mu, acErr)) + { + cout << "normalFitting mu" << endl; + return (false); + } + if (!compareDouble(paramVec(1), normal_sigma, acErr)) + { + cout << "normalFitting sigma" << endl; + return (false); + } + + exponentialMeFitting(interArrival, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), exponentialMe_lambda, acErr)) + { + cout << "exponentialLrFitting lambda" << endl; + return (false); + } + + exponentialLrFitting(interArrival, *interArrivalCdf, paramVec, + infoCriterion); + if (!compareDouble(paramVec(0), exponentialLr_lambda, acErr)) + { + cout << exponentialLr_lambda << ":" << paramVec(0) << endl; + cout << "exponentialLrFitting lambda" << endl; + return (false); + } + + paretoLrFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), paretoLr_alpha, acErr)) + { + cout << "paretoLrFitting alpha" << endl; + return (false); + } + if (!compareDouble(paramVec(1), paretoLr_xm, acErr)) + { + cout << "paretoLrFitting xm" << endl; + return (false); + } + + paretoMlhFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), paretoMlh_alpha, acErr)) + { + cout << "paretoMlhFitting alpha" << endl; + return (false); + } + if (!compareDouble(paramVec(1), paretoMlh_xm, acErr)) + { + cout << "paretoMlhFitting xm" << endl; + return (false); + } + + cauchyFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), cauchy_gamma, acErr)) + { + cout << "cauchyFitting" << endl; + return (false); + } + if (!compareDouble(paramVec(1), cauchy_x0, acErr)) + { + return (false); + } + + delete interArrivalCdf; + + return (true); +} + +bool DataProcessor::test_modelSelection() +{ + + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + int m = interArrival.size(); + + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + StochasticModelFit* modelVet = NULL; + modelVet = fitModels(list_interArrival, "aic"); + + //int numberOfModels = modelVet[0].size; + //for (int i = 0; i < numberOfModels; i++) + // cout << modelVet[i].modelName << " " << "modelVet[" << i << "] = " + // << modelVet[i].aic << endl; + + delete interArrivalCdf; + delete[] modelVet; + return (true); +} + +#endif //TEST_FUNCTIONS diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/7f/c0b919418db500161808a5c64fd2084a b/.metadata/.plugins/org.eclipse.core.resources/.history/7f/c0b919418db500161808a5c64fd2084a new file mode 100644 index 0000000..b0c9b24 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/7f/c0b919418db500161808a5c64fd2084a @@ -0,0 +1,1909 @@ +/* + * DataProcessor.cpp + * + * Created on: 14 de jun de 2016 + * Author: apaschoalon + */ + +#include "DataProcessor.h" + +DataProcessor::DataProcessor() +{ + //nothing to do at all +} + +DataProcessor::~DataProcessor() +{ + //nothing to do at all +} + +string DataProcessor::toString(void) +{ + string dataProcessor; + + dataProcessor = + "Used to calculate parameters of network flows; has no state."; + + return (dataProcessor); +} + +int DataProcessor::calculate(const string& experimentName, + DatabaseInterface* databaseInterface, NetworkTrace* netTrace) +{ + + //iterator variables + long int fcounter = 0; + long int nflows = 0; + databaseInterface->getNumberOfFlows(experimentName, &nflows); + +#ifdef DEBUG_DataProcessor_calculate + cout << "DataProcessor::calculate() -> Number of flows = " << nflows << endl; +#endif // DEBUG_DataProcessor_calculate + + //protocol variables + string flowStrData = ""; + long int flowIntData = 0; + double startDalay = 0; //time of the fist packet of the flow + double flowDuration = 0; //duration of the flow + list ttlList; + int ttl = 0; + + //flow-level variables + list relativeTime; //time relative to the 1st packet list + long int nKbytes = 0; //Number of kbytes (bytes/1024) of the + + //packetSize variables + list pslist; //packet-size list + long int ps_mostFrequent = 0; + double mean_packetRate = 0; + + //inter-deperture time variables + StochasticModelFit* modelVet = NULL; + list interArrival_list; // list of inter arrival times of a flow + double lastTime = 0; + double idt = 0; + + for (fcounter = 0; fcounter < nflows; fcounter++) + { + + //new network flow + NetworkFlow* netFlow = NetworkFlow::make_flow("dummy"); + + //TODO checar valor retornado de databaseInterface + + //reset temp vars + flowStrData = ""; + flowIntData = 0; + relativeTime.clear(); + pslist.clear(); + interArrival_list.clear(); + + //load packet-size data + databaseInterface->getFlowData(experimentName, fcounter, "frame__len", + pslist); + + //laod time-relative data + databaseInterface->getFlowData(experimentName, fcounter, + "frame__time_relative", relativeTime); + + //evaluate inter-arrival data + //time relative to the begin of the measurement + lastTime = 0; + for (list::iterator it = relativeTime.begin(); + it != relativeTime.end(); it++) + { + idt = *it - lastTime; + interArrival_list.push_back(idt); + lastTime = *it; + } + + //###################################################################### + //Flow-level Options + //###################################################################### + startDalay = relativeTime.front(); + netFlow->setFlowStartDelay(startDalay); + + flowDuration = relativeTime.back() - relativeTime.front(); + netFlow->setFlowDuration(flowDuration); + + //TODO DS byte configuration -- now it is just set to zero + netFlow->setFlowDsByte(0); + + //flow kbytes + for (list::iterator it = pslist.begin(); it != pslist.end(); + it++) + { + nKbytes = nKbytes + *it; + } + nKbytes = nKbytes / 1024; + + netFlow->setNumberOfKbytes(nKbytes); + netFlow->setNumberOfPackets(relativeTime.size()); + + //###################################################################### + //Protocol Options + //###################################################################### + + // + //L3 protocols + //reference http://www.iana.org/assignments/ieee-802-numbers/ieee-802-numbers.xhtml + // + + databaseInterface->getFlowData(experimentName, fcounter, "eth__type", + &flowIntData); + if (flowIntData == IPV4_CODE) + { //IPv4 + netFlow->setNetworkProtocol(PROTOCOL__IPV4); + databaseInterface->getFlowData(experimentName, fcounter, "ip__src", + &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, "ip__dst", + &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + else if (flowIntData == (ARP_CODE || ARP_CODE_REV)) + { //ARP, Frame Relay ARP + netFlow->setNetworkProtocol(PROTOCOL__ARP); + databaseInterface->getFlowData(experimentName, fcounter, "ip__src", + &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, "ip__dst", + &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + else if (flowIntData == IPV6_CODE) + { //IPv6 + netFlow->setNetworkProtocol(PROTOCOL__ICMPV6); + databaseInterface->getFlowData(experimentName, fcounter, + "ipv6__addr", &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, + "ipv6__dst", &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + else + { //default IPv4 + netFlow->setNetworkProtocol(PROTOCOL__IPV4); + databaseInterface->getFlowData(experimentName, fcounter, "ip__src", + &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, "ip__dst", + &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + + //set ttl as the most frequent + databaseInterface->getFlowData(experimentName, fcounter, "ip__ttl", + ttlList); + //ttl = (int) mode(ttlList); + ttl = (int) mode(&ttlList); + netFlow->setNetworkTtl(ttl); + + // + //L4 Protocols + //reference https://en.wikipedia.org/wiki/List_of_IP_protocol_numbers + // + databaseInterface->getFlowData(experimentName, fcounter, "ip__proto", + &flowIntData); + if (flowIntData == ICMP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__ICMP); + } + else if (flowIntData == TCP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__TCP); + databaseInterface->getFlowData(experimentName, fcounter, + "tcp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "tcp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else if (flowIntData == UDP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__UDP); + databaseInterface->getFlowData(experimentName, fcounter, + "udp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "udp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else if (flowIntData == DCCP_CODE) + { + netFlow->setTransportDstPort(PROTOCOL__DCCP); + databaseInterface->getFlowData(experimentName, fcounter, + "dccp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "dccp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else if (flowIntData == GRE_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__GRE); + //TODO não suportado pelo D-ITG + } + else if (flowIntData == ICMPV6_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__ICMPV6); + } + else if (flowIntData == SCTP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__SCTP); + databaseInterface->getFlowData(experimentName, fcounter, + "sctp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "sctp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else + { //default: UDP + netFlow->setTransportProtocol(PROTOCOL__NULL); + //databaseInterface->getFlowData(experimentName, fcounter, "udp__dstport", &flowIntData); + //netFlow->setL4SrcPort(flowIntData); + //databaseInterface->getFlowData(experimentName, fcounter, "udp__srcport", &flowIntData); + //netFlow->setL4DstPort(flowIntData); + } + + //###################################################################### + //Packet Size Model + //###################################################################### + + // + // Constant model: Just set the packet size as the most frequent value + // + //ps_mostFrequent = mode(pslist); + //ps_mostFrequent = mode(&pslist); + //mean_packetRate = ((double) pslist.size() / flowDuration); + //netFlow->setPsConstant(ps_mostFrequent); + //netFlow->setIdtConstant(mean_packetRate); + + // + // Algorithm to choose the priority order of the models + // 1st version: just the constant model + // + //TODO implement a best algorithm + //netFlow->setPsModel1(MODEL__CONSTANT); + + //###################################################################### + //Inter-arrival-time Model + //###################################################################### + netFlow->setInterDepertureTimeModels( + fitModels(interArrival_list, "aic")); + + //TODO set the right model + + //netFlow->setIdtModel1(MODEL__CONSTANT); + + //TODO + + //TODO + + //###################################################################### + //Push-back the flow to Trace Flow-list + //###################################################################### + + netTrace->pushback_Netflow(netFlow); + +#ifdef DEBUG_DataProcessor_calculate_loop + cout << fcounter << ": ps_mostFrequent=" << ps_mostFrequent << endl; + cout << fcounter << ": startDalay=" << startDalay << endl; + cout << fcounter << ": mean_packetRate=" << mean_packetRate << endl; + cout << fcounter << ": idt_constant=" << netFlow->getIdtConstant() << endl; +#endif //DEBUG_DataProcessor_calculate_loop +#ifdef DEBUG_DataProcessor_calculate_loop + cout << fcounter << ": netFlow->getTransportProtocol() = " << netFlow->getTransportProtocol() << endl; + cout << fcounter << ": netFlow->getNetworkProtocol() = " << netFlow->getNetworkProtocol() << endl; + cout << fcounter << ": netFlow->getTransportDstPort() = " << netFlow->getTransportDstPort() << endl; + cout << fcounter << ": netFlow->getFlowDsByte() = " << netFlow->getFlowDsByte() << endl; + cout << fcounter << ": netFlow->getNetworkDstAddr() = " << netFlow->getNetworkDstAddr() << endl << endl; + +#endif //DEBUG_DataProcessor_calculate_loop + + } + +#ifdef DEBUG_DataProcessor_calculate + cout << "netTrace->networkFlow.size() = " << netTrace->networkFlow.size() << endl; + cout << "netTrace->getNumberOfFlows() = " << netTrace->getNumberOfFlows() << endl; +#endif //DEBUG_DataProcessor_calculate + + return (0); +} + +StochasticModelFit* DataProcessor::fitModels(list& empiricalData, + const string& criterion) +{ + //constants + const int numberOfModels = 8; + const int m = empiricalData.size(); //empirical data-size + //vars + int counter = 0; + StochasticModelFit* modelVet = NULL; + vec paramVec = zeros(2); + vec infoCriterion = zeros(2); + + modelVet = new StochasticModelFit[numberOfModels]; + + //Inter-arrival vec + vec interArrival = zeros(m); + counter = 0; + for (list::iterator it = empiricalData.begin(); + it != empiricalData.end(); it++) + { + interArrival(counter) = *it + min_time; + counter++; + } + //Empirical CDF of interArrival + vec* interArrivalCdf = empiricalCdf(empiricalData); + + //Weibull + weibullFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[0].aic = infoCriterion(0); + modelVet[0].bic = infoCriterion(1); + modelVet[0].modelName = WEIBULL; + modelVet[0].param1 = paramVec(0); + modelVet[0].param2 = paramVec(1); + modelVet[0].size = numberOfModels; + + //normal + normalFitting(interArrival, paramVec, infoCriterion); + modelVet[1].aic = infoCriterion(0); + modelVet[1].bic = infoCriterion(1); + modelVet[1].modelName = NORMAL; + modelVet[1].param1 = paramVec(0); + modelVet[1].param2 = paramVec(1); + modelVet[1].size = numberOfModels; + + //exponential mean + exponentialMeFitting(interArrival, paramVec, infoCriterion); + modelVet[2].aic = infoCriterion(0); + modelVet[2].bic = infoCriterion(1); + modelVet[2].modelName = EXPONENTIAL_MEAN; + modelVet[2].param1 = paramVec(0); + modelVet[2].param2 = paramVec(1); + modelVet[2].size = numberOfModels; + + //exponential Linear Regression (LR) + exponentialLrFitting(interArrival, *interArrivalCdf, paramVec, + infoCriterion); + modelVet[3].aic = infoCriterion(0); + modelVet[3].bic = infoCriterion(1); + modelVet[3].modelName = EXPONENTIAL_LINEAR_REGRESSION; + modelVet[3].param1 = paramVec(0); + modelVet[3].param2 = paramVec(1); + modelVet[3].size = numberOfModels; + + //pareto linear regression + paretoLrFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[4].aic = infoCriterion(0); + modelVet[4].bic = infoCriterion(1); + modelVet[4].modelName = PARETO_LINEAR_REGRESSION; + modelVet[4].param1 = paramVec(0); + modelVet[4].param2 = paramVec(1); + modelVet[4].size = numberOfModels; + + //pareto maximum likehood + paretoMlhFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[5].aic = infoCriterion(0); + modelVet[5].bic = infoCriterion(1); + modelVet[5].modelName = PARETO_MAXIMUM_LIKEHOOD; + modelVet[5].param1 = paramVec(0); + modelVet[5].param2 = paramVec(1); + modelVet[5].size = numberOfModels; + + //Cauchy + cauchyFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[6].aic = infoCriterion(0); + modelVet[6].bic = infoCriterion(1); + modelVet[6].modelName = CAUCHY; + modelVet[6].param1 = paramVec(0); + modelVet[6].param2 = paramVec(1); + modelVet[6].size = numberOfModels; + + //Constant + constantFitting(interArrival, paramVec, infoCriterion); + modelVet[7].aic = infoCriterion(0); + modelVet[7].bic = infoCriterion(1); + modelVet[7].modelName = CONSTANT; + modelVet[7].param1 = paramVec(0); + modelVet[7].param2 = paramVec(1); + modelVet[7].size = numberOfModels; + + if (criterion == "bic") + { + qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), compareBic); + } + else if (criterion == "aic") + { + qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), compareAic); + } + else + { + cout + << "Error @ DataProcessor::fitModels -> Invalid criterion argument: " + << criterion << endl; + cout << "AIC set as default" << endl; + qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), compareAic); + + } + +#ifdef DEBUG_StochasticModelFit + //if (modelVet[0].modelName == WEIBULL) + //{ + // cout << modelVet[0].modelName << "aic:bic->" << modelVet[0].aic << ":" << modelVet[0].bic + // << " " << "alpha:betha->" << modelVet[0].param1 + // << modelVet[0].param2 << endl; + // string fileName = "weibulldata_" + std::to_string(abs(modelVet[0].aic)); + // save_data_on_file(fileName, interArrival, *interArrivalCdf); + //} +#endif //DEBUG_StochasticModelFit + + delete interArrivalCdf; + + return (modelVet); +} + +inline void DataProcessor::weibullFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //init + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + //linearization + vec y = log(-log(1.0 + diferential - interArrivalCdf)); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double weibull_alpha = theta(1); + double weibull_betha = exp(-theta(0) / theta(1)); + paramVec(0) = weibull_alpha; + paramVec(1) = weibull_betha; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "weibull", paramVec, "aic"); + double bic = informationCriterion(interArrival, "weibull", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; + +} + +inline void DataProcessor::normalFitting(const vec& interArrival, vec& paramVec, + vec& infoCriterion) +{ + double sigma = stddev(interArrival); + double mu = mean(interArrival); + paramVec(0) = mu; + paramVec(1) = sigma; + + //information criterion + double aic = informationCriterion(interArrival, "normal", paramVec, "aic"); + double bic = informationCriterion(interArrival, "normal", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::exponentialLrFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //init + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + //linearization + vec y = log(1.00 + diferential - interArrivalCdf); + //vec y = log(1.00 - interArrivalCdf); + vec x = interArrival; + mat* X = featureMatrix(x); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double exp_lambda = -theta(1); + paramVec(0) = exp_lambda; + paramVec(1) = 0; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "exponential", paramVec, + "aic"); + double bic = informationCriterion(interArrival, "exponential", paramVec, + "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::exponentialMeFitting(const vec& interArrival, + vec& paramVec, vec& infoCriterion) +{ + paramVec(0) = 1.0 / mean(interArrival); + paramVec(1) = 0; + + //information criterion + double aic = informationCriterion(interArrival, "exponential", paramVec, + "aic"); + double bic = informationCriterion(interArrival, "exponential", paramVec, + "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::paretoLrFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //init + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + //linearization + vec y = log(1.00 + diferential - interArrivalCdf); + //vec y = log(1.00 - interArrivalCdf); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double pareto_alpha = -theta(1); + double pareto_xm = interArrival.min(); + paramVec(0) = pareto_alpha; + paramVec(1) = pareto_xm; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "pareto", paramVec, "aic"); + double bic = informationCriterion(interArrival, "pareto", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::paretoMlhFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + double pareto_xm = interArrival.min(); + int m = interArrival.size(); + //vec logDiff = log(interArrival) - log(ones(m) * pareto_xm); + vec logDiff = log(interArrival) - log(pareto_xm); + double pareto_alpha = double(m) / (sum(logDiff)); + paramVec(0) = pareto_alpha; + paramVec(1) = pareto_xm; + + //information criterion + double aic = informationCriterion(interArrival, "pareto", paramVec, "aic"); + double bic = informationCriterion(interArrival, "pareto", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::cauchyFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //initialization + int iterations = 1500; + double learning_rate = 0.01; + int m = interArrival.size(); + double minInterArrival = interArrival.min(); + double y_max = 1.0 / minInterArrival; + vec y = tan(datum::pi * (interArrivalCdf - 0.5)); + for (int i = 0; i < m; i++) + { + //avoid too high numbers when tan() tends to infinity + if (y(i) > y_max) + y(i) = y_max; + } + + //linearization + vec J_history = zeros(iterations); + vec theta = zeros(2); + mat* X = featureMatrix(interArrival); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double cauchy_gamma = double(1.0) / theta(1); + double cauchy_x0 = -theta(0) / theta(1); + paramVec(0) = cauchy_gamma; + paramVec(1) = cauchy_x0; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "cauchy", paramVec, "aic"); + double bic = informationCriterion(interArrival, "cauchy", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; + +} + +void DataProcessor::constantFitting(const vec& interArrival, vec& paramVec, + vec& informationCriterion) +{ + paramVec(0) = mean(interArrival); + paramVec(1) = 0; + informationCriterion(0) = datum::inf; + informationCriterion(1) = datum::inf; +} + +template bool DataProcessor::isEqual(const T* vet1, const T* vet2, + const int size) +{ + for (int i = 0; i < size; i++) + { + if (vet1[i] != vet2[i]) + { + return (false); + } + } + + return (true); +} + +template void DataProcessor::vectorC_to_list(list* theList, + T* vet, int size) +{ + for (int i = 0; i < size; i++) + { + theList->push_back(vet[i]); + } +} + +template +void DataProcessor::quickSort(T* vet, int left, int right) +{ + int p = left; + int i = 0; + T ch = 0; + int j = 0; + + for (i = left + 1; i <= right; i++) + { + j = i; + if (vet[j] < vet[p]) + { + ch = vet[j]; + while (j > p) + { + vet[j] = vet[j - 1]; + j--; + } + vet[j] = ch; + p++; + } + } + if (p - 1 >= left) + quickSort(vet, left, p - 1); + if (p + 1 <= right) + quickSort(vet, p + 1, right); +} + +template +T DataProcessor::mode(list* theList) +{ + T* vet; + int listSize = theList->size(); + int i = 0; + T candidate = 0; + T prev = 0; + int counter = 0; + int largerCounter = 0; + T mode = 0; + vet = new T[listSize]; + + if (listSize == 0) + { + return (0); + } + + i = 0; + + for (typename list::iterator it = theList->begin(); it != theList->end(); + it++) + { + vet[i] = *it; + i++; + } + + quickSort(vet, 0, listSize - 1); + + prev = vet[0]; + largerCounter = 0; + for (i = 0; i < listSize; i++) + { + candidate = vet[i]; + if (candidate == prev) + { + counter++; + if (counter > largerCounter) + { + largerCounter = counter; + mode = vet[i]; + } + } + else + counter = 1; + + prev = vet[i]; + } + + delete[] vet; + + return (mode); +} + +template +inline T* DataProcessor::list_to_cvector(list* theList) +{ + int listSize = theList->size(); + T* vet; + int i = 0; + + vet = new T[listSize]; + if (listSize == 0) + { + return (0); + } + + i = 0; + for (typename list::iterator it = theList->begin(); it != theList->end(); + it++) + { + vet[i] = *it; + i++; + } + + return (vet); +} +template +inline void DataProcessor::delete_cvector(T* c_vet) +{ + delete[] c_vet; +} + +inline vec* DataProcessor::empiricalCdf(list& empiricalData) +{ + double* cvet_empiricalData = list_to_cvector(&empiricalData); + int data_size = empiricalData.size(); + quickSort(cvet_empiricalData, 0, data_size - 1); + double x = cvet_empiricalData[0]; // anchor - fist element; + int i1 = 0; // fist index + int i2 = 0; + double prob = 0; + vec* interArrivalCdf = new vec(zeros(data_size)); + + for (int i = 0; i < data_size; i++) + { + if (cvet_empiricalData[i] > x) + { + i2 = i - 1; + prob = double(i) / data_size; + for (int j = i1; j <= i2; j++) + { + (*interArrivalCdf)(j) = prob; + } + i1 = i; + x = cvet_empiricalData[i]; + } + } + //last position == 1 + (*interArrivalCdf)(data_size - 1) = 1; + + delete_cvector(cvet_empiricalData); + return (interArrivalCdf); +} + +inline mat* DataProcessor::featureMatrix(list& empiricalData) +{ + int data_size = empiricalData.size(); + mat* featureMatrix = new mat(ones(data_size, 2)); + + int i = 0; + for (list::iterator it = empiricalData.begin(); + it != empiricalData.end(); it++) + { + (*featureMatrix)(i, 1) = *it; + i++; + } + + return (featureMatrix); + +} + +inline mat* DataProcessor::featureMatrix(const vec& empiricalData) +{ + int data_size = empiricalData.size(); + mat* featureMatrix = new mat(ones(data_size, 2)); + for (int i = 0; i < data_size; i++) + { + (*featureMatrix)(i, 1) = empiricalData(i); + } + + return (featureMatrix); +} + +inline double DataProcessor::computeCost(const mat& X, const vec& y, + const vec& theta) +{ + double J = .0; + double jtemp = .0; + int m = y.size(); + + for (int i = 0; i < m; i++) + { + jtemp = jtemp + pow(double(theta(0) + theta(1) * X(i, 1) - y(i)), 2); + + } + J = (1.0 / double(2 * m)) * jtemp; + + return (J); +} + +inline void DataProcessor::gradientDescendent(const mat& X, const vec& y, + const double learning_rate, const int num_iters, vec& theta, + vec& J_history) +{ + + int m = y.n_rows; //number of training examples + double temp1 = .0; + double temp2 = .0; + double delta1 = .0; + double delta2 = .0; + vec x = X.col(1); + + for (int i = 0; i < num_iters; i++) + { + temp1 = .0; + temp2 = .0; + delta1 = .0; + delta2 = .0; + + //slope + delta1 = sum(theta(0) + theta(1) * x - y) / double(m); + delta2 = sum((theta(0) + theta(1) * x - y) % x) / double(m); + + //linear regression + temp1 = theta(0) - learning_rate * delta1; + temp2 = theta(1) - learning_rate * delta2; + + theta(0) = temp1; + theta(1) = temp2; + + //Save the cost J in every iteration + J_history(i) = computeCost(X, y, theta); + + } + +} + +inline double DataProcessor::informationCriterion(const vec& data, + const string& functionName, const vec& paramVet, + const string& criterion) +{ + double criterionVal = .0; + double nEstimatedParameters = double(paramVet.size()); + double likehoodLogVal = logLikehood(data, functionName, paramVet); + double logDataLen = log(double(data.size())); + + if (criterion == "aic") + { + criterionVal = 2 * nEstimatedParameters - 2 * likehoodLogVal; + } + else if (criterion == "bic") + { + criterionVal = nEstimatedParameters * logDataLen - 2 * likehoodLogVal; + } + else + { + cout << "\nInvalid functionName or no functionName selected: " + << functionName << endl; + printf("Selecting default criterion: AIC\n"); + criterionVal = 2 * nEstimatedParameters - 2 * likehoodLogVal; + } + + return (criterionVal); + +} + +inline double DataProcessor::logLikehood(const vec& data, + const string& functionName, const vec& paramVet) +{ + double param1 = paramVet(0); + double param2 = paramVet(1); + double m = data.size(); + double L = .0; + int i = 0; + vec data_prob = zeros(size(data)); + + if (functionName == "weibull") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_weibull(data(i), param1, param2); + } + else if (functionName == "normal") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_normal(data(i), param1, param2); + } + else if (functionName == "uniform") + { + data_prob = ones(size(data)) * pdf_uniform(param1, param2); + } + else if (functionName == "exponential") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_exponential(data(i), param1); + } + else if (functionName == "pareto") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_pareto(data(i), param1, param2); + } + else if (functionName == "cauchy") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_cauchy(data(i), param1, param2); + } + else + { + cout << "Warning, no valid stochastic function selected: " + << functionName << endl; + printf("Likehood logarithm seted to -Inf (worst as possible)\n"); + return (datum::inf); + } + + L = sum(log(data_prob)); + return (L); + +} + +inline double DataProcessor::pdf_weibull(double x, double alpha, double betha) +{ + if (x >= 0) + return ((alpha / pow(betha, alpha)) * pow(x, alpha - 1.0) + * exp(-(pow(x / betha, alpha)))); + else + return (.0); +} + +inline double DataProcessor::cdf_weibull(double x, double alpha, double betha) +{ + if (x >= 0) + return (1.0 - exp(-pow(x / betha, alpha))); + else + return (.0); +} + +inline double DataProcessor::pdf_exponential(double x, double lambda) +{ + if (x >= 0) + return (lambda * exp(-lambda * x)); + else + return (.0); + +} + +inline double DataProcessor::cdf_exponential(double x, double lambda) +{ + if (x >= 0) + return (1.0 - exp(-lambda * x)); + else + return (.0); +} + +inline double DataProcessor::pdf_pareto(double x, double alpha, double xm) +{ + if (x >= xm) + return (alpha * pow(xm, alpha) / (pow(x, alpha + 1.0))); + else + return (.0); +} + +inline double DataProcessor::cdf_pareto(double x, double alpha, double xm) +{ + if (x >= xm) + return (1.0 - pow(xm / x, alpha)); + else + return (.0); +} + +inline double DataProcessor::pdf_cauchy(double x, double gamma, double x0) +{ + return (1 / (datum::pi * gamma) + * (pow(gamma, 2) / (pow(x - x0, 2) + pow(gamma, 2)))); +} + +inline double DataProcessor::cdf_cauchy(double x, double gamma, double x0) +{ + return ((1 / datum::pi) * atan((x - x0) / (gamma)) + 0.5); +} + +inline double DataProcessor::pdf_normal(double x, double mu, double sigma) +{ + return (1 / (sqrt(2 * datum::pi) * sigma) + * exp(-0.5 * pow((x - mu) / sigma, 2))); +} + +inline double DataProcessor::cdf_normal(double x, double mu, double sigma) +{ + return (0.5 * (1 + erf((x - mu) / (sigma * sqrt(2))))); +} + +inline double DataProcessor::pdf_uniform(double x_min, double x_max) +{ + return (1.0 / (x_max - x_min)); +} + +inline double DataProcessor::cdf_uniform(double x, double x_min, double x_max) +{ + if (x < x_min) + return (0); + else if (x > x_max) + return (1); + else + return ((x - x_min) / (x_max - x_min)); +} + +#ifdef TEST_FUNCTIONS + +void DataProcessor::printTestResult(string testName, bool result) +{ + string outRes; + if (result == true) + outRes = "ok"; + else + outRes = "failed"; + + cout << testName << ":\t\t" << outRes << endl; +} + +bool DataProcessor::compareDouble(double val1, double val2) +{ + double error = 0; + + error = fabs(double(val1) - double(val2)); + if (error > double(1e-5)) + return (false); + else + return (true); + +} + +bool DataProcessor::compareDouble(double val1, double val2, double acErr) +{ + double error = 0; + + error = fabs(double(val1) - double(val2)); + if (error > double(acErr)) + return (false); + else + return (true); + +} + +bool DataProcessor::compareMat(mat& mat1, mat& mat2) +{ + int mat1_nc = mat1.n_cols; + int mat1_nr = mat1.n_rows; + int mat2_nc = mat2.n_cols; + int mat2_nr = mat2.n_rows; + + if ((mat1_nc != mat2_nc) || (mat1_nr != mat2_nr)) + { + cout << "mat1.n_cols and mat2.n_cols dont match. " << mat1_nc << ":" + << mat2_nc << " " << mat1_nr << ":" << mat2_nr << endl; + return (false); + } + for (int i = 0; i < mat1_nr; i++) + { + for (int j = 0; j < mat1_nc; j++) + { + if (compareDouble(mat1(i, j), mat2(i, j), 1e-5)) + { + //cout << " mat1(" << i << ", " << j << " ) = " << mat1(i,j); + //cout << " mat2(" << i << ", " << j << " ) = " << mat2(i,j); + return (false); + } + } + } + + return (true); +} + +void DataProcessor::save_data_on_file(const string& fileName, const mat& vet1, + const mat& vet2) +{ + string file_out = fileName + ".txt"; + int m = vet1.size(); + + ofstream writeOnFile(file_out, ios::out); + if (!writeOnFile) + { + cerr << "file could not be oppeded" << endl; + exit(1); + } + + for (int i = 0; i < m; i++) + { + writeOnFile << vet1(i) << " " << vet2(i) << endl; + } + +} + +template +void DataProcessor::save_data_on_file(const string& fileName, list theList) +{ + string file_out = fileName + ".txt"; + int m = theList.size(); + + ofstream writeOnFile(file_out, ios::out); + if (!writeOnFile) + { + cerr << "file could not be oppeded" << endl; + exit(1); + } + + for (list::iterator it = theList.begin(); it!= theList.end(); it++) + { + //list::iterator it = randInt_list1.begin(); + writeOnFile << *it << " \n"; + } +} + +bool DataProcessor::test_Mode() +{ + + int randint1[] = + { 1, 8, 1, 13, 9, 2, 1, 15, 4, 3, 10, 4, 13, 2, 14, 7, 7 }; + int randint1_mode = 1; + list l_randint1; + vectorC_to_list(&l_randint1, randint1, 17); + + int randint2[] = + { 5, 3, 6, 8, 14, 9, 11, 9, 11, 15, 8, 7, 12, 13, 14 }; + int randint2_mode = 8; + list l_randint2; + vectorC_to_list(&l_randint2, randint2, 15); + + int randint3[] = + { 9, 10, 6, 3, 13, 13, 14, 7, 7, 1, 5, 1, 8, 5, 9, 2, 3, 4, 5, 6, 6, 6 }; + int randint3_mode = 6; + list l_randint3; + vectorC_to_list(&l_randint3, randint3, 22); + + int randint4[] = + { 2, 1 }; + int randint4_mode = 1; + list l_randint4; + vectorC_to_list(&l_randint4, randint4, 2); + + int randint5[] = + { 1, 1, 1, 1, 1, 2, 2, 2, 2, 2 }; + int randint5_mode = 1; + list l_randint5; + vectorC_to_list(&l_randint5, randint5, 10); + + if (mode(&l_randint1) != randint1_mode) + return (false); + if (mode(&l_randint2) != randint2_mode) + return (false); + if (mode(&l_randint3) != randint3_mode) + return (false); + if (mode(&l_randint4) != randint4_mode) + return (false); + if (mode(&l_randint5) != randint5_mode) + return (false); + + return (true); +} + +bool DataProcessor::test_QuickSort() +{ + int randIntA[] = + { 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; + int randIntA_size = 18; + int randIntA_sorted[] = + { 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9 }; + int randIntB[] = + { 9, 2, 3, 3, 12, 15, 8, 14, 2, 7, 4, 6, 10, 2, 12 }; + int randIntB_size = 15; + int randIntB_sorted[] = + { 2, 2, 2, 3, 3, 4, 6, 7, 8, 9, 10, 12, 12, 14, 15 }; + double randDoubleA[] = + { 0.20872, 12.25501, 5.88210, 2.77962, 8.74916, 2.97454, 4.39641, 12.19733, + 4.66014, 4.52477, 5.19375, 12.11314, 13.35458, 11.56941, 6.59435 }; + int randDoubleA_size = 15; + double randDoubleA_sorted[] = + { 0.20872, 2.77962, 2.97454, 4.39641, 4.52477, 4.66014, 5.19375, 5.88210, + 6.59435, 8.74916, 11.56941, 12.11314, 12.19733, 12.25501, 13.35458 }; + + quickSort(randIntA, 0, randIntA_size - 1); + + if (isEqual(randIntA, randIntA_sorted, randIntA_size) == false) + { + return (false); + } + + quickSort(randIntB, 0, randIntB_size - 1); + if (isEqual(randIntB, randIntB_sorted, randIntB_size) == false) + { + return (false); + } + + quickSort(randDoubleA, 0, randDoubleA_size - 1); + if (isEqual(randDoubleA, randDoubleA_sorted, randDoubleA_size) == false) + { + return (false); + } + + return (true); + +} + +bool DataProcessor::test_list_tocvector() +{ + list randInt_list1 = + { 9, 2, 3, 3, 12, 15, 8, 14, 2, 7, 4, 6, 10, 2, 12 }; + list randInt_list2 = + { 2.2, 2.111, 3.16, 6.66, 13, 2.61 }; + list randInt_list3 = + { 1, 2, 3, 4, 5, 6, 6, 5, 4, 3, 2, 1 }; + + int* cvet1 = NULL; + double* cvet2 = NULL; + int* cvet3 = NULL; + + cvet1 = list_to_cvector(&randInt_list1); + cvet2 = list_to_cvector(&randInt_list2); + cvet3 = list_to_cvector(&randInt_list3); + + int i = 0; + for (list::iterator it = randInt_list1.begin(); + it != randInt_list1.end(); it++) + { + if (cvet1[i] != *it) + { + return (false); + } + //cout << *it << " "; + i++; + } + i = 0; + for (list::iterator it = randInt_list2.begin(); + it != randInt_list2.end(); it++) + { + if (cvet2[i] != *it) + { + return (false); + } + //cout << *it << " "; + i++; + } + i = 0; + for (list::iterator it = randInt_list3.begin(); + it != randInt_list3.end(); it++) + { + if (cvet3[i] != *it) + { + return (false); + } + //cout << *it << " "; + i++; + } + + delete_cvector(cvet1); + delete_cvector(cvet2); + delete_cvector(cvet3); + + return (true); +} + +bool DataProcessor::test_empiricalCdf() +{ + list interArrival_sample = + { 5.0000e-07, 1.5000e-06, 1.5000e-06, 2.5000e-06, 2.5000e-06, 3.5000e-06, + 4.5000e-06, 7.5000e-06, 1.2500e-05, 1.9500e-05, 3.1500e-05, + 4.3500e-05, 6.0500e-05, 7.6500e-05, 1.1050e-04, 1.4050e-04, + 1.8150e-04, 2.1150e-04, 2.3350e-04, 2.4350e-04, 2.5650e-04, + 3.0350e-04, 4.1250e-04, 1.3655e-03, 1.1593e-02, 3.2483e-02, + 8.1235e-02, 2.0939e-01, 5.0755e-01, 1.7351e+00 }; + vec emCdf_octave = + { 0.033333, 0.100000, 0.100000, 0.166667, 0.166667, 0.200000, 0.233333, + 0.266667, 0.300000, 0.333333, 0.366667, 0.400000, 0.433333, + 0.466667, 0.500000, 0.533333, 0.566667, 0.600000, 0.633333, + 0.666667, 0.700000, 0.733333, 0.766667, 0.800000, 0.833333, + 0.866667, 0.900000, 0.933333, 0.966667, 1.000000 }; + //emCdf_octave = emCdf_octave.t(); + + vec* emCdf_cpp = empiricalCdf(interArrival_sample); + + int list_size = interArrival_sample.size(); + for (int i = 0; i < list_size; i++) + { + if (!compareDouble(emCdf_octave(i), (*emCdf_cpp)(i), 1e-6)) + { + cout << "cdf error @ " << "i:" << i << " res:" << (*emCdf_cpp)(i, 0) + << " expected:" << emCdf_octave(i, 0) << endl; + return (false); + } + } + + delete emCdf_cpp; + return (true); +} + +bool DataProcessor::test_computeCost() +{ + list interArrival_sample = + { 5.0000e-07, 1.5000e-06, 1.5000e-06, 2.5000e-06, 2.5000e-06, 3.5000e-06, + 4.5000e-06, 7.5000e-06, 1.2500e-05, 1.9500e-05, 3.1500e-05, + 4.3500e-05, 6.0500e-05, 7.6500e-05, 1.1050e-04, 1.4050e-04, + 1.8150e-04, 2.1150e-04, 2.3350e-04, 2.4350e-04, 2.5650e-04, + 3.0350e-04, 4.1250e-04, 1.3655e-03, 1.1593e-02, 3.2483e-02, + 8.1235e-02, 2.0939e-01, 5.0755e-01, 1.7351e+00 }; + mat* X = featureMatrix(interArrival_sample); + vec emCdf_octave = + { 0.033333, 0.100000, 0.100000, 0.166667, 0.166667, 0.200000, 0.233333, + 0.266667, 0.300000, 0.333333, 0.366667, 0.400000, 0.433333, + 0.466667, 0.500000, 0.533333, 0.566667, 0.600000, 0.633333, + 0.666667, 0.700000, 0.733333, 0.766667, 0.800000, 0.833333, + 0.866667, 0.900000, 0.933333, 0.966667, 1.000000 }; + //emCdf_octave = emCdf_octave.t(); + double J_expected1 = 0.17535; + double J_expected2 = 1.5341; + double J_expected3 = 9.0244; + + vec theta = zeros(2); + + double J = computeCost(*X, emCdf_octave, theta); + if (!compareDouble(J, J_expected1, 0.001)) + { + //cout << "J1 = " << J << "\nJ_expected1 = "<< J_expected1 << endl; + return (false); + } + theta(0) = 2; + theta(1) = 2; + J = computeCost(*X, emCdf_octave, theta); + if (!compareDouble(J, J_expected2, 0.001)) + { + //cout << "J2 = " << J << "\nJ_expected2 = "<< J_expected2 << endl; + return (false); + } + theta(0) = 1.5; + theta(1) = 12; + J = computeCost(*X, emCdf_octave, theta); + if (!compareDouble(J, J_expected3, 0.001)) + { + //cout << "J3 = " << J << "\nJ_expected3 = "<< J_expected3 << endl; + return (false); + } + + delete X; + return (true); +} + +bool DataProcessor::test_informationCriterion() +{ + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + + int m = interArrival.size(); + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + //gradient descendent + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + vec y = log(-log(1.0 + diferential - *interArrivalCdf)); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + double weibull_alpha = theta(1); + double weibull_betha = exp(-theta(0) / theta(1)); + vec paramVec = + { weibull_alpha, weibull_betha }; + double weibull_bic = informationCriterion(interArrival, "weibull", paramVec, + "bic"); + double weibull_aic = informationCriterion(interArrival, "weibull", paramVec, + "aic"); + + if (!compareDouble(weibull_bic, -33712.7042, 0.001)) + return (false); + else if (!compareDouble(weibull_aic, -33724.6567, 0.001)) + return (false); + + return (true); +} + +bool DataProcessor::test_pdf_weibull() +{ + double alpha = 1.5000; + double betha = 0.3; + vec data = + { 0.010000, 2.300000, 0.500000 }; + vec dataprob_eval1 = + { 9.0733e-01, 8.3571e-09, 7.5066e-01 }; + vec dataprob_test = zeros(3); + + dataprob_test(0) = pdf_weibull(data(0), alpha, betha); + dataprob_test(1) = pdf_weibull(data(1), alpha, betha); + dataprob_test(2) = pdf_weibull(data(2), alpha, betha); + + if (compareDouble(dataprob_test(0), dataprob_eval1(0)) + && compareDouble(dataprob_test(1), dataprob_eval1(1)) + && compareDouble(dataprob_test(2), dataprob_eval1(2))) + { + return (true); + } + + return (false); +} + +bool DataProcessor::test_cdf_weibull() +{ + double alpha = 0.5; + double betha = 1.5; + vec data = + { 0.010000, 2.300000, 0.500000 }; + vec dataprob_eval1 = + { 0.078405, 0.710117, 0.438616 }; + vec dataprob_test = zeros(3); + + dataprob_test(0) = cdf_weibull(data(0), alpha, betha); + dataprob_test(1) = cdf_weibull(data(1), alpha, betha); + dataprob_test(2) = cdf_weibull(data(2), alpha, betha); + //cout << dataprob_test(0) << " : " << dataprob_test(1) << " : " << dataprob_test(2) << endl; + + if (compareDouble(dataprob_test(0), dataprob_eval1(0)) + && compareDouble(dataprob_test(1), dataprob_eval1(1)) + && compareDouble(dataprob_test(2), dataprob_eval1(2))) + { + return (true); + } + + return (false); +} + +bool DataProcessor::test_gradientDescendent() +{ + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + + int m = interArrival.size(); + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + //gradient descendent + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + vec y = log(-log(1.0 + diferential - *interArrivalCdf)); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //expected values + double Jlast = 0.083359; + double theta0 = 1.660453; + double theta1 = 0.248811; + + if (!compareDouble(J_history(iterations - 1), Jlast)) + + { + return (false); + } + else if (!compareDouble(theta(0), theta0)) + { + return (false); + } + else if (!compareDouble(theta(1), theta1)) + { + return (false); + } + + delete interArrivalCdf; + delete X; + return (true); + +} + +bool DataProcessor::test_pdf_exponential() +{ + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double lambda1 = 0.50000; + vec val1 = + { 0.49751, 0.15832, 0.38940 }; + vec res1 = zeros(3); + + double lambda2 = 3.0; + vec val2 = + { 2.9113366, 0.0030234, 0.6693905 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = pdf_exponential(data(i), lambda1); + res2(i) = pdf_exponential(data(i), lambda2); + + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + + } + + return (true); +} + +bool DataProcessor::test_cdf_exponential() +{ + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double lambda1 = 0.50000; + vec val1 = + { 0.0049875, 0.6833632, 0.2211992 }; + vec res1 = zeros(3); + + double lambda2 = 3.0; + vec val2 = + { 0.029554, 0.998992, 0.776870 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = cdf_exponential(data(i), lambda1); + res2(i) = cdf_exponential(data(i), lambda2); + + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + + return (true); +} + +bool DataProcessor::test_pdf_pareto() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double alpha1 = 0.50000; + double xm1 = 1.0; + vec val1 = + { 0, 0.14334, 0 }; + vec res1 = zeros(3); + double xm2 = 0.00001; + double alpha2 = 3.0; + vec val2 = + { 3.0000e-07, 1.0720e-16, 4.8000e-14 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = pdf_pareto(data(i), alpha1, xm1); + res2(i) = pdf_pareto(data(i), alpha2, xm2); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + + return (true); +} + +bool DataProcessor::test_cdf_pareto() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double alpha1 = 0.50000; + double xm1 = 0.001; + vec val1 = + { 0.68377, 0.97915, 0.95528 }; + vec res1 = zeros(3); + double xm2 = 0.2; + double alpha2 = 1; + vec val2 = + { 0, 0.91304, 0.60000 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = cdf_pareto(data(i), alpha1, xm1); + res2(i) = cdf_pareto(data(i), alpha2, xm2); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + return (true); +} + +bool DataProcessor::test_pdf_cauchy() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + double gamma1 = 0.50000; + double x01 = 0.001; + + vec val1 = + { 0.636414, 0.028752, 0.318947 }; + vec res1 = zeros(3); + double x02 = 2; + double gamma2 = 2; + + vec val2 = + { 0.079976, 0.155653, 0.101859 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = pdf_cauchy(data(i), gamma1, x01); + res2(i) = pdf_cauchy(data(i), gamma2, x02); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + return (true); +} + +bool DataProcessor::test_cdf_cauchy() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + double gamma1 = 0.50000; + double x01 = 0.001; + + vec val1 = + { 0.50573, 0.93183, 0.74968 }; + vec res1 = zeros(3); + double x02 = 2; + double gamma2 = 2; + + vec val2 = + { 0.25080, 0.54739, 0.29517 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = cdf_cauchy(data(i), gamma1, x01); + res2(i) = cdf_cauchy(data(i), gamma2, x02); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + return (true); +} + +bool DataProcessor::test_fitModels() +{ + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + + int m = interArrival.size(); + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + //list of expected values + double weibull_alpha = 0.24881; + double weibull_betha = 0.0012639; + double normal_mu = 0.054792; + double normal_sigma = 0.205602; + double exponentialMe_lambda = 18.250783; + double exponentialLr_lambda = 2.023115; + double paretoLr_alpha = 0.225451; + double paretoLr_xm = 0.000000; + double paretoMlh_alpha = 0.171674; + double paretoMlh_xm = 0.000000; + double cauchy_gamma = 0.000067; + double cauchy_x0 = 0.005750; + double acErr = 0.001; + + vec paramVec = zeros(2); + vec infoCriterion = zeros(2); + + weibullFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), weibull_alpha, acErr)) + { + cout << "weibullFitting alpha" << endl; + return (false); + } + if (!compareDouble(paramVec(1), weibull_betha, acErr)) + { + cout << "weibullFitting betha" << endl; + return (false); + } + + normalFitting(interArrival, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), normal_mu, acErr)) + { + cout << "normalFitting mu" << endl; + return (false); + } + if (!compareDouble(paramVec(1), normal_sigma, acErr)) + { + cout << "normalFitting sigma" << endl; + return (false); + } + + exponentialMeFitting(interArrival, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), exponentialMe_lambda, acErr)) + { + cout << "exponentialLrFitting lambda" << endl; + return (false); + } + + exponentialLrFitting(interArrival, *interArrivalCdf, paramVec, + infoCriterion); + if (!compareDouble(paramVec(0), exponentialLr_lambda, acErr)) + { + cout << exponentialLr_lambda << ":" << paramVec(0) << endl; + cout << "exponentialLrFitting lambda" << endl; + return (false); + } + + paretoLrFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), paretoLr_alpha, acErr)) + { + cout << "paretoLrFitting alpha" << endl; + return (false); + } + if (!compareDouble(paramVec(1), paretoLr_xm, acErr)) + { + cout << "paretoLrFitting xm" << endl; + return (false); + } + + paretoMlhFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), paretoMlh_alpha, acErr)) + { + cout << "paretoMlhFitting alpha" << endl; + return (false); + } + if (!compareDouble(paramVec(1), paretoMlh_xm, acErr)) + { + cout << "paretoMlhFitting xm" << endl; + return (false); + } + + cauchyFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), cauchy_gamma, acErr)) + { + cout << "cauchyFitting" << endl; + return (false); + } + if (!compareDouble(paramVec(1), cauchy_x0, acErr)) + { + return (false); + } + + delete interArrivalCdf; + + return (true); +} + +bool DataProcessor::test_modelSelection() +{ + + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + int m = interArrival.size(); + + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + StochasticModelFit* modelVet = NULL; + modelVet = fitModels(list_interArrival, "aic"); + + //int numberOfModels = modelVet[0].size; + //for (int i = 0; i < numberOfModels; i++) + // cout << modelVet[i].modelName << " " << "modelVet[" << i << "] = " + // << modelVet[i].aic << endl; + + delete interArrivalCdf; + delete[] modelVet; + return (true); +} + +#endif //TEST_FUNCTIONS diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/87/20340d7ec8b500161808a5c64fd2084a b/.metadata/.plugins/org.eclipse.core.resources/.history/87/20340d7ec8b500161808a5c64fd2084a new file mode 100644 index 0000000..dbeb455 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/87/20340d7ec8b500161808a5c64fd2084a @@ -0,0 +1,1945 @@ +/* + * DataProcessor.cpp + * + * Created on: 14 de jun de 2016 + * Author: apaschoalon + */ + +#include "DataProcessor.h" + +DataProcessor::DataProcessor() +{ + //nothing to do at all +} + +DataProcessor::~DataProcessor() +{ + //nothing to do at all +} + +string DataProcessor::toString(void) +{ + string dataProcessor; + + dataProcessor = + "Used to calculate parameters of network flows; has no state."; + + return (dataProcessor); +} + +int DataProcessor::calculate(const string& experimentName, + DatabaseInterface* databaseInterface, NetworkTrace* netTrace) +{ + + //iterator variables + long int fcounter = 0; + long int nflows = 0; + databaseInterface->getNumberOfFlows(experimentName, &nflows); + +#ifdef DEBUG_DataProcessor_calculate + cout << "DataProcessor::calculate() -> Number of flows = " << nflows << endl; +#endif // DEBUG_DataProcessor_calculate + + //protocol variables + string flowStrData = ""; + long int flowIntData = 0; + double startDalay = 0; //time of the fist packet of the flow + double flowDuration = 0; //duration of the flow + list ttlList; + int ttl = 0; + + //flow-level variables + list relativeTime; //time relative to the 1st packet list + long int nKbytes = 0; //Number of kbytes (bytes/1024) of the + + //packetSize variables + list pslist; //packet-size list + long int ps_mostFrequent = 0; + double mean_packetRate = 0; + + //inter-deperture time variables + StochasticModelFit* modelVet = NULL; + list interArrival_list; // list of inter arrival times of a flow + list interArrival_fileStack; + list interArrival_interFileStack; + list interArrival_interSessionStack; + double lastTime = 0; + double idt = 0; + + for (fcounter = 0; fcounter < nflows; fcounter++) + { + + //new network flow + NetworkFlow* netFlow = NetworkFlow::make_flow("dummy"); + + //TODO checar valor retornado de databaseInterface + + //reset temp vars + flowStrData = ""; + flowIntData = 0; + relativeTime.clear(); + pslist.clear(); + interArrival_list.clear(); + interArrival_fileStack.clear(); + interArrival_interFileStack.clear(); + interArrival_interSessionStack.clear(); + + //load packet-size data + databaseInterface->getFlowData(experimentName, fcounter, "frame__len", + pslist); + + //laod time-relative data + databaseInterface->getFlowData(experimentName, fcounter, + "frame__time_relative", relativeTime); + + //evaluate inter-arrival data + //time relative to the begin of the measurement + lastTime = 0; + for (list::iterator it = relativeTime.begin(); + it != relativeTime.end(); it++) + { + idt = *it - lastTime; + interArrival_list.push_back(idt); + lastTime = *it; + } + + //###################################################################### + //Flow-level Options + //###################################################################### + startDalay = relativeTime.front(); + netFlow->setFlowStartDelay(startDalay); + + flowDuration = relativeTime.back() - relativeTime.front(); + netFlow->setFlowDuration(flowDuration); + + //TODO DS byte configuration -- now it is just set to zero + netFlow->setFlowDsByte(0); + + //flow kbytes + for (list::iterator it = pslist.begin(); it != pslist.end(); + it++) + { + nKbytes = nKbytes + *it; + } + nKbytes = nKbytes / 1024; + + netFlow->setNumberOfKbytes(nKbytes); + netFlow->setNumberOfPackets(relativeTime.size()); + + //###################################################################### + //Protocol Options + //###################################################################### + + // + //L3 protocols + //reference http://www.iana.org/assignments/ieee-802-numbers/ieee-802-numbers.xhtml + // + + databaseInterface->getFlowData(experimentName, fcounter, "eth__type", + &flowIntData); + if (flowIntData == IPV4_CODE) + { //IPv4 + netFlow->setNetworkProtocol(PROTOCOL__IPV4); + databaseInterface->getFlowData(experimentName, fcounter, "ip__src", + &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, "ip__dst", + &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + else if (flowIntData == (ARP_CODE || ARP_CODE_REV)) + { //ARP, Frame Relay ARP + netFlow->setNetworkProtocol(PROTOCOL__ARP); + databaseInterface->getFlowData(experimentName, fcounter, "ip__src", + &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, "ip__dst", + &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + else if (flowIntData == IPV6_CODE) + { //IPv6 + netFlow->setNetworkProtocol(PROTOCOL__ICMPV6); + databaseInterface->getFlowData(experimentName, fcounter, + "ipv6__addr", &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, + "ipv6__dst", &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + else + { //default IPv4 + netFlow->setNetworkProtocol(PROTOCOL__IPV4); + databaseInterface->getFlowData(experimentName, fcounter, "ip__src", + &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, "ip__dst", + &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + + //set ttl as the most frequent + databaseInterface->getFlowData(experimentName, fcounter, "ip__ttl", + ttlList); + //ttl = (int) mode(ttlList); + ttl = (int) mode(&ttlList); + netFlow->setNetworkTtl(ttl); + + // + //L4 Protocols + //reference https://en.wikipedia.org/wiki/List_of_IP_protocol_numbers + // + databaseInterface->getFlowData(experimentName, fcounter, "ip__proto", + &flowIntData); + if (flowIntData == ICMP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__ICMP); + } + else if (flowIntData == TCP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__TCP); + databaseInterface->getFlowData(experimentName, fcounter, + "tcp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "tcp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else if (flowIntData == UDP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__UDP); + databaseInterface->getFlowData(experimentName, fcounter, + "udp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "udp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else if (flowIntData == DCCP_CODE) + { + netFlow->setTransportDstPort(PROTOCOL__DCCP); + databaseInterface->getFlowData(experimentName, fcounter, + "dccp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "dccp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else if (flowIntData == GRE_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__GRE); + //TODO não suportado pelo D-ITG + } + else if (flowIntData == ICMPV6_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__ICMPV6); + } + else if (flowIntData == SCTP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__SCTP); + databaseInterface->getFlowData(experimentName, fcounter, + "sctp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "sctp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else + { //default: UDP + netFlow->setTransportProtocol(PROTOCOL__NULL); + //databaseInterface->getFlowData(experimentName, fcounter, "udp__dstport", &flowIntData); + //netFlow->setL4SrcPort(flowIntData); + //databaseInterface->getFlowData(experimentName, fcounter, "udp__srcport", &flowIntData); + //netFlow->setL4DstPort(flowIntData); + } + + //###################################################################### + //Packet Size Model + //###################################################################### + + // + // Constant model: Just set the packet size as the most frequent value + // + //ps_mostFrequent = mode(pslist); + //ps_mostFrequent = mode(&pslist); + //mean_packetRate = ((double) pslist.size() / flowDuration); + //netFlow->setPsConstant(ps_mostFrequent); + //netFlow->setIdtConstant(mean_packetRate); + + // + // Algorithm to choose the priority order of the models + // 1st version: just the constant model + // + //TODO implement a best algorithm + //netFlow->setPsModel1(MODEL__CONSTANT); + + //###################################################################### + //Inter-arrival-time Model + //###################################################################### + + for (list::iterator it = interArrival_list.begin(); + it != interArrival_list.end(); it++) + { + if(*it < FILE_CUT_TIME) + { + interArrival_fileStack.push_back(*it); + } + else if(*it < SESSION_CUT_TIME) + { + interArrival_interFileStack.push_back(*it); + } + else + { + interArrival_interSessionStack.push_back(*it); + } + } + +#ifdef DEBUG_DataProcessor_interArrival + if(fcounter == 0) + { + string file1 = "fileStack"; + string file2 = "interFileStack"; + string file3 = "interSessionStack"; + save_data_on_file(file1, interArrival_fileStack); + save_data_on_file(file2, interArrival_interFileStack); + save_data_on_file(file3, interArrival_interSessionStack); + } +#endif + + + netFlow->setInterDepertureTimeModels( + fitModels(interArrival_list, "aic")); + + //TODO set the right model + + //netFlow->setIdtModel1(MODEL__CONSTANT); + + //TODO + + //TODO + + //###################################################################### + //Push-back the flow to Trace Flow-list + //###################################################################### + + netTrace->pushback_Netflow(netFlow); + +#ifdef DEBUG_DataProcessor_calculate_loop + cout << fcounter << ": ps_mostFrequent=" << ps_mostFrequent << endl; + cout << fcounter << ": startDalay=" << startDalay << endl; + cout << fcounter << ": mean_packetRate=" << mean_packetRate << endl; + cout << fcounter << ": idt_constant=" << netFlow->getIdtConstant() << endl; +#endif //DEBUG_DataProcessor_calculate_loop +#ifdef DEBUG_DataProcessor_calculate_loop + cout << fcounter << ": netFlow->getTransportProtocol() = " << netFlow->getTransportProtocol() << endl; + cout << fcounter << ": netFlow->getNetworkProtocol() = " << netFlow->getNetworkProtocol() << endl; + cout << fcounter << ": netFlow->getTransportDstPort() = " << netFlow->getTransportDstPort() << endl; + cout << fcounter << ": netFlow->getFlowDsByte() = " << netFlow->getFlowDsByte() << endl; + cout << fcounter << ": netFlow->getNetworkDstAddr() = " << netFlow->getNetworkDstAddr() << endl << endl; + +#endif //DEBUG_DataProcessor_calculate_loop + + } + +#ifdef DEBUG_DataProcessor_calculate + cout << "netTrace->networkFlow.size() = " << netTrace->networkFlow.size() << endl; + cout << "netTrace->getNumberOfFlows() = " << netTrace->getNumberOfFlows() << endl; +#endif //DEBUG_DataProcessor_calculate + + return (0); +} + +StochasticModelFit* DataProcessor::fitModels(list& empiricalData, + const string& criterion) +{ + //constants + const int numberOfModels = 8; + const int m = empiricalData.size(); //empirical data-size + //vars + int counter = 0; + StochasticModelFit* modelVet = NULL; + vec paramVec = zeros(2); + vec infoCriterion = zeros(2); + + modelVet = new StochasticModelFit[numberOfModels]; + + //Inter-arrival vec + vec interArrival = zeros(m); + counter = 0; + for (list::iterator it = empiricalData.begin(); + it != empiricalData.end(); it++) + { + interArrival(counter) = *it + min_time; + counter++; + } + //Empirical CDF of interArrival + vec* interArrivalCdf = empiricalCdf(empiricalData); + + //Weibull + weibullFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[0].aic = infoCriterion(0); + modelVet[0].bic = infoCriterion(1); + modelVet[0].modelName = WEIBULL; + modelVet[0].param1 = paramVec(0); + modelVet[0].param2 = paramVec(1); + modelVet[0].size = numberOfModels; + + //normal + normalFitting(interArrival, paramVec, infoCriterion); + modelVet[1].aic = infoCriterion(0); + modelVet[1].bic = infoCriterion(1); + modelVet[1].modelName = NORMAL; + modelVet[1].param1 = paramVec(0); + modelVet[1].param2 = paramVec(1); + modelVet[1].size = numberOfModels; + + //exponential mean + exponentialMeFitting(interArrival, paramVec, infoCriterion); + modelVet[2].aic = infoCriterion(0); + modelVet[2].bic = infoCriterion(1); + modelVet[2].modelName = EXPONENTIAL_MEAN; + modelVet[2].param1 = paramVec(0); + modelVet[2].param2 = paramVec(1); + modelVet[2].size = numberOfModels; + + //exponential Linear Regression (LR) + exponentialLrFitting(interArrival, *interArrivalCdf, paramVec, + infoCriterion); + modelVet[3].aic = infoCriterion(0); + modelVet[3].bic = infoCriterion(1); + modelVet[3].modelName = EXPONENTIAL_LINEAR_REGRESSION; + modelVet[3].param1 = paramVec(0); + modelVet[3].param2 = paramVec(1); + modelVet[3].size = numberOfModels; + + //pareto linear regression + paretoLrFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[4].aic = infoCriterion(0); + modelVet[4].bic = infoCriterion(1); + modelVet[4].modelName = PARETO_LINEAR_REGRESSION; + modelVet[4].param1 = paramVec(0); + modelVet[4].param2 = paramVec(1); + modelVet[4].size = numberOfModels; + + //pareto maximum likehood + paretoMlhFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[5].aic = infoCriterion(0); + modelVet[5].bic = infoCriterion(1); + modelVet[5].modelName = PARETO_MAXIMUM_LIKEHOOD; + modelVet[5].param1 = paramVec(0); + modelVet[5].param2 = paramVec(1); + modelVet[5].size = numberOfModels; + + //Cauchy + cauchyFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[6].aic = infoCriterion(0); + modelVet[6].bic = infoCriterion(1); + modelVet[6].modelName = CAUCHY; + modelVet[6].param1 = paramVec(0); + modelVet[6].param2 = paramVec(1); + modelVet[6].size = numberOfModels; + + //Constant + constantFitting(interArrival, paramVec, infoCriterion); + modelVet[7].aic = infoCriterion(0); + modelVet[7].bic = infoCriterion(1); + modelVet[7].modelName = CONSTANT; + modelVet[7].param1 = paramVec(0); + modelVet[7].param2 = paramVec(1); + modelVet[7].size = numberOfModels; + + if (criterion == "bic") + { + qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), compareBic); + } + else if (criterion == "aic") + { + qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), compareAic); + } + else + { + cout + << "Error @ DataProcessor::fitModels -> Invalid criterion argument: " + << criterion << endl; + cout << "AIC set as default" << endl; + qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), compareAic); + + } + +#ifdef DEBUG_StochasticModelFit + //if (modelVet[0].modelName == WEIBULL) + //{ + // cout << modelVet[0].modelName << "aic:bic->" << modelVet[0].aic << ":" << modelVet[0].bic + // << " " << "alpha:betha->" << modelVet[0].param1 + // << modelVet[0].param2 << endl; + // string fileName = "weibulldata_" + std::to_string(abs(modelVet[0].aic)); + // save_data_on_file(fileName, interArrival, *interArrivalCdf); + //} +#endif //DEBUG_StochasticModelFit + + delete interArrivalCdf; + + return (modelVet); +} + +inline void DataProcessor::weibullFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //init + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + //linearization + vec y = log(-log(1.0 + diferential - interArrivalCdf)); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double weibull_alpha = theta(1); + double weibull_betha = exp(-theta(0) / theta(1)); + paramVec(0) = weibull_alpha; + paramVec(1) = weibull_betha; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "weibull", paramVec, "aic"); + double bic = informationCriterion(interArrival, "weibull", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; + +} + +inline void DataProcessor::normalFitting(const vec& interArrival, vec& paramVec, + vec& infoCriterion) +{ + double sigma = stddev(interArrival); + double mu = mean(interArrival); + paramVec(0) = mu; + paramVec(1) = sigma; + + //information criterion + double aic = informationCriterion(interArrival, "normal", paramVec, "aic"); + double bic = informationCriterion(interArrival, "normal", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::exponentialLrFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //init + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + //linearization + vec y = log(1.00 + diferential - interArrivalCdf); + //vec y = log(1.00 - interArrivalCdf); + vec x = interArrival; + mat* X = featureMatrix(x); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double exp_lambda = -theta(1); + paramVec(0) = exp_lambda; + paramVec(1) = 0; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "exponential", paramVec, + "aic"); + double bic = informationCriterion(interArrival, "exponential", paramVec, + "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::exponentialMeFitting(const vec& interArrival, + vec& paramVec, vec& infoCriterion) +{ + paramVec(0) = 1.0 / mean(interArrival); + paramVec(1) = 0; + + //information criterion + double aic = informationCriterion(interArrival, "exponential", paramVec, + "aic"); + double bic = informationCriterion(interArrival, "exponential", paramVec, + "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::paretoLrFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //init + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + //linearization + vec y = log(1.00 + diferential - interArrivalCdf); + //vec y = log(1.00 - interArrivalCdf); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double pareto_alpha = -theta(1); + double pareto_xm = interArrival.min(); + paramVec(0) = pareto_alpha; + paramVec(1) = pareto_xm; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "pareto", paramVec, "aic"); + double bic = informationCriterion(interArrival, "pareto", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::paretoMlhFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + double pareto_xm = interArrival.min(); + int m = interArrival.size(); + //vec logDiff = log(interArrival) - log(ones(m) * pareto_xm); + vec logDiff = log(interArrival) - log(pareto_xm); + double pareto_alpha = double(m) / (sum(logDiff)); + paramVec(0) = pareto_alpha; + paramVec(1) = pareto_xm; + + //information criterion + double aic = informationCriterion(interArrival, "pareto", paramVec, "aic"); + double bic = informationCriterion(interArrival, "pareto", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::cauchyFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //initialization + int iterations = 1500; + double learning_rate = 0.01; + int m = interArrival.size(); + double minInterArrival = interArrival.min(); + double y_max = 1.0 / minInterArrival; + vec y = tan(datum::pi * (interArrivalCdf - 0.5)); + for (int i = 0; i < m; i++) + { + //avoid too high numbers when tan() tends to infinity + if (y(i) > y_max) + y(i) = y_max; + } + + //linearization + vec J_history = zeros(iterations); + vec theta = zeros(2); + mat* X = featureMatrix(interArrival); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double cauchy_gamma = double(1.0) / theta(1); + double cauchy_x0 = -theta(0) / theta(1); + paramVec(0) = cauchy_gamma; + paramVec(1) = cauchy_x0; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "cauchy", paramVec, "aic"); + double bic = informationCriterion(interArrival, "cauchy", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; + +} + +void DataProcessor::constantFitting(const vec& interArrival, vec& paramVec, + vec& informationCriterion) +{ + paramVec(0) = mean(interArrival); + paramVec(1) = 0; + informationCriterion(0) = datum::inf; + informationCriterion(1) = datum::inf; +} + +template bool DataProcessor::isEqual(const T* vet1, const T* vet2, + const int size) +{ + for (int i = 0; i < size; i++) + { + if (vet1[i] != vet2[i]) + { + return (false); + } + } + + return (true); +} + +template void DataProcessor::vectorC_to_list(list* theList, + T* vet, int size) +{ + for (int i = 0; i < size; i++) + { + theList->push_back(vet[i]); + } +} + +template +void DataProcessor::quickSort(T* vet, int left, int right) +{ + int p = left; + int i = 0; + T ch = 0; + int j = 0; + + for (i = left + 1; i <= right; i++) + { + j = i; + if (vet[j] < vet[p]) + { + ch = vet[j]; + while (j > p) + { + vet[j] = vet[j - 1]; + j--; + } + vet[j] = ch; + p++; + } + } + if (p - 1 >= left) + quickSort(vet, left, p - 1); + if (p + 1 <= right) + quickSort(vet, p + 1, right); +} + +template +T DataProcessor::mode(list* theList) +{ + T* vet; + int listSize = theList->size(); + int i = 0; + T candidate = 0; + T prev = 0; + int counter = 0; + int largerCounter = 0; + T mode = 0; + vet = new T[listSize]; + + if (listSize == 0) + { + return (0); + } + + i = 0; + + for (typename list::iterator it = theList->begin(); it != theList->end(); + it++) + { + vet[i] = *it; + i++; + } + + quickSort(vet, 0, listSize - 1); + + prev = vet[0]; + largerCounter = 0; + for (i = 0; i < listSize; i++) + { + candidate = vet[i]; + if (candidate == prev) + { + counter++; + if (counter > largerCounter) + { + largerCounter = counter; + mode = vet[i]; + } + } + else + counter = 1; + + prev = vet[i]; + } + + delete[] vet; + + return (mode); +} + +template +inline T* DataProcessor::list_to_cvector(list* theList) +{ + int listSize = theList->size(); + T* vet; + int i = 0; + + vet = new T[listSize]; + if (listSize == 0) + { + return (0); + } + + i = 0; + for (typename list::iterator it = theList->begin(); it != theList->end(); + it++) + { + vet[i] = *it; + i++; + } + + return (vet); +} +template +inline void DataProcessor::delete_cvector(T* c_vet) +{ + delete[] c_vet; +} + +inline vec* DataProcessor::empiricalCdf(list& empiricalData) +{ + double* cvet_empiricalData = list_to_cvector(&empiricalData); + int data_size = empiricalData.size(); + quickSort(cvet_empiricalData, 0, data_size - 1); + double x = cvet_empiricalData[0]; // anchor - fist element; + int i1 = 0; // fist index + int i2 = 0; + double prob = 0; + vec* interArrivalCdf = new vec(zeros(data_size)); + + for (int i = 0; i < data_size; i++) + { + if (cvet_empiricalData[i] > x) + { + i2 = i - 1; + prob = double(i) / data_size; + for (int j = i1; j <= i2; j++) + { + (*interArrivalCdf)(j) = prob; + } + i1 = i; + x = cvet_empiricalData[i]; + } + } + //last position == 1 + (*interArrivalCdf)(data_size - 1) = 1; + + delete_cvector(cvet_empiricalData); + return (interArrivalCdf); +} + +inline mat* DataProcessor::featureMatrix(list& empiricalData) +{ + int data_size = empiricalData.size(); + mat* featureMatrix = new mat(ones(data_size, 2)); + + int i = 0; + for (list::iterator it = empiricalData.begin(); + it != empiricalData.end(); it++) + { + (*featureMatrix)(i, 1) = *it; + i++; + } + + return (featureMatrix); + +} + +inline mat* DataProcessor::featureMatrix(const vec& empiricalData) +{ + int data_size = empiricalData.size(); + mat* featureMatrix = new mat(ones(data_size, 2)); + for (int i = 0; i < data_size; i++) + { + (*featureMatrix)(i, 1) = empiricalData(i); + } + + return (featureMatrix); +} + +inline double DataProcessor::computeCost(const mat& X, const vec& y, + const vec& theta) +{ + double J = .0; + double jtemp = .0; + int m = y.size(); + + for (int i = 0; i < m; i++) + { + jtemp = jtemp + pow(double(theta(0) + theta(1) * X(i, 1) - y(i)), 2); + + } + J = (1.0 / double(2 * m)) * jtemp; + + return (J); +} + +inline void DataProcessor::gradientDescendent(const mat& X, const vec& y, + const double learning_rate, const int num_iters, vec& theta, + vec& J_history) +{ + + int m = y.n_rows; //number of training examples + double temp1 = .0; + double temp2 = .0; + double delta1 = .0; + double delta2 = .0; + vec x = X.col(1); + + for (int i = 0; i < num_iters; i++) + { + temp1 = .0; + temp2 = .0; + delta1 = .0; + delta2 = .0; + + //slope + delta1 = sum(theta(0) + theta(1) * x - y) / double(m); + delta2 = sum((theta(0) + theta(1) * x - y) % x) / double(m); + + //linear regression + temp1 = theta(0) - learning_rate * delta1; + temp2 = theta(1) - learning_rate * delta2; + + theta(0) = temp1; + theta(1) = temp2; + + //Save the cost J in every iteration + J_history(i) = computeCost(X, y, theta); + + } + +} + +inline double DataProcessor::informationCriterion(const vec& data, + const string& functionName, const vec& paramVet, + const string& criterion) +{ + double criterionVal = .0; + double nEstimatedParameters = double(paramVet.size()); + double likehoodLogVal = logLikehood(data, functionName, paramVet); + double logDataLen = log(double(data.size())); + + if (criterion == "aic") + { + criterionVal = 2 * nEstimatedParameters - 2 * likehoodLogVal; + } + else if (criterion == "bic") + { + criterionVal = nEstimatedParameters * logDataLen - 2 * likehoodLogVal; + } + else + { + cout << "\nInvalid functionName or no functionName selected: " + << functionName << endl; + printf("Selecting default criterion: AIC\n"); + criterionVal = 2 * nEstimatedParameters - 2 * likehoodLogVal; + } + + return (criterionVal); + +} + +inline double DataProcessor::logLikehood(const vec& data, + const string& functionName, const vec& paramVet) +{ + double param1 = paramVet(0); + double param2 = paramVet(1); + double m = data.size(); + double L = .0; + int i = 0; + vec data_prob = zeros(size(data)); + + if (functionName == "weibull") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_weibull(data(i), param1, param2); + } + else if (functionName == "normal") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_normal(data(i), param1, param2); + } + else if (functionName == "uniform") + { + data_prob = ones(size(data)) * pdf_uniform(param1, param2); + } + else if (functionName == "exponential") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_exponential(data(i), param1); + } + else if (functionName == "pareto") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_pareto(data(i), param1, param2); + } + else if (functionName == "cauchy") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_cauchy(data(i), param1, param2); + } + else + { + cout << "Warning, no valid stochastic function selected: " + << functionName << endl; + printf("Likehood logarithm seted to -Inf (worst as possible)\n"); + return (datum::inf); + } + + L = sum(log(data_prob)); + return (L); + +} + +inline double DataProcessor::pdf_weibull(double x, double alpha, double betha) +{ + if (x >= 0) + return ((alpha / pow(betha, alpha)) * pow(x, alpha - 1.0) + * exp(-(pow(x / betha, alpha)))); + else + return (.0); +} + +inline double DataProcessor::cdf_weibull(double x, double alpha, double betha) +{ + if (x >= 0) + return (1.0 - exp(-pow(x / betha, alpha))); + else + return (.0); +} + +inline double DataProcessor::pdf_exponential(double x, double lambda) +{ + if (x >= 0) + return (lambda * exp(-lambda * x)); + else + return (.0); + +} + +inline double DataProcessor::cdf_exponential(double x, double lambda) +{ + if (x >= 0) + return (1.0 - exp(-lambda * x)); + else + return (.0); +} + +inline double DataProcessor::pdf_pareto(double x, double alpha, double xm) +{ + if (x >= xm) + return (alpha * pow(xm, alpha) / (pow(x, alpha + 1.0))); + else + return (.0); +} + +inline double DataProcessor::cdf_pareto(double x, double alpha, double xm) +{ + if (x >= xm) + return (1.0 - pow(xm / x, alpha)); + else + return (.0); +} + +inline double DataProcessor::pdf_cauchy(double x, double gamma, double x0) +{ + return (1 / (datum::pi * gamma) + * (pow(gamma, 2) / (pow(x - x0, 2) + pow(gamma, 2)))); +} + +inline double DataProcessor::cdf_cauchy(double x, double gamma, double x0) +{ + return ((1 / datum::pi) * atan((x - x0) / (gamma)) + 0.5); +} + +inline double DataProcessor::pdf_normal(double x, double mu, double sigma) +{ + return (1 / (sqrt(2 * datum::pi) * sigma) + * exp(-0.5 * pow((x - mu) / sigma, 2))); +} + +inline double DataProcessor::cdf_normal(double x, double mu, double sigma) +{ + return (0.5 * (1 + erf((x - mu) / (sigma * sqrt(2))))); +} + +inline double DataProcessor::pdf_uniform(double x_min, double x_max) +{ + return (1.0 / (x_max - x_min)); +} + +inline double DataProcessor::cdf_uniform(double x, double x_min, double x_max) +{ + if (x < x_min) + return (0); + else if (x > x_max) + return (1); + else + return ((x - x_min) / (x_max - x_min)); +} + +#ifdef TEST_FUNCTIONS + +void DataProcessor::printTestResult(string testName, bool result) +{ + string outRes; + if (result == true) + outRes = "ok"; + else + outRes = "failed"; + + cout << testName << ":\t\t" << outRes << endl; +} + +bool DataProcessor::compareDouble(double val1, double val2) +{ + double error = 0; + + error = fabs(double(val1) - double(val2)); + if (error > double(1e-5)) + return (false); + else + return (true); + +} + +bool DataProcessor::compareDouble(double val1, double val2, double acErr) +{ + double error = 0; + + error = fabs(double(val1) - double(val2)); + if (error > double(acErr)) + return (false); + else + return (true); + +} + +bool DataProcessor::compareMat(mat& mat1, mat& mat2) +{ + int mat1_nc = mat1.n_cols; + int mat1_nr = mat1.n_rows; + int mat2_nc = mat2.n_cols; + int mat2_nr = mat2.n_rows; + + if ((mat1_nc != mat2_nc) || (mat1_nr != mat2_nr)) + { + cout << "mat1.n_cols and mat2.n_cols dont match. " << mat1_nc << ":" + << mat2_nc << " " << mat1_nr << ":" << mat2_nr << endl; + return (false); + } + for (int i = 0; i < mat1_nr; i++) + { + for (int j = 0; j < mat1_nc; j++) + { + if (compareDouble(mat1(i, j), mat2(i, j), 1e-5)) + { + //cout << " mat1(" << i << ", " << j << " ) = " << mat1(i,j); + //cout << " mat2(" << i << ", " << j << " ) = " << mat2(i,j); + return (false); + } + } + } + + return (true); +} + +void DataProcessor::save_data_on_file(const string& fileName, const mat& vet1, + const mat& vet2) +{ + string file_out = fileName + ".txt"; + int m = vet1.size(); + + ofstream writeOnFile(file_out, ios::out); + if (!writeOnFile) + { + cerr << "file could not be oppeded" << endl; + exit(1); + } + + for (int i = 0; i < m; i++) + { + writeOnFile << vet1(i) << " " << vet2(i) << endl; + } + +} + +void DataProcessor::save_data_on_file(const string& fileName, list& theList) +{ + string file_out = fileName + ".txt"; + //int m = theList.size(); + + ofstream writeOnFile(file_out, ios::out); + if (!writeOnFile) + { + cerr << "file could not be oppeded" << endl; + exit(1); + } + + for (list::iterator it = theList.begin(); it != theList.end(); it++) + { + //list::iterator it = randInt_list1.begin(); + writeOnFile << *it << " \n"; + } +} + +bool DataProcessor::test_Mode() +{ + + int randint1[] = + { 1, 8, 1, 13, 9, 2, 1, 15, 4, 3, 10, 4, 13, 2, 14, 7, 7 }; + int randint1_mode = 1; + list l_randint1; + vectorC_to_list(&l_randint1, randint1, 17); + + int randint2[] = + { 5, 3, 6, 8, 14, 9, 11, 9, 11, 15, 8, 7, 12, 13, 14 }; + int randint2_mode = 8; + list l_randint2; + vectorC_to_list(&l_randint2, randint2, 15); + + int randint3[] = + { 9, 10, 6, 3, 13, 13, 14, 7, 7, 1, 5, 1, 8, 5, 9, 2, 3, 4, 5, 6, 6, 6 }; + int randint3_mode = 6; + list l_randint3; + vectorC_to_list(&l_randint3, randint3, 22); + + int randint4[] = + { 2, 1 }; + int randint4_mode = 1; + list l_randint4; + vectorC_to_list(&l_randint4, randint4, 2); + + int randint5[] = + { 1, 1, 1, 1, 1, 2, 2, 2, 2, 2 }; + int randint5_mode = 1; + list l_randint5; + vectorC_to_list(&l_randint5, randint5, 10); + + if (mode(&l_randint1) != randint1_mode) + return (false); + if (mode(&l_randint2) != randint2_mode) + return (false); + if (mode(&l_randint3) != randint3_mode) + return (false); + if (mode(&l_randint4) != randint4_mode) + return (false); + if (mode(&l_randint5) != randint5_mode) + return (false); + + return (true); +} + +bool DataProcessor::test_QuickSort() +{ + int randIntA[] = + { 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; + int randIntA_size = 18; + int randIntA_sorted[] = + { 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9 }; + int randIntB[] = + { 9, 2, 3, 3, 12, 15, 8, 14, 2, 7, 4, 6, 10, 2, 12 }; + int randIntB_size = 15; + int randIntB_sorted[] = + { 2, 2, 2, 3, 3, 4, 6, 7, 8, 9, 10, 12, 12, 14, 15 }; + double randDoubleA[] = + { 0.20872, 12.25501, 5.88210, 2.77962, 8.74916, 2.97454, 4.39641, 12.19733, + 4.66014, 4.52477, 5.19375, 12.11314, 13.35458, 11.56941, 6.59435 }; + int randDoubleA_size = 15; + double randDoubleA_sorted[] = + { 0.20872, 2.77962, 2.97454, 4.39641, 4.52477, 4.66014, 5.19375, 5.88210, + 6.59435, 8.74916, 11.56941, 12.11314, 12.19733, 12.25501, 13.35458 }; + + quickSort(randIntA, 0, randIntA_size - 1); + + if (isEqual(randIntA, randIntA_sorted, randIntA_size) == false) + { + return (false); + } + + quickSort(randIntB, 0, randIntB_size - 1); + if (isEqual(randIntB, randIntB_sorted, randIntB_size) == false) + { + return (false); + } + + quickSort(randDoubleA, 0, randDoubleA_size - 1); + if (isEqual(randDoubleA, randDoubleA_sorted, randDoubleA_size) == false) + { + return (false); + } + + return (true); + +} + +bool DataProcessor::test_list_tocvector() +{ + list randInt_list1 = + { 9, 2, 3, 3, 12, 15, 8, 14, 2, 7, 4, 6, 10, 2, 12 }; + list randInt_list2 = + { 2.2, 2.111, 3.16, 6.66, 13, 2.61 }; + list randInt_list3 = + { 1, 2, 3, 4, 5, 6, 6, 5, 4, 3, 2, 1 }; + + int* cvet1 = NULL; + double* cvet2 = NULL; + int* cvet3 = NULL; + + cvet1 = list_to_cvector(&randInt_list1); + cvet2 = list_to_cvector(&randInt_list2); + cvet3 = list_to_cvector(&randInt_list3); + + int i = 0; + for (list::iterator it = randInt_list1.begin(); + it != randInt_list1.end(); it++) + { + if (cvet1[i] != *it) + { + return (false); + } + //cout << *it << " "; + i++; + } + i = 0; + for (list::iterator it = randInt_list2.begin(); + it != randInt_list2.end(); it++) + { + if (cvet2[i] != *it) + { + return (false); + } + //cout << *it << " "; + i++; + } + i = 0; + for (list::iterator it = randInt_list3.begin(); + it != randInt_list3.end(); it++) + { + if (cvet3[i] != *it) + { + return (false); + } + //cout << *it << " "; + i++; + } + + delete_cvector(cvet1); + delete_cvector(cvet2); + delete_cvector(cvet3); + + return (true); +} + +bool DataProcessor::test_empiricalCdf() +{ + list interArrival_sample = + { 5.0000e-07, 1.5000e-06, 1.5000e-06, 2.5000e-06, 2.5000e-06, 3.5000e-06, + 4.5000e-06, 7.5000e-06, 1.2500e-05, 1.9500e-05, 3.1500e-05, + 4.3500e-05, 6.0500e-05, 7.6500e-05, 1.1050e-04, 1.4050e-04, + 1.8150e-04, 2.1150e-04, 2.3350e-04, 2.4350e-04, 2.5650e-04, + 3.0350e-04, 4.1250e-04, 1.3655e-03, 1.1593e-02, 3.2483e-02, + 8.1235e-02, 2.0939e-01, 5.0755e-01, 1.7351e+00 }; + vec emCdf_octave = + { 0.033333, 0.100000, 0.100000, 0.166667, 0.166667, 0.200000, 0.233333, + 0.266667, 0.300000, 0.333333, 0.366667, 0.400000, 0.433333, + 0.466667, 0.500000, 0.533333, 0.566667, 0.600000, 0.633333, + 0.666667, 0.700000, 0.733333, 0.766667, 0.800000, 0.833333, + 0.866667, 0.900000, 0.933333, 0.966667, 1.000000 }; + //emCdf_octave = emCdf_octave.t(); + + vec* emCdf_cpp = empiricalCdf(interArrival_sample); + + int list_size = interArrival_sample.size(); + for (int i = 0; i < list_size; i++) + { + if (!compareDouble(emCdf_octave(i), (*emCdf_cpp)(i), 1e-6)) + { + cout << "cdf error @ " << "i:" << i << " res:" << (*emCdf_cpp)(i, 0) + << " expected:" << emCdf_octave(i, 0) << endl; + return (false); + } + } + + delete emCdf_cpp; + return (true); +} + +bool DataProcessor::test_computeCost() +{ + list interArrival_sample = + { 5.0000e-07, 1.5000e-06, 1.5000e-06, 2.5000e-06, 2.5000e-06, 3.5000e-06, + 4.5000e-06, 7.5000e-06, 1.2500e-05, 1.9500e-05, 3.1500e-05, + 4.3500e-05, 6.0500e-05, 7.6500e-05, 1.1050e-04, 1.4050e-04, + 1.8150e-04, 2.1150e-04, 2.3350e-04, 2.4350e-04, 2.5650e-04, + 3.0350e-04, 4.1250e-04, 1.3655e-03, 1.1593e-02, 3.2483e-02, + 8.1235e-02, 2.0939e-01, 5.0755e-01, 1.7351e+00 }; + mat* X = featureMatrix(interArrival_sample); + vec emCdf_octave = + { 0.033333, 0.100000, 0.100000, 0.166667, 0.166667, 0.200000, 0.233333, + 0.266667, 0.300000, 0.333333, 0.366667, 0.400000, 0.433333, + 0.466667, 0.500000, 0.533333, 0.566667, 0.600000, 0.633333, + 0.666667, 0.700000, 0.733333, 0.766667, 0.800000, 0.833333, + 0.866667, 0.900000, 0.933333, 0.966667, 1.000000 }; + //emCdf_octave = emCdf_octave.t(); + double J_expected1 = 0.17535; + double J_expected2 = 1.5341; + double J_expected3 = 9.0244; + + vec theta = zeros(2); + + double J = computeCost(*X, emCdf_octave, theta); + if (!compareDouble(J, J_expected1, 0.001)) + { + //cout << "J1 = " << J << "\nJ_expected1 = "<< J_expected1 << endl; + return (false); + } + theta(0) = 2; + theta(1) = 2; + J = computeCost(*X, emCdf_octave, theta); + if (!compareDouble(J, J_expected2, 0.001)) + { + //cout << "J2 = " << J << "\nJ_expected2 = "<< J_expected2 << endl; + return (false); + } + theta(0) = 1.5; + theta(1) = 12; + J = computeCost(*X, emCdf_octave, theta); + if (!compareDouble(J, J_expected3, 0.001)) + { + //cout << "J3 = " << J << "\nJ_expected3 = "<< J_expected3 << endl; + return (false); + } + + delete X; + return (true); +} + +bool DataProcessor::test_informationCriterion() +{ + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + + int m = interArrival.size(); + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + //gradient descendent + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + vec y = log(-log(1.0 + diferential - *interArrivalCdf)); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + double weibull_alpha = theta(1); + double weibull_betha = exp(-theta(0) / theta(1)); + vec paramVec = + { weibull_alpha, weibull_betha }; + double weibull_bic = informationCriterion(interArrival, "weibull", paramVec, + "bic"); + double weibull_aic = informationCriterion(interArrival, "weibull", paramVec, + "aic"); + + if (!compareDouble(weibull_bic, -33712.7042, 0.001)) + return (false); + else if (!compareDouble(weibull_aic, -33724.6567, 0.001)) + return (false); + + return (true); +} + +bool DataProcessor::test_pdf_weibull() +{ + double alpha = 1.5000; + double betha = 0.3; + vec data = + { 0.010000, 2.300000, 0.500000 }; + vec dataprob_eval1 = + { 9.0733e-01, 8.3571e-09, 7.5066e-01 }; + vec dataprob_test = zeros(3); + + dataprob_test(0) = pdf_weibull(data(0), alpha, betha); + dataprob_test(1) = pdf_weibull(data(1), alpha, betha); + dataprob_test(2) = pdf_weibull(data(2), alpha, betha); + + if (compareDouble(dataprob_test(0), dataprob_eval1(0)) + && compareDouble(dataprob_test(1), dataprob_eval1(1)) + && compareDouble(dataprob_test(2), dataprob_eval1(2))) + { + return (true); + } + + return (false); +} + +bool DataProcessor::test_cdf_weibull() +{ + double alpha = 0.5; + double betha = 1.5; + vec data = + { 0.010000, 2.300000, 0.500000 }; + vec dataprob_eval1 = + { 0.078405, 0.710117, 0.438616 }; + vec dataprob_test = zeros(3); + + dataprob_test(0) = cdf_weibull(data(0), alpha, betha); + dataprob_test(1) = cdf_weibull(data(1), alpha, betha); + dataprob_test(2) = cdf_weibull(data(2), alpha, betha); + //cout << dataprob_test(0) << " : " << dataprob_test(1) << " : " << dataprob_test(2) << endl; + + if (compareDouble(dataprob_test(0), dataprob_eval1(0)) + && compareDouble(dataprob_test(1), dataprob_eval1(1)) + && compareDouble(dataprob_test(2), dataprob_eval1(2))) + { + return (true); + } + + return (false); +} + +bool DataProcessor::test_gradientDescendent() +{ + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + + int m = interArrival.size(); + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + //gradient descendent + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + vec y = log(-log(1.0 + diferential - *interArrivalCdf)); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //expected values + double Jlast = 0.083359; + double theta0 = 1.660453; + double theta1 = 0.248811; + + if (!compareDouble(J_history(iterations - 1), Jlast)) + + { + return (false); + } + else if (!compareDouble(theta(0), theta0)) + { + return (false); + } + else if (!compareDouble(theta(1), theta1)) + { + return (false); + } + + delete interArrivalCdf; + delete X; + return (true); + +} + +bool DataProcessor::test_pdf_exponential() +{ + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double lambda1 = 0.50000; + vec val1 = + { 0.49751, 0.15832, 0.38940 }; + vec res1 = zeros(3); + + double lambda2 = 3.0; + vec val2 = + { 2.9113366, 0.0030234, 0.6693905 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = pdf_exponential(data(i), lambda1); + res2(i) = pdf_exponential(data(i), lambda2); + + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + + } + + return (true); +} + +bool DataProcessor::test_cdf_exponential() +{ + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double lambda1 = 0.50000; + vec val1 = + { 0.0049875, 0.6833632, 0.2211992 }; + vec res1 = zeros(3); + + double lambda2 = 3.0; + vec val2 = + { 0.029554, 0.998992, 0.776870 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = cdf_exponential(data(i), lambda1); + res2(i) = cdf_exponential(data(i), lambda2); + + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + + return (true); +} + +bool DataProcessor::test_pdf_pareto() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double alpha1 = 0.50000; + double xm1 = 1.0; + vec val1 = + { 0, 0.14334, 0 }; + vec res1 = zeros(3); + double xm2 = 0.00001; + double alpha2 = 3.0; + vec val2 = + { 3.0000e-07, 1.0720e-16, 4.8000e-14 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = pdf_pareto(data(i), alpha1, xm1); + res2(i) = pdf_pareto(data(i), alpha2, xm2); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + + return (true); +} + +bool DataProcessor::test_cdf_pareto() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double alpha1 = 0.50000; + double xm1 = 0.001; + vec val1 = + { 0.68377, 0.97915, 0.95528 }; + vec res1 = zeros(3); + double xm2 = 0.2; + double alpha2 = 1; + vec val2 = + { 0, 0.91304, 0.60000 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = cdf_pareto(data(i), alpha1, xm1); + res2(i) = cdf_pareto(data(i), alpha2, xm2); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + return (true); +} + +bool DataProcessor::test_pdf_cauchy() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + double gamma1 = 0.50000; + double x01 = 0.001; + + vec val1 = + { 0.636414, 0.028752, 0.318947 }; + vec res1 = zeros(3); + double x02 = 2; + double gamma2 = 2; + + vec val2 = + { 0.079976, 0.155653, 0.101859 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = pdf_cauchy(data(i), gamma1, x01); + res2(i) = pdf_cauchy(data(i), gamma2, x02); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + return (true); +} + +bool DataProcessor::test_cdf_cauchy() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + double gamma1 = 0.50000; + double x01 = 0.001; + + vec val1 = + { 0.50573, 0.93183, 0.74968 }; + vec res1 = zeros(3); + double x02 = 2; + double gamma2 = 2; + + vec val2 = + { 0.25080, 0.54739, 0.29517 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = cdf_cauchy(data(i), gamma1, x01); + res2(i) = cdf_cauchy(data(i), gamma2, x02); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + return (true); +} + +bool DataProcessor::test_fitModels() +{ + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + + int m = interArrival.size(); + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + //list of expected values + double weibull_alpha = 0.24881; + double weibull_betha = 0.0012639; + double normal_mu = 0.054792; + double normal_sigma = 0.205602; + double exponentialMe_lambda = 18.250783; + double exponentialLr_lambda = 2.023115; + double paretoLr_alpha = 0.225451; + double paretoLr_xm = 0.000000; + double paretoMlh_alpha = 0.171674; + double paretoMlh_xm = 0.000000; + double cauchy_gamma = 0.000067; + double cauchy_x0 = 0.005750; + double acErr = 0.001; + + vec paramVec = zeros(2); + vec infoCriterion = zeros(2); + + weibullFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), weibull_alpha, acErr)) + { + cout << "weibullFitting alpha" << endl; + return (false); + } + if (!compareDouble(paramVec(1), weibull_betha, acErr)) + { + cout << "weibullFitting betha" << endl; + return (false); + } + + normalFitting(interArrival, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), normal_mu, acErr)) + { + cout << "normalFitting mu" << endl; + return (false); + } + if (!compareDouble(paramVec(1), normal_sigma, acErr)) + { + cout << "normalFitting sigma" << endl; + return (false); + } + + exponentialMeFitting(interArrival, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), exponentialMe_lambda, acErr)) + { + cout << "exponentialLrFitting lambda" << endl; + return (false); + } + + exponentialLrFitting(interArrival, *interArrivalCdf, paramVec, + infoCriterion); + if (!compareDouble(paramVec(0), exponentialLr_lambda, acErr)) + { + cout << exponentialLr_lambda << ":" << paramVec(0) << endl; + cout << "exponentialLrFitting lambda" << endl; + return (false); + } + + paretoLrFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), paretoLr_alpha, acErr)) + { + cout << "paretoLrFitting alpha" << endl; + return (false); + } + if (!compareDouble(paramVec(1), paretoLr_xm, acErr)) + { + cout << "paretoLrFitting xm" << endl; + return (false); + } + + paretoMlhFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), paretoMlh_alpha, acErr)) + { + cout << "paretoMlhFitting alpha" << endl; + return (false); + } + if (!compareDouble(paramVec(1), paretoMlh_xm, acErr)) + { + cout << "paretoMlhFitting xm" << endl; + return (false); + } + + cauchyFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), cauchy_gamma, acErr)) + { + cout << "cauchyFitting" << endl; + return (false); + } + if (!compareDouble(paramVec(1), cauchy_x0, acErr)) + { + return (false); + } + + delete interArrivalCdf; + + return (true); +} + +bool DataProcessor::test_modelSelection() +{ + + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + int m = interArrival.size(); + + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + StochasticModelFit* modelVet = NULL; + modelVet = fitModels(list_interArrival, "aic"); + + //int numberOfModels = modelVet[0].size; + //for (int i = 0; i < numberOfModels; i++) + // cout << modelVet[i].modelName << " " << "modelVet[" << i << "] = " + // << modelVet[i].aic << endl; + + delete interArrivalCdf; + delete[] modelVet; + return (true); +} + +#endif //TEST_FUNCTIONS diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/88/c0c1a40b8ab500161808a5c64fd2084a b/.metadata/.plugins/org.eclipse.core.resources/.history/88/c0c1a40b8ab500161808a5c64fd2084a new file mode 100644 index 0000000..b918151 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/88/c0c1a40b8ab500161808a5c64fd2084a @@ -0,0 +1,100 @@ +/* + * ConstantsDeinition.h + * + * Created on: 4 de jul de 2016 + * Author: apaschoalon + */ + +#ifndef DEFINES_H_ +#define DEFINES_H_ + +// Debug defines +//#define DEBUG 1 // basic debug +//#define DEBUG_DataProcessor_calculate_loop 1 +//#define DEBUG_DataProcessor_calculate 1 +//#define DEBUG_NetworkFlow 1 +//#define DEBUG_flowThread 1 +//#define DEBUG_DatabaseInterface 1 +//#define DEBUG_NetworkTrace_exec 1 + + +//Math +#define MEGA_POWER 1000000 + +//Protocol code +typedef unsigned short int protocol_code; +#define IPV4_CODE 2048 +#define ARP_CODE 2054 +#define ARP_CODE_REV 2056 +#define IPV6_CODE 34525 +#define ICMP_CODE 1 +#define TCP_CODE 6 +#define UDP_CODE 17 +#define DCCP_CODE 33 +#define GRE_CODE 47 +#define ICMPV6_CODE 58 +#define SCTP_CODE 132 + +//Protocols +typedef unsigned short int protocol; +#define PROTOCOL__NULL 0 +#define PROTOCOL__ETHERNET 1 +#define PROTOCOL__IPV4 2 +#define PROTOCOL__IPV6 3 +#define PROTOCOL__ARP 4 +#define PROTOCOL__ICMP 5 +#define PROTOCOL__ICMPV6 6 +#define PROTOCOL__TCP 7 +#define PROTOCOL__UDP 8 +#define PROTOCOL__DCCP 9 +#define PROTOCOL__GRE 10 +#define PROTOCOL__SCTP 11 +#define PROTOCOL__HTTP 12 +#define PROTOCOL__HTML 13 +#define PROTOCOL__SMTP 14 + +//Stochastic models +typedef unsigned short int stochastic_model; +#define WEIBULL "weibull" +#define NORMAL "normal" +#define EXPONENTIAL_MEAN "exponential-mean" +#define EXPONENTIAL_LINEAR_REGRESSION "exponential-linear-regression" +#define PARETO_LINEAR_REGRESSION "pareto-linear-regression" +#define PARETO_MAXIMUM_LIKEHOOD "pareto-maximum-likehood" +#define CAUCHY "cauchy" +#define CONSTANT "constant" +#define NO_MODEL "no-model-selected" + + +/* +#define MODEL__NULL 0 +#define MODEL__BIMODAL_CONSTANT_CONSTANT 1 +#define MODEL__BIMODAL_CONSTANT_WEIBULL 3 +//#define MODEL__BIMODAL_NORMAL_CONSTANT 4 +//#define MODEL__BIMODAL_NORMAL_NORMAL 5 +//#define MODEL__BIMODAL_NORMAL_WEIBULL 6 +#define MODEL__BIMODAL_WEIBULL_CONSTANT 7 +//#define MODEL__BIMODAL_WEIBULL_NORMAL 8 +#define MODEL__BIMODAL_WEIBULL_WEIBULL 9 +#define MODEL__CONSTANT 10 +#define MODEL__NORMAL 11 +#define MODEL__PARETO 12 +#define MODEL__WEIBULL 13 +#define MODEL__GAMMA 14 +#define MODEL__EXPONENTIAL 15 +#define MODEL__UNIFORM 16 +#define MODEL__CAUCHY 17 +#define MODEL__POISSON 18 +*/ + +//Miscellaneous +//typedef string ip_addr; +typedef int port_number; +#define HLINE "----------" +#define TAB "::" +#define MAX_TRANSPORT_PORT_NUMBER 65535 + +//Debug +#define TEST_FUNCTIONS 1 + +#endif /* DEFINES_H_ */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/8d/30cd1e6f8bb500161808a5c64fd2084a b/.metadata/.plugins/org.eclipse.core.resources/.history/8d/30cd1e6f8bb500161808a5c64fd2084a new file mode 100644 index 0000000..84595e1 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/8d/30cd1e6f8bb500161808a5c64fd2084a @@ -0,0 +1,1896 @@ +/* + * DataProcessor.cpp + * + * Created on: 14 de jun de 2016 + * Author: apaschoalon + */ + +#include "DataProcessor.h" + +DataProcessor::DataProcessor() +{ + //nothing to do at all +} + +DataProcessor::~DataProcessor() +{ + //nothing to do at all +} + +string DataProcessor::toString(void) +{ + string dataProcessor; + + dataProcessor = + "Used to calculate parameters of network flows; has no state."; + + return (dataProcessor); +} + +int DataProcessor::calculate(const string& experimentName, + DatabaseInterface* databaseInterface, NetworkTrace* netTrace) +{ + + //iterator variables + long int fcounter = 0; + long int nflows = 0; + databaseInterface->getNumberOfFlows(experimentName, &nflows); + +#ifdef DEBUG_DataProcessor_calculate + cout << "DataProcessor::calculate() -> Number of flows = " << nflows << endl; +#endif // DEBUG_DataProcessor_calculate + + //protocol variables + string flowStrData = ""; + long int flowIntData = 0; + double startDalay = 0; //time of the fist packet of the flow + double flowDuration = 0; //duration of the flow + list ttlList; + int ttl = 0; + + //flow-level variables + list relativeTime; //time relative to the 1st packet list + long int nKbytes = 0; //Number of kbytes (bytes/1024) of the + + //packetSize variables + list pslist; //packet-size list + long int ps_mostFrequent = 0; + double mean_packetRate = 0; + + //inter-deperture time variables + StochasticModelFit* modelVet = NULL; + list interArrival_list; // list of inter arrival times of a flow + double lastTime = 0; + double idt = 0; + + for (fcounter = 0; fcounter < nflows; fcounter++) + { + + //new network flow + NetworkFlow* netFlow = NetworkFlow::make_flow("dummy"); + + //TODO checar valor retornado de databaseInterface + + //reset temp vars + flowStrData = ""; + flowIntData = 0; + relativeTime.clear(); + pslist.clear(); + interArrival_list.clear(); + + //load packet-size data + databaseInterface->getFlowData(experimentName, fcounter, "frame__len", + pslist); + + //laod time-relative data + databaseInterface->getFlowData(experimentName, fcounter, + "frame__time_relative", relativeTime); + + //evaluate inter-arrival data + //time relative to the begin of the measurement + lastTime = 0; + for (list::iterator it = relativeTime.begin(); + it != relativeTime.end(); it++) + { + idt = *it - lastTime; + interArrival_list.push_back(idt); + lastTime = *it; + } + + //###################################################################### + //Flow-level Options + //###################################################################### + startDalay = relativeTime.front(); + netFlow->setFlowStartDelay(startDalay); + + flowDuration = relativeTime.back() - relativeTime.front(); + netFlow->setFlowDuration(flowDuration); + + //TODO DS byte configuration -- now it is just set to zero + netFlow->setFlowDsByte(0); + + //flow kbytes + for (list::iterator it = pslist.begin(); it != pslist.end(); + it++) + { + nKbytes = nKbytes + *it; + } + nKbytes = nKbytes / 1024; + + netFlow->setNumberOfKbytes(nKbytes); + netFlow->setNumberOfPackets(relativeTime.size()); + + //###################################################################### + //Protocol Options + //###################################################################### + + // + //L3 protocols + //reference http://www.iana.org/assignments/ieee-802-numbers/ieee-802-numbers.xhtml + // + + databaseInterface->getFlowData(experimentName, fcounter, "eth__type", + &flowIntData); + if (flowIntData == IPV4_CODE) + { //IPv4 + netFlow->setNetworkProtocol(PROTOCOL__IPV4); + databaseInterface->getFlowData(experimentName, fcounter, "ip__src", + &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, "ip__dst", + &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + else if (flowIntData == (ARP_CODE || ARP_CODE_REV)) + { //ARP, Frame Relay ARP + netFlow->setNetworkProtocol(PROTOCOL__ARP); + databaseInterface->getFlowData(experimentName, fcounter, "ip__src", + &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, "ip__dst", + &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + else if (flowIntData == IPV6_CODE) + { //IPv6 + netFlow->setNetworkProtocol(PROTOCOL__ICMPV6); + databaseInterface->getFlowData(experimentName, fcounter, + "ipv6__addr", &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, + "ipv6__dst", &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + else + { //default IPv4 + netFlow->setNetworkProtocol(PROTOCOL__IPV4); + databaseInterface->getFlowData(experimentName, fcounter, "ip__src", + &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, "ip__dst", + &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + + //set ttl as the most frequent + databaseInterface->getFlowData(experimentName, fcounter, "ip__ttl", + ttlList); + //ttl = (int) mode(ttlList); + ttl = (int) mode(&ttlList); + netFlow->setNetworkTtl(ttl); + + // + //L4 Protocols + //reference https://en.wikipedia.org/wiki/List_of_IP_protocol_numbers + // + databaseInterface->getFlowData(experimentName, fcounter, "ip__proto", + &flowIntData); + if (flowIntData == ICMP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__ICMP); + } + else if (flowIntData == TCP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__TCP); + databaseInterface->getFlowData(experimentName, fcounter, + "tcp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "tcp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else if (flowIntData == UDP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__UDP); + databaseInterface->getFlowData(experimentName, fcounter, + "udp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "udp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else if (flowIntData == DCCP_CODE) + { + netFlow->setTransportDstPort(PROTOCOL__DCCP); + databaseInterface->getFlowData(experimentName, fcounter, + "dccp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "dccp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else if (flowIntData == GRE_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__GRE); + //TODO não suportado pelo D-ITG + } + else if (flowIntData == ICMPV6_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__ICMPV6); + } + else if (flowIntData == SCTP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__SCTP); + databaseInterface->getFlowData(experimentName, fcounter, + "sctp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "sctp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else + { //default: UDP + netFlow->setTransportProtocol(PROTOCOL__NULL); + //databaseInterface->getFlowData(experimentName, fcounter, "udp__dstport", &flowIntData); + //netFlow->setL4SrcPort(flowIntData); + //databaseInterface->getFlowData(experimentName, fcounter, "udp__srcport", &flowIntData); + //netFlow->setL4DstPort(flowIntData); + } + + //###################################################################### + //Packet Size Model + //###################################################################### + + // + // Constant model: Just set the packet size as the most frequent value + // + //ps_mostFrequent = mode(pslist); + //ps_mostFrequent = mode(&pslist); + //mean_packetRate = ((double) pslist.size() / flowDuration); + //netFlow->setPsConstant(ps_mostFrequent); + //netFlow->setIdtConstant(mean_packetRate); + + // + // Algorithm to choose the priority order of the models + // 1st version: just the constant model + // + //TODO implement a best algorithm + //netFlow->setPsModel1(MODEL__CONSTANT); + + //###################################################################### + //Inter-arrival-time Model + //###################################################################### + netFlow->setInterDepertureTimeModels( + fitModels(interArrival_list, "aic")); + + //TODO set the right model + + //netFlow->setIdtModel1(MODEL__CONSTANT); + + //TODO + + //TODO + + //###################################################################### + //Push-back the flow to Trace Flow-list + //###################################################################### + + netTrace->pushback_Netflow(netFlow); + +#ifdef DEBUG_DataProcessor_calculate_loop + cout << fcounter << ": ps_mostFrequent=" << ps_mostFrequent << endl; + cout << fcounter << ": startDalay=" << startDalay << endl; + cout << fcounter << ": mean_packetRate=" << mean_packetRate << endl; + cout << fcounter << ": idt_constant=" << netFlow->getIdtConstant() << endl; +#endif //DEBUG_DataProcessor_calculate_loop +#ifdef DEBUG_DataProcessor_calculate_loop + cout << fcounter << ": netFlow->getTransportProtocol() = " << netFlow->getTransportProtocol() << endl; + cout << fcounter << ": netFlow->getNetworkProtocol() = " << netFlow->getNetworkProtocol() << endl; + cout << fcounter << ": netFlow->getTransportDstPort() = " << netFlow->getTransportDstPort() << endl; + cout << fcounter << ": netFlow->getFlowDsByte() = " << netFlow->getFlowDsByte() << endl; + cout << fcounter << ": netFlow->getNetworkDstAddr() = " << netFlow->getNetworkDstAddr() << endl << endl; + +#endif //DEBUG_DataProcessor_calculate_loop + + } + +#ifdef DEBUG_DataProcessor_calculate + cout << "netTrace->networkFlow.size() = " << netTrace->networkFlow.size() << endl; + cout << "netTrace->getNumberOfFlows() = " << netTrace->getNumberOfFlows() << endl; +#endif //DEBUG_DataProcessor_calculate + + return (0); +} + +StochasticModelFit* DataProcessor::fitModels(list& empiricalData, + const string& criterion) +{ + //constants + const int numberOfModels = 8; + const int m = empiricalData.size(); //empirical data-size + //vars + int counter = 0; + StochasticModelFit* modelVet = NULL; + vec paramVec = zeros(2); + vec infoCriterion = zeros(2); + + modelVet = new StochasticModelFit[numberOfModels]; + + //Inter-arrival vec + vec interArrival = zeros(m); + counter = 0; + for (list::iterator it = empiricalData.begin(); + it != empiricalData.end(); it++) + { + interArrival(counter) = *it + min_time; + counter++; + } + //Empirical CDF of interArrival + vec* interArrivalCdf = empiricalCdf(empiricalData); + + //Weibull + weibullFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[0].aic = infoCriterion(0); + modelVet[0].bic = infoCriterion(1); + modelVet[0].modelName = WEIBULL; + modelVet[0].param1 = paramVec(0); + modelVet[0].param2 = paramVec(1); + modelVet[0].size = numberOfModels; + + //normal + normalFitting(interArrival, paramVec, infoCriterion); + modelVet[1].aic = infoCriterion(0); + modelVet[1].bic = infoCriterion(1); + modelVet[1].modelName = NORMAL; + modelVet[1].param1 = paramVec(0); + modelVet[1].param2 = paramVec(1); + modelVet[1].size = numberOfModels; + + //exponential mean + exponentialMeFitting(interArrival, paramVec, infoCriterion); + modelVet[2].aic = infoCriterion(0); + modelVet[2].bic = infoCriterion(1); + modelVet[2].modelName = EXPONENTIAL_MEAN; + modelVet[2].param1 = paramVec(0); + modelVet[2].param2 = paramVec(1); + modelVet[2].size = numberOfModels; + + //exponential Linear Regression (LR) + exponentialLrFitting(interArrival, *interArrivalCdf, paramVec, + infoCriterion); + modelVet[3].aic = infoCriterion(0); + modelVet[3].bic = infoCriterion(1); + modelVet[3].modelName = EXPONENTIAL_LINEAR_REGRESSION; + modelVet[3].param1 = paramVec(0); + modelVet[3].param2 = paramVec(1); + modelVet[3].size = numberOfModels; + + //pareto linear regression + paretoLrFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[4].aic = infoCriterion(0); + modelVet[4].bic = infoCriterion(1); + modelVet[4].modelName = PARETO_LINEAR_REGRESSION; + modelVet[4].param1 = paramVec(0); + modelVet[4].param2 = paramVec(1); + modelVet[4].size = numberOfModels; + + //pareto maximum likehood + paretoMlhFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[5].aic = infoCriterion(0); + modelVet[5].bic = infoCriterion(1); + modelVet[5].modelName = PARETO_MAXIMUM_LIKEHOOD; + modelVet[5].param1 = paramVec(0); + modelVet[5].param2 = paramVec(1); + modelVet[5].size = numberOfModels; + + //Cauchy + cauchyFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[6].aic = infoCriterion(0); + modelVet[6].bic = infoCriterion(1); + modelVet[6].modelName = CAUCHY; + modelVet[6].param1 = paramVec(0); + modelVet[6].param2 = paramVec(1); + modelVet[6].size = numberOfModels; + + //Constant + constantFitting(interArrival, paramVec, infoCriterion); + modelVet[7].aic = infoCriterion(0); + modelVet[7].bic = infoCriterion(1); + modelVet[7].modelName = CONSTANT; + modelVet[7].param1 = paramVec(0); + modelVet[7].param2 = paramVec(1); + modelVet[7].size = numberOfModels; + + if (criterion == "bic") + { + qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), compareBic); + } + else if (criterion == "aic") + { + qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), compareAic); + } + else + { + cout + << "Error @ DataProcessor::fitModels -> Invalid criterion argument: " + << criterion << endl; + cout << "AIC set as default" << endl; + qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), compareAic); + + } + +#ifdef DEBUG_StochasticModelFit + //if (modelVet[0].modelName == WEIBULL) + //{ + // cout << modelVet[0].modelName << "aic:bic->" << modelVet[0].aic << ":" << modelVet[0].bic + // << " " << "alpha:betha->" << modelVet[0].param1 + // << modelVet[0].param2 << endl; + // string fileName = "weibulldata_" + std::to_string(abs(modelVet[0].aic)); + // save_data_on_file(fileName, interArrival, *interArrivalCdf); + //} +#endif DEBUG_StochasticModelFit + + delete interArrivalCdf; + + return (modelVet); +} + +inline void DataProcessor::weibullFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //init + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + //linearization + vec y = log(-log(1.0 + diferential - interArrivalCdf)); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double weibull_alpha = theta(1); + double weibull_betha = exp(-theta(0) / theta(1)); + paramVec(0) = weibull_alpha; + paramVec(1) = weibull_betha; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "weibull", paramVec, "aic"); + double bic = informationCriterion(interArrival, "weibull", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; + +} + +inline void DataProcessor::normalFitting(const vec& interArrival, vec& paramVec, + vec& infoCriterion) +{ + double sigma = stddev(interArrival); + double mu = mean(interArrival); + paramVec(0) = mu; + paramVec(1) = sigma; + + //information criterion + double aic = informationCriterion(interArrival, "normal", paramVec, "aic"); + double bic = informationCriterion(interArrival, "normal", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::exponentialLrFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //init + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + //linearization + vec y = log(1.00 + diferential - interArrivalCdf); + //vec y = log(1.00 - interArrivalCdf); + vec x = interArrival; + mat* X = featureMatrix(x); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double exp_lambda = -theta(1); + paramVec(0) = exp_lambda; + paramVec(1) = 0; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "exponential", paramVec, + "aic"); + double bic = informationCriterion(interArrival, "exponential", paramVec, + "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::exponentialMeFitting(const vec& interArrival, + vec& paramVec, vec& infoCriterion) +{ + paramVec(0) = 1.0 / mean(interArrival); + paramVec(1) = 0; + + //information criterion + double aic = informationCriterion(interArrival, "exponential", paramVec, + "aic"); + double bic = informationCriterion(interArrival, "exponential", paramVec, + "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::paretoLrFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //init + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + //linearization + vec y = log(1.00 + diferential - interArrivalCdf); + //vec y = log(1.00 - interArrivalCdf); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double pareto_alpha = -theta(1); + double pareto_xm = interArrival.min(); + paramVec(0) = pareto_alpha; + paramVec(1) = pareto_xm; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "pareto", paramVec, "aic"); + double bic = informationCriterion(interArrival, "pareto", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::paretoMlhFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + double pareto_xm = interArrival.min(); + int m = interArrival.size(); + //vec logDiff = log(interArrival) - log(ones(m) * pareto_xm); + vec logDiff = log(interArrival) - log(pareto_xm); + double pareto_alpha = double(m) / (sum(logDiff)); + paramVec(0) = pareto_alpha; + paramVec(1) = pareto_xm; + + //information criterion + double aic = informationCriterion(interArrival, "pareto", paramVec, "aic"); + double bic = informationCriterion(interArrival, "pareto", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::cauchyFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //initialization + int iterations = 1500; + double learning_rate = 0.01; + int m = interArrival.size(); + double minInterArrival = interArrival.min(); + double y_max = 1.0 / minInterArrival; + vec y = tan(datum::pi * (interArrivalCdf - 0.5)); + for (int i = 0; i < m; i++) + { + //avoid too high numbers when tan() tends to infinity + if (y(i) > y_max) + y(i) = y_max; + } + + //linearization + vec J_history = zeros(iterations); + vec theta = zeros(2); + mat* X = featureMatrix(interArrival); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double cauchy_gamma = double(1.0) / theta(1); + double cauchy_x0 = -theta(0) / theta(1); + paramVec(0) = cauchy_gamma; + paramVec(1) = cauchy_x0; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "cauchy", paramVec, "aic"); + double bic = informationCriterion(interArrival, "cauchy", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; + +} + +void DataProcessor::constantFitting(const vec& interArrival, vec& paramVec, + vec& informationCriterion) +{ + paramVec(0) = mean(interArrival); + paramVec(1) = 0; + informationCriterion(0) = datum::inf; + informationCriterion(1) = datum::inf; +} + +template bool DataProcessor::isEqual(const T* vet1, const T* vet2, + const int size) +{ + for (int i = 0; i < size; i++) + { + if (vet1[i] != vet2[i]) + { + return (false); + } + } + + return (true); +} + +template void DataProcessor::vectorC_to_list(list* theList, + T* vet, int size) +{ + for (int i = 0; i < size; i++) + { + theList->push_back(vet[i]); + } +} + +template +void DataProcessor::quickSort(T* vet, int left, int right) +{ + int p = left; + int i = 0; + T ch = 0; + int j = 0; + + for (i = left + 1; i <= right; i++) + { + j = i; + if (vet[j] < vet[p]) + { + ch = vet[j]; + while (j > p) + { + vet[j] = vet[j - 1]; + j--; + } + vet[j] = ch; + p++; + } + } + if (p - 1 >= left) + quickSort(vet, left, p - 1); + if (p + 1 <= right) + quickSort(vet, p + 1, right); +} + +template +T DataProcessor::mode(list* theList) +{ + T* vet; + int listSize = theList->size(); + int i = 0; + T candidate = 0; + T prev = 0; + int counter = 0; + int largerCounter = 0; + T mode = 0; + vet = new T[listSize]; + + if (listSize == 0) + { + return (0); + } + + i = 0; + + for (typename list::iterator it = theList->begin(); it != theList->end(); + it++) + { + vet[i] = *it; + i++; + } + + quickSort(vet, 0, listSize - 1); + + prev = vet[0]; + largerCounter = 0; + for (i = 0; i < listSize; i++) + { + candidate = vet[i]; + if (candidate == prev) + { + counter++; + if (counter > largerCounter) + { + largerCounter = counter; + mode = vet[i]; + } + } + else + counter = 1; + + prev = vet[i]; + } + + delete[] vet; + + return (mode); +} + +template +inline T* DataProcessor::list_to_cvector(list* theList) +{ + int listSize = theList->size(); + T* vet; + int i = 0; + + vet = new T[listSize]; + if (listSize == 0) + { + return (0); + } + + i = 0; + for (typename list::iterator it = theList->begin(); it != theList->end(); + it++) + { + vet[i] = *it; + i++; + } + + return (vet); +} +template +inline void DataProcessor::delete_cvector(T* c_vet) +{ + delete[] c_vet; +} + +inline vec* DataProcessor::empiricalCdf(list& empiricalData) +{ + double* cvet_empiricalData = list_to_cvector(&empiricalData); + int data_size = empiricalData.size(); + quickSort(cvet_empiricalData, 0, data_size - 1); + double x = cvet_empiricalData[0]; // anchor - fist element; + int i1 = 0; // fist index + int i2 = 0; + double prob = 0; + vec* interArrivalCdf = new vec(zeros(data_size)); + + for (int i = 0; i < data_size; i++) + { + if (cvet_empiricalData[i] > x) + { + i2 = i - 1; + prob = double(i) / data_size; + for (int j = i1; j <= i2; j++) + { + (*interArrivalCdf)(j) = prob; + } + i1 = i; + x = cvet_empiricalData[i]; + } + } + //last position == 1 + (*interArrivalCdf)(data_size - 1) = 1; + + delete_cvector(cvet_empiricalData); + return (interArrivalCdf); +} + +inline mat* DataProcessor::featureMatrix(list& empiricalData) +{ + int data_size = empiricalData.size(); + mat* featureMatrix = new mat(ones(data_size, 2)); + + int i = 0; + for (list::iterator it = empiricalData.begin(); + it != empiricalData.end(); it++) + { + (*featureMatrix)(i, 1) = *it; + i++; + } + + return (featureMatrix); + +} + +inline mat* DataProcessor::featureMatrix(const vec& empiricalData) +{ + int data_size = empiricalData.size(); + mat* featureMatrix = new mat(ones(data_size, 2)); + for (int i = 0; i < data_size; i++) + { + (*featureMatrix)(i, 1) = empiricalData(i); + } + + return (featureMatrix); +} + +inline double DataProcessor::computeCost(const mat& X, const vec& y, + const vec& theta) +{ + double J = .0; + double jtemp = .0; + int m = y.size(); + + for (int i = 0; i < m; i++) + { + jtemp = jtemp + pow(double(theta(0) + theta(1) * X(i, 1) - y(i)), 2); + + } + J = (1.0 / double(2 * m)) * jtemp; + + return (J); +} + +inline void DataProcessor::gradientDescendent(const mat& X, const vec& y, + const double learning_rate, const int num_iters, vec& theta, + vec& J_history) +{ + + int m = y.n_rows; //number of training examples + double temp1 = .0; + double temp2 = .0; + double delta1 = .0; + double delta2 = .0; + vec x = X.col(1); + + for (int i = 0; i < num_iters; i++) + { + temp1 = .0; + temp2 = .0; + delta1 = .0; + delta2 = .0; + + //slope + delta1 = sum(theta(0) + theta(1) * x - y) / double(m); + delta2 = sum((theta(0) + theta(1) * x - y) % x) / double(m); + + //linear regression + temp1 = theta(0) - learning_rate * delta1; + temp2 = theta(1) - learning_rate * delta2; + + theta(0) = temp1; + theta(1) = temp2; + + //Save the cost J in every iteration + J_history(i) = computeCost(X, y, theta); + + } + +} + +inline double DataProcessor::informationCriterion(const vec& data, + const string& functionName, const vec& paramVet, + const string& criterion) +{ + double criterionVal = .0; + double nEstimatedParameters = double(paramVet.size()); + double likehoodLogVal = logLikehood(data, functionName, paramVet); + double logDataLen = log(double(data.size())); + + if (criterion == "aic") + { + criterionVal = 2 * nEstimatedParameters - 2 * likehoodLogVal; + } + else if (criterion == "bic") + { + criterionVal = nEstimatedParameters * logDataLen - 2 * likehoodLogVal; + } + else + { + cout << "\nInvalid functionName or no functionName selected: " + << functionName << endl; + printf("Selecting default criterion: AIC\n"); + criterionVal = 2 * nEstimatedParameters - 2 * likehoodLogVal; + } + + return (criterionVal); + +} + +inline double DataProcessor::logLikehood(const vec& data, + const string& functionName, const vec& paramVet) +{ + double param1 = paramVet(0); + double param2 = paramVet(1); + double m = data.size(); + double L = .0; + int i = 0; + vec data_prob = zeros(size(data)); + + if (functionName == "weibull") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_weibull(data(i), param1, param2); + } + else if (functionName == "normal") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_normal(data(i), param1, param2); + } + else if (functionName == "uniform") + { + data_prob = ones(size(data)) * pdf_uniform(param1, param2); + } + else if (functionName == "exponential") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_exponential(data(i), param1); + } + else if (functionName == "pareto") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_pareto(data(i), param1, param2); + } + else if (functionName == "cauchy") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_cauchy(data(i), param1, param2); + } + else + { + cout << "Warning, no valid stochastic function selected: " + << functionName << endl; + printf("Likehood logarithm seted to -Inf (worst as possible)\n"); + return (datum::inf); + } + + L = sum(log(data_prob)); + return (L); + +} + +inline double DataProcessor::pdf_weibull(double x, double alpha, double betha) +{ + if (x >= 0) + return ((alpha / pow(betha, alpha)) * pow(x, alpha - 1.0) + * exp(-(pow(x / betha, alpha)))); + else + return (.0); +} + +inline double DataProcessor::cdf_weibull(double x, double alpha, double betha) +{ + if (x >= 0) + return (1.0 - exp(-pow(x / betha, alpha))); + else + return (.0); +} + +inline double DataProcessor::pdf_exponential(double x, double lambda) +{ + if (x >= 0) + return (lambda * exp(-lambda * x)); + else + return (.0); + +} + +inline double DataProcessor::cdf_exponential(double x, double lambda) +{ + if (x >= 0) + return (1.0 - exp(-lambda * x)); + else + return (.0); +} + +inline double DataProcessor::pdf_pareto(double x, double alpha, double xm) +{ + if (x >= xm) + return (alpha * pow(xm, alpha) / (pow(x, alpha + 1.0))); + else + return (.0); +} + +inline double DataProcessor::cdf_pareto(double x, double alpha, double xm) +{ + if (x >= xm) + return (1.0 - pow(xm / x, alpha)); + else + return (.0); +} + +inline double DataProcessor::pdf_cauchy(double x, double gamma, double x0) +{ + return (1 / (datum::pi * gamma) + * (pow(gamma, 2) / (pow(x - x0, 2) + pow(gamma, 2)))); +} + +inline double DataProcessor::cdf_cauchy(double x, double gamma, double x0) +{ + return ((1 / datum::pi) * atan((x - x0) / (gamma)) + 0.5); +} + +inline double DataProcessor::pdf_normal(double x, double mu, double sigma) +{ + return (1 / (sqrt(2 * datum::pi) * sigma) + * exp(-0.5 * pow((x - mu) / sigma, 2))); +} + +inline double DataProcessor::cdf_normal(double x, double mu, double sigma) +{ + return (0.5 * (1 + erf((x - mu) / (sigma * sqrt(2))))); +} + +inline double DataProcessor::pdf_uniform(double x_min, double x_max) +{ + return (1.0 / (x_max - x_min)); +} + +inline double DataProcessor::cdf_uniform(double x, double x_min, double x_max) +{ + if (x < x_min) + return (0); + else if (x > x_max) + return (1); + else + return ((x - x_min) / (x_max - x_min)); +} + +#ifdef TEST_FUNCTIONS + +void DataProcessor::printTestResult(string testName, bool result) +{ + string outRes; + if (result == true) + outRes = "ok"; + else + outRes = "failed"; + + cout << testName << ":\t\t" << outRes << endl; +} + +bool DataProcessor::compareDouble(double val1, double val2) +{ + double error = 0; + + error = fabs(double(val1) - double(val2)); + if (error > double(1e-5)) + return (false); + else + return (true); + +} + +bool DataProcessor::compareDouble(double val1, double val2, double acErr) +{ + double error = 0; + + error = fabs(double(val1) - double(val2)); + if (error > double(acErr)) + return (false); + else + return (true); + +} + +bool DataProcessor::compareMat(mat& mat1, mat& mat2) +{ + int mat1_nc = mat1.n_cols; + int mat1_nr = mat1.n_rows; + int mat2_nc = mat2.n_cols; + int mat2_nr = mat2.n_rows; + + if ((mat1_nc != mat2_nc) || (mat1_nr != mat2_nr)) + { + cout << "mat1.n_cols and mat2.n_cols dont match. " << mat1_nc << ":" + << mat2_nc << " " << mat1_nr << ":" << mat2_nr << endl; + return (false); + } + for (int i = 0; i < mat1_nr; i++) + { + for (int j = 0; j < mat1_nc; j++) + { + if (compareDouble(mat1(i, j), mat2(i, j), 1e-5)) + { + //cout << " mat1(" << i << ", " << j << " ) = " << mat1(i,j); + //cout << " mat2(" << i << ", " << j << " ) = " << mat2(i,j); + return (false); + } + } + } + + return (true); +} + +void DataProcessor::save_data_on_file(const string& fileName, const mat& vet1, + const mat& vet2) +{ + string file_out = fileName + ".txt"; + int m = vet1.size(); + + ofstream writeOnFile(file_out, ios::out); + if (!writeOnFile) + { + cerr << "file could not be oppeded" << endl; + exit(1); + } + + for (int i = 0; i < m; i++) + { + writeOnFile << vet1(i) << " " << vet2(i) << endl; + } + +} + +template +void DataProcessor::save_data_on_file(const string& fileName, const list theList) +{ + string file_out = fileName + ".txt"; + int m = vet1.si; +} + +bool DataProcessor::test_Mode() +{ + + int randint1[] = + { 1, 8, 1, 13, 9, 2, 1, 15, 4, 3, 10, 4, 13, 2, 14, 7, 7 }; + int randint1_mode = 1; + list l_randint1; + vectorC_to_list(&l_randint1, randint1, 17); + + int randint2[] = + { 5, 3, 6, 8, 14, 9, 11, 9, 11, 15, 8, 7, 12, 13, 14 }; + int randint2_mode = 8; + list l_randint2; + vectorC_to_list(&l_randint2, randint2, 15); + + int randint3[] = + { 9, 10, 6, 3, 13, 13, 14, 7, 7, 1, 5, 1, 8, 5, 9, 2, 3, 4, 5, 6, 6, 6 }; + int randint3_mode = 6; + list l_randint3; + vectorC_to_list(&l_randint3, randint3, 22); + + int randint4[] = + { 2, 1 }; + int randint4_mode = 1; + list l_randint4; + vectorC_to_list(&l_randint4, randint4, 2); + + int randint5[] = + { 1, 1, 1, 1, 1, 2, 2, 2, 2, 2 }; + int randint5_mode = 1; + list l_randint5; + vectorC_to_list(&l_randint5, randint5, 10); + + if (mode(&l_randint1) != randint1_mode) + return (false); + if (mode(&l_randint2) != randint2_mode) + return (false); + if (mode(&l_randint3) != randint3_mode) + return (false); + if (mode(&l_randint4) != randint4_mode) + return (false); + if (mode(&l_randint5) != randint5_mode) + return (false); + + return (true); +} + +bool DataProcessor::test_QuickSort() +{ + int randIntA[] = + { 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; + int randIntA_size = 18; + int randIntA_sorted[] = + { 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9 }; + int randIntB[] = + { 9, 2, 3, 3, 12, 15, 8, 14, 2, 7, 4, 6, 10, 2, 12 }; + int randIntB_size = 15; + int randIntB_sorted[] = + { 2, 2, 2, 3, 3, 4, 6, 7, 8, 9, 10, 12, 12, 14, 15 }; + double randDoubleA[] = + { 0.20872, 12.25501, 5.88210, 2.77962, 8.74916, 2.97454, 4.39641, 12.19733, + 4.66014, 4.52477, 5.19375, 12.11314, 13.35458, 11.56941, 6.59435 }; + int randDoubleA_size = 15; + double randDoubleA_sorted[] = + { 0.20872, 2.77962, 2.97454, 4.39641, 4.52477, 4.66014, 5.19375, 5.88210, + 6.59435, 8.74916, 11.56941, 12.11314, 12.19733, 12.25501, 13.35458 }; + + quickSort(randIntA, 0, randIntA_size - 1); + + if (isEqual(randIntA, randIntA_sorted, randIntA_size) == false) + { + return (false); + } + + quickSort(randIntB, 0, randIntB_size - 1); + if (isEqual(randIntB, randIntB_sorted, randIntB_size) == false) + { + return (false); + } + + quickSort(randDoubleA, 0, randDoubleA_size - 1); + if (isEqual(randDoubleA, randDoubleA_sorted, randDoubleA_size) == false) + { + return (false); + } + + return (true); + +} + +bool DataProcessor::test_list_tocvector() +{ + list randInt_list1 = + { 9, 2, 3, 3, 12, 15, 8, 14, 2, 7, 4, 6, 10, 2, 12 }; + list randInt_list2 = + { 2.2, 2.111, 3.16, 6.66, 13, 2.61 }; + list randInt_list3 = + { 1, 2, 3, 4, 5, 6, 6, 5, 4, 3, 2, 1 }; + + int* cvet1 = NULL; + double* cvet2 = NULL; + int* cvet3 = NULL; + + cvet1 = list_to_cvector(&randInt_list1); + cvet2 = list_to_cvector(&randInt_list2); + cvet3 = list_to_cvector(&randInt_list3); + + int i = 0; + for (list::iterator it = randInt_list1.begin(); + it != randInt_list1.end(); it++) + { + if (cvet1[i] != *it) + { + return (false); + } + //cout << *it << " "; + i++; + } + i = 0; + for (list::iterator it = randInt_list2.begin(); + it != randInt_list2.end(); it++) + { + if (cvet2[i] != *it) + { + return (false); + } + //cout << *it << " "; + i++; + } + i = 0; + for (list::iterator it = randInt_list3.begin(); + it != randInt_list3.end(); it++) + { + if (cvet3[i] != *it) + { + return (false); + } + //cout << *it << " "; + i++; + } + + delete_cvector(cvet1); + delete_cvector(cvet2); + delete_cvector(cvet3); + + return (true); +} + +bool DataProcessor::test_empiricalCdf() +{ + list interArrival_sample = + { 5.0000e-07, 1.5000e-06, 1.5000e-06, 2.5000e-06, 2.5000e-06, 3.5000e-06, + 4.5000e-06, 7.5000e-06, 1.2500e-05, 1.9500e-05, 3.1500e-05, + 4.3500e-05, 6.0500e-05, 7.6500e-05, 1.1050e-04, 1.4050e-04, + 1.8150e-04, 2.1150e-04, 2.3350e-04, 2.4350e-04, 2.5650e-04, + 3.0350e-04, 4.1250e-04, 1.3655e-03, 1.1593e-02, 3.2483e-02, + 8.1235e-02, 2.0939e-01, 5.0755e-01, 1.7351e+00 }; + vec emCdf_octave = + { 0.033333, 0.100000, 0.100000, 0.166667, 0.166667, 0.200000, 0.233333, + 0.266667, 0.300000, 0.333333, 0.366667, 0.400000, 0.433333, + 0.466667, 0.500000, 0.533333, 0.566667, 0.600000, 0.633333, + 0.666667, 0.700000, 0.733333, 0.766667, 0.800000, 0.833333, + 0.866667, 0.900000, 0.933333, 0.966667, 1.000000 }; + //emCdf_octave = emCdf_octave.t(); + + vec* emCdf_cpp = empiricalCdf(interArrival_sample); + + int list_size = interArrival_sample.size(); + for (int i = 0; i < list_size; i++) + { + if (!compareDouble(emCdf_octave(i), (*emCdf_cpp)(i), 1e-6)) + { + cout << "cdf error @ " << "i:" << i << " res:" << (*emCdf_cpp)(i, 0) + << " expected:" << emCdf_octave(i, 0) << endl; + return (false); + } + } + + delete emCdf_cpp; + return (true); +} + +bool DataProcessor::test_computeCost() +{ + list interArrival_sample = + { 5.0000e-07, 1.5000e-06, 1.5000e-06, 2.5000e-06, 2.5000e-06, 3.5000e-06, + 4.5000e-06, 7.5000e-06, 1.2500e-05, 1.9500e-05, 3.1500e-05, + 4.3500e-05, 6.0500e-05, 7.6500e-05, 1.1050e-04, 1.4050e-04, + 1.8150e-04, 2.1150e-04, 2.3350e-04, 2.4350e-04, 2.5650e-04, + 3.0350e-04, 4.1250e-04, 1.3655e-03, 1.1593e-02, 3.2483e-02, + 8.1235e-02, 2.0939e-01, 5.0755e-01, 1.7351e+00 }; + mat* X = featureMatrix(interArrival_sample); + vec emCdf_octave = + { 0.033333, 0.100000, 0.100000, 0.166667, 0.166667, 0.200000, 0.233333, + 0.266667, 0.300000, 0.333333, 0.366667, 0.400000, 0.433333, + 0.466667, 0.500000, 0.533333, 0.566667, 0.600000, 0.633333, + 0.666667, 0.700000, 0.733333, 0.766667, 0.800000, 0.833333, + 0.866667, 0.900000, 0.933333, 0.966667, 1.000000 }; + //emCdf_octave = emCdf_octave.t(); + double J_expected1 = 0.17535; + double J_expected2 = 1.5341; + double J_expected3 = 9.0244; + + vec theta = zeros(2); + + double J = computeCost(*X, emCdf_octave, theta); + if (!compareDouble(J, J_expected1, 0.001)) + { + //cout << "J1 = " << J << "\nJ_expected1 = "<< J_expected1 << endl; + return (false); + } + theta(0) = 2; + theta(1) = 2; + J = computeCost(*X, emCdf_octave, theta); + if (!compareDouble(J, J_expected2, 0.001)) + { + //cout << "J2 = " << J << "\nJ_expected2 = "<< J_expected2 << endl; + return (false); + } + theta(0) = 1.5; + theta(1) = 12; + J = computeCost(*X, emCdf_octave, theta); + if (!compareDouble(J, J_expected3, 0.001)) + { + //cout << "J3 = " << J << "\nJ_expected3 = "<< J_expected3 << endl; + return (false); + } + + delete X; + return (true); +} + +bool DataProcessor::test_informationCriterion() +{ + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + + int m = interArrival.size(); + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + //gradient descendent + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + vec y = log(-log(1.0 + diferential - *interArrivalCdf)); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + double weibull_alpha = theta(1); + double weibull_betha = exp(-theta(0) / theta(1)); + vec paramVec = + { weibull_alpha, weibull_betha }; + double weibull_bic = informationCriterion(interArrival, "weibull", paramVec, + "bic"); + double weibull_aic = informationCriterion(interArrival, "weibull", paramVec, + "aic"); + + if (!compareDouble(weibull_bic, -33712.7042, 0.001)) + return (false); + else if (!compareDouble(weibull_aic, -33724.6567, 0.001)) + return (false); + + return (true); +} + +bool DataProcessor::test_pdf_weibull() +{ + double alpha = 1.5000; + double betha = 0.3; + vec data = + { 0.010000, 2.300000, 0.500000 }; + vec dataprob_eval1 = + { 9.0733e-01, 8.3571e-09, 7.5066e-01 }; + vec dataprob_test = zeros(3); + + dataprob_test(0) = pdf_weibull(data(0), alpha, betha); + dataprob_test(1) = pdf_weibull(data(1), alpha, betha); + dataprob_test(2) = pdf_weibull(data(2), alpha, betha); + + if (compareDouble(dataprob_test(0), dataprob_eval1(0)) + && compareDouble(dataprob_test(1), dataprob_eval1(1)) + && compareDouble(dataprob_test(2), dataprob_eval1(2))) + { + return (true); + } + + return (false); +} + +bool DataProcessor::test_cdf_weibull() +{ + double alpha = 0.5; + double betha = 1.5; + vec data = + { 0.010000, 2.300000, 0.500000 }; + vec dataprob_eval1 = + { 0.078405, 0.710117, 0.438616 }; + vec dataprob_test = zeros(3); + + dataprob_test(0) = cdf_weibull(data(0), alpha, betha); + dataprob_test(1) = cdf_weibull(data(1), alpha, betha); + dataprob_test(2) = cdf_weibull(data(2), alpha, betha); + //cout << dataprob_test(0) << " : " << dataprob_test(1) << " : " << dataprob_test(2) << endl; + + if (compareDouble(dataprob_test(0), dataprob_eval1(0)) + && compareDouble(dataprob_test(1), dataprob_eval1(1)) + && compareDouble(dataprob_test(2), dataprob_eval1(2))) + { + return (true); + } + + return (false); +} + +bool DataProcessor::test_gradientDescendent() +{ + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + + int m = interArrival.size(); + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + //gradient descendent + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + vec y = log(-log(1.0 + diferential - *interArrivalCdf)); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //expected values + double Jlast = 0.083359; + double theta0 = 1.660453; + double theta1 = 0.248811; + + if (!compareDouble(J_history(iterations - 1), Jlast)) + + { + return (false); + } + else if (!compareDouble(theta(0), theta0)) + { + return (false); + } + else if (!compareDouble(theta(1), theta1)) + { + return (false); + } + + delete interArrivalCdf; + delete X; + return (true); + +} + +bool DataProcessor::test_pdf_exponential() +{ + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double lambda1 = 0.50000; + vec val1 = + { 0.49751, 0.15832, 0.38940 }; + vec res1 = zeros(3); + + double lambda2 = 3.0; + vec val2 = + { 2.9113366, 0.0030234, 0.6693905 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = pdf_exponential(data(i), lambda1); + res2(i) = pdf_exponential(data(i), lambda2); + + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + + } + + return (true); +} + +bool DataProcessor::test_cdf_exponential() +{ + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double lambda1 = 0.50000; + vec val1 = + { 0.0049875, 0.6833632, 0.2211992 }; + vec res1 = zeros(3); + + double lambda2 = 3.0; + vec val2 = + { 0.029554, 0.998992, 0.776870 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = cdf_exponential(data(i), lambda1); + res2(i) = cdf_exponential(data(i), lambda2); + + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + + return (true); +} + +bool DataProcessor::test_pdf_pareto() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double alpha1 = 0.50000; + double xm1 = 1.0; + vec val1 = + { 0, 0.14334, 0 }; + vec res1 = zeros(3); + double xm2 = 0.00001; + double alpha2 = 3.0; + vec val2 = + { 3.0000e-07, 1.0720e-16, 4.8000e-14 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = pdf_pareto(data(i), alpha1, xm1); + res2(i) = pdf_pareto(data(i), alpha2, xm2); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + + return (true); +} + +bool DataProcessor::test_cdf_pareto() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double alpha1 = 0.50000; + double xm1 = 0.001; + vec val1 = + { 0.68377, 0.97915, 0.95528 }; + vec res1 = zeros(3); + double xm2 = 0.2; + double alpha2 = 1; + vec val2 = + { 0, 0.91304, 0.60000 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = cdf_pareto(data(i), alpha1, xm1); + res2(i) = cdf_pareto(data(i), alpha2, xm2); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + return (true); +} + +bool DataProcessor::test_pdf_cauchy() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + double gamma1 = 0.50000; + double x01 = 0.001; + + vec val1 = + { 0.636414, 0.028752, 0.318947 }; + vec res1 = zeros(3); + double x02 = 2; + double gamma2 = 2; + + vec val2 = + { 0.079976, 0.155653, 0.101859 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = pdf_cauchy(data(i), gamma1, x01); + res2(i) = pdf_cauchy(data(i), gamma2, x02); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + return (true); +} + +bool DataProcessor::test_cdf_cauchy() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + double gamma1 = 0.50000; + double x01 = 0.001; + + vec val1 = + { 0.50573, 0.93183, 0.74968 }; + vec res1 = zeros(3); + double x02 = 2; + double gamma2 = 2; + + vec val2 = + { 0.25080, 0.54739, 0.29517 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = cdf_cauchy(data(i), gamma1, x01); + res2(i) = cdf_cauchy(data(i), gamma2, x02); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + return (true); +} + +bool DataProcessor::test_fitModels() +{ + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + + int m = interArrival.size(); + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + //list of expected values + double weibull_alpha = 0.24881; + double weibull_betha = 0.0012639; + double normal_mu = 0.054792; + double normal_sigma = 0.205602; + double exponentialMe_lambda = 18.250783; + double exponentialLr_lambda = 2.023115; + double paretoLr_alpha = 0.225451; + double paretoLr_xm = 0.000000; + double paretoMlh_alpha = 0.171674; + double paretoMlh_xm = 0.000000; + double cauchy_gamma = 0.000067; + double cauchy_x0 = 0.005750; + double acErr = 0.001; + + vec paramVec = zeros(2); + vec infoCriterion = zeros(2); + + weibullFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), weibull_alpha, acErr)) + { + cout << "weibullFitting alpha" << endl; + return (false); + } + if (!compareDouble(paramVec(1), weibull_betha, acErr)) + { + cout << "weibullFitting betha" << endl; + return (false); + } + + normalFitting(interArrival, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), normal_mu, acErr)) + { + cout << "normalFitting mu" << endl; + return (false); + } + if (!compareDouble(paramVec(1), normal_sigma, acErr)) + { + cout << "normalFitting sigma" << endl; + return (false); + } + + exponentialMeFitting(interArrival, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), exponentialMe_lambda, acErr)) + { + cout << "exponentialLrFitting lambda" << endl; + return (false); + } + + exponentialLrFitting(interArrival, *interArrivalCdf, paramVec, + infoCriterion); + if (!compareDouble(paramVec(0), exponentialLr_lambda, acErr)) + { + cout << exponentialLr_lambda << ":" << paramVec(0) << endl; + cout << "exponentialLrFitting lambda" << endl; + return (false); + } + + paretoLrFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), paretoLr_alpha, acErr)) + { + cout << "paretoLrFitting alpha" << endl; + return (false); + } + if (!compareDouble(paramVec(1), paretoLr_xm, acErr)) + { + cout << "paretoLrFitting xm" << endl; + return (false); + } + + paretoMlhFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), paretoMlh_alpha, acErr)) + { + cout << "paretoMlhFitting alpha" << endl; + return (false); + } + if (!compareDouble(paramVec(1), paretoMlh_xm, acErr)) + { + cout << "paretoMlhFitting xm" << endl; + return (false); + } + + cauchyFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), cauchy_gamma, acErr)) + { + cout << "cauchyFitting" << endl; + return (false); + } + if (!compareDouble(paramVec(1), cauchy_x0, acErr)) + { + return (false); + } + + delete interArrivalCdf; + + return (true); +} + +bool DataProcessor::test_modelSelection() +{ + + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + int m = interArrival.size(); + + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + StochasticModelFit* modelVet = NULL; + modelVet = fitModels(list_interArrival, "aic"); + + //int numberOfModels = modelVet[0].size; + //for (int i = 0; i < numberOfModels; i++) + // cout << modelVet[i].modelName << " " << "modelVet[" << i << "] = " + // << modelVet[i].aic << endl; + + delete interArrivalCdf; + delete[] modelVet; + return (true); +} + +#endif //TEST_FUNCTIONS diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/9b/f06d2b72acb500161808a5c64fd2084a b/.metadata/.plugins/org.eclipse.core.resources/.history/9b/f06d2b72acb500161808a5c64fd2084a new file mode 100644 index 0000000..214f5dc --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/9b/f06d2b72acb500161808a5c64fd2084a @@ -0,0 +1,886 @@ +/* + * DataProcessor.h + * + * Created on: 14 de jun de 2016 + * Author: apaschoalon + */ + +#ifndef DATAPROCESSOR_H_ +#define DATAPROCESSOR_H_ + +//external libs +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +//local libs +#include "DatabaseInterface.h" +#include "NetworkTrace.h" +#include "Defines.h" +#include "StochasticModelFit.h" + +//namespaces +using std::string; +using namespace arma; + +#define DEBUG_StochasticModelFit 1 + + +//TODO: this class must be static +class DataProcessor +{ +public: + + /** + * Default constructor + */ + DataProcessor(); + + /** + * Destructor. Clean any allocated memory + */ + virtual ~DataProcessor(); + + /** + * @brief Returns a string information about the class + * Returns a string information about the class + * + * @param void + * @return string + */ + string toString(void); + + /** + * @brief This method parameterize a network trace. + * Through the database interface class, this method retrieves all desired + * data from the database, in order to calculate and set parameters in a + * NetworkTrace class instance. This method knows all the labels and types + * of each database column, and how to deal with them correctly. So this + * method should be up to date with the database. After calculating all + * parameters, this class should save the data on the Network trace + * object and on its flows through netTrace.set() and netTace.flow[n].set() + * methods. + * + * @param experimentName experiment name string + * @param databaseInterface class interface to the database + * @param netTrace network trace class, which will be parameterized + * @return returns 0 in success + */ + int calculate(const string& experimentName, + DatabaseInterface* databaseInterface, NetworkTrace* netTrace); + +#ifdef TEST_FUNCTIONS + void save_data_on_file(const string& fileName, const mat& vet1, + const mat& vet2); + template + void DataProcessor::save_data_on_file(const string& fileName, list theList); + void printTestResult(string testName, bool result); + bool compareDouble(double val1, double val2); + bool compareDouble(double val1, double val2, double acErr); + bool compareMat(mat& mat1, mat& mat2); + bool test_QuickSort(); + bool test_Mode(); + bool test_list_tocvector(); + bool test_empiricalCdf(); + bool test_computeCost(); + bool test_informationCriterion(); + bool test_gradientDescendent(); + bool test_pdf_weibull(); + bool test_cdf_weibull(); + bool test_pdf_exponential(); + bool test_cdf_exponential(); + bool test_pdf_pareto(); + bool test_cdf_pareto(); + bool test_pdf_cauchy(); + bool test_cdf_cauchy(); + bool test_fitModels(); + bool test_modelSelection(); +#endif //TEST_FUNCTIONS + +private: + /** + * A time smaller than the min_time resolution. Once the current resolution + * is 1e-6, min_time is half of this value. This value is used as default + * as substitute for times equal to zero. + */ + double min_time = 5e-7; + + /** + * A very small time value. This is used to avoid evaluating the operation + * log(0), which is undefined. + */ + double diferential = 4e-14; + + // calculate the mean packet rate + int mean_packetRate(list& pakcetSizeList, double duration); + + //calculate the most frequent element from a list + long int mode(list& thelist); + + /** + * ACTUAL FUNCTIONS + */ + // Take as input a vector vet[], its first and last position to be + // sorted. After the execution vet[] will be sorted. + // T* vet : C vector + // int left: fist position of the C vector to be sorted, usually 0. + // int right: last position of the C vector to be sorted, usually size-1; + template void quickSort(T* vet, int left, int right); + // Evaluate the mode (the most frequent value) of a list list + template T mode(list* theList); + + /** + * @brief Converts a list to a C vector. + * Converts a list to a C vector. + * @param theList + * @return + */ + template T* list_to_cvector(list* theList); + + /** + * @brief Delete a C vector + * @param c_vet pointer to the C vector + */ + template void delete_cvector(T* c_vet); + + /** + * @brief Compare two C vectors T. + * Compare two C vectors of types T. If they are equal, returns "true". If + * they are not, returns "false". + * + * @param vet1 + * @param vet2 + * @param size + * @return + */ + template bool isEqual(const T* vet1, const T* vet2, + const int size); + /** + * \brief convert a C vector T to a list + * + * @param theList pointer to an empty list + * @param vet pointer to a C vector + * @param size size of the C vector + */ + template void vectorC_to_list(list* theList, T* vet, + int size); + + /** + * Return an empirical vector of the Cumulative distribution function. + * This method take as input a list of empirical data, and create a + * vector (of the same size) of an empirical evaluation of the cumulative + * distribution function. Return must be freed using delete. + * + * @param list + * @return vec* empirical cumulative vector + */ + vec* empiricalCdf(list& empiricalData); + + //feature matrix: return a matrix X(m, 2) = [1 data]. Must be freed using delete. + /** + * @brief Creates a feature matrix for linear regression + * Creates a feature matrix X(m, 2) = [1 data], for the linear regression. + * Must be freed using delete. + * + * @param empiricalData list of the empirical data. + * @return returns a pointer to the feature matrix + */ + mat* featureMatrix(list& empiricalData); + + /** + * @brief Creates a feature matrix for linear regression + * Creates a feature matrix X(m, 2) = [1 data], for the linear regression. + * Must be freed using delete. + * + * @param empiricalData vector vec of the empirical data. + * @return returns a pointer to the feature matrix + */ + mat* featureMatrix(const vec& empiricalData); + + /** + * @brief Compute cost of the gradient descendent function + * It returns the value of the cost function for the list of parameteres + * + * @param X feature matrix + * @param y expected values + * @param theta linear regression coeficients [theta1; theta2] + * @return cost value + */ + double computeCost(const mat& X, const vec& y, const vec& theta); + + /** + * @brief Gradient descendent algorithm + * Evaluates the gradient descendent + * + * @param X feature matrix + * @param y + * @param learning_rate + * @param num_iters + * @param theta + * @param J_history + */ + void gradientDescendent(const mat& X, const vec& y, + const double learning_rate, const int num_iters, vec& theta, + vec& J_history); + + /** + * @brief information criterion + * + * @param data + * @param functionName + * @param paramVet + * @param criterion + * @return + */ + double informationCriterion(const vec& data, const string& functionName, + const vec& paramVet, const string& criterion); + + /** + * @brief natural logarithm of likehood function + * + * @param data + * @param functionName + * @param paramVet + * @return + */ + double logLikehood(const vec& data, const string& functionName, + const vec& paramVet); + /** + * @brief fit weibull alpha and betha using linear regression + * + * @param interArrival + * @param interArrivalCdf + * @param paramVec + * @param informationCriterion + */ + void weibullFitting(const vec& interArrival, const vec& interArrivalCdf, + vec& paramVec, vec& informationCriterion); + + /** + * @brief evaluate mean and standard deviation + * + * @param interArrival + * @param paramVec + * @param informationCriterion + */ + void normalFitting(const vec& interArrival, vec& paramVec, + vec& informationCriterion); + + /** + * @brief evaluate lambda using linear regression + * + * @param interArrival + * @param interArrivalCdf + * @param paramVec + * @param informationCriterion + */ + void exponentialLrFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, + vec& informationCriterion); + + /** + * @brief evaluate lambda using mean estimation + * + * @param interArrival + * @param paramVec + * @param informationCriterion + */ + void exponentialMeFitting(const vec& interArrival, vec& paramVec, + vec& informationCriterion); + + /** + * @brief evaluate pareto's alpha and xm using Linear regression + * + * @param interArrival + * @param interArrivalCdf + * @param paramVec + * @param informationCriterion + */ + void paretoLrFitting(const vec& interArrival, const vec& interArrivalCdf, + vec& paramVec, vec& informationCriterion); + + /** + * @brief evaluate pareto's alpha and xm using maximum likehood method + * + * @param interArrival + * @param interArrivalCdf + * @param paramVec + * @param informationCriterion + */ + void paretoMlhFitting(const vec& interArrival, const vec& interArrivalCdf, + vec& paramVec, vec& informationCriterion); + + /** + * @brief evaluate cauchy's gamma and x0 using linear regression + * + * @param interArrival + * @param interArrivalCdf + * @param paramVec + * @param informationCriterion + */ + void cauchyFitting(const vec& interArrival, const vec& interArrivalCdf, + vec& paramVec, vec& informationCriterion); + + /** + * @brief + * + * @param interArrival + * @param paramVec + * @param informationCriterion + */ + void constantFitting(const vec& interArrival, vec& paramVec, + vec& informationCriterion); + + /** + * @brief returns probability of a given + * @param x + * @param alpha + * @param betha + * @return + */ + double pdf_weibull(double x, double alpha, double betha); + + /** + * + * @param x + * @param alpha + * @param betha + * @return + */ + double cdf_weibull(double x, double alpha, double betha); + + /** + * + * @param x + * @param lambda + * @return + */ + double pdf_exponential(double x, double lambda); + + /** + * + * @param x + * @param lambda + * @return + */ + double cdf_exponential(double x, double lambda); + + /** + * + * @param x + * @param alpha + * @param xm + * @return + */ + double pdf_pareto(double x, double alpha, double xm); + + /** + * + * @param x + * @param alpha + * @param xm + * @return + */ + double cdf_pareto(double x, double alpha, double xm); + + /** + * + * @param x + * @param gamma + * @param x0 + * @return + */ + double pdf_cauchy(double x, double gamma, double x0); + + /** + * + * @param x + * @param gamma + * @param x0 + * @return + */ + double cdf_cauchy(double x, double gamma, double x0); + + /** + * + * @param x + * @param mu + * @param sigma + * @return + */ + double pdf_normal(double x, double mu, double sigma); + + /** + * + * @param x + * @param mu + * @param sigma + * @return + */ + double cdf_normal(double x, double mu, double sigma); + + /** + * + * @param x_min + * @param x_max + * @return + */ + double pdf_uniform(double x_min, double x_max); + + /** + * + * @param x + * @param x_min + * @param x_max + * @return + */ + double cdf_uniform(double x, double x_min, double x_max); + + // Take as input a list o inter-arrival times, and a pointer to a C vector + // of the struct StochasticModelFit. The available models are ordered here, + // from the best to the worst, according to the specified criterion BIC or + // AIC. If it is not specified, it uses as default AIC. + + /** + * + * @param empiricalData + * @param criterion + * @return + */ + StochasticModelFit* fitModels(list& empiricalData, + const string& criterion); + +#ifdef TEST_FUNCTIONS + + vec interArrivalSample = + { 0, 0, 0.000203, 1e-05, 0.318392, 1.00003, 0.517214, 3.2e-05, 7.6e-05, + 0.159572, 0.028456, 0.000267, 1.6e-05, 0.000362, 0.001436, 0.012243, + 0.052051, 0.010572, 0.300375, 1.6e-05, 0.00012, 0.171993, 0.000161, + 0.180517, 0.336145, 9e-06, 0.007852, 0.044852, 0.020313, 0.030458, + 0.218979, 0.250961, 0.158453, 0.042762, 0.129894, 0.01578, 0.016078, + 3.1e-05, 2.2e-05, 0.000309, 1.8e-05, 7.1e-05, 3e-06, 0.00018, 6e-06, + 0.041497, 0.094336, 0.030568, 0.69278, 0.083745, + 0.09501999999999999, 0.246721, 0.000322, 1.5e-05, 6.4e-05, 0.00031, + 6.600000000000001e-05, 0.000203, 5.4e-05, 4e-06, 4.6e-05, + 0.0005509999999999999, 0.046676, 0.000133, 0.00025, 0.000106, 4e-06, + 6e-05, 0.000579, 0.020548, 0.020144, 0.00017, 4.3e-05, 3.8e-05, + 0.000403, 8.8e-05, 9.2e-05, 2.1e-05, 8.899999999999999e-05, 7.9e-05, + 0.037013, 0.003625, 0.000174, 0.001402, 0.01547, 0.000137, 0.000257, + 0.000181, 0.000249, 0.000175, 0.000262, 0.000188, 0.000245, + 0.000198, 0.000194, 0.039691, 0.377134, 0.025489, + 0.08887399999999999, 0.071201, 0.118396, 0.011301, 0.18306, + 0.471818, 1.2e-05, 0.057105, 0.158384, 0.033412, 0.279247, 0.615341, + 0.07193099999999999, 0.041286, 6e-06, 6.4e-05, 0.000615, 0.000159, + 1.5e-05, 0.179127, 0.003532, 0.087938, 0.128529, 0.003537, 0.555139, + 0.312737, 0.614656, 0.20354, 0.18178, 0.728741, 0.227757, 0.657457, + 1.122729, 0.000405, 1.1e-05, 0.876119, 1.999258, 0.936457, 0.000285, + 1.2e-05, 4.5e-05, 5.3e-05, 0.000321, 0.000137, 0.00026, 0.00031, + 0.000224, 2.5e-05, 0.000171, 3.7e-05, 0.000211, 9.3e-05, 0.000175, + 2.8e-05, 0.000447, 0.000124, 3e-06, 0.000121, 0.000124, 1.3e-05, + 0.000111, 0.000129, 3e-06, 3.6e-05, 3e-06, 1.8e-05, 3.9e-05, + 8.6e-05, 0.00021, 0.000239, 0.000161, 3.2e-05, 0.000224, 0.001489, + 0.00078, 0.000127, 7e-06, 0.000197, 0.000703, 2.5e-05, 0.000145, + 0.00263, 0.001061, 0.001058, 8e-06, 1.5e-05, 4.6e-05, 0.001069, + 0.013118, 6.4e-05, 0.016585, 0.008005, 0.004525, 0.01047, 1.1e-05, + 4e-06, 1e-06, 1e-06, 1e-06, 0.000346, 0.003028, 0.3629, 0.605291, + 0.024532, 0.13292, 6e-06, 2e-06, 2e-06, 2e-06, 2e-06, 3.5e-05, + 0.000585, 0.000348, 0.000227, 0.000171, 7e-06, 0.08057, 0.758265, + 0.999926, 0.026228, 0.430843, 0.460833, 0.076263, 0.682728, + 0.000663, 0.286479, 0.000348, 1.2e-05, 5e-05, 0.000407, 4.8e-05, + 0.000171, 5e-05, 0.000202, 3.5e-05, 0.000215, 2.7e-05, 0.000227, + 3.3e-05, 0.000461, 0.000124, 8e-06, 0.000109, 0.000124, 7e-06, + 0.000115, 0.000123, 1e-06, 0.000122, 0.000125, 3e-06, 0.000122, + 0.000121, 1.8e-05, 0.000105, 3.5e-05, 4e-06, 4.6e-05, 0.000216, + 8.6e-05, 0.000174, 0.000106, 0.00019, 7.8e-05, 0.000171, 7.1e-05, + 0.000256, 0.000219, 0.000174, 8.899999999999999e-05, 0.000168, + 0.000114, 8e-06, 4.5e-05, 0.000549, 0.041588, 9.399999999999999e-05, + 0.000272, 5.8e-05, 4e-06, 4.2e-05, 0.000563, 0.012524, 0.011557, + 0.000133, 0.033325, 8.1e-05, 3.4e-05, 0.000523, 0.041159, 5.2e-05, + 2.3e-05, 5.7e-05, 0.016827, 9.500000000000001e-05, 0.000229, + 7.1e-05, 0.000184, 7.2e-05, 0.000183, 5.3e-05, 0.000166, 3.2e-05, + 0.000225, 0.037247, 1.000281, 1.5e-05, 1.8e-05, 3.9e-05, 7e-06, + 6e-06, 5.9e-05, 8e-06, 4e-06, 4.7e-05, 0.000492, 4.2e-05, 7e-06, + 4e-06, 3e-06, 6e-06, 2.5e-05, 6e-05, 1.8e-05, 6e-06, 1.8e-05, 6e-06, + 5.7e-05, 1.5e-05, 0.000178, 3.4e-05, 6e-06, 4e-06, 4e-06, 7e-06, + 0.000154, 1.6e-05, 4e-06, 3e-06, 4e-06, 5.7e-05, 0.000236, 4.2e-05, + 7e-06, 3e-06, 4e-06, 0.000261, 4.1e-05, 6e-06, 8.3e-05, 4.9e-05, + 8e-06, 5e-06, 4e-06, 4e-06, 5e-06, 1.1e-05, 0.000377, 4.3e-05, + 8e-06, 4e-06, 4e-06, 6e-06, 4e-06, 9e-06, 0.000183, 2.7e-05, 6e-06, + 3e-06, 4e-06, 0.000203, 2.5e-05, 6e-06, 3e-06, 4e-06, 6e-06, 0.0002, + 2.8e-05, 6e-06, 4e-06, 4e-06, 7e-06, 0.000205, 2.7e-05, 6e-06, + 4e-06, 3e-06, 0.000183, 2.9e-05, 6e-06, 4e-06, 3e-06, 7e-06, + 0.000217, 2.6e-05, 6e-06, 4e-06, 3e-06, 6e-06, 0.000209, 3.5e-05, + 6e-06, 3e-06, 3e-06, 0.000247, 4.3e-05, 5e-06, 3e-06, 3e-06, 7e-06, + 8.000000000000001e-05, 1.4e-05, 4e-06, 4e-06, 3e-06, 7.6e-05, + 0.000233, 4.2e-05, 6e-06, 3e-06, 3e-06, 0.000108, 1.4e-05, 5e-06, + 4e-06, 5.5e-05, 0.000259, 3.3e-05, 3.4e-05, 0.000106, 0.000304, + 0.000247, 3.3e-05, 0.000169, 0.000276, 3.3e-05, 3.2e-05, 0.000112, + 0.000275, 0.000284, 0.000244, 6.4e-05, 0.00013, 0.000222, 0.000244, + 0.000377, 0.000136, 0.000324, 6.1e-05, 0.000101, 0.000304, 0.000205, + 0.000298, 0.000202, 0.000265, 4.3e-05, 0.000182, 0.000198, 3.6e-05, + 0.036618, 0.167993, 0.000405, 5.6e-05, 0.132945, 0.5075499999999999, + 1.839101, 0.160079, 0.856059, 0.00019, 0.814619, 0.001748, 0.326707, + 0.016594, 0.104517, 0.000487, 1.2e-05, 3.5e-05, 0.030896, 1.3e-05, + 2.5e-05, 2e-06, 5.6e-05, 2e-06, 0.00016, 8e-06, 1e-06, 4.4e-05, + 6e-06, 0.000232, 2e-06, 9.6e-05, 5e-06, 1e-06, 0.000219, 3e-06, + 1e-06, 0.000281, 4e-06, 1e-06, 0.000247, 2e-06, 1e-06, 0.000182, + 4e-06, 1e-06, 0.000234, 3e-06, 2e-06, 0.000331, 7e-06, 2e-06, + 0.000228, 7e-06, 0.000124, 0.000342, 0.000243, 0.000109, 8e-06, + 0.00015, 6.1e-05, 8e-06, 0.006888, 7.4e-05, 0.033877, 0.03964, + 0.031221, 0.027626, 0.029209, 0.027819, 0.008146, 0.003837, + 0.054232, 0.141787, 0.189477, 0.000731, 0.037917, 0.239763, + 0.016276, 0.101792, 0.121279, 0.569522, 0.162138, 0.167452, + 0.100904, 0.050978, 0.193571, 0.023699, 0.00188, 0.7299330000000001, + 0.14706, 0.069059, 0.000354, 2.1e-05, 0.000376, 0.051512, 4e-05, + 0.00026, 1.9e-05, 5.1e-05, 4e-06, 6e-05, 0.000322, 4.5e-05, 1.3e-05, + 9e-06, 7.8e-05, 3.9e-05, 0.000258, 5.4e-05, 6.9e-05, 8e-06, 6.2e-05, + 0.000148, 4.2e-05, 0.000136, 5.7e-05, 4.7e-05, 0.000226, 0.00012, + 0.000106, 5.4e-05, 0.000169, 9.7e-05, 0.000135, 5.3e-05, 0.000161, + 5.6e-05, 2.9e-05, 1.1e-05, 2.8e-05, 2.9e-05, 0.000329, 4.8e-05, + 2.4e-05, 1e-05, 3.4e-05, 2.8e-05, 0.000345, 0.000111, 0.000216, + 8e-06, 0.010716, 0.000189, 0.002223, 0.000222, 0.000261, 6.1e-05, + 0.000497, 0.000121, 6e-06, 3.1e-05, 7.4e-05, 0.000316, 0.000201, + 0.000241, 0.037019, 0.011593, 0.025272, 1.2e-05, 0.005462, 0.000153, + 0.000308, 1.8e-05, 0.000457, 0.000157, 1.2e-05, 0.000111, + 6.499999999999999e-05, 8.500000000000001e-05, 0.000121, 0.036178, + 0.062789, 0.209764, 2.2e-05, 0.000104, 0.000598, 0.000113, 0.000858, + 0.001237, 1.1e-05, 6.4e-05, 0.022295, 0.002239, 0.02595, 0.048743, + 2.3e-05, 0.048933, 0.000101, 3.8e-05, 0.134329, 0.013961, 1e-05, + 0.003331, 7e-06, 0.006234, 0.000175, 8e-06, 0.0002, 0.000699, + 2.4e-05, 0.001724, 6e-06, 0.000252, 1.3e-05, 0.00269, 0.000125, + 7e-06, 0.000158, 0.007282, 0.015473, 0.064868, 6e-06, 0.216, + 2.2e-05, 2.9e-05, 6.9e-05, 0.000317, 1.4e-05, 0.002346, 0.00051, + 0.005226, 2e-05, 0.019417, 0.001007, 0.000196, 0.005594, 0.005761, + 0.008026, 0.09038, 0.000229, 0.000128, 0.209391, 0.231852, 0.032119, + 5e-06, 5e-06, 2e-06, 2e-06, 1e-06, 2e-06, 3.3e-05, 0.000664, 1e-05, + 2e-06, 0, 1e-06, 1e-06, 8.899999999999999e-05, 1.8e-05, 2.7e-05, + 5e-06, 1e-06, 1e-06, 0.000308, 4e-06, 2e-06, 2e-06, 0.000159, 5e-06, + 1e-06, 1e-06, 0.000537, 8e-06, 2e-06, 2e-06, 1e-06, 1e-06, 1e-06, + 0.00044, 1e-05, 2e-06, 3e-06, 3e-06, 3e-06, 2e-06, 0.0001, 0.000368, + 1e-05, 1e-06, 3e-06, 3e-06, 4e-06, 2e-06, 0.000452, 5e-06, 3e-06, + 2e-06, 2e-06, 2e-06, 0.000215, 6e-06, 2e-06, 2e-06, 0.000259, 7e-06, + 3e-06, 1e-06, 0.000209, 5e-06, 2e-06, 1e-06, 0.000236, 4e-06, 1e-06, + 2e-06, 0.000238, 3e-06, 1e-06, 2e-06, 0.000252, 1.6e-05, 1e-06, + 1e-06, 0.000255, 1.2e-05, 1e-06, 2e-06, 0.000202, 1.5e-05, 1e-06, + 1e-06, 0.000251, 1.2e-05, 1e-06, 1e-06, 0.000198, 4e-06, 1e-06, + 2e-06, 0.000254, 4e-06, 1e-06, 1e-06, 0.00013, 0.000103, 2e-06, + 1e-06, 1e-06, 0.00023, 5e-06, 2e-06, 1e-06, 0.000244, 4e-06, 1e-06, + 0, 0.000233, 6e-06, 1e-06, 1e-06, 0.000241, 4e-06, 1e-06, 1e-06, + 0.000238, 6e-06, 3e-06, 1e-06, 0.000234, 6e-06, 2e-06, 1e-06, + 0.000234, 8e-06, 1e-06, 1e-06, 0.000236, 7e-06, 1e-06, 1e-06, + 0.000236, 4e-06, 1e-06, 1e-06, 0.000237, 5e-06, 1e-06, 2e-06, + 0.000236, 2e-06, 3e-06, 4e-06, 0.000237, 6e-06, 3e-06, 3e-06, + 0.000232, 4e-06, 2e-06, 1e-06, 0.000238, 4e-06, 1e-06, 2e-06, + 0.000239, 6e-06, 1e-06, 1e-06, 0.00024, 2e-06, 1e-06, 1e-06, + 0.000241, 3e-06, 2e-06, 1e-06, 0.000238, 4e-06, 2e-06, 1e-06, + 0.000237, 3e-06, 1e-06, 2e-06, 0.00024, 5e-06, 1e-06, 1e-06, + 0.000237, 4e-06, 1e-06, 1e-06, 0.00024, 3e-06, 2e-06, 1e-06, + 0.000305, 4e-06, 2e-06, 0.000194, 1.2e-05, 1e-06, 0.000223, 1.2e-05, + 1e-06, 0.000235, 1.5e-05, 1e-06, 0.000224, 1.2e-05, 2e-06, 0.000231, + 1.1e-05, 2e-06, 0.000225, 6e-06, 2e-06, 1e-06, 0.000245, 1.4e-05, + 1e-06, 0.000218, 2e-06, 1e-06, 0.000243, 3e-06, 2e-06, 0.00024, + 4e-06, 1e-06, 0.00024, 4e-06, 2e-06, 0.000238, 2e-06, 1e-06, 1e-06, + 0.000241, 2e-06, 1e-06, 0.000242, 4e-06, 1e-06, 0.000241, 2e-06, + 1e-06, 0.000242, 4e-06, 1e-06, 0.00024, 4e-06, 1e-06, 0.000243, + 1.6e-05, 2e-06, 0.000225, 1.2e-05, 2e-06, 0.000231, 1.5e-05, + 0.00023, 1.1e-05, 2e-06, 0.000231, 1.1e-05, 0.000237, 1.4e-05, + 0.000219, 4e-06, 2e-06, 0.000241, 5e-06, 0.000245, 3e-06, 0.000247, + 6e-06, 3e-06, 0.000229, 5e-06, 0.000238, 6e-06, 3e-06, 0.000244, + 1.3e-05, 0.000243, 2e-06, 0.000222, 0.000245, 3e-06, 2e-06, + 0.000239, 3e-06, 3e-06, 0.000238, 1e-06, 1e-06, 0.000244, 3e-06, + 2e-06, 0.000239, 2e-06, 0.000244, 1e-06, 0.000244, 0.000245, + 0.000255, 0.000243, 0.000251, 1.6e-05, 0.000231, 1.3e-05, 0.000228, + 1.2e-05, 0.000238, 5e-06, 0.000235, 1.3e-05, 0.000192, 7.8e-05, + 1.4e-05, 9.8e-05, 9.7e-05, 0.000236, 0.000256, 0.000247, 2e-05, + 8.4e-05, 1.2e-05, 0.000104, 6.9e-05, 1.3e-05, 0.000179, 0.000245, + 0.000256, 1e-06, 9.2e-05, 0.000124, 1.7e-05, 0.000242, 0.000143, + 1.7e-05, 0.064764, 0.268533, 0.000247, 0.000117, 4.6e-05, 0.0001, + 0.00026, 1.3e-05, 7.8e-05, 0.000413, 7.499999999999999e-05, + 0.000187, 7.6e-05, 0.00019, 0.015809, 0.000237, 4e-05, 2.3e-05, + 0.000115, 0.000268, 9e-06, 3.1e-05, 0.000317, 0.000248, 0.00025, + 0.000111, 0.00018, 3.2e-05, 0.000196, 5.3e-05, 0.000188, 4.7e-05, + 0.000197, 6.1e-05, 0.000184, 6.8e-05, 0.000187, 0.03969, 0.401298, + 0.191103, 0.038273, 0.155567, 2.8e-05, 0.000256, + 6.600000000000001e-05, 1.2e-05, 0.000205, 1.5e-05, 0.413707, + 0.02753, 0.142191, 0.120225, 0.761589, 0.148513, + 0.07999199999999999, 0.443199, 1.476141, 0.380089, 0.005695, + 0.000311, 1.2e-05, 0.008484999999999999, 0.849543, 0.00359, + 0.751508, 1.292865, 0.179771, 0.5266, 0.366045, 2e-05, 1.03151, + 1.2e-05, 0.6017670000000001, 0.705453, 1.29376, 0.388697, 0.000119, + 0.000292, 1.4e-05, 7e-06, 0.000235, 1e-05, 0.171773, + 0.07598100000000001, 0.310302, 0.0004, 1.7e-05, 8.1e-05, 0.000385, + 0.000118, 0.000302, 0.000114, 0.000281, 2.9e-05, 0.000209, 2.7e-05, + 0.000239, 2.5e-05, 0.000212, 6e-05, 0.000224, 9.1e-05, 0.000233, + 1.9e-05, 0.000198, 1.9e-05, 0.000289, 0.000267, 0.000198, 6e-05, + 0.000195, 7.6e-05, 3e-06, 2e-06, 1e-06, 2e-06, 2e-06, 6.9e-05, + 0.000555, 0.000244, 0.000241, 0.039375, 0.000124, 0.000288, + 9.899999999999999e-05, 3e-06, 6.2e-05, 0.000571, 0.048884, 0.000149, + 1.4e-05, 6e-06, 6e-06, 3.3e-05, 1.6e-05, 7e-06, 2.5e-05, 0.000324, + 0.000219, 9e-06, 0.000153, 0.000128, 0.00011, 0.000155, 9e-06, + 0.00017, 7.3e-05, 0.037596, 0.027548, 0.000148, 0.00018, 0.016617, + 7.499999999999999e-05, 0.000234, 3.3e-05, 0.000171, 2.8e-05, + 0.000231, 3.5e-05, 0.00019, 2.8e-05, 0.000209, 0.039791, 0.832296, + 1.999254, 0.048807, 0.016688, 0.103137, 0.855847, 0.655344, + 0.000661, 0.013452, 0.168439, 0.136821, 0.025272, 9e-06, + 0.007948999999999999, 0.037041, 0.047981, 0.008460000000000001, + 0.04047, 0.009528, 0.020497, 0.072979, 0.009079, 0.11388, 0.023627, + 0.016839, 0.235363, 0.200238, 0.259802, 0.133895, 0.19443, 0.003572, + 0.124423, 0.003563, 0.37003, 0.040397, 0.3915, 0.000331, 1.7e-05, + 0.186427, 0.003647, 0.000144, 0.004702, 0.542918, 0.227775, + 0.641863, 0.034463, 0.016594, 0.419727, 0.000376, 3.6e-05, 0.000115, + 0.000327, 0.0005330000000000001, 0.00028, 0.000207, 0.000324, + 0.000296, 1e-05, 7e-06, 4.2e-05, 0.000562, 0.010122, 3.8e-05, + 0.018846, 0.000187, 0.000264, 0.000181, 0.000292, 0.000118, + 0.000469, 0.01084, 0.000237, 3.8e-05, 0.019239, 2.8e-05, 0.000227, + 0.0001, 0.000213, 0.000112, 0.000241, 0.000121, 0.000312, 0.000149, + 0.000209, 0.000133, 0.000296, 0.000132, 0.000214, 0.00166, 0.02373, + 0.001922, 4e-06, 4.3e-05, 3e-06, 5.1e-05, 3e-06, 5.6e-05, 2e-06, + 5.4e-05, 1e-06, 0.000392, 8e-06, 1e-06, 4.8e-05, 3e-06, 3.7e-05, + 2e-06, 0.000158, 1e-05, 2e-06, 1e-06, 4.7e-05, 0.000205, 3e-06, + 1e-06, 1e-06, 0.000516, 0.000201, 0.000213, 0.000308, 0.000241, + 0.00026, 0.000234, 0.169798, 8.500000000000001e-05, 0.0003, + 0.000144, 3e-06, 2e-06, 6.8e-05, 0.000589, 0.03856, 0.035385, + 0.000115, 0.000179, 5.8e-05, 0.000143, 0.000343, 0.000129, 0.000214, + 7.2e-05, 0.000288, 8.1e-05, 0.000203, 5.1e-05, 0.000369, + 9.500000000000001e-05, 0.000176, 0.001365, 0.013006, 0.001368, + 3e-06, 1e-06, 1e-06, 1e-06, 2e-06, 5.2e-05, 2e-06, 6.3e-05, 1.3e-05, + 1e-06, 1e-06, 6.7e-05, 2e-06, 1e-06, 4.3e-05, 4e-06, 6.1e-05, 1e-06, + 1e-06, 7.1e-05, 2e-06, 7e-06, 0.0002, 0.000255, 0.000229, 0.000516, + 0.000282, 0.000244, 0.000256, 0.000238, 0.000242, 0.000245, + 0.029151, 8.3e-05, 0.000294, 0.000143, 5e-06, 2e-06, 6.4e-05, + 0.000604, 0.012818, 0.00022, 0.019331, 0.000117, 0.000224, 0.000222, + 0.000234, 7.6e-05, 0.000216, 6.7e-05, 0.00028, 7.1e-05, 0.000219, + 4.5e-05, 0.000249, 6.7e-05, 0.000193, 0.001358, 0.013339, 0.001356, + 4e-06, 1e-06, 1e-06, 1e-06, 2e-06, 1e-06, 3.5e-05, 1e-06, 3.2e-05, + 6e-06, 6.8e-05, 1e-06, 1e-06, 4e-05, 7e-06, 1.5e-05, 2.7e-05, 5e-06, + 3.2e-05, 6e-06, 2.5e-05, 3e-05, 0.000278, 0.000251, 0.000215, + 0.000489, 0.000514, 0.000257, 0.000257, 0.000243, 0.000218, + 0.010181, 0.001256, 3e-05, 0.017594, 6.499999999999999e-05, + 0.000246, 0.000173, 4e-06, 1e-06, 6.499999999999999e-05, 0.000554, + 0.032475, 0.000117, 0.000258, 0.00054, 0.000265, 0.000146, 0.000199, + 6.9e-05, 0.000292, 0.000126, 0.000205, 0.000109, 0.000287, 0.000119, + 0.00021, 0.001505, 0.01251, 0.001603, 3e-06, 2e-06, 1e-06, 1e-06, + 2e-06, 1e-06, 4.5e-05, 3e-06, 6.7e-05, 1.2e-05, 1e-06, 1e-06, + 6.7e-05, 1.9e-05, 1e-06, 1e-06, 1e-05, 1.9e-05, 5.9e-05, 2e-06, + 9.3e-05, 2e-06, 0.000219, 0.000245, 0.000208, 0.000262, 0.000498, + 0.000251, 0.000244, 0.000246, 0.000244, 0.000247, 0.02889, 8.1e-05, + 0.000216, 0.000107, 3e-06, 2e-06, 6.9e-05, 0.0005820000000000001, + 0.01628, 0.00018, 5.4e-05, 0.000269, 0.015699, 2.2e-05, 0.000102, + 0.000347, 0.00041, 0.000227, 7.7e-05, 0.0002, 6.2e-05, 0.000236, + 4.8e-05, 0.00018, 7.499999999999999e-05, 0.000302, 9.2e-05, + 0.000167, 0.001491, 0.012937, 0.001596, 3e-06, 2e-06, 2e-06, 1e-06, + 2e-06, 2e-06, 2e-06, 1e-06, 3.4e-05, 3e-06, 7.499999999999999e-05, + 1.8e-05, 1e-06, 1e-06, 1e-06, 6e-05, 2e-06, 9e-06, 5.3e-05, 5e-06, + 2e-05, 1e-05, 0.000295, 0.000242, 0.000245, 0.000522, 0.000488, + 0.000247, 0.000243, 0.000246, 0.000246, 0.028895, 8.2e-05, 0.000303, + 0.000144, 5e-06, 2e-06, 6.8e-05, 0.000595, 0.009254, 0.027474, + 0.012253, 0.000107, 0.000184, 5.8e-05, 0.000119, 0.000216, 4e-05, + 0.000201, 2.2e-05, 0.000263, 4.1e-05, 0.000208, + 6.999999999999999e-05, 0.000266, 3.7e-05, 0.000167, 0.001494, + 0.013389, 0.001558, 4e-06, 2e-06, 1e-06, 2e-06, 1e-06, 1e-06, + 3.8e-05, 3e-06, 6.1e-05, 1e-06, 1e-06, 4.2e-05, 4e-06, 5.6e-05, + 4e-06, 1e-06, 3e-05, 8e-06, 5.4e-05, 1e-06, 1e-06, 2.6e-05, + 0.000256, 0.000241, 0.000244, 0.000553, 0.000246, 0.00022, 0.00024, + 0.000244, 0.000247, 0.000213, 0.028935, 8.899999999999999e-05, + 0.000214, 8.2e-05, 4e-06, 2e-06, 5.9e-05, 0.000562, 0.032548, + 0.000119, 0.000226, 0.0003, 0.000213, 4e-05, 0.000167, 3.3e-05, + 0.000333, 0.000132, 0.000208, 9.1e-05, 0.000296, 0.000118, 0.000181, + 0.00152, 0.013032, 0.001587, 4e-06, 2e-06, 1e-06, 2e-06, 2e-06, + 2e-06, 3.8e-05, 2e-06, 8.1e-05, 1e-06, 0, 1.6e-05, 1e-06, 5e-05, + 4e-06, 5.6e-05, 1e-06, 1e-06, 3.1e-05, 9e-06, 2.8e-05, 9e-06, + 0.00026, 0.000242, 0.000249, 0.000486, 0.000245, 0.000245, 0.000348, + 0.000419, 0.000279, 0.028802, 8.3e-05, 0.000286, 0.000115, 4e-06, + 2e-06, 5.9e-05, 0.000559, 0.000241, 0.002101, 3.5e-05, 0.030066, + 0.000106, 0.000205, 0.001807, 0.000205, 7.2e-05, 0.000191, 3e-05, + 0.000302, 0.000137, 0.000201, 8.899999999999999e-05, 0.000306, + 0.000116, 0.000325, 0.001743, 0.011198, 0.001645, 3e-06, 2e-06, + 2e-06, 1e-06, 2e-06, 1e-06, 1e-05, 3.5e-05, 2e-06, 6.7e-05, 2e-06, + 0, 4.5e-05, 8e-06, 2.2e-05, 3.3e-05, 8e-06, 7.1e-05, 1.4e-05, 1e-06, + 1e-06, 2.7e-05, 0.000255, 0.00024, 0.000243, 0.0005240000000000001, + 0.000242, 0.000246, 0.000282, 0.000452, 0.000251, 0.045419, + 8.500000000000001e-05, 0.000254, 6.1e-05, 2e-06, 3e-06, 6.9e-05, + 0.000559, 0.032483, 7.2e-05, 0.000221, 0.000143, 0.000211, 7.4e-05, + 0.0002, 4.9e-05, 0.000301, 0.000129, 0.000212, 9.2e-05, 0.000262, + 6e-05, 0.000198, 0.001624, 0.013169, 0.001673, 3e-06, 1e-06, 1e-06, + 2e-06, 2e-06, 1e-06, 4e-05, 3e-06, 6.4e-05, 1e-06, 1e-06, 4.8e-05, + 6e-06, 1.2e-05, 6.3e-05, 2e-06, 5.2e-05, 2e-06, 1e-06, 0, 3.5e-05, + 1e-06, 0.000295, 0.000239, 0.000243, 0.000492, 0.000243, 0.000278, + 0.00031, 0.000424, 0.000219, 0.028386, 0.000228, 5.4e-05, 0.000213, + 3.5e-05, 0.000238, 0.007959000000000001, 2.2e-05, 7.1e-05, 0.000481, + 0.000111, 4e-06, 1e-06, 6.8e-05, 0.000623, 0.038715, 0.010124, + 0.000116, 0.000228, 6.2e-05, 0.002913, 0.000265, 2.1e-05, 0.000179, + 1.5e-05, 1.3e-05, 0.000229, 3.9e-05, 0.000196, 3.5e-05, 0.000269, + 7.3e-05, 0.000191, 5.3e-05, 0.000247, 2.2e-05, 0.000177, 0.001569, + 0.010022, 0.001705, 3e-06, 2e-06, 1e-06, 1e-06, 3e-06, 1e-06, 1e-06, + 1e-06, 3.6e-05, 2e-06, 6.499999999999999e-05, 1e-06, 1e-06, 6e-05, + 1e-06, 1e-06, 5.6e-05, 1e-06, 4.2e-05, 4e-06, 1.7e-05, 2e-06, + 0.000327, 0.000232, 0.00025, 0.000239, 0.000501, 0.000215, 0.000245, + 0.000244, 0.000246, 0.000325, 0.02873, 8.7e-05, 0.000337, 0.000112, + 3e-06, 2e-06, 5.5e-05, 0.00056, 0.032383, 0.000119, 0.000246, + 0.001701, 0.000251, 0.004701, 0.000195, 0.006657, 0.027981, 7.3e-05, + 0.00024, 0.019186, 0.000333, 7.7e-05, 0.000241, 0.037189, 0.272651, + 0.227517, 6e-06, 2e-06, 2e-06, 1e-06, 2e-06, 3.7e-05, 2e-06, + 3.4e-05, 2e-06, 0.0006089999999999999, 1.8e-05, 3e-06, + 6.499999999999999e-05, 3e-06, 5.6e-05, 9e-06, 3e-06, 1e-06, + 6.499999999999999e-05, 5e-06, 1e-06, 0.000207, 9e-06, 2e-06, 1e-06, + 1e-06, 0.000442, 9e-06, 1e-06, 2e-06, 1e-06, 1e-06, 3.5e-05, + 0.000105, 1.2e-05, 7.499999999999999e-05, 3e-06, 1e-06, 1e-06, + 1e-06, 1e-06, 1e-06, 0.00047, 3e-06, 2e-06, 1e-06, 1e-06, 1e-06, + 1e-06, 0.000255, 4e-06, 1e-06, 2e-06, 1e-06, 1e-06, 2e-06, 0.000462, + 4e-06, 2e-06, 1e-06, 1e-06, 1e-06, 1e-06, 0.000234, 4e-06, 1e-06, + 1e-06, 1e-06, 0.00024, 6e-06, 1e-06, 2e-06, 1e-06, 0.000236, 5e-06, + 1e-06, 1e-06, 1e-06, 0.000256, 4e-06, 1e-06, 1e-06, 1e-06, 0.00022, + 2e-06, 1e-06, 0.000242, 4e-06, 2e-06, 0.000241, 5e-06, 2e-06, + 0.000233, 3e-06, 2e-06, 0.000239, 5e-06, 2e-06, 0.000238, 4e-06, + 1e-06, 0.00024, 5e-06, 1e-06, 0.000239, 3e-06, 1e-06, 0.000245, + 0.000279, 0.000142, 0.000114, 8.7e-05, 5e-06, 0.000157, 0.000225, + 0.000241, 6.2e-05, 0.000185, 6.2e-05, 4e-06, 0.000144, 0.000247, + 0.000255, 6.600000000000001e-05, 0.00017, 7.499999999999999e-05, + 1.5e-05, 0.000168, 0.000258, 6.8e-05, 0.000165, 7.7e-05, 5e-06, + 0.000145, 0.000242, 6.8e-05, 0.00018, 9.8e-05, 5e-06, 0.000169, + 0.000265, 0.000232, 5.3e-05, 2.5e-05, 5e-06, 0.009259, 0.039637, + 0.00865, 2.8e-05, 5e-06, 5e-06, 0.009263, 2.7e-05, 0.087632, 6e-05, + 0.000318, 1.4e-05, 1.6e-05, 2e-06, 5e-06, 4.2e-05, 0.00032, + 0.037569, 0.703033, 0.214916, 0.64994, 0.04462, 0.302059, 0.999951, + 0.137821, 0.039703, 0.027832, 0.000366, 1.7e-05, 0.000111, 0.000346, + 0.000131, 0.00019, 4.5e-05, 4e-06, 2e-06, 3.8e-05, 0.000618, + 0.036949, 0.0052, 0.000138, 0.0002, 0.000107, 9.399999999999999e-05, + 4e-06, 5.9e-05, 0.000579, 0.032121, 0.000118, 1.5e-05, 3.3e-05, + 3e-06, 0.000374, 0.000259, 6e-06, 0.00016, 5.3e-05, + 6.600000000000001e-05, 0.036463, 0.00435, 0.000131, 0.0002, + 0.016695, 0.000124, 0.000254, 7.7e-05, 0.000202, 6.9e-05, 0.000174, + 4.5e-05, 0.000229, 6.7e-05, 0.000176, 0.038503, 0.271061, 0.036943, + 0.003036, 0.307457, 0.23321, 0.029976, 0.000198, 0.62617, 3e-05, + 0.000353, 1.9e-05, 1e-05, 2e-06, 0.109966, 0.651886, 0.213682, + 4.9e-05, 2.7e-05, 0.000236, 1e-05, 4.6e-05, 2e-06, 0.00011, 2e-06, + 0.000152, 1e-06, 0.133729, 0.609789, 0.031985, 2.2e-05, 9.6e-05, + 0.016657, 9.1e-05, 0.000312, 0.000155, 0.000175, 3.6e-05, 0.000326, + 0.000222, 5e-06, 4.3e-05, 4e-06, 3.9e-05, 1.9e-05, 2.4e-05, 2.7e-05, + 2e-06, 5.9e-05, 0.000446, 2e-05, 3e-06, 5.8e-05, 2e-06, 6e-05, + 3e-06, 5.8e-05, 1e-05, 3e-06, 2e-06, 6.2e-05, 0.000145, 4e-06, + 1e-06, 1e-06, 3.7e-05, 0.000475, 4e-06, 2e-06, 1e-06, 2e-06, + 3.5e-05, 9e-06, 3.5e-05, 1e-06, 0.00041, 8e-06, 2e-06, 1e-06, 1e-06, + 2e-06, 1e-06, 3.9e-05, 2e-06, 0.000412, 4e-06, 2e-06, 1e-06, 1e-06, + 2e-06, 1e-06, 1e-06, 3.9e-05, 0.000437, 4e-06, 2e-06, 1e-06, 2e-06, + 1e-06, 1e-06, 2e-06, 1e-06, 0.000476, 4e-06, 2e-06, 1e-06, 2e-06, + 1e-06, 1e-06, 1e-06, 1e-06, 0.000455, 5e-06, 1e-06, 1e-06, 1e-06, + 1e-06, 1e-06, 0.000236, 1e-06, 2e-06, 1e-06, 1e-06, 0.000242, 5e-06, + 2e-06, 1e-06, 0.000302, 7e-06, 1e-06, 2e-06, 0.000174, 4e-06, 2e-06, + 1e-06, 0.000263, 3e-06, 2e-06, 1e-06, 0.000206, 5e-06, 1e-06, 2e-06, + 0.000263, 9e-06, 2e-06, 1e-06, 0.000241, 1.1e-05, 2e-06, 1e-06, + 0.000262, 1.9e-05, 3e-06, 1e-06, 0.000223, 1.9e-05, 0.000224, + 0.000248, 0.000244, 0.000217, 0.00024, 0.000244, 0.000246, 0.000221, + 0.000274, 0.000241, 0.000212, 0.000277, 0.000213, 0.000281, + 0.000242, 0.000245, 0.000244, 0.000246, 0.000244, 0.00025, 0.00024, + 0.000247, 0.000244, 0.000242, 0.001342, 0.000379, 0.034867, + 0.000105, 0.000224, 9.3e-05, 0.000182, 2.7e-05, 0.00026, 3.4e-05, + 0.000379, 0.039497, 0.5442, 0.357434, 1.099135, 0.041655, 0.85846, + 0.09723900000000001, 0.311746, 0.29389, 0.394283, 0.308007, + 0.445888, 0.148214, 0.097913, 0.307962, 0.692039, 0.307906, + 0.593507, 0.056654, 0.041922, 0.033815, 0.274117, + 0.8501919999999999, 4.8e-05, 4e-05, 5.2e-05, 0.000176, 3.5e-05, + 7.8e-05, 4.1e-05, 3.9e-05, 1.4e-05, 3.8e-05, 2e-05, 1e-05, 5e-06, + 3e-05, 1.3e-05, 0.14915, 0.026055, 0.003791, 0.562937, 1.999277, + 1.065992, 0.000143, 0.523873, 0.311931, 0.028066, 0.069262, + 0.239786, 1.759471, 0.246945, 0.756221, 0.697726, 0.000743, + 0.297642, 0.003465, 0.913362, 1.3e-05, 0.0866, 0.081234, 0.025897, + 0.050497, 0.259128, 0.014569, 0.564476, 0.004333, 0.312601, + 0.003488, 0.683764, 0.995133, 0.004903, 0.270456, + 0.6224730000000001, 0.000158, 0.161523, 0.000449, 2e-05, 0.000129, + 0.000428, 0.000134, 0.000275, 0.000131, 0.000373, 8.8e-05, 0.000344, + 7.6e-05, 0.000289, 9.899999999999999e-05, 0.000266, 0.00011, + 0.000218, 0.000129, 0.000203, 3.2e-05, 0.000265, + 8.899999999999999e-05, 0.000232, 7.9e-05, 0.000238, 0.000368, + 0.000233, 0.000121, 0.000228, 0.000164, 5e-06, 3e-06, 2e-06, 1e-06, + 8.8e-05, 0.000565, 0.000216, 0.034407, 0.000127, 0.000216, 5.8e-05, + 3e-06, 5.7e-05, 0.000566, 0.032524, 0.000164, 1.9e-05, 8e-06, + 2.2e-05, 1.4e-05, 1.4e-05, 4.4e-05, 0.000401, 5.6e-05, 9.6e-05, + 7e-06, 0.000133, 8e-06, 0.000248, 1.3e-05, 1e-06, 0.000302, 7.6e-05, + 0.036992, 0.028077, 0.000239, 0.000188, 0.016701, 0.000103, + 0.000332, 0.000134, 0.000307, 0.00013, 0.000323, 0.000139, 0.000212, + 0.000116, 0.000175, 0.037659, 0.132015, 0.312029, 0.297586, + 1.336091, 0.663151, 1.295715, 0.703577, 0.296261, 0.101385, 0.22987, + 0.000233, 0.434696, 0.000419, 3.6e-05, 0.000159, 0.000332, 0.000899, + 0.000119, 0.00019, 0.0352, 0.144224, 0.05227, 0.149337, 0.185305, + 0.000393, 0.184107, 5.8e-05, 0.000343, 0.183449, 0.000685, 0.000284, + 1.5e-05, 0.000102, 0.000448, 0.00037, 1.8e-05, 0.000112, 0.000401, + 0.00012, 0.00029, 0.000119, 0.000243, 6.4e-05, 0.000177, 5.4e-05, + 0.000188, 5.4e-05, 0.000279, 9.2e-05, 0.000504, 0.000166, 1.5e-05, + 5.4e-05, 0.000175, 1.5e-05, 7.7e-05, 0.000155, 1.5e-05, 0.000101, + 0.000401, 0.000268, 0.000207, 0.0001, 0.000145, + 0.0009700000000000001, 7.2e-05, 0.036994, 0.14733, 0.010867, + 0.037774, 0.056528, 0.10916, 0.000384, 1e-05, 2.9e-05, 0.000265, + 0.037653, 0.175573, 1.9e-05, 0.676889, 0.702174, 0.297846, 1.701447, + 0.066121, 5e-06, 5e-06, 2e-06, 2e-06, 3e-06, 1e-06, 2e-06, 3e-06, + 2e-06, 0.000725, 1.9e-05, 2e-06, 1e-06, 1e-06, 1e-06, 1e-06, + 6.999999999999999e-05, 2e-05, 2e-06, 3e-06, 1e-06, 1e-06, 1e-06, + 0.000218, 7e-06, 1e-06, 1e-06, 1e-06, 7.2e-05, 0.000155, 6e-06, + 1e-06, 1e-06, 1e-06, 0.000256, 3e-06, 2e-06, 1e-06, 0.000559, + 1.6e-05, 0.000227, 0.000299, 2.6e-05, 0.00012, 0.000264, 1.5e-05, + 0.000238, 1.5e-05, 1.4e-05, 0.000224, 0.000234, 1.5e-05, 0.000223, + 0.006457, 2.2e-05, 0.016599, 0.07625899999999999, 0.238719, + 0.000408, 0.037377, 0.08400299999999999, 0.003761, 0.124235, + 0.003565, 1.337726, 1.999245, 1.075482, 2.9e-05, 0.000378, 2e-05, + 9e-06, 2e-06, 1.8e-05, 6e-06, 0.923339, 1.999252, 1.10893, 0.003052, + 0.887231, 1.999357, 1.735131, 0.000561, 0.263547, 1.066412, + 0.000189, 6.7e-05, 0.932557, 0.069161, 0.000414, 1.7e-05, 0.000328, + 0.076215, 0.148162, 1.6e-05, 0.000117, 0.119362, 0.000372, 1.7e-05, + 0.7902090000000001, 0.794934, 0.918648, 0.0002, 1.080404, 0.413585, + 3.6e-05, 0.000285, 5.5e-05, 4e-06, 2.5e-05, 5e-06, 0.091326, + 0.003882, 0.572217, 7e-06, 4e-06, 2e-06, 2e-06, 8e-06, 4.3e-05, + 2e-06, 2e-06, 3.3e-05, 0.000581, 2.4e-05, 3e-06, 2e-06, 2e-06, + 2e-06, 2e-06, 0.000154, 6e-06, 2e-06, 2e-06, 2e-06, 0.000242, + 1.4e-05, 3e-06, 6.600000000000001e-05, 9e-06, 0.00015, 6.8e-05, + 2e-05, 0.000135, 6.7e-05, 1.3e-05, 0.000447, 6.3e-05, 6e-06, + 0.000211, 5e-06, 0.000197, 0.000266, 1.8e-05, 1.8e-05, 0.000206, + 5.2e-05, 1e-05, 0.070046, 1.1e-05, 0.844631, 1.999285, 0.37526, + 0.269128, 0.000144, 0.428814, 0.000377, 2e-05, 0.000132, 0.000335, + 0.000146, 0.00032, 0.00014, 0.000315, 9.000000000000001e-05, + 0.000326, 7.8e-05, 0.000348, 0.000138, 0.000309, 0.000191, 0.000269, + 9.2e-05, 0.000228, 8.1e-05, 0.000333, 0.000478, 0.000208, 0.000122, + 0.000251, 0.000158, 6e-06, 3e-06, 2e-06, 2e-06, 3.7e-05, 0.000592, + 0.000243, 0.026904, 0.000156, 0.000307, 0.000234, 1.1e-05, 5.5e-05, + 0.000566, 0.032068, 0.000263, 5.9e-05, 4.3e-05, 4.5e-05, 4.2e-05, + 4.2e-05, 4e-05, 0.000202, 0.000138, 3.5e-05, 2.2e-05, 3e-05, + 0.000149, 0.000149, 3e-05, 5.4e-05, 0.000164, 2.8e-05, 0.000127, + 0.03696, 0.019837, 0.00032, 0.000252, 0.016369, 0.000222, 0.000284, + 0.000233, 0.000254, 0.00022, 0.000266, 0.000239, 0.000251, 0.000192, + 0.000192, 0.037031, 1.7e-05, 0.116766, 0.192277, 0.435377, 0.091586, + 3.1e-05, 0.000373, 1.9e-05, 1e-05, 2e-06, 0.000261, 1.4e-05, + 0.280014, 0.023348, 3.2e-05, 2.9e-05, 0.000314, 2.2e-05, 1.2e-05, + 2e-06, 0.000253, 1.7e-05, 0.975979, 0.62699, 0.37293, + 0.9999749999999999, 0.626341, 0.492913, 0.014529, 0.570348, + 0.076026, 0.235104, 0.003504, 0.606799, 0.126116, 0.99708, 0.306968, + 0.005815, 0.563343, 0.123881, 0.303074, 0.697012, 0.303014, + 0.075444, 0.000103, 0.496756, 0.124502, 0.303213, + 0.06970899999999999, 0.6271060000000001, 0.303057, 0.571645, + 0.428396, 1.129816, 0.441094, 1.216598, 0.184097, 0.598553, + 1.762639, 0.000133, 0.236455, 0.700106, 0.025727, 0.876292, + 0.003488, 0.124494, 0.00356, 0.265654, 0.031362, 0.997795, + 0.9701149999999999, 0.029865, 0.913193, 0.000163, + 0.08662400000000001, 0.969381, 0.030588, 1.000004, 0.968747, + 1.999191, 0.181717, 0.003031, 0.476371, 0.000189, 0.498117, + 0.001757, 0.094473, 0.070796, 0.257284, 0.415613, 0.324319, + 0.103689, 3e-05, 0.000304, 1.9e-05, 1.3e-05, 1e-06, + 0.09349499999999999, 2.2e-05, 0.042766, 0.496198, 0.263337, + 0.138729, 0.028411, 0.088029, 0.031219, 0.388701, 0.324931, + 0.266295, 0.268827, 0.235355, 0.105707, 1.7e-05, 0.123881, 0.381654, + 0.076361, 0.09857399999999999, 0.11765, 0.07213, 0.144328, 0.047985, + 0.061286, 0.019094, 0.083081, 0.000315, 1.3e-05, 0.171753, 0.072075, + 0.152366, 0.031976, 0.46934, 0.197771, 0.036378 }; +#endif //TEST_FUNCTIONS + +}; + +#endif /* DATAPROCESSOR_H_ */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/9e/204b400fa2b500161808a5c64fd2084a b/.metadata/.plugins/org.eclipse.core.resources/.history/9e/204b400fa2b500161808a5c64fd2084a new file mode 100644 index 0000000..336916c --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/9e/204b400fa2b500161808a5c64fd2084a @@ -0,0 +1,105 @@ +/* + * ConstantsDeinition.h + * + * Created on: 4 de jul de 2016 + * Author: apaschoalon + */ + +#ifndef DEFINES_H_ +#define DEFINES_H_ + +// Debug defines +//#define DEBUG 1 // basic debug +//#define DEBUG_DataProcessor_calculate_loop 1 +//#define DEBUG_DataProcessor_calculate 1 +//#define DEBUG_NetworkFlow 1 +//#define DEBUG_flowThread 1 +//#define DEBUG_DatabaseInterface 1 +//#define DEBUG_NetworkTrace_exec 1 + + +//Math +#define MEGA_POWER 1000000 + +//Protocol code +typedef unsigned short int protocol_code; +#define IPV4_CODE 2048 +#define ARP_CODE 2054 +#define ARP_CODE_REV 2056 +#define IPV6_CODE 34525 +#define ICMP_CODE 1 +#define TCP_CODE 6 +#define UDP_CODE 17 +#define DCCP_CODE 33 +#define GRE_CODE 47 +#define ICMPV6_CODE 58 +#define SCTP_CODE 132 + +//Protocols +typedef unsigned short int protocol; +#define PROTOCOL__NULL 0 +#define PROTOCOL__ETHERNET 1 +#define PROTOCOL__IPV4 2 +#define PROTOCOL__IPV6 3 +#define PROTOCOL__ARP 4 +#define PROTOCOL__ICMP 5 +#define PROTOCOL__ICMPV6 6 +#define PROTOCOL__TCP 7 +#define PROTOCOL__UDP 8 +#define PROTOCOL__DCCP 9 +#define PROTOCOL__GRE 10 +#define PROTOCOL__SCTP 11 +#define PROTOCOL__HTTP 12 +#define PROTOCOL__HTML 13 +#define PROTOCOL__SMTP 14 + +//Stochastic models +typedef unsigned short int stochastic_model; +#define WEIBULL "weibull" +#define NORMAL "normal" +#define EXPONENTIAL_MEAN "exponential-mean" +#define EXPONENTIAL_LINEAR_REGRESSION "exponential-linear-regression" +#define PARETO_LINEAR_REGRESSION "pareto-linear-regression" +#define PARETO_MAXIMUM_LIKEHOOD "pareto-maximum-likehood" +#define CAUCHY "cauchy" +#define CONSTANT "constant" +#define NO_MODEL "no-model-selected" + + +//packet analysis features +const double FILE_CUT_TIME = 0.1; +const double SESSION_CUT_TIME = 30; +const int PACKET_SIZE_MODE_CUT_VALUE = 500; + +/* +#define MODEL__NULL 0 +#define MODEL__BIMODAL_CONSTANT_CONSTANT 1 +#define MODEL__BIMODAL_CONSTANT_WEIBULL 3 +//#define MODEL__BIMODAL_NORMAL_CONSTANT 4 +//#define MODEL__BIMODAL_NORMAL_NORMAL 5 +//#define MODEL__BIMODAL_NORMAL_WEIBULL 6 +#define MODEL__BIMODAL_WEIBULL_CONSTANT 7 +//#define MODEL__BIMODAL_WEIBULL_NORMAL 8 +#define MODEL__BIMODAL_WEIBULL_WEIBULL 9 +#define MODEL__CONSTANT 10 +#define MODEL__NORMAL 11 +#define MODEL__PARETO 12 +#define MODEL__WEIBULL 13 +#define MODEL__GAMMA 14 +#define MODEL__EXPONENTIAL 15 +#define MODEL__UNIFORM 16 +#define MODEL__CAUCHY 17 +#define MODEL__POISSON 18 +*/ + +//Miscellaneous +//typedef string ip_addr; +typedef int port_number; +#define HLINE "----------" +#define TAB "::" +#define MAX_TRANSPORT_PORT_NUMBER 65535 + +//Debug +#define TEST_FUNCTIONS 1 + +#endif /* DEFINES_H_ */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/a4/003017118cb500161808a5c64fd2084a b/.metadata/.plugins/org.eclipse.core.resources/.history/a4/003017118cb500161808a5c64fd2084a new file mode 100644 index 0000000..66ea0fa --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/a4/003017118cb500161808a5c64fd2084a @@ -0,0 +1,1909 @@ +/* + * DataProcessor.cpp + * + * Created on: 14 de jun de 2016 + * Author: apaschoalon + */ + +#include "DataProcessor.h" + +DataProcessor::DataProcessor() +{ + //nothing to do at all +} + +DataProcessor::~DataProcessor() +{ + //nothing to do at all +} + +string DataProcessor::toString(void) +{ + string dataProcessor; + + dataProcessor = + "Used to calculate parameters of network flows; has no state."; + + return (dataProcessor); +} + +int DataProcessor::calculate(const string& experimentName, + DatabaseInterface* databaseInterface, NetworkTrace* netTrace) +{ + + //iterator variables + long int fcounter = 0; + long int nflows = 0; + databaseInterface->getNumberOfFlows(experimentName, &nflows); + +#ifdef DEBUG_DataProcessor_calculate + cout << "DataProcessor::calculate() -> Number of flows = " << nflows << endl; +#endif // DEBUG_DataProcessor_calculate + + //protocol variables + string flowStrData = ""; + long int flowIntData = 0; + double startDalay = 0; //time of the fist packet of the flow + double flowDuration = 0; //duration of the flow + list ttlList; + int ttl = 0; + + //flow-level variables + list relativeTime; //time relative to the 1st packet list + long int nKbytes = 0; //Number of kbytes (bytes/1024) of the + + //packetSize variables + list pslist; //packet-size list + long int ps_mostFrequent = 0; + double mean_packetRate = 0; + + //inter-deperture time variables + StochasticModelFit* modelVet = NULL; + list interArrival_list; // list of inter arrival times of a flow + double lastTime = 0; + double idt = 0; + + for (fcounter = 0; fcounter < nflows; fcounter++) + { + + //new network flow + NetworkFlow* netFlow = NetworkFlow::make_flow("dummy"); + + //TODO checar valor retornado de databaseInterface + + //reset temp vars + flowStrData = ""; + flowIntData = 0; + relativeTime.clear(); + pslist.clear(); + interArrival_list.clear(); + + //load packet-size data + databaseInterface->getFlowData(experimentName, fcounter, "frame__len", + pslist); + + //laod time-relative data + databaseInterface->getFlowData(experimentName, fcounter, + "frame__time_relative", relativeTime); + + //evaluate inter-arrival data + //time relative to the begin of the measurement + lastTime = 0; + for (list::iterator it = relativeTime.begin(); + it != relativeTime.end(); it++) + { + idt = *it - lastTime; + interArrival_list.push_back(idt); + lastTime = *it; + } + + //###################################################################### + //Flow-level Options + //###################################################################### + startDalay = relativeTime.front(); + netFlow->setFlowStartDelay(startDalay); + + flowDuration = relativeTime.back() - relativeTime.front(); + netFlow->setFlowDuration(flowDuration); + + //TODO DS byte configuration -- now it is just set to zero + netFlow->setFlowDsByte(0); + + //flow kbytes + for (list::iterator it = pslist.begin(); it != pslist.end(); + it++) + { + nKbytes = nKbytes + *it; + } + nKbytes = nKbytes / 1024; + + netFlow->setNumberOfKbytes(nKbytes); + netFlow->setNumberOfPackets(relativeTime.size()); + + //###################################################################### + //Protocol Options + //###################################################################### + + // + //L3 protocols + //reference http://www.iana.org/assignments/ieee-802-numbers/ieee-802-numbers.xhtml + // + + databaseInterface->getFlowData(experimentName, fcounter, "eth__type", + &flowIntData); + if (flowIntData == IPV4_CODE) + { //IPv4 + netFlow->setNetworkProtocol(PROTOCOL__IPV4); + databaseInterface->getFlowData(experimentName, fcounter, "ip__src", + &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, "ip__dst", + &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + else if (flowIntData == (ARP_CODE || ARP_CODE_REV)) + { //ARP, Frame Relay ARP + netFlow->setNetworkProtocol(PROTOCOL__ARP); + databaseInterface->getFlowData(experimentName, fcounter, "ip__src", + &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, "ip__dst", + &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + else if (flowIntData == IPV6_CODE) + { //IPv6 + netFlow->setNetworkProtocol(PROTOCOL__ICMPV6); + databaseInterface->getFlowData(experimentName, fcounter, + "ipv6__addr", &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, + "ipv6__dst", &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + else + { //default IPv4 + netFlow->setNetworkProtocol(PROTOCOL__IPV4); + databaseInterface->getFlowData(experimentName, fcounter, "ip__src", + &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, "ip__dst", + &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + + //set ttl as the most frequent + databaseInterface->getFlowData(experimentName, fcounter, "ip__ttl", + ttlList); + //ttl = (int) mode(ttlList); + ttl = (int) mode(&ttlList); + netFlow->setNetworkTtl(ttl); + + // + //L4 Protocols + //reference https://en.wikipedia.org/wiki/List_of_IP_protocol_numbers + // + databaseInterface->getFlowData(experimentName, fcounter, "ip__proto", + &flowIntData); + if (flowIntData == ICMP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__ICMP); + } + else if (flowIntData == TCP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__TCP); + databaseInterface->getFlowData(experimentName, fcounter, + "tcp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "tcp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else if (flowIntData == UDP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__UDP); + databaseInterface->getFlowData(experimentName, fcounter, + "udp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "udp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else if (flowIntData == DCCP_CODE) + { + netFlow->setTransportDstPort(PROTOCOL__DCCP); + databaseInterface->getFlowData(experimentName, fcounter, + "dccp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "dccp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else if (flowIntData == GRE_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__GRE); + //TODO não suportado pelo D-ITG + } + else if (flowIntData == ICMPV6_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__ICMPV6); + } + else if (flowIntData == SCTP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__SCTP); + databaseInterface->getFlowData(experimentName, fcounter, + "sctp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "sctp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else + { //default: UDP + netFlow->setTransportProtocol(PROTOCOL__NULL); + //databaseInterface->getFlowData(experimentName, fcounter, "udp__dstport", &flowIntData); + //netFlow->setL4SrcPort(flowIntData); + //databaseInterface->getFlowData(experimentName, fcounter, "udp__srcport", &flowIntData); + //netFlow->setL4DstPort(flowIntData); + } + + //###################################################################### + //Packet Size Model + //###################################################################### + + // + // Constant model: Just set the packet size as the most frequent value + // + //ps_mostFrequent = mode(pslist); + //ps_mostFrequent = mode(&pslist); + //mean_packetRate = ((double) pslist.size() / flowDuration); + //netFlow->setPsConstant(ps_mostFrequent); + //netFlow->setIdtConstant(mean_packetRate); + + // + // Algorithm to choose the priority order of the models + // 1st version: just the constant model + // + //TODO implement a best algorithm + //netFlow->setPsModel1(MODEL__CONSTANT); + + //###################################################################### + //Inter-arrival-time Model + //###################################################################### + netFlow->setInterDepertureTimeModels( + fitModels(interArrival_list, "aic")); + + //TODO set the right model + + //netFlow->setIdtModel1(MODEL__CONSTANT); + + //TODO + + //TODO + + //###################################################################### + //Push-back the flow to Trace Flow-list + //###################################################################### + + netTrace->pushback_Netflow(netFlow); + +#ifdef DEBUG_DataProcessor_calculate_loop + cout << fcounter << ": ps_mostFrequent=" << ps_mostFrequent << endl; + cout << fcounter << ": startDalay=" << startDalay << endl; + cout << fcounter << ": mean_packetRate=" << mean_packetRate << endl; + cout << fcounter << ": idt_constant=" << netFlow->getIdtConstant() << endl; +#endif //DEBUG_DataProcessor_calculate_loop +#ifdef DEBUG_DataProcessor_calculate_loop + cout << fcounter << ": netFlow->getTransportProtocol() = " << netFlow->getTransportProtocol() << endl; + cout << fcounter << ": netFlow->getNetworkProtocol() = " << netFlow->getNetworkProtocol() << endl; + cout << fcounter << ": netFlow->getTransportDstPort() = " << netFlow->getTransportDstPort() << endl; + cout << fcounter << ": netFlow->getFlowDsByte() = " << netFlow->getFlowDsByte() << endl; + cout << fcounter << ": netFlow->getNetworkDstAddr() = " << netFlow->getNetworkDstAddr() << endl << endl; + +#endif //DEBUG_DataProcessor_calculate_loop + + } + +#ifdef DEBUG_DataProcessor_calculate + cout << "netTrace->networkFlow.size() = " << netTrace->networkFlow.size() << endl; + cout << "netTrace->getNumberOfFlows() = " << netTrace->getNumberOfFlows() << endl; +#endif //DEBUG_DataProcessor_calculate + + return (0); +} + +StochasticModelFit* DataProcessor::fitModels(list& empiricalData, + const string& criterion) +{ + //constants + const int numberOfModels = 8; + const int m = empiricalData.size(); //empirical data-size + //vars + int counter = 0; + StochasticModelFit* modelVet = NULL; + vec paramVec = zeros(2); + vec infoCriterion = zeros(2); + + modelVet = new StochasticModelFit[numberOfModels]; + + //Inter-arrival vec + vec interArrival = zeros(m); + counter = 0; + for (list::iterator it = empiricalData.begin(); + it != empiricalData.end(); it++) + { + interArrival(counter) = *it + min_time; + counter++; + } + //Empirical CDF of interArrival + vec* interArrivalCdf = empiricalCdf(empiricalData); + + //Weibull + weibullFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[0].aic = infoCriterion(0); + modelVet[0].bic = infoCriterion(1); + modelVet[0].modelName = WEIBULL; + modelVet[0].param1 = paramVec(0); + modelVet[0].param2 = paramVec(1); + modelVet[0].size = numberOfModels; + + //normal + normalFitting(interArrival, paramVec, infoCriterion); + modelVet[1].aic = infoCriterion(0); + modelVet[1].bic = infoCriterion(1); + modelVet[1].modelName = NORMAL; + modelVet[1].param1 = paramVec(0); + modelVet[1].param2 = paramVec(1); + modelVet[1].size = numberOfModels; + + //exponential mean + exponentialMeFitting(interArrival, paramVec, infoCriterion); + modelVet[2].aic = infoCriterion(0); + modelVet[2].bic = infoCriterion(1); + modelVet[2].modelName = EXPONENTIAL_MEAN; + modelVet[2].param1 = paramVec(0); + modelVet[2].param2 = paramVec(1); + modelVet[2].size = numberOfModels; + + //exponential Linear Regression (LR) + exponentialLrFitting(interArrival, *interArrivalCdf, paramVec, + infoCriterion); + modelVet[3].aic = infoCriterion(0); + modelVet[3].bic = infoCriterion(1); + modelVet[3].modelName = EXPONENTIAL_LINEAR_REGRESSION; + modelVet[3].param1 = paramVec(0); + modelVet[3].param2 = paramVec(1); + modelVet[3].size = numberOfModels; + + //pareto linear regression + paretoLrFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[4].aic = infoCriterion(0); + modelVet[4].bic = infoCriterion(1); + modelVet[4].modelName = PARETO_LINEAR_REGRESSION; + modelVet[4].param1 = paramVec(0); + modelVet[4].param2 = paramVec(1); + modelVet[4].size = numberOfModels; + + //pareto maximum likehood + paretoMlhFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[5].aic = infoCriterion(0); + modelVet[5].bic = infoCriterion(1); + modelVet[5].modelName = PARETO_MAXIMUM_LIKEHOOD; + modelVet[5].param1 = paramVec(0); + modelVet[5].param2 = paramVec(1); + modelVet[5].size = numberOfModels; + + //Cauchy + cauchyFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[6].aic = infoCriterion(0); + modelVet[6].bic = infoCriterion(1); + modelVet[6].modelName = CAUCHY; + modelVet[6].param1 = paramVec(0); + modelVet[6].param2 = paramVec(1); + modelVet[6].size = numberOfModels; + + //Constant + constantFitting(interArrival, paramVec, infoCriterion); + modelVet[7].aic = infoCriterion(0); + modelVet[7].bic = infoCriterion(1); + modelVet[7].modelName = CONSTANT; + modelVet[7].param1 = paramVec(0); + modelVet[7].param2 = paramVec(1); + modelVet[7].size = numberOfModels; + + if (criterion == "bic") + { + qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), compareBic); + } + else if (criterion == "aic") + { + qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), compareAic); + } + else + { + cout + << "Error @ DataProcessor::fitModels -> Invalid criterion argument: " + << criterion << endl; + cout << "AIC set as default" << endl; + qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), compareAic); + + } + +#ifdef DEBUG_StochasticModelFit + //if (modelVet[0].modelName == WEIBULL) + //{ + // cout << modelVet[0].modelName << "aic:bic->" << modelVet[0].aic << ":" << modelVet[0].bic + // << " " << "alpha:betha->" << modelVet[0].param1 + // << modelVet[0].param2 << endl; + // string fileName = "weibulldata_" + std::to_string(abs(modelVet[0].aic)); + // save_data_on_file(fileName, interArrival, *interArrivalCdf); + //} +#endif DEBUG_StochasticModelFit + + delete interArrivalCdf; + + return (modelVet); +} + +inline void DataProcessor::weibullFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //init + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + //linearization + vec y = log(-log(1.0 + diferential - interArrivalCdf)); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double weibull_alpha = theta(1); + double weibull_betha = exp(-theta(0) / theta(1)); + paramVec(0) = weibull_alpha; + paramVec(1) = weibull_betha; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "weibull", paramVec, "aic"); + double bic = informationCriterion(interArrival, "weibull", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; + +} + +inline void DataProcessor::normalFitting(const vec& interArrival, vec& paramVec, + vec& infoCriterion) +{ + double sigma = stddev(interArrival); + double mu = mean(interArrival); + paramVec(0) = mu; + paramVec(1) = sigma; + + //information criterion + double aic = informationCriterion(interArrival, "normal", paramVec, "aic"); + double bic = informationCriterion(interArrival, "normal", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::exponentialLrFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //init + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + //linearization + vec y = log(1.00 + diferential - interArrivalCdf); + //vec y = log(1.00 - interArrivalCdf); + vec x = interArrival; + mat* X = featureMatrix(x); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double exp_lambda = -theta(1); + paramVec(0) = exp_lambda; + paramVec(1) = 0; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "exponential", paramVec, + "aic"); + double bic = informationCriterion(interArrival, "exponential", paramVec, + "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::exponentialMeFitting(const vec& interArrival, + vec& paramVec, vec& infoCriterion) +{ + paramVec(0) = 1.0 / mean(interArrival); + paramVec(1) = 0; + + //information criterion + double aic = informationCriterion(interArrival, "exponential", paramVec, + "aic"); + double bic = informationCriterion(interArrival, "exponential", paramVec, + "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::paretoLrFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //init + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + //linearization + vec y = log(1.00 + diferential - interArrivalCdf); + //vec y = log(1.00 - interArrivalCdf); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double pareto_alpha = -theta(1); + double pareto_xm = interArrival.min(); + paramVec(0) = pareto_alpha; + paramVec(1) = pareto_xm; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "pareto", paramVec, "aic"); + double bic = informationCriterion(interArrival, "pareto", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::paretoMlhFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + double pareto_xm = interArrival.min(); + int m = interArrival.size(); + //vec logDiff = log(interArrival) - log(ones(m) * pareto_xm); + vec logDiff = log(interArrival) - log(pareto_xm); + double pareto_alpha = double(m) / (sum(logDiff)); + paramVec(0) = pareto_alpha; + paramVec(1) = pareto_xm; + + //information criterion + double aic = informationCriterion(interArrival, "pareto", paramVec, "aic"); + double bic = informationCriterion(interArrival, "pareto", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::cauchyFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //initialization + int iterations = 1500; + double learning_rate = 0.01; + int m = interArrival.size(); + double minInterArrival = interArrival.min(); + double y_max = 1.0 / minInterArrival; + vec y = tan(datum::pi * (interArrivalCdf - 0.5)); + for (int i = 0; i < m; i++) + { + //avoid too high numbers when tan() tends to infinity + if (y(i) > y_max) + y(i) = y_max; + } + + //linearization + vec J_history = zeros(iterations); + vec theta = zeros(2); + mat* X = featureMatrix(interArrival); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double cauchy_gamma = double(1.0) / theta(1); + double cauchy_x0 = -theta(0) / theta(1); + paramVec(0) = cauchy_gamma; + paramVec(1) = cauchy_x0; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "cauchy", paramVec, "aic"); + double bic = informationCriterion(interArrival, "cauchy", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; + +} + +void DataProcessor::constantFitting(const vec& interArrival, vec& paramVec, + vec& informationCriterion) +{ + paramVec(0) = mean(interArrival); + paramVec(1) = 0; + informationCriterion(0) = datum::inf; + informationCriterion(1) = datum::inf; +} + +template bool DataProcessor::isEqual(const T* vet1, const T* vet2, + const int size) +{ + for (int i = 0; i < size; i++) + { + if (vet1[i] != vet2[i]) + { + return (false); + } + } + + return (true); +} + +template void DataProcessor::vectorC_to_list(list* theList, + T* vet, int size) +{ + for (int i = 0; i < size; i++) + { + theList->push_back(vet[i]); + } +} + +template +void DataProcessor::quickSort(T* vet, int left, int right) +{ + int p = left; + int i = 0; + T ch = 0; + int j = 0; + + for (i = left + 1; i <= right; i++) + { + j = i; + if (vet[j] < vet[p]) + { + ch = vet[j]; + while (j > p) + { + vet[j] = vet[j - 1]; + j--; + } + vet[j] = ch; + p++; + } + } + if (p - 1 >= left) + quickSort(vet, left, p - 1); + if (p + 1 <= right) + quickSort(vet, p + 1, right); +} + +template +T DataProcessor::mode(list* theList) +{ + T* vet; + int listSize = theList->size(); + int i = 0; + T candidate = 0; + T prev = 0; + int counter = 0; + int largerCounter = 0; + T mode = 0; + vet = new T[listSize]; + + if (listSize == 0) + { + return (0); + } + + i = 0; + + for (typename list::iterator it = theList->begin(); it != theList->end(); + it++) + { + vet[i] = *it; + i++; + } + + quickSort(vet, 0, listSize - 1); + + prev = vet[0]; + largerCounter = 0; + for (i = 0; i < listSize; i++) + { + candidate = vet[i]; + if (candidate == prev) + { + counter++; + if (counter > largerCounter) + { + largerCounter = counter; + mode = vet[i]; + } + } + else + counter = 1; + + prev = vet[i]; + } + + delete[] vet; + + return (mode); +} + +template +inline T* DataProcessor::list_to_cvector(list* theList) +{ + int listSize = theList->size(); + T* vet; + int i = 0; + + vet = new T[listSize]; + if (listSize == 0) + { + return (0); + } + + i = 0; + for (typename list::iterator it = theList->begin(); it != theList->end(); + it++) + { + vet[i] = *it; + i++; + } + + return (vet); +} +template +inline void DataProcessor::delete_cvector(T* c_vet) +{ + delete[] c_vet; +} + +inline vec* DataProcessor::empiricalCdf(list& empiricalData) +{ + double* cvet_empiricalData = list_to_cvector(&empiricalData); + int data_size = empiricalData.size(); + quickSort(cvet_empiricalData, 0, data_size - 1); + double x = cvet_empiricalData[0]; // anchor - fist element; + int i1 = 0; // fist index + int i2 = 0; + double prob = 0; + vec* interArrivalCdf = new vec(zeros(data_size)); + + for (int i = 0; i < data_size; i++) + { + if (cvet_empiricalData[i] > x) + { + i2 = i - 1; + prob = double(i) / data_size; + for (int j = i1; j <= i2; j++) + { + (*interArrivalCdf)(j) = prob; + } + i1 = i; + x = cvet_empiricalData[i]; + } + } + //last position == 1 + (*interArrivalCdf)(data_size - 1) = 1; + + delete_cvector(cvet_empiricalData); + return (interArrivalCdf); +} + +inline mat* DataProcessor::featureMatrix(list& empiricalData) +{ + int data_size = empiricalData.size(); + mat* featureMatrix = new mat(ones(data_size, 2)); + + int i = 0; + for (list::iterator it = empiricalData.begin(); + it != empiricalData.end(); it++) + { + (*featureMatrix)(i, 1) = *it; + i++; + } + + return (featureMatrix); + +} + +inline mat* DataProcessor::featureMatrix(const vec& empiricalData) +{ + int data_size = empiricalData.size(); + mat* featureMatrix = new mat(ones(data_size, 2)); + for (int i = 0; i < data_size; i++) + { + (*featureMatrix)(i, 1) = empiricalData(i); + } + + return (featureMatrix); +} + +inline double DataProcessor::computeCost(const mat& X, const vec& y, + const vec& theta) +{ + double J = .0; + double jtemp = .0; + int m = y.size(); + + for (int i = 0; i < m; i++) + { + jtemp = jtemp + pow(double(theta(0) + theta(1) * X(i, 1) - y(i)), 2); + + } + J = (1.0 / double(2 * m)) * jtemp; + + return (J); +} + +inline void DataProcessor::gradientDescendent(const mat& X, const vec& y, + const double learning_rate, const int num_iters, vec& theta, + vec& J_history) +{ + + int m = y.n_rows; //number of training examples + double temp1 = .0; + double temp2 = .0; + double delta1 = .0; + double delta2 = .0; + vec x = X.col(1); + + for (int i = 0; i < num_iters; i++) + { + temp1 = .0; + temp2 = .0; + delta1 = .0; + delta2 = .0; + + //slope + delta1 = sum(theta(0) + theta(1) * x - y) / double(m); + delta2 = sum((theta(0) + theta(1) * x - y) % x) / double(m); + + //linear regression + temp1 = theta(0) - learning_rate * delta1; + temp2 = theta(1) - learning_rate * delta2; + + theta(0) = temp1; + theta(1) = temp2; + + //Save the cost J in every iteration + J_history(i) = computeCost(X, y, theta); + + } + +} + +inline double DataProcessor::informationCriterion(const vec& data, + const string& functionName, const vec& paramVet, + const string& criterion) +{ + double criterionVal = .0; + double nEstimatedParameters = double(paramVet.size()); + double likehoodLogVal = logLikehood(data, functionName, paramVet); + double logDataLen = log(double(data.size())); + + if (criterion == "aic") + { + criterionVal = 2 * nEstimatedParameters - 2 * likehoodLogVal; + } + else if (criterion == "bic") + { + criterionVal = nEstimatedParameters * logDataLen - 2 * likehoodLogVal; + } + else + { + cout << "\nInvalid functionName or no functionName selected: " + << functionName << endl; + printf("Selecting default criterion: AIC\n"); + criterionVal = 2 * nEstimatedParameters - 2 * likehoodLogVal; + } + + return (criterionVal); + +} + +inline double DataProcessor::logLikehood(const vec& data, + const string& functionName, const vec& paramVet) +{ + double param1 = paramVet(0); + double param2 = paramVet(1); + double m = data.size(); + double L = .0; + int i = 0; + vec data_prob = zeros(size(data)); + + if (functionName == "weibull") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_weibull(data(i), param1, param2); + } + else if (functionName == "normal") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_normal(data(i), param1, param2); + } + else if (functionName == "uniform") + { + data_prob = ones(size(data)) * pdf_uniform(param1, param2); + } + else if (functionName == "exponential") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_exponential(data(i), param1); + } + else if (functionName == "pareto") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_pareto(data(i), param1, param2); + } + else if (functionName == "cauchy") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_cauchy(data(i), param1, param2); + } + else + { + cout << "Warning, no valid stochastic function selected: " + << functionName << endl; + printf("Likehood logarithm seted to -Inf (worst as possible)\n"); + return (datum::inf); + } + + L = sum(log(data_prob)); + return (L); + +} + +inline double DataProcessor::pdf_weibull(double x, double alpha, double betha) +{ + if (x >= 0) + return ((alpha / pow(betha, alpha)) * pow(x, alpha - 1.0) + * exp(-(pow(x / betha, alpha)))); + else + return (.0); +} + +inline double DataProcessor::cdf_weibull(double x, double alpha, double betha) +{ + if (x >= 0) + return (1.0 - exp(-pow(x / betha, alpha))); + else + return (.0); +} + +inline double DataProcessor::pdf_exponential(double x, double lambda) +{ + if (x >= 0) + return (lambda * exp(-lambda * x)); + else + return (.0); + +} + +inline double DataProcessor::cdf_exponential(double x, double lambda) +{ + if (x >= 0) + return (1.0 - exp(-lambda * x)); + else + return (.0); +} + +inline double DataProcessor::pdf_pareto(double x, double alpha, double xm) +{ + if (x >= xm) + return (alpha * pow(xm, alpha) / (pow(x, alpha + 1.0))); + else + return (.0); +} + +inline double DataProcessor::cdf_pareto(double x, double alpha, double xm) +{ + if (x >= xm) + return (1.0 - pow(xm / x, alpha)); + else + return (.0); +} + +inline double DataProcessor::pdf_cauchy(double x, double gamma, double x0) +{ + return (1 / (datum::pi * gamma) + * (pow(gamma, 2) / (pow(x - x0, 2) + pow(gamma, 2)))); +} + +inline double DataProcessor::cdf_cauchy(double x, double gamma, double x0) +{ + return ((1 / datum::pi) * atan((x - x0) / (gamma)) + 0.5); +} + +inline double DataProcessor::pdf_normal(double x, double mu, double sigma) +{ + return (1 / (sqrt(2 * datum::pi) * sigma) + * exp(-0.5 * pow((x - mu) / sigma, 2))); +} + +inline double DataProcessor::cdf_normal(double x, double mu, double sigma) +{ + return (0.5 * (1 + erf((x - mu) / (sigma * sqrt(2))))); +} + +inline double DataProcessor::pdf_uniform(double x_min, double x_max) +{ + return (1.0 / (x_max - x_min)); +} + +inline double DataProcessor::cdf_uniform(double x, double x_min, double x_max) +{ + if (x < x_min) + return (0); + else if (x > x_max) + return (1); + else + return ((x - x_min) / (x_max - x_min)); +} + +#ifdef TEST_FUNCTIONS + +void DataProcessor::printTestResult(string testName, bool result) +{ + string outRes; + if (result == true) + outRes = "ok"; + else + outRes = "failed"; + + cout << testName << ":\t\t" << outRes << endl; +} + +bool DataProcessor::compareDouble(double val1, double val2) +{ + double error = 0; + + error = fabs(double(val1) - double(val2)); + if (error > double(1e-5)) + return (false); + else + return (true); + +} + +bool DataProcessor::compareDouble(double val1, double val2, double acErr) +{ + double error = 0; + + error = fabs(double(val1) - double(val2)); + if (error > double(acErr)) + return (false); + else + return (true); + +} + +bool DataProcessor::compareMat(mat& mat1, mat& mat2) +{ + int mat1_nc = mat1.n_cols; + int mat1_nr = mat1.n_rows; + int mat2_nc = mat2.n_cols; + int mat2_nr = mat2.n_rows; + + if ((mat1_nc != mat2_nc) || (mat1_nr != mat2_nr)) + { + cout << "mat1.n_cols and mat2.n_cols dont match. " << mat1_nc << ":" + << mat2_nc << " " << mat1_nr << ":" << mat2_nr << endl; + return (false); + } + for (int i = 0; i < mat1_nr; i++) + { + for (int j = 0; j < mat1_nc; j++) + { + if (compareDouble(mat1(i, j), mat2(i, j), 1e-5)) + { + //cout << " mat1(" << i << ", " << j << " ) = " << mat1(i,j); + //cout << " mat2(" << i << ", " << j << " ) = " << mat2(i,j); + return (false); + } + } + } + + return (true); +} + +void DataProcessor::save_data_on_file(const string& fileName, const mat& vet1, + const mat& vet2) +{ + string file_out = fileName + ".txt"; + int m = vet1.size(); + + ofstream writeOnFile(file_out, ios::out); + if (!writeOnFile) + { + cerr << "file could not be oppeded" << endl; + exit(1); + } + + for (int i = 0; i < m; i++) + { + writeOnFile << vet1(i) << " " << vet2(i) << endl; + } + +} + +template +void DataProcessor::save_data_on_file(const string& fileName, list theList) +{ + string file_out = fileName + ".txt"; + int m = theList.size(); + + ofstream writeOnFile(file_out, ios::out); + if (!writeOnFile) + { + cerr << "file could not be oppeded" << endl; + exit(1); + } + + for (list::iterator it = theList.begin(); it!= theList.end(); it++) + { + //list::iterator it = randInt_list1.begin(); + writeOnFile << *it << " \n"; + } +} + +bool DataProcessor::test_Mode() +{ + + int randint1[] = + { 1, 8, 1, 13, 9, 2, 1, 15, 4, 3, 10, 4, 13, 2, 14, 7, 7 }; + int randint1_mode = 1; + list l_randint1; + vectorC_to_list(&l_randint1, randint1, 17); + + int randint2[] = + { 5, 3, 6, 8, 14, 9, 11, 9, 11, 15, 8, 7, 12, 13, 14 }; + int randint2_mode = 8; + list l_randint2; + vectorC_to_list(&l_randint2, randint2, 15); + + int randint3[] = + { 9, 10, 6, 3, 13, 13, 14, 7, 7, 1, 5, 1, 8, 5, 9, 2, 3, 4, 5, 6, 6, 6 }; + int randint3_mode = 6; + list l_randint3; + vectorC_to_list(&l_randint3, randint3, 22); + + int randint4[] = + { 2, 1 }; + int randint4_mode = 1; + list l_randint4; + vectorC_to_list(&l_randint4, randint4, 2); + + int randint5[] = + { 1, 1, 1, 1, 1, 2, 2, 2, 2, 2 }; + int randint5_mode = 1; + list l_randint5; + vectorC_to_list(&l_randint5, randint5, 10); + + if (mode(&l_randint1) != randint1_mode) + return (false); + if (mode(&l_randint2) != randint2_mode) + return (false); + if (mode(&l_randint3) != randint3_mode) + return (false); + if (mode(&l_randint4) != randint4_mode) + return (false); + if (mode(&l_randint5) != randint5_mode) + return (false); + + return (true); +} + +bool DataProcessor::test_QuickSort() +{ + int randIntA[] = + { 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; + int randIntA_size = 18; + int randIntA_sorted[] = + { 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9 }; + int randIntB[] = + { 9, 2, 3, 3, 12, 15, 8, 14, 2, 7, 4, 6, 10, 2, 12 }; + int randIntB_size = 15; + int randIntB_sorted[] = + { 2, 2, 2, 3, 3, 4, 6, 7, 8, 9, 10, 12, 12, 14, 15 }; + double randDoubleA[] = + { 0.20872, 12.25501, 5.88210, 2.77962, 8.74916, 2.97454, 4.39641, 12.19733, + 4.66014, 4.52477, 5.19375, 12.11314, 13.35458, 11.56941, 6.59435 }; + int randDoubleA_size = 15; + double randDoubleA_sorted[] = + { 0.20872, 2.77962, 2.97454, 4.39641, 4.52477, 4.66014, 5.19375, 5.88210, + 6.59435, 8.74916, 11.56941, 12.11314, 12.19733, 12.25501, 13.35458 }; + + quickSort(randIntA, 0, randIntA_size - 1); + + if (isEqual(randIntA, randIntA_sorted, randIntA_size) == false) + { + return (false); + } + + quickSort(randIntB, 0, randIntB_size - 1); + if (isEqual(randIntB, randIntB_sorted, randIntB_size) == false) + { + return (false); + } + + quickSort(randDoubleA, 0, randDoubleA_size - 1); + if (isEqual(randDoubleA, randDoubleA_sorted, randDoubleA_size) == false) + { + return (false); + } + + return (true); + +} + +bool DataProcessor::test_list_tocvector() +{ + list randInt_list1 = + { 9, 2, 3, 3, 12, 15, 8, 14, 2, 7, 4, 6, 10, 2, 12 }; + list randInt_list2 = + { 2.2, 2.111, 3.16, 6.66, 13, 2.61 }; + list randInt_list3 = + { 1, 2, 3, 4, 5, 6, 6, 5, 4, 3, 2, 1 }; + + int* cvet1 = NULL; + double* cvet2 = NULL; + int* cvet3 = NULL; + + cvet1 = list_to_cvector(&randInt_list1); + cvet2 = list_to_cvector(&randInt_list2); + cvet3 = list_to_cvector(&randInt_list3); + + int i = 0; + for (list::iterator it = randInt_list1.begin(); + it != randInt_list1.end(); it++) + { + if (cvet1[i] != *it) + { + return (false); + } + //cout << *it << " "; + i++; + } + i = 0; + for (list::iterator it = randInt_list2.begin(); + it != randInt_list2.end(); it++) + { + if (cvet2[i] != *it) + { + return (false); + } + //cout << *it << " "; + i++; + } + i = 0; + for (list::iterator it = randInt_list3.begin(); + it != randInt_list3.end(); it++) + { + if (cvet3[i] != *it) + { + return (false); + } + //cout << *it << " "; + i++; + } + + delete_cvector(cvet1); + delete_cvector(cvet2); + delete_cvector(cvet3); + + return (true); +} + +bool DataProcessor::test_empiricalCdf() +{ + list interArrival_sample = + { 5.0000e-07, 1.5000e-06, 1.5000e-06, 2.5000e-06, 2.5000e-06, 3.5000e-06, + 4.5000e-06, 7.5000e-06, 1.2500e-05, 1.9500e-05, 3.1500e-05, + 4.3500e-05, 6.0500e-05, 7.6500e-05, 1.1050e-04, 1.4050e-04, + 1.8150e-04, 2.1150e-04, 2.3350e-04, 2.4350e-04, 2.5650e-04, + 3.0350e-04, 4.1250e-04, 1.3655e-03, 1.1593e-02, 3.2483e-02, + 8.1235e-02, 2.0939e-01, 5.0755e-01, 1.7351e+00 }; + vec emCdf_octave = + { 0.033333, 0.100000, 0.100000, 0.166667, 0.166667, 0.200000, 0.233333, + 0.266667, 0.300000, 0.333333, 0.366667, 0.400000, 0.433333, + 0.466667, 0.500000, 0.533333, 0.566667, 0.600000, 0.633333, + 0.666667, 0.700000, 0.733333, 0.766667, 0.800000, 0.833333, + 0.866667, 0.900000, 0.933333, 0.966667, 1.000000 }; + //emCdf_octave = emCdf_octave.t(); + + vec* emCdf_cpp = empiricalCdf(interArrival_sample); + + int list_size = interArrival_sample.size(); + for (int i = 0; i < list_size; i++) + { + if (!compareDouble(emCdf_octave(i), (*emCdf_cpp)(i), 1e-6)) + { + cout << "cdf error @ " << "i:" << i << " res:" << (*emCdf_cpp)(i, 0) + << " expected:" << emCdf_octave(i, 0) << endl; + return (false); + } + } + + delete emCdf_cpp; + return (true); +} + +bool DataProcessor::test_computeCost() +{ + list interArrival_sample = + { 5.0000e-07, 1.5000e-06, 1.5000e-06, 2.5000e-06, 2.5000e-06, 3.5000e-06, + 4.5000e-06, 7.5000e-06, 1.2500e-05, 1.9500e-05, 3.1500e-05, + 4.3500e-05, 6.0500e-05, 7.6500e-05, 1.1050e-04, 1.4050e-04, + 1.8150e-04, 2.1150e-04, 2.3350e-04, 2.4350e-04, 2.5650e-04, + 3.0350e-04, 4.1250e-04, 1.3655e-03, 1.1593e-02, 3.2483e-02, + 8.1235e-02, 2.0939e-01, 5.0755e-01, 1.7351e+00 }; + mat* X = featureMatrix(interArrival_sample); + vec emCdf_octave = + { 0.033333, 0.100000, 0.100000, 0.166667, 0.166667, 0.200000, 0.233333, + 0.266667, 0.300000, 0.333333, 0.366667, 0.400000, 0.433333, + 0.466667, 0.500000, 0.533333, 0.566667, 0.600000, 0.633333, + 0.666667, 0.700000, 0.733333, 0.766667, 0.800000, 0.833333, + 0.866667, 0.900000, 0.933333, 0.966667, 1.000000 }; + //emCdf_octave = emCdf_octave.t(); + double J_expected1 = 0.17535; + double J_expected2 = 1.5341; + double J_expected3 = 9.0244; + + vec theta = zeros(2); + + double J = computeCost(*X, emCdf_octave, theta); + if (!compareDouble(J, J_expected1, 0.001)) + { + //cout << "J1 = " << J << "\nJ_expected1 = "<< J_expected1 << endl; + return (false); + } + theta(0) = 2; + theta(1) = 2; + J = computeCost(*X, emCdf_octave, theta); + if (!compareDouble(J, J_expected2, 0.001)) + { + //cout << "J2 = " << J << "\nJ_expected2 = "<< J_expected2 << endl; + return (false); + } + theta(0) = 1.5; + theta(1) = 12; + J = computeCost(*X, emCdf_octave, theta); + if (!compareDouble(J, J_expected3, 0.001)) + { + //cout << "J3 = " << J << "\nJ_expected3 = "<< J_expected3 << endl; + return (false); + } + + delete X; + return (true); +} + +bool DataProcessor::test_informationCriterion() +{ + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + + int m = interArrival.size(); + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + //gradient descendent + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + vec y = log(-log(1.0 + diferential - *interArrivalCdf)); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + double weibull_alpha = theta(1); + double weibull_betha = exp(-theta(0) / theta(1)); + vec paramVec = + { weibull_alpha, weibull_betha }; + double weibull_bic = informationCriterion(interArrival, "weibull", paramVec, + "bic"); + double weibull_aic = informationCriterion(interArrival, "weibull", paramVec, + "aic"); + + if (!compareDouble(weibull_bic, -33712.7042, 0.001)) + return (false); + else if (!compareDouble(weibull_aic, -33724.6567, 0.001)) + return (false); + + return (true); +} + +bool DataProcessor::test_pdf_weibull() +{ + double alpha = 1.5000; + double betha = 0.3; + vec data = + { 0.010000, 2.300000, 0.500000 }; + vec dataprob_eval1 = + { 9.0733e-01, 8.3571e-09, 7.5066e-01 }; + vec dataprob_test = zeros(3); + + dataprob_test(0) = pdf_weibull(data(0), alpha, betha); + dataprob_test(1) = pdf_weibull(data(1), alpha, betha); + dataprob_test(2) = pdf_weibull(data(2), alpha, betha); + + if (compareDouble(dataprob_test(0), dataprob_eval1(0)) + && compareDouble(dataprob_test(1), dataprob_eval1(1)) + && compareDouble(dataprob_test(2), dataprob_eval1(2))) + { + return (true); + } + + return (false); +} + +bool DataProcessor::test_cdf_weibull() +{ + double alpha = 0.5; + double betha = 1.5; + vec data = + { 0.010000, 2.300000, 0.500000 }; + vec dataprob_eval1 = + { 0.078405, 0.710117, 0.438616 }; + vec dataprob_test = zeros(3); + + dataprob_test(0) = cdf_weibull(data(0), alpha, betha); + dataprob_test(1) = cdf_weibull(data(1), alpha, betha); + dataprob_test(2) = cdf_weibull(data(2), alpha, betha); + //cout << dataprob_test(0) << " : " << dataprob_test(1) << " : " << dataprob_test(2) << endl; + + if (compareDouble(dataprob_test(0), dataprob_eval1(0)) + && compareDouble(dataprob_test(1), dataprob_eval1(1)) + && compareDouble(dataprob_test(2), dataprob_eval1(2))) + { + return (true); + } + + return (false); +} + +bool DataProcessor::test_gradientDescendent() +{ + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + + int m = interArrival.size(); + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + //gradient descendent + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + vec y = log(-log(1.0 + diferential - *interArrivalCdf)); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //expected values + double Jlast = 0.083359; + double theta0 = 1.660453; + double theta1 = 0.248811; + + if (!compareDouble(J_history(iterations - 1), Jlast)) + + { + return (false); + } + else if (!compareDouble(theta(0), theta0)) + { + return (false); + } + else if (!compareDouble(theta(1), theta1)) + { + return (false); + } + + delete interArrivalCdf; + delete X; + return (true); + +} + +bool DataProcessor::test_pdf_exponential() +{ + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double lambda1 = 0.50000; + vec val1 = + { 0.49751, 0.15832, 0.38940 }; + vec res1 = zeros(3); + + double lambda2 = 3.0; + vec val2 = + { 2.9113366, 0.0030234, 0.6693905 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = pdf_exponential(data(i), lambda1); + res2(i) = pdf_exponential(data(i), lambda2); + + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + + } + + return (true); +} + +bool DataProcessor::test_cdf_exponential() +{ + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double lambda1 = 0.50000; + vec val1 = + { 0.0049875, 0.6833632, 0.2211992 }; + vec res1 = zeros(3); + + double lambda2 = 3.0; + vec val2 = + { 0.029554, 0.998992, 0.776870 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = cdf_exponential(data(i), lambda1); + res2(i) = cdf_exponential(data(i), lambda2); + + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + + return (true); +} + +bool DataProcessor::test_pdf_pareto() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double alpha1 = 0.50000; + double xm1 = 1.0; + vec val1 = + { 0, 0.14334, 0 }; + vec res1 = zeros(3); + double xm2 = 0.00001; + double alpha2 = 3.0; + vec val2 = + { 3.0000e-07, 1.0720e-16, 4.8000e-14 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = pdf_pareto(data(i), alpha1, xm1); + res2(i) = pdf_pareto(data(i), alpha2, xm2); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + + return (true); +} + +bool DataProcessor::test_cdf_pareto() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double alpha1 = 0.50000; + double xm1 = 0.001; + vec val1 = + { 0.68377, 0.97915, 0.95528 }; + vec res1 = zeros(3); + double xm2 = 0.2; + double alpha2 = 1; + vec val2 = + { 0, 0.91304, 0.60000 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = cdf_pareto(data(i), alpha1, xm1); + res2(i) = cdf_pareto(data(i), alpha2, xm2); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + return (true); +} + +bool DataProcessor::test_pdf_cauchy() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + double gamma1 = 0.50000; + double x01 = 0.001; + + vec val1 = + { 0.636414, 0.028752, 0.318947 }; + vec res1 = zeros(3); + double x02 = 2; + double gamma2 = 2; + + vec val2 = + { 0.079976, 0.155653, 0.101859 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = pdf_cauchy(data(i), gamma1, x01); + res2(i) = pdf_cauchy(data(i), gamma2, x02); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + return (true); +} + +bool DataProcessor::test_cdf_cauchy() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + double gamma1 = 0.50000; + double x01 = 0.001; + + vec val1 = + { 0.50573, 0.93183, 0.74968 }; + vec res1 = zeros(3); + double x02 = 2; + double gamma2 = 2; + + vec val2 = + { 0.25080, 0.54739, 0.29517 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = cdf_cauchy(data(i), gamma1, x01); + res2(i) = cdf_cauchy(data(i), gamma2, x02); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + return (true); +} + +bool DataProcessor::test_fitModels() +{ + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + + int m = interArrival.size(); + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + //list of expected values + double weibull_alpha = 0.24881; + double weibull_betha = 0.0012639; + double normal_mu = 0.054792; + double normal_sigma = 0.205602; + double exponentialMe_lambda = 18.250783; + double exponentialLr_lambda = 2.023115; + double paretoLr_alpha = 0.225451; + double paretoLr_xm = 0.000000; + double paretoMlh_alpha = 0.171674; + double paretoMlh_xm = 0.000000; + double cauchy_gamma = 0.000067; + double cauchy_x0 = 0.005750; + double acErr = 0.001; + + vec paramVec = zeros(2); + vec infoCriterion = zeros(2); + + weibullFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), weibull_alpha, acErr)) + { + cout << "weibullFitting alpha" << endl; + return (false); + } + if (!compareDouble(paramVec(1), weibull_betha, acErr)) + { + cout << "weibullFitting betha" << endl; + return (false); + } + + normalFitting(interArrival, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), normal_mu, acErr)) + { + cout << "normalFitting mu" << endl; + return (false); + } + if (!compareDouble(paramVec(1), normal_sigma, acErr)) + { + cout << "normalFitting sigma" << endl; + return (false); + } + + exponentialMeFitting(interArrival, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), exponentialMe_lambda, acErr)) + { + cout << "exponentialLrFitting lambda" << endl; + return (false); + } + + exponentialLrFitting(interArrival, *interArrivalCdf, paramVec, + infoCriterion); + if (!compareDouble(paramVec(0), exponentialLr_lambda, acErr)) + { + cout << exponentialLr_lambda << ":" << paramVec(0) << endl; + cout << "exponentialLrFitting lambda" << endl; + return (false); + } + + paretoLrFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), paretoLr_alpha, acErr)) + { + cout << "paretoLrFitting alpha" << endl; + return (false); + } + if (!compareDouble(paramVec(1), paretoLr_xm, acErr)) + { + cout << "paretoLrFitting xm" << endl; + return (false); + } + + paretoMlhFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), paretoMlh_alpha, acErr)) + { + cout << "paretoMlhFitting alpha" << endl; + return (false); + } + if (!compareDouble(paramVec(1), paretoMlh_xm, acErr)) + { + cout << "paretoMlhFitting xm" << endl; + return (false); + } + + cauchyFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), cauchy_gamma, acErr)) + { + cout << "cauchyFitting" << endl; + return (false); + } + if (!compareDouble(paramVec(1), cauchy_x0, acErr)) + { + return (false); + } + + delete interArrivalCdf; + + return (true); +} + +bool DataProcessor::test_modelSelection() +{ + + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + int m = interArrival.size(); + + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + StochasticModelFit* modelVet = NULL; + modelVet = fitModels(list_interArrival, "aic"); + + //int numberOfModels = modelVet[0].size; + //for (int i = 0; i < numberOfModels; i++) + // cout << modelVet[i].modelName << " " << "modelVet[" << i << "] = " + // << modelVet[i].aic << endl; + + delete interArrivalCdf; + delete[] modelVet; + return (true); +} + +#endif //TEST_FUNCTIONS diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/a5/b0a10b008cb500161808a5c64fd2084a b/.metadata/.plugins/org.eclipse.core.resources/.history/a5/b0a10b008cb500161808a5c64fd2084a new file mode 100644 index 0000000..72cfb1b --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/a5/b0a10b008cb500161808a5c64fd2084a @@ -0,0 +1,1909 @@ +/* + * DataProcessor.cpp + * + * Created on: 14 de jun de 2016 + * Author: apaschoalon + */ + +#include "DataProcessor.h" + +DataProcessor::DataProcessor() +{ + //nothing to do at all +} + +DataProcessor::~DataProcessor() +{ + //nothing to do at all +} + +string DataProcessor::toString(void) +{ + string dataProcessor; + + dataProcessor = + "Used to calculate parameters of network flows; has no state."; + + return (dataProcessor); +} + +int DataProcessor::calculate(const string& experimentName, + DatabaseInterface* databaseInterface, NetworkTrace* netTrace) +{ + + //iterator variables + long int fcounter = 0; + long int nflows = 0; + databaseInterface->getNumberOfFlows(experimentName, &nflows); + +#ifdef DEBUG_DataProcessor_calculate + cout << "DataProcessor::calculate() -> Number of flows = " << nflows << endl; +#endif // DEBUG_DataProcessor_calculate + + //protocol variables + string flowStrData = ""; + long int flowIntData = 0; + double startDalay = 0; //time of the fist packet of the flow + double flowDuration = 0; //duration of the flow + list ttlList; + int ttl = 0; + + //flow-level variables + list relativeTime; //time relative to the 1st packet list + long int nKbytes = 0; //Number of kbytes (bytes/1024) of the + + //packetSize variables + list pslist; //packet-size list + long int ps_mostFrequent = 0; + double mean_packetRate = 0; + + //inter-deperture time variables + StochasticModelFit* modelVet = NULL; + list interArrival_list; // list of inter arrival times of a flow + double lastTime = 0; + double idt = 0; + + for (fcounter = 0; fcounter < nflows; fcounter++) + { + + //new network flow + NetworkFlow* netFlow = NetworkFlow::make_flow("dummy"); + + //TODO checar valor retornado de databaseInterface + + //reset temp vars + flowStrData = ""; + flowIntData = 0; + relativeTime.clear(); + pslist.clear(); + interArrival_list.clear(); + + //load packet-size data + databaseInterface->getFlowData(experimentName, fcounter, "frame__len", + pslist); + + //laod time-relative data + databaseInterface->getFlowData(experimentName, fcounter, + "frame__time_relative", relativeTime); + + //evaluate inter-arrival data + //time relative to the begin of the measurement + lastTime = 0; + for (list::iterator it = relativeTime.begin(); + it != relativeTime.end(); it++) + { + idt = *it - lastTime; + interArrival_list.push_back(idt); + lastTime = *it; + } + + //###################################################################### + //Flow-level Options + //###################################################################### + startDalay = relativeTime.front(); + netFlow->setFlowStartDelay(startDalay); + + flowDuration = relativeTime.back() - relativeTime.front(); + netFlow->setFlowDuration(flowDuration); + + //TODO DS byte configuration -- now it is just set to zero + netFlow->setFlowDsByte(0); + + //flow kbytes + for (list::iterator it = pslist.begin(); it != pslist.end(); + it++) + { + nKbytes = nKbytes + *it; + } + nKbytes = nKbytes / 1024; + + netFlow->setNumberOfKbytes(nKbytes); + netFlow->setNumberOfPackets(relativeTime.size()); + + //###################################################################### + //Protocol Options + //###################################################################### + + // + //L3 protocols + //reference http://www.iana.org/assignments/ieee-802-numbers/ieee-802-numbers.xhtml + // + + databaseInterface->getFlowData(experimentName, fcounter, "eth__type", + &flowIntData); + if (flowIntData == IPV4_CODE) + { //IPv4 + netFlow->setNetworkProtocol(PROTOCOL__IPV4); + databaseInterface->getFlowData(experimentName, fcounter, "ip__src", + &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, "ip__dst", + &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + else if (flowIntData == (ARP_CODE || ARP_CODE_REV)) + { //ARP, Frame Relay ARP + netFlow->setNetworkProtocol(PROTOCOL__ARP); + databaseInterface->getFlowData(experimentName, fcounter, "ip__src", + &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, "ip__dst", + &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + else if (flowIntData == IPV6_CODE) + { //IPv6 + netFlow->setNetworkProtocol(PROTOCOL__ICMPV6); + databaseInterface->getFlowData(experimentName, fcounter, + "ipv6__addr", &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, + "ipv6__dst", &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + else + { //default IPv4 + netFlow->setNetworkProtocol(PROTOCOL__IPV4); + databaseInterface->getFlowData(experimentName, fcounter, "ip__src", + &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, "ip__dst", + &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + + //set ttl as the most frequent + databaseInterface->getFlowData(experimentName, fcounter, "ip__ttl", + ttlList); + //ttl = (int) mode(ttlList); + ttl = (int) mode(&ttlList); + netFlow->setNetworkTtl(ttl); + + // + //L4 Protocols + //reference https://en.wikipedia.org/wiki/List_of_IP_protocol_numbers + // + databaseInterface->getFlowData(experimentName, fcounter, "ip__proto", + &flowIntData); + if (flowIntData == ICMP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__ICMP); + } + else if (flowIntData == TCP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__TCP); + databaseInterface->getFlowData(experimentName, fcounter, + "tcp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "tcp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else if (flowIntData == UDP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__UDP); + databaseInterface->getFlowData(experimentName, fcounter, + "udp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "udp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else if (flowIntData == DCCP_CODE) + { + netFlow->setTransportDstPort(PROTOCOL__DCCP); + databaseInterface->getFlowData(experimentName, fcounter, + "dccp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "dccp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else if (flowIntData == GRE_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__GRE); + //TODO não suportado pelo D-ITG + } + else if (flowIntData == ICMPV6_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__ICMPV6); + } + else if (flowIntData == SCTP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__SCTP); + databaseInterface->getFlowData(experimentName, fcounter, + "sctp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "sctp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else + { //default: UDP + netFlow->setTransportProtocol(PROTOCOL__NULL); + //databaseInterface->getFlowData(experimentName, fcounter, "udp__dstport", &flowIntData); + //netFlow->setL4SrcPort(flowIntData); + //databaseInterface->getFlowData(experimentName, fcounter, "udp__srcport", &flowIntData); + //netFlow->setL4DstPort(flowIntData); + } + + //###################################################################### + //Packet Size Model + //###################################################################### + + // + // Constant model: Just set the packet size as the most frequent value + // + //ps_mostFrequent = mode(pslist); + //ps_mostFrequent = mode(&pslist); + //mean_packetRate = ((double) pslist.size() / flowDuration); + //netFlow->setPsConstant(ps_mostFrequent); + //netFlow->setIdtConstant(mean_packetRate); + + // + // Algorithm to choose the priority order of the models + // 1st version: just the constant model + // + //TODO implement a best algorithm + //netFlow->setPsModel1(MODEL__CONSTANT); + + //###################################################################### + //Inter-arrival-time Model + //###################################################################### + netFlow->setInterDepertureTimeModels( + fitModels(interArrival_list, "aic")); + + //TODO set the right model + + //netFlow->setIdtModel1(MODEL__CONSTANT); + + //TODO + + //TODO + + //###################################################################### + //Push-back the flow to Trace Flow-list + //###################################################################### + + netTrace->pushback_Netflow(netFlow); + +#ifdef DEBUG_DataProcessor_calculate_loop + cout << fcounter << ": ps_mostFrequent=" << ps_mostFrequent << endl; + cout << fcounter << ": startDalay=" << startDalay << endl; + cout << fcounter << ": mean_packetRate=" << mean_packetRate << endl; + cout << fcounter << ": idt_constant=" << netFlow->getIdtConstant() << endl; +#endif //DEBUG_DataProcessor_calculate_loop +#ifdef DEBUG_DataProcessor_calculate_loop + cout << fcounter << ": netFlow->getTransportProtocol() = " << netFlow->getTransportProtocol() << endl; + cout << fcounter << ": netFlow->getNetworkProtocol() = " << netFlow->getNetworkProtocol() << endl; + cout << fcounter << ": netFlow->getTransportDstPort() = " << netFlow->getTransportDstPort() << endl; + cout << fcounter << ": netFlow->getFlowDsByte() = " << netFlow->getFlowDsByte() << endl; + cout << fcounter << ": netFlow->getNetworkDstAddr() = " << netFlow->getNetworkDstAddr() << endl << endl; + +#endif //DEBUG_DataProcessor_calculate_loop + + } + +#ifdef DEBUG_DataProcessor_calculate + cout << "netTrace->networkFlow.size() = " << netTrace->networkFlow.size() << endl; + cout << "netTrace->getNumberOfFlows() = " << netTrace->getNumberOfFlows() << endl; +#endif //DEBUG_DataProcessor_calculate + + return (0); +} + +StochasticModelFit* DataProcessor::fitModels(list& empiricalData, + const string& criterion) +{ + //constants + const int numberOfModels = 8; + const int m = empiricalData.size(); //empirical data-size + //vars + int counter = 0; + StochasticModelFit* modelVet = NULL; + vec paramVec = zeros(2); + vec infoCriterion = zeros(2); + + modelVet = new StochasticModelFit[numberOfModels]; + + //Inter-arrival vec + vec interArrival = zeros(m); + counter = 0; + for (list::iterator it = empiricalData.begin(); + it != empiricalData.end(); it++) + { + interArrival(counter) = *it + min_time; + counter++; + } + //Empirical CDF of interArrival + vec* interArrivalCdf = empiricalCdf(empiricalData); + + //Weibull + weibullFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[0].aic = infoCriterion(0); + modelVet[0].bic = infoCriterion(1); + modelVet[0].modelName = WEIBULL; + modelVet[0].param1 = paramVec(0); + modelVet[0].param2 = paramVec(1); + modelVet[0].size = numberOfModels; + + //normal + normalFitting(interArrival, paramVec, infoCriterion); + modelVet[1].aic = infoCriterion(0); + modelVet[1].bic = infoCriterion(1); + modelVet[1].modelName = NORMAL; + modelVet[1].param1 = paramVec(0); + modelVet[1].param2 = paramVec(1); + modelVet[1].size = numberOfModels; + + //exponential mean + exponentialMeFitting(interArrival, paramVec, infoCriterion); + modelVet[2].aic = infoCriterion(0); + modelVet[2].bic = infoCriterion(1); + modelVet[2].modelName = EXPONENTIAL_MEAN; + modelVet[2].param1 = paramVec(0); + modelVet[2].param2 = paramVec(1); + modelVet[2].size = numberOfModels; + + //exponential Linear Regression (LR) + exponentialLrFitting(interArrival, *interArrivalCdf, paramVec, + infoCriterion); + modelVet[3].aic = infoCriterion(0); + modelVet[3].bic = infoCriterion(1); + modelVet[3].modelName = EXPONENTIAL_LINEAR_REGRESSION; + modelVet[3].param1 = paramVec(0); + modelVet[3].param2 = paramVec(1); + modelVet[3].size = numberOfModels; + + //pareto linear regression + paretoLrFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[4].aic = infoCriterion(0); + modelVet[4].bic = infoCriterion(1); + modelVet[4].modelName = PARETO_LINEAR_REGRESSION; + modelVet[4].param1 = paramVec(0); + modelVet[4].param2 = paramVec(1); + modelVet[4].size = numberOfModels; + + //pareto maximum likehood + paretoMlhFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[5].aic = infoCriterion(0); + modelVet[5].bic = infoCriterion(1); + modelVet[5].modelName = PARETO_MAXIMUM_LIKEHOOD; + modelVet[5].param1 = paramVec(0); + modelVet[5].param2 = paramVec(1); + modelVet[5].size = numberOfModels; + + //Cauchy + cauchyFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[6].aic = infoCriterion(0); + modelVet[6].bic = infoCriterion(1); + modelVet[6].modelName = CAUCHY; + modelVet[6].param1 = paramVec(0); + modelVet[6].param2 = paramVec(1); + modelVet[6].size = numberOfModels; + + //Constant + constantFitting(interArrival, paramVec, infoCriterion); + modelVet[7].aic = infoCriterion(0); + modelVet[7].bic = infoCriterion(1); + modelVet[7].modelName = CONSTANT; + modelVet[7].param1 = paramVec(0); + modelVet[7].param2 = paramVec(1); + modelVet[7].size = numberOfModels; + + if (criterion == "bic") + { + qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), compareBic); + } + else if (criterion == "aic") + { + qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), compareAic); + } + else + { + cout + << "Error @ DataProcessor::fitModels -> Invalid criterion argument: " + << criterion << endl; + cout << "AIC set as default" << endl; + qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), compareAic); + + } + +#ifdef DEBUG_StochasticModelFit + //if (modelVet[0].modelName == WEIBULL) + //{ + // cout << modelVet[0].modelName << "aic:bic->" << modelVet[0].aic << ":" << modelVet[0].bic + // << " " << "alpha:betha->" << modelVet[0].param1 + // << modelVet[0].param2 << endl; + // string fileName = "weibulldata_" + std::to_string(abs(modelVet[0].aic)); + // save_data_on_file(fileName, interArrival, *interArrivalCdf); + //} +#endif DEBUG_StochasticModelFit + + delete interArrivalCdf; + + return (modelVet); +} + +inline void DataProcessor::weibullFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //init + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + //linearization + vec y = log(-log(1.0 + diferential - interArrivalCdf)); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double weibull_alpha = theta(1); + double weibull_betha = exp(-theta(0) / theta(1)); + paramVec(0) = weibull_alpha; + paramVec(1) = weibull_betha; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "weibull", paramVec, "aic"); + double bic = informationCriterion(interArrival, "weibull", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; + +} + +inline void DataProcessor::normalFitting(const vec& interArrival, vec& paramVec, + vec& infoCriterion) +{ + double sigma = stddev(interArrival); + double mu = mean(interArrival); + paramVec(0) = mu; + paramVec(1) = sigma; + + //information criterion + double aic = informationCriterion(interArrival, "normal", paramVec, "aic"); + double bic = informationCriterion(interArrival, "normal", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::exponentialLrFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //init + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + //linearization + vec y = log(1.00 + diferential - interArrivalCdf); + //vec y = log(1.00 - interArrivalCdf); + vec x = interArrival; + mat* X = featureMatrix(x); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double exp_lambda = -theta(1); + paramVec(0) = exp_lambda; + paramVec(1) = 0; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "exponential", paramVec, + "aic"); + double bic = informationCriterion(interArrival, "exponential", paramVec, + "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::exponentialMeFitting(const vec& interArrival, + vec& paramVec, vec& infoCriterion) +{ + paramVec(0) = 1.0 / mean(interArrival); + paramVec(1) = 0; + + //information criterion + double aic = informationCriterion(interArrival, "exponential", paramVec, + "aic"); + double bic = informationCriterion(interArrival, "exponential", paramVec, + "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::paretoLrFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //init + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + //linearization + vec y = log(1.00 + diferential - interArrivalCdf); + //vec y = log(1.00 - interArrivalCdf); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double pareto_alpha = -theta(1); + double pareto_xm = interArrival.min(); + paramVec(0) = pareto_alpha; + paramVec(1) = pareto_xm; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "pareto", paramVec, "aic"); + double bic = informationCriterion(interArrival, "pareto", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::paretoMlhFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + double pareto_xm = interArrival.min(); + int m = interArrival.size(); + //vec logDiff = log(interArrival) - log(ones(m) * pareto_xm); + vec logDiff = log(interArrival) - log(pareto_xm); + double pareto_alpha = double(m) / (sum(logDiff)); + paramVec(0) = pareto_alpha; + paramVec(1) = pareto_xm; + + //information criterion + double aic = informationCriterion(interArrival, "pareto", paramVec, "aic"); + double bic = informationCriterion(interArrival, "pareto", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::cauchyFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //initialization + int iterations = 1500; + double learning_rate = 0.01; + int m = interArrival.size(); + double minInterArrival = interArrival.min(); + double y_max = 1.0 / minInterArrival; + vec y = tan(datum::pi * (interArrivalCdf - 0.5)); + for (int i = 0; i < m; i++) + { + //avoid too high numbers when tan() tends to infinity + if (y(i) > y_max) + y(i) = y_max; + } + + //linearization + vec J_history = zeros(iterations); + vec theta = zeros(2); + mat* X = featureMatrix(interArrival); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double cauchy_gamma = double(1.0) / theta(1); + double cauchy_x0 = -theta(0) / theta(1); + paramVec(0) = cauchy_gamma; + paramVec(1) = cauchy_x0; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "cauchy", paramVec, "aic"); + double bic = informationCriterion(interArrival, "cauchy", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; + +} + +void DataProcessor::constantFitting(const vec& interArrival, vec& paramVec, + vec& informationCriterion) +{ + paramVec(0) = mean(interArrival); + paramVec(1) = 0; + informationCriterion(0) = datum::inf; + informationCriterion(1) = datum::inf; +} + +template bool DataProcessor::isEqual(const T* vet1, const T* vet2, + const int size) +{ + for (int i = 0; i < size; i++) + { + if (vet1[i] != vet2[i]) + { + return (false); + } + } + + return (true); +} + +template void DataProcessor::vectorC_to_list(list* theList, + T* vet, int size) +{ + for (int i = 0; i < size; i++) + { + theList->push_back(vet[i]); + } +} + +template +void DataProcessor::quickSort(T* vet, int left, int right) +{ + int p = left; + int i = 0; + T ch = 0; + int j = 0; + + for (i = left + 1; i <= right; i++) + { + j = i; + if (vet[j] < vet[p]) + { + ch = vet[j]; + while (j > p) + { + vet[j] = vet[j - 1]; + j--; + } + vet[j] = ch; + p++; + } + } + if (p - 1 >= left) + quickSort(vet, left, p - 1); + if (p + 1 <= right) + quickSort(vet, p + 1, right); +} + +template +T DataProcessor::mode(list* theList) +{ + T* vet; + int listSize = theList->size(); + int i = 0; + T candidate = 0; + T prev = 0; + int counter = 0; + int largerCounter = 0; + T mode = 0; + vet = new T[listSize]; + + if (listSize == 0) + { + return (0); + } + + i = 0; + + for (typename list::iterator it = theList->begin(); it != theList->end(); + it++) + { + vet[i] = *it; + i++; + } + + quickSort(vet, 0, listSize - 1); + + prev = vet[0]; + largerCounter = 0; + for (i = 0; i < listSize; i++) + { + candidate = vet[i]; + if (candidate == prev) + { + counter++; + if (counter > largerCounter) + { + largerCounter = counter; + mode = vet[i]; + } + } + else + counter = 1; + + prev = vet[i]; + } + + delete[] vet; + + return (mode); +} + +template +inline T* DataProcessor::list_to_cvector(list* theList) +{ + int listSize = theList->size(); + T* vet; + int i = 0; + + vet = new T[listSize]; + if (listSize == 0) + { + return (0); + } + + i = 0; + for (typename list::iterator it = theList->begin(); it != theList->end(); + it++) + { + vet[i] = *it; + i++; + } + + return (vet); +} +template +inline void DataProcessor::delete_cvector(T* c_vet) +{ + delete[] c_vet; +} + +inline vec* DataProcessor::empiricalCdf(list& empiricalData) +{ + double* cvet_empiricalData = list_to_cvector(&empiricalData); + int data_size = empiricalData.size(); + quickSort(cvet_empiricalData, 0, data_size - 1); + double x = cvet_empiricalData[0]; // anchor - fist element; + int i1 = 0; // fist index + int i2 = 0; + double prob = 0; + vec* interArrivalCdf = new vec(zeros(data_size)); + + for (int i = 0; i < data_size; i++) + { + if (cvet_empiricalData[i] > x) + { + i2 = i - 1; + prob = double(i) / data_size; + for (int j = i1; j <= i2; j++) + { + (*interArrivalCdf)(j) = prob; + } + i1 = i; + x = cvet_empiricalData[i]; + } + } + //last position == 1 + (*interArrivalCdf)(data_size - 1) = 1; + + delete_cvector(cvet_empiricalData); + return (interArrivalCdf); +} + +inline mat* DataProcessor::featureMatrix(list& empiricalData) +{ + int data_size = empiricalData.size(); + mat* featureMatrix = new mat(ones(data_size, 2)); + + int i = 0; + for (list::iterator it = empiricalData.begin(); + it != empiricalData.end(); it++) + { + (*featureMatrix)(i, 1) = *it; + i++; + } + + return (featureMatrix); + +} + +inline mat* DataProcessor::featureMatrix(const vec& empiricalData) +{ + int data_size = empiricalData.size(); + mat* featureMatrix = new mat(ones(data_size, 2)); + for (int i = 0; i < data_size; i++) + { + (*featureMatrix)(i, 1) = empiricalData(i); + } + + return (featureMatrix); +} + +inline double DataProcessor::computeCost(const mat& X, const vec& y, + const vec& theta) +{ + double J = .0; + double jtemp = .0; + int m = y.size(); + + for (int i = 0; i < m; i++) + { + jtemp = jtemp + pow(double(theta(0) + theta(1) * X(i, 1) - y(i)), 2); + + } + J = (1.0 / double(2 * m)) * jtemp; + + return (J); +} + +inline void DataProcessor::gradientDescendent(const mat& X, const vec& y, + const double learning_rate, const int num_iters, vec& theta, + vec& J_history) +{ + + int m = y.n_rows; //number of training examples + double temp1 = .0; + double temp2 = .0; + double delta1 = .0; + double delta2 = .0; + vec x = X.col(1); + + for (int i = 0; i < num_iters; i++) + { + temp1 = .0; + temp2 = .0; + delta1 = .0; + delta2 = .0; + + //slope + delta1 = sum(theta(0) + theta(1) * x - y) / double(m); + delta2 = sum((theta(0) + theta(1) * x - y) % x) / double(m); + + //linear regression + temp1 = theta(0) - learning_rate * delta1; + temp2 = theta(1) - learning_rate * delta2; + + theta(0) = temp1; + theta(1) = temp2; + + //Save the cost J in every iteration + J_history(i) = computeCost(X, y, theta); + + } + +} + +inline double DataProcessor::informationCriterion(const vec& data, + const string& functionName, const vec& paramVet, + const string& criterion) +{ + double criterionVal = .0; + double nEstimatedParameters = double(paramVet.size()); + double likehoodLogVal = logLikehood(data, functionName, paramVet); + double logDataLen = log(double(data.size())); + + if (criterion == "aic") + { + criterionVal = 2 * nEstimatedParameters - 2 * likehoodLogVal; + } + else if (criterion == "bic") + { + criterionVal = nEstimatedParameters * logDataLen - 2 * likehoodLogVal; + } + else + { + cout << "\nInvalid functionName or no functionName selected: " + << functionName << endl; + printf("Selecting default criterion: AIC\n"); + criterionVal = 2 * nEstimatedParameters - 2 * likehoodLogVal; + } + + return (criterionVal); + +} + +inline double DataProcessor::logLikehood(const vec& data, + const string& functionName, const vec& paramVet) +{ + double param1 = paramVet(0); + double param2 = paramVet(1); + double m = data.size(); + double L = .0; + int i = 0; + vec data_prob = zeros(size(data)); + + if (functionName == "weibull") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_weibull(data(i), param1, param2); + } + else if (functionName == "normal") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_normal(data(i), param1, param2); + } + else if (functionName == "uniform") + { + data_prob = ones(size(data)) * pdf_uniform(param1, param2); + } + else if (functionName == "exponential") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_exponential(data(i), param1); + } + else if (functionName == "pareto") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_pareto(data(i), param1, param2); + } + else if (functionName == "cauchy") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_cauchy(data(i), param1, param2); + } + else + { + cout << "Warning, no valid stochastic function selected: " + << functionName << endl; + printf("Likehood logarithm seted to -Inf (worst as possible)\n"); + return (datum::inf); + } + + L = sum(log(data_prob)); + return (L); + +} + +inline double DataProcessor::pdf_weibull(double x, double alpha, double betha) +{ + if (x >= 0) + return ((alpha / pow(betha, alpha)) * pow(x, alpha - 1.0) + * exp(-(pow(x / betha, alpha)))); + else + return (.0); +} + +inline double DataProcessor::cdf_weibull(double x, double alpha, double betha) +{ + if (x >= 0) + return (1.0 - exp(-pow(x / betha, alpha))); + else + return (.0); +} + +inline double DataProcessor::pdf_exponential(double x, double lambda) +{ + if (x >= 0) + return (lambda * exp(-lambda * x)); + else + return (.0); + +} + +inline double DataProcessor::cdf_exponential(double x, double lambda) +{ + if (x >= 0) + return (1.0 - exp(-lambda * x)); + else + return (.0); +} + +inline double DataProcessor::pdf_pareto(double x, double alpha, double xm) +{ + if (x >= xm) + return (alpha * pow(xm, alpha) / (pow(x, alpha + 1.0))); + else + return (.0); +} + +inline double DataProcessor::cdf_pareto(double x, double alpha, double xm) +{ + if (x >= xm) + return (1.0 - pow(xm / x, alpha)); + else + return (.0); +} + +inline double DataProcessor::pdf_cauchy(double x, double gamma, double x0) +{ + return (1 / (datum::pi * gamma) + * (pow(gamma, 2) / (pow(x - x0, 2) + pow(gamma, 2)))); +} + +inline double DataProcessor::cdf_cauchy(double x, double gamma, double x0) +{ + return ((1 / datum::pi) * atan((x - x0) / (gamma)) + 0.5); +} + +inline double DataProcessor::pdf_normal(double x, double mu, double sigma) +{ + return (1 / (sqrt(2 * datum::pi) * sigma) + * exp(-0.5 * pow((x - mu) / sigma, 2))); +} + +inline double DataProcessor::cdf_normal(double x, double mu, double sigma) +{ + return (0.5 * (1 + erf((x - mu) / (sigma * sqrt(2))))); +} + +inline double DataProcessor::pdf_uniform(double x_min, double x_max) +{ + return (1.0 / (x_max - x_min)); +} + +inline double DataProcessor::cdf_uniform(double x, double x_min, double x_max) +{ + if (x < x_min) + return (0); + else if (x > x_max) + return (1); + else + return ((x - x_min) / (x_max - x_min)); +} + +#ifdef TEST_FUNCTIONS + +void DataProcessor::printTestResult(string testName, bool result) +{ + string outRes; + if (result == true) + outRes = "ok"; + else + outRes = "failed"; + + cout << testName << ":\t\t" << outRes << endl; +} + +bool DataProcessor::compareDouble(double val1, double val2) +{ + double error = 0; + + error = fabs(double(val1) - double(val2)); + if (error > double(1e-5)) + return (false); + else + return (true); + +} + +bool DataProcessor::compareDouble(double val1, double val2, double acErr) +{ + double error = 0; + + error = fabs(double(val1) - double(val2)); + if (error > double(acErr)) + return (false); + else + return (true); + +} + +bool DataProcessor::compareMat(mat& mat1, mat& mat2) +{ + int mat1_nc = mat1.n_cols; + int mat1_nr = mat1.n_rows; + int mat2_nc = mat2.n_cols; + int mat2_nr = mat2.n_rows; + + if ((mat1_nc != mat2_nc) || (mat1_nr != mat2_nr)) + { + cout << "mat1.n_cols and mat2.n_cols dont match. " << mat1_nc << ":" + << mat2_nc << " " << mat1_nr << ":" << mat2_nr << endl; + return (false); + } + for (int i = 0; i < mat1_nr; i++) + { + for (int j = 0; j < mat1_nc; j++) + { + if (compareDouble(mat1(i, j), mat2(i, j), 1e-5)) + { + //cout << " mat1(" << i << ", " << j << " ) = " << mat1(i,j); + //cout << " mat2(" << i << ", " << j << " ) = " << mat2(i,j); + return (false); + } + } + } + + return (true); +} + +void DataProcessor::save_data_on_file(const string& fileName, const mat& vet1, + const mat& vet2) +{ + string file_out = fileName + ".txt"; + int m = vet1.size(); + + ofstream writeOnFile(file_out, ios::out); + if (!writeOnFile) + { + cerr << "file could not be oppeded" << endl; + exit(1); + } + + for (int i = 0; i < m; i++) + { + writeOnFile << vet1(i) << " " << vet2(i) << endl; + } + +} + +template +void DataProcessor::save_data_on_file(const string& fileName, const list theList) +{ + string file_out = fileName + ".txt"; + int m = theList.size(); + + ofstream writeOnFile(file_out, ios::out); + if (!writeOnFile) + { + cerr << "file could not be oppeded" << endl; + exit(1); + } + + for (list::iterator it = theList.begin(); it!= theList.end(); it++) + { + //list::iterator it = randInt_list1.begin(); + writeOnFile << *it << " " << endl; + } +} + +bool DataProcessor::test_Mode() +{ + + int randint1[] = + { 1, 8, 1, 13, 9, 2, 1, 15, 4, 3, 10, 4, 13, 2, 14, 7, 7 }; + int randint1_mode = 1; + list l_randint1; + vectorC_to_list(&l_randint1, randint1, 17); + + int randint2[] = + { 5, 3, 6, 8, 14, 9, 11, 9, 11, 15, 8, 7, 12, 13, 14 }; + int randint2_mode = 8; + list l_randint2; + vectorC_to_list(&l_randint2, randint2, 15); + + int randint3[] = + { 9, 10, 6, 3, 13, 13, 14, 7, 7, 1, 5, 1, 8, 5, 9, 2, 3, 4, 5, 6, 6, 6 }; + int randint3_mode = 6; + list l_randint3; + vectorC_to_list(&l_randint3, randint3, 22); + + int randint4[] = + { 2, 1 }; + int randint4_mode = 1; + list l_randint4; + vectorC_to_list(&l_randint4, randint4, 2); + + int randint5[] = + { 1, 1, 1, 1, 1, 2, 2, 2, 2, 2 }; + int randint5_mode = 1; + list l_randint5; + vectorC_to_list(&l_randint5, randint5, 10); + + if (mode(&l_randint1) != randint1_mode) + return (false); + if (mode(&l_randint2) != randint2_mode) + return (false); + if (mode(&l_randint3) != randint3_mode) + return (false); + if (mode(&l_randint4) != randint4_mode) + return (false); + if (mode(&l_randint5) != randint5_mode) + return (false); + + return (true); +} + +bool DataProcessor::test_QuickSort() +{ + int randIntA[] = + { 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; + int randIntA_size = 18; + int randIntA_sorted[] = + { 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9 }; + int randIntB[] = + { 9, 2, 3, 3, 12, 15, 8, 14, 2, 7, 4, 6, 10, 2, 12 }; + int randIntB_size = 15; + int randIntB_sorted[] = + { 2, 2, 2, 3, 3, 4, 6, 7, 8, 9, 10, 12, 12, 14, 15 }; + double randDoubleA[] = + { 0.20872, 12.25501, 5.88210, 2.77962, 8.74916, 2.97454, 4.39641, 12.19733, + 4.66014, 4.52477, 5.19375, 12.11314, 13.35458, 11.56941, 6.59435 }; + int randDoubleA_size = 15; + double randDoubleA_sorted[] = + { 0.20872, 2.77962, 2.97454, 4.39641, 4.52477, 4.66014, 5.19375, 5.88210, + 6.59435, 8.74916, 11.56941, 12.11314, 12.19733, 12.25501, 13.35458 }; + + quickSort(randIntA, 0, randIntA_size - 1); + + if (isEqual(randIntA, randIntA_sorted, randIntA_size) == false) + { + return (false); + } + + quickSort(randIntB, 0, randIntB_size - 1); + if (isEqual(randIntB, randIntB_sorted, randIntB_size) == false) + { + return (false); + } + + quickSort(randDoubleA, 0, randDoubleA_size - 1); + if (isEqual(randDoubleA, randDoubleA_sorted, randDoubleA_size) == false) + { + return (false); + } + + return (true); + +} + +bool DataProcessor::test_list_tocvector() +{ + list randInt_list1 = + { 9, 2, 3, 3, 12, 15, 8, 14, 2, 7, 4, 6, 10, 2, 12 }; + list randInt_list2 = + { 2.2, 2.111, 3.16, 6.66, 13, 2.61 }; + list randInt_list3 = + { 1, 2, 3, 4, 5, 6, 6, 5, 4, 3, 2, 1 }; + + int* cvet1 = NULL; + double* cvet2 = NULL; + int* cvet3 = NULL; + + cvet1 = list_to_cvector(&randInt_list1); + cvet2 = list_to_cvector(&randInt_list2); + cvet3 = list_to_cvector(&randInt_list3); + + int i = 0; + for (list::iterator it = randInt_list1.begin(); + it != randInt_list1.end(); it++) + { + if (cvet1[i] != *it) + { + return (false); + } + //cout << *it << " "; + i++; + } + i = 0; + for (list::iterator it = randInt_list2.begin(); + it != randInt_list2.end(); it++) + { + if (cvet2[i] != *it) + { + return (false); + } + //cout << *it << " "; + i++; + } + i = 0; + for (list::iterator it = randInt_list3.begin(); + it != randInt_list3.end(); it++) + { + if (cvet3[i] != *it) + { + return (false); + } + //cout << *it << " "; + i++; + } + + delete_cvector(cvet1); + delete_cvector(cvet2); + delete_cvector(cvet3); + + return (true); +} + +bool DataProcessor::test_empiricalCdf() +{ + list interArrival_sample = + { 5.0000e-07, 1.5000e-06, 1.5000e-06, 2.5000e-06, 2.5000e-06, 3.5000e-06, + 4.5000e-06, 7.5000e-06, 1.2500e-05, 1.9500e-05, 3.1500e-05, + 4.3500e-05, 6.0500e-05, 7.6500e-05, 1.1050e-04, 1.4050e-04, + 1.8150e-04, 2.1150e-04, 2.3350e-04, 2.4350e-04, 2.5650e-04, + 3.0350e-04, 4.1250e-04, 1.3655e-03, 1.1593e-02, 3.2483e-02, + 8.1235e-02, 2.0939e-01, 5.0755e-01, 1.7351e+00 }; + vec emCdf_octave = + { 0.033333, 0.100000, 0.100000, 0.166667, 0.166667, 0.200000, 0.233333, + 0.266667, 0.300000, 0.333333, 0.366667, 0.400000, 0.433333, + 0.466667, 0.500000, 0.533333, 0.566667, 0.600000, 0.633333, + 0.666667, 0.700000, 0.733333, 0.766667, 0.800000, 0.833333, + 0.866667, 0.900000, 0.933333, 0.966667, 1.000000 }; + //emCdf_octave = emCdf_octave.t(); + + vec* emCdf_cpp = empiricalCdf(interArrival_sample); + + int list_size = interArrival_sample.size(); + for (int i = 0; i < list_size; i++) + { + if (!compareDouble(emCdf_octave(i), (*emCdf_cpp)(i), 1e-6)) + { + cout << "cdf error @ " << "i:" << i << " res:" << (*emCdf_cpp)(i, 0) + << " expected:" << emCdf_octave(i, 0) << endl; + return (false); + } + } + + delete emCdf_cpp; + return (true); +} + +bool DataProcessor::test_computeCost() +{ + list interArrival_sample = + { 5.0000e-07, 1.5000e-06, 1.5000e-06, 2.5000e-06, 2.5000e-06, 3.5000e-06, + 4.5000e-06, 7.5000e-06, 1.2500e-05, 1.9500e-05, 3.1500e-05, + 4.3500e-05, 6.0500e-05, 7.6500e-05, 1.1050e-04, 1.4050e-04, + 1.8150e-04, 2.1150e-04, 2.3350e-04, 2.4350e-04, 2.5650e-04, + 3.0350e-04, 4.1250e-04, 1.3655e-03, 1.1593e-02, 3.2483e-02, + 8.1235e-02, 2.0939e-01, 5.0755e-01, 1.7351e+00 }; + mat* X = featureMatrix(interArrival_sample); + vec emCdf_octave = + { 0.033333, 0.100000, 0.100000, 0.166667, 0.166667, 0.200000, 0.233333, + 0.266667, 0.300000, 0.333333, 0.366667, 0.400000, 0.433333, + 0.466667, 0.500000, 0.533333, 0.566667, 0.600000, 0.633333, + 0.666667, 0.700000, 0.733333, 0.766667, 0.800000, 0.833333, + 0.866667, 0.900000, 0.933333, 0.966667, 1.000000 }; + //emCdf_octave = emCdf_octave.t(); + double J_expected1 = 0.17535; + double J_expected2 = 1.5341; + double J_expected3 = 9.0244; + + vec theta = zeros(2); + + double J = computeCost(*X, emCdf_octave, theta); + if (!compareDouble(J, J_expected1, 0.001)) + { + //cout << "J1 = " << J << "\nJ_expected1 = "<< J_expected1 << endl; + return (false); + } + theta(0) = 2; + theta(1) = 2; + J = computeCost(*X, emCdf_octave, theta); + if (!compareDouble(J, J_expected2, 0.001)) + { + //cout << "J2 = " << J << "\nJ_expected2 = "<< J_expected2 << endl; + return (false); + } + theta(0) = 1.5; + theta(1) = 12; + J = computeCost(*X, emCdf_octave, theta); + if (!compareDouble(J, J_expected3, 0.001)) + { + //cout << "J3 = " << J << "\nJ_expected3 = "<< J_expected3 << endl; + return (false); + } + + delete X; + return (true); +} + +bool DataProcessor::test_informationCriterion() +{ + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + + int m = interArrival.size(); + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + //gradient descendent + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + vec y = log(-log(1.0 + diferential - *interArrivalCdf)); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + double weibull_alpha = theta(1); + double weibull_betha = exp(-theta(0) / theta(1)); + vec paramVec = + { weibull_alpha, weibull_betha }; + double weibull_bic = informationCriterion(interArrival, "weibull", paramVec, + "bic"); + double weibull_aic = informationCriterion(interArrival, "weibull", paramVec, + "aic"); + + if (!compareDouble(weibull_bic, -33712.7042, 0.001)) + return (false); + else if (!compareDouble(weibull_aic, -33724.6567, 0.001)) + return (false); + + return (true); +} + +bool DataProcessor::test_pdf_weibull() +{ + double alpha = 1.5000; + double betha = 0.3; + vec data = + { 0.010000, 2.300000, 0.500000 }; + vec dataprob_eval1 = + { 9.0733e-01, 8.3571e-09, 7.5066e-01 }; + vec dataprob_test = zeros(3); + + dataprob_test(0) = pdf_weibull(data(0), alpha, betha); + dataprob_test(1) = pdf_weibull(data(1), alpha, betha); + dataprob_test(2) = pdf_weibull(data(2), alpha, betha); + + if (compareDouble(dataprob_test(0), dataprob_eval1(0)) + && compareDouble(dataprob_test(1), dataprob_eval1(1)) + && compareDouble(dataprob_test(2), dataprob_eval1(2))) + { + return (true); + } + + return (false); +} + +bool DataProcessor::test_cdf_weibull() +{ + double alpha = 0.5; + double betha = 1.5; + vec data = + { 0.010000, 2.300000, 0.500000 }; + vec dataprob_eval1 = + { 0.078405, 0.710117, 0.438616 }; + vec dataprob_test = zeros(3); + + dataprob_test(0) = cdf_weibull(data(0), alpha, betha); + dataprob_test(1) = cdf_weibull(data(1), alpha, betha); + dataprob_test(2) = cdf_weibull(data(2), alpha, betha); + //cout << dataprob_test(0) << " : " << dataprob_test(1) << " : " << dataprob_test(2) << endl; + + if (compareDouble(dataprob_test(0), dataprob_eval1(0)) + && compareDouble(dataprob_test(1), dataprob_eval1(1)) + && compareDouble(dataprob_test(2), dataprob_eval1(2))) + { + return (true); + } + + return (false); +} + +bool DataProcessor::test_gradientDescendent() +{ + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + + int m = interArrival.size(); + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + //gradient descendent + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + vec y = log(-log(1.0 + diferential - *interArrivalCdf)); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //expected values + double Jlast = 0.083359; + double theta0 = 1.660453; + double theta1 = 0.248811; + + if (!compareDouble(J_history(iterations - 1), Jlast)) + + { + return (false); + } + else if (!compareDouble(theta(0), theta0)) + { + return (false); + } + else if (!compareDouble(theta(1), theta1)) + { + return (false); + } + + delete interArrivalCdf; + delete X; + return (true); + +} + +bool DataProcessor::test_pdf_exponential() +{ + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double lambda1 = 0.50000; + vec val1 = + { 0.49751, 0.15832, 0.38940 }; + vec res1 = zeros(3); + + double lambda2 = 3.0; + vec val2 = + { 2.9113366, 0.0030234, 0.6693905 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = pdf_exponential(data(i), lambda1); + res2(i) = pdf_exponential(data(i), lambda2); + + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + + } + + return (true); +} + +bool DataProcessor::test_cdf_exponential() +{ + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double lambda1 = 0.50000; + vec val1 = + { 0.0049875, 0.6833632, 0.2211992 }; + vec res1 = zeros(3); + + double lambda2 = 3.0; + vec val2 = + { 0.029554, 0.998992, 0.776870 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = cdf_exponential(data(i), lambda1); + res2(i) = cdf_exponential(data(i), lambda2); + + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + + return (true); +} + +bool DataProcessor::test_pdf_pareto() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double alpha1 = 0.50000; + double xm1 = 1.0; + vec val1 = + { 0, 0.14334, 0 }; + vec res1 = zeros(3); + double xm2 = 0.00001; + double alpha2 = 3.0; + vec val2 = + { 3.0000e-07, 1.0720e-16, 4.8000e-14 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = pdf_pareto(data(i), alpha1, xm1); + res2(i) = pdf_pareto(data(i), alpha2, xm2); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + + return (true); +} + +bool DataProcessor::test_cdf_pareto() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double alpha1 = 0.50000; + double xm1 = 0.001; + vec val1 = + { 0.68377, 0.97915, 0.95528 }; + vec res1 = zeros(3); + double xm2 = 0.2; + double alpha2 = 1; + vec val2 = + { 0, 0.91304, 0.60000 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = cdf_pareto(data(i), alpha1, xm1); + res2(i) = cdf_pareto(data(i), alpha2, xm2); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + return (true); +} + +bool DataProcessor::test_pdf_cauchy() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + double gamma1 = 0.50000; + double x01 = 0.001; + + vec val1 = + { 0.636414, 0.028752, 0.318947 }; + vec res1 = zeros(3); + double x02 = 2; + double gamma2 = 2; + + vec val2 = + { 0.079976, 0.155653, 0.101859 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = pdf_cauchy(data(i), gamma1, x01); + res2(i) = pdf_cauchy(data(i), gamma2, x02); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + return (true); +} + +bool DataProcessor::test_cdf_cauchy() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + double gamma1 = 0.50000; + double x01 = 0.001; + + vec val1 = + { 0.50573, 0.93183, 0.74968 }; + vec res1 = zeros(3); + double x02 = 2; + double gamma2 = 2; + + vec val2 = + { 0.25080, 0.54739, 0.29517 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = cdf_cauchy(data(i), gamma1, x01); + res2(i) = cdf_cauchy(data(i), gamma2, x02); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + return (true); +} + +bool DataProcessor::test_fitModels() +{ + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + + int m = interArrival.size(); + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + //list of expected values + double weibull_alpha = 0.24881; + double weibull_betha = 0.0012639; + double normal_mu = 0.054792; + double normal_sigma = 0.205602; + double exponentialMe_lambda = 18.250783; + double exponentialLr_lambda = 2.023115; + double paretoLr_alpha = 0.225451; + double paretoLr_xm = 0.000000; + double paretoMlh_alpha = 0.171674; + double paretoMlh_xm = 0.000000; + double cauchy_gamma = 0.000067; + double cauchy_x0 = 0.005750; + double acErr = 0.001; + + vec paramVec = zeros(2); + vec infoCriterion = zeros(2); + + weibullFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), weibull_alpha, acErr)) + { + cout << "weibullFitting alpha" << endl; + return (false); + } + if (!compareDouble(paramVec(1), weibull_betha, acErr)) + { + cout << "weibullFitting betha" << endl; + return (false); + } + + normalFitting(interArrival, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), normal_mu, acErr)) + { + cout << "normalFitting mu" << endl; + return (false); + } + if (!compareDouble(paramVec(1), normal_sigma, acErr)) + { + cout << "normalFitting sigma" << endl; + return (false); + } + + exponentialMeFitting(interArrival, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), exponentialMe_lambda, acErr)) + { + cout << "exponentialLrFitting lambda" << endl; + return (false); + } + + exponentialLrFitting(interArrival, *interArrivalCdf, paramVec, + infoCriterion); + if (!compareDouble(paramVec(0), exponentialLr_lambda, acErr)) + { + cout << exponentialLr_lambda << ":" << paramVec(0) << endl; + cout << "exponentialLrFitting lambda" << endl; + return (false); + } + + paretoLrFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), paretoLr_alpha, acErr)) + { + cout << "paretoLrFitting alpha" << endl; + return (false); + } + if (!compareDouble(paramVec(1), paretoLr_xm, acErr)) + { + cout << "paretoLrFitting xm" << endl; + return (false); + } + + paretoMlhFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), paretoMlh_alpha, acErr)) + { + cout << "paretoMlhFitting alpha" << endl; + return (false); + } + if (!compareDouble(paramVec(1), paretoMlh_xm, acErr)) + { + cout << "paretoMlhFitting xm" << endl; + return (false); + } + + cauchyFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), cauchy_gamma, acErr)) + { + cout << "cauchyFitting" << endl; + return (false); + } + if (!compareDouble(paramVec(1), cauchy_x0, acErr)) + { + return (false); + } + + delete interArrivalCdf; + + return (true); +} + +bool DataProcessor::test_modelSelection() +{ + + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + int m = interArrival.size(); + + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + StochasticModelFit* modelVet = NULL; + modelVet = fitModels(list_interArrival, "aic"); + + //int numberOfModels = modelVet[0].size; + //for (int i = 0; i < numberOfModels; i++) + // cout << modelVet[i].modelName << " " << "modelVet[" << i << "] = " + // << modelVet[i].aic << endl; + + delete interArrivalCdf; + delete[] modelVet; + return (true); +} + +#endif //TEST_FUNCTIONS diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/a9/c04130148ab500161808a5c64fd2084a b/.metadata/.plugins/org.eclipse.core.resources/.history/a9/c04130148ab500161808a5c64fd2084a new file mode 100644 index 0000000..40762b6 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/a9/c04130148ab500161808a5c64fd2084a @@ -0,0 +1,105 @@ +/* + * ConstantsDeinition.h + * + * Created on: 4 de jul de 2016 + * Author: apaschoalon + */ + +#ifndef DEFINES_H_ +#define DEFINES_H_ + +// Debug defines +//#define DEBUG 1 // basic debug +//#define DEBUG_DataProcessor_calculate_loop 1 +//#define DEBUG_DataProcessor_calculate 1 +//#define DEBUG_NetworkFlow 1 +//#define DEBUG_flowThread 1 +//#define DEBUG_DatabaseInterface 1 +//#define DEBUG_NetworkTrace_exec 1 + + +//Math +#define MEGA_POWER 1000000 + +//Protocol code +typedef unsigned short int protocol_code; +#define IPV4_CODE 2048 +#define ARP_CODE 2054 +#define ARP_CODE_REV 2056 +#define IPV6_CODE 34525 +#define ICMP_CODE 1 +#define TCP_CODE 6 +#define UDP_CODE 17 +#define DCCP_CODE 33 +#define GRE_CODE 47 +#define ICMPV6_CODE 58 +#define SCTP_CODE 132 + +//Protocols +typedef unsigned short int protocol; +#define PROTOCOL__NULL 0 +#define PROTOCOL__ETHERNET 1 +#define PROTOCOL__IPV4 2 +#define PROTOCOL__IPV6 3 +#define PROTOCOL__ARP 4 +#define PROTOCOL__ICMP 5 +#define PROTOCOL__ICMPV6 6 +#define PROTOCOL__TCP 7 +#define PROTOCOL__UDP 8 +#define PROTOCOL__DCCP 9 +#define PROTOCOL__GRE 10 +#define PROTOCOL__SCTP 11 +#define PROTOCOL__HTTP 12 +#define PROTOCOL__HTML 13 +#define PROTOCOL__SMTP 14 + +//Stochastic models +typedef unsigned short int stochastic_model; +#define WEIBULL "weibull" +#define NORMAL "normal" +#define EXPONENTIAL_MEAN "exponential-mean" +#define EXPONENTIAL_LINEAR_REGRESSION "exponential-linear-regression" +#define PARETO_LINEAR_REGRESSION "pareto-linear-regression" +#define PARETO_MAXIMUM_LIKEHOOD "pareto-maximum-likehood" +#define CAUCHY "cauchy" +#define CONSTANT "constant" +#define NO_MODEL "no-model-selected" + + +//packet analysis features +const double FILE_CUT_TIME 0.1; +const double SESSION_CUT_TIME 30; +const int PACKET_SIZE_MODE_CUT_VALUE 500; + +/* +#define MODEL__NULL 0 +#define MODEL__BIMODAL_CONSTANT_CONSTANT 1 +#define MODEL__BIMODAL_CONSTANT_WEIBULL 3 +//#define MODEL__BIMODAL_NORMAL_CONSTANT 4 +//#define MODEL__BIMODAL_NORMAL_NORMAL 5 +//#define MODEL__BIMODAL_NORMAL_WEIBULL 6 +#define MODEL__BIMODAL_WEIBULL_CONSTANT 7 +//#define MODEL__BIMODAL_WEIBULL_NORMAL 8 +#define MODEL__BIMODAL_WEIBULL_WEIBULL 9 +#define MODEL__CONSTANT 10 +#define MODEL__NORMAL 11 +#define MODEL__PARETO 12 +#define MODEL__WEIBULL 13 +#define MODEL__GAMMA 14 +#define MODEL__EXPONENTIAL 15 +#define MODEL__UNIFORM 16 +#define MODEL__CAUCHY 17 +#define MODEL__POISSON 18 +*/ + +//Miscellaneous +//typedef string ip_addr; +typedef int port_number; +#define HLINE "----------" +#define TAB "::" +#define MAX_TRANSPORT_PORT_NUMBER 65535 + +//Debug +#define TEST_FUNCTIONS 1 + +#endif /* DEFINES_H_ */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/c1/f00f193186b500161808a5c64fd2084a b/.metadata/.plugins/org.eclipse.core.resources/.history/c1/f00f193186b500161808a5c64fd2084a new file mode 100644 index 0000000..526e81f --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/c1/f00f193186b500161808a5c64fd2084a @@ -0,0 +1,29 @@ +/* + * StochasticModelFit.h + * + * Created on: 6 de nov de 2016 + * Author: apaschoalon + */ + +#ifndef STOCHASTICMODELFIT_H_ +#define STOCHASTICMODELFIT_H_ + +#include +using std::string; + +typedef struct stochastic_model_fitting +{ + double aic; + double bic; + string modelName; + double param1; + double param2; + int size; +} StochasticModelFit; + +int compareBic(const void* a, const void* b); +int compareAic(const void* a, const void* b); + + + +#endif /* STOCHASTICMODELFIT_H_ */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/c2/20fe03f58bb500161808a5c64fd2084a b/.metadata/.plugins/org.eclipse.core.resources/.history/c2/20fe03f58bb500161808a5c64fd2084a new file mode 100644 index 0000000..b0e6242 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/c2/20fe03f58bb500161808a5c64fd2084a @@ -0,0 +1,886 @@ +/* + * DataProcessor.h + * + * Created on: 14 de jun de 2016 + * Author: apaschoalon + */ + +#ifndef DATAPROCESSOR_H_ +#define DATAPROCESSOR_H_ + +//external libs +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +//local libs +#include "DatabaseInterface.h" +#include "NetworkTrace.h" +#include "Defines.h" +#include "StochasticModelFit.h" + +//namespaces +using std::string; +using namespace arma; + +#define DEBUG_StochasticModelFit 1 + + +//TODO: this class must be static +class DataProcessor +{ +public: + + /** + * Default constructor + */ + DataProcessor(); + + /** + * Destructor. Clean any allocated memory + */ + virtual ~DataProcessor(); + + /** + * @brief Returns a string information about the class + * Returns a string information about the class + * + * @param void + * @return string + */ + string toString(void); + + /** + * @brief This method parameterize a network trace. + * Through the database interface class, this method retrieves all desired + * data from the database, in order to calculate and set parameters in a + * NetworkTrace class instance. This method knows all the labels and types + * of each database column, and how to deal with them correctly. So this + * method should be up to date with the database. After calculating all + * parameters, this class should save the data on the Network trace + * object and on its flows through netTrace.set() and netTace.flow[n].set() + * methods. + * + * @param experimentName experiment name string + * @param databaseInterface class interface to the database + * @param netTrace network trace class, which will be parameterized + * @return returns 0 in success + */ + int calculate(const string& experimentName, + DatabaseInterface* databaseInterface, NetworkTrace* netTrace); + +#ifdef TEST_FUNCTIONS + void save_data_on_file(const string& fileName, const mat& vet1, + const mat& vet2); + template + void DataProcessor::save_data_on_file(const string& fileName, const list theList); + void printTestResult(string testName, bool result); + bool compareDouble(double val1, double val2); + bool compareDouble(double val1, double val2, double acErr); + bool compareMat(mat& mat1, mat& mat2); + bool test_QuickSort(); + bool test_Mode(); + bool test_list_tocvector(); + bool test_empiricalCdf(); + bool test_computeCost(); + bool test_informationCriterion(); + bool test_gradientDescendent(); + bool test_pdf_weibull(); + bool test_cdf_weibull(); + bool test_pdf_exponential(); + bool test_cdf_exponential(); + bool test_pdf_pareto(); + bool test_cdf_pareto(); + bool test_pdf_cauchy(); + bool test_cdf_cauchy(); + bool test_fitModels(); + bool test_modelSelection(); +#endif //TEST_FUNCTIONS + +private: + /** + * A time smaller than the min_time resolution. Once the current resolution + * is 1e-6, min_time is half of this value. This value is used as default + * as substitute for times equal to zero. + */ + double min_time = 5e-7; + + /** + * A very small time value. This is used to avoid evaluating the operation + * log(0), which is undefined. + */ + double diferential = 4e-14; + + // calculate the mean packet rate + int mean_packetRate(list& pakcetSizeList, double duration); + + //calculate the most frequent element from a list + long int mode(list& thelist); + + /** + * ACTUAL FUNCTIONS + */ + // Take as input a vector vet[], its first and last position to be + // sorted. After the execution vet[] will be sorted. + // T* vet : C vector + // int left: fist position of the C vector to be sorted, usually 0. + // int right: last position of the C vector to be sorted, usually size-1; + template void quickSort(T* vet, int left, int right); + // Evaluate the mode (the most frequent value) of a list list + template T mode(list* theList); + + /** + * @brief Converts a list to a C vector. + * Converts a list to a C vector. + * @param theList + * @return + */ + template T* list_to_cvector(list* theList); + + /** + * @brief Delete a C vector + * @param c_vet pointer to the C vector + */ + template void delete_cvector(T* c_vet); + + /** + * @brief Compare two C vectors T. + * Compare two C vectors of types T. If they are equal, returns "true". If + * they are not, returns "false". + * + * @param vet1 + * @param vet2 + * @param size + * @return + */ + template bool isEqual(const T* vet1, const T* vet2, + const int size); + /** + * \brief convert a C vector T to a list + * + * @param theList pointer to an empty list + * @param vet pointer to a C vector + * @param size size of the C vector + */ + template void vectorC_to_list(list* theList, T* vet, + int size); + + /** + * Return an empirical vector of the Cumulative distribution function. + * This method take as input a list of empirical data, and create a + * vector (of the same size) of an empirical evaluation of the cumulative + * distribution function. Return must be freed using delete. + * + * @param list + * @return vec* empirical cumulative vector + */ + vec* empiricalCdf(list& empiricalData); + + //feature matrix: return a matrix X(m, 2) = [1 data]. Must be freed using delete. + /** + * @brief Creates a feature matrix for linear regression + * Creates a feature matrix X(m, 2) = [1 data], for the linear regression. + * Must be freed using delete. + * + * @param empiricalData list of the empirical data. + * @return returns a pointer to the feature matrix + */ + mat* featureMatrix(list& empiricalData); + + /** + * @brief Creates a feature matrix for linear regression + * Creates a feature matrix X(m, 2) = [1 data], for the linear regression. + * Must be freed using delete. + * + * @param empiricalData vector vec of the empirical data. + * @return returns a pointer to the feature matrix + */ + mat* featureMatrix(const vec& empiricalData); + + /** + * @brief Compute cost of the gradient descendent function + * It returns the value of the cost function for the list of parameteres + * + * @param X feature matrix + * @param y expected values + * @param theta linear regression coeficients [theta1; theta2] + * @return cost value + */ + double computeCost(const mat& X, const vec& y, const vec& theta); + + /** + * @brief Gradient descendent algorithm + * Evaluates the gradient descendent + * + * @param X feature matrix + * @param y + * @param learning_rate + * @param num_iters + * @param theta + * @param J_history + */ + void gradientDescendent(const mat& X, const vec& y, + const double learning_rate, const int num_iters, vec& theta, + vec& J_history); + + /** + * @brief information criterion + * + * @param data + * @param functionName + * @param paramVet + * @param criterion + * @return + */ + double informationCriterion(const vec& data, const string& functionName, + const vec& paramVet, const string& criterion); + + /** + * @brief natural logarithm of likehood function + * + * @param data + * @param functionName + * @param paramVet + * @return + */ + double logLikehood(const vec& data, const string& functionName, + const vec& paramVet); + /** + * @brief fit weibull alpha and betha using linear regression + * + * @param interArrival + * @param interArrivalCdf + * @param paramVec + * @param informationCriterion + */ + void weibullFitting(const vec& interArrival, const vec& interArrivalCdf, + vec& paramVec, vec& informationCriterion); + + /** + * @brief evaluate mean and standard deviation + * + * @param interArrival + * @param paramVec + * @param informationCriterion + */ + void normalFitting(const vec& interArrival, vec& paramVec, + vec& informationCriterion); + + /** + * @brief evaluate lambda using linear regression + * + * @param interArrival + * @param interArrivalCdf + * @param paramVec + * @param informationCriterion + */ + void exponentialLrFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, + vec& informationCriterion); + + /** + * @brief evaluate lambda using mean estimation + * + * @param interArrival + * @param paramVec + * @param informationCriterion + */ + void exponentialMeFitting(const vec& interArrival, vec& paramVec, + vec& informationCriterion); + + /** + * @brief evaluate pareto's alpha and xm using Linear regression + * + * @param interArrival + * @param interArrivalCdf + * @param paramVec + * @param informationCriterion + */ + void paretoLrFitting(const vec& interArrival, const vec& interArrivalCdf, + vec& paramVec, vec& informationCriterion); + + /** + * @brief evaluate pareto's alpha and xm using maximum likehood method + * + * @param interArrival + * @param interArrivalCdf + * @param paramVec + * @param informationCriterion + */ + void paretoMlhFitting(const vec& interArrival, const vec& interArrivalCdf, + vec& paramVec, vec& informationCriterion); + + /** + * @brief evaluate cauchy's gamma and x0 using linear regression + * + * @param interArrival + * @param interArrivalCdf + * @param paramVec + * @param informationCriterion + */ + void cauchyFitting(const vec& interArrival, const vec& interArrivalCdf, + vec& paramVec, vec& informationCriterion); + + /** + * @brief + * + * @param interArrival + * @param paramVec + * @param informationCriterion + */ + void constantFitting(const vec& interArrival, vec& paramVec, + vec& informationCriterion); + + /** + * @brief returns probability of a given + * @param x + * @param alpha + * @param betha + * @return + */ + double pdf_weibull(double x, double alpha, double betha); + + /** + * + * @param x + * @param alpha + * @param betha + * @return + */ + double cdf_weibull(double x, double alpha, double betha); + + /** + * + * @param x + * @param lambda + * @return + */ + double pdf_exponential(double x, double lambda); + + /** + * + * @param x + * @param lambda + * @return + */ + double cdf_exponential(double x, double lambda); + + /** + * + * @param x + * @param alpha + * @param xm + * @return + */ + double pdf_pareto(double x, double alpha, double xm); + + /** + * + * @param x + * @param alpha + * @param xm + * @return + */ + double cdf_pareto(double x, double alpha, double xm); + + /** + * + * @param x + * @param gamma + * @param x0 + * @return + */ + double pdf_cauchy(double x, double gamma, double x0); + + /** + * + * @param x + * @param gamma + * @param x0 + * @return + */ + double cdf_cauchy(double x, double gamma, double x0); + + /** + * + * @param x + * @param mu + * @param sigma + * @return + */ + double pdf_normal(double x, double mu, double sigma); + + /** + * + * @param x + * @param mu + * @param sigma + * @return + */ + double cdf_normal(double x, double mu, double sigma); + + /** + * + * @param x_min + * @param x_max + * @return + */ + double pdf_uniform(double x_min, double x_max); + + /** + * + * @param x + * @param x_min + * @param x_max + * @return + */ + double cdf_uniform(double x, double x_min, double x_max); + + // Take as input a list o inter-arrival times, and a pointer to a C vector + // of the struct StochasticModelFit. The available models are ordered here, + // from the best to the worst, according to the specified criterion BIC or + // AIC. If it is not specified, it uses as default AIC. + + /** + * + * @param empiricalData + * @param criterion + * @return + */ + StochasticModelFit* fitModels(list& empiricalData, + const string& criterion); + +#ifdef TEST_FUNCTIONS + + vec interArrivalSample = + { 0, 0, 0.000203, 1e-05, 0.318392, 1.00003, 0.517214, 3.2e-05, 7.6e-05, + 0.159572, 0.028456, 0.000267, 1.6e-05, 0.000362, 0.001436, 0.012243, + 0.052051, 0.010572, 0.300375, 1.6e-05, 0.00012, 0.171993, 0.000161, + 0.180517, 0.336145, 9e-06, 0.007852, 0.044852, 0.020313, 0.030458, + 0.218979, 0.250961, 0.158453, 0.042762, 0.129894, 0.01578, 0.016078, + 3.1e-05, 2.2e-05, 0.000309, 1.8e-05, 7.1e-05, 3e-06, 0.00018, 6e-06, + 0.041497, 0.094336, 0.030568, 0.69278, 0.083745, + 0.09501999999999999, 0.246721, 0.000322, 1.5e-05, 6.4e-05, 0.00031, + 6.600000000000001e-05, 0.000203, 5.4e-05, 4e-06, 4.6e-05, + 0.0005509999999999999, 0.046676, 0.000133, 0.00025, 0.000106, 4e-06, + 6e-05, 0.000579, 0.020548, 0.020144, 0.00017, 4.3e-05, 3.8e-05, + 0.000403, 8.8e-05, 9.2e-05, 2.1e-05, 8.899999999999999e-05, 7.9e-05, + 0.037013, 0.003625, 0.000174, 0.001402, 0.01547, 0.000137, 0.000257, + 0.000181, 0.000249, 0.000175, 0.000262, 0.000188, 0.000245, + 0.000198, 0.000194, 0.039691, 0.377134, 0.025489, + 0.08887399999999999, 0.071201, 0.118396, 0.011301, 0.18306, + 0.471818, 1.2e-05, 0.057105, 0.158384, 0.033412, 0.279247, 0.615341, + 0.07193099999999999, 0.041286, 6e-06, 6.4e-05, 0.000615, 0.000159, + 1.5e-05, 0.179127, 0.003532, 0.087938, 0.128529, 0.003537, 0.555139, + 0.312737, 0.614656, 0.20354, 0.18178, 0.728741, 0.227757, 0.657457, + 1.122729, 0.000405, 1.1e-05, 0.876119, 1.999258, 0.936457, 0.000285, + 1.2e-05, 4.5e-05, 5.3e-05, 0.000321, 0.000137, 0.00026, 0.00031, + 0.000224, 2.5e-05, 0.000171, 3.7e-05, 0.000211, 9.3e-05, 0.000175, + 2.8e-05, 0.000447, 0.000124, 3e-06, 0.000121, 0.000124, 1.3e-05, + 0.000111, 0.000129, 3e-06, 3.6e-05, 3e-06, 1.8e-05, 3.9e-05, + 8.6e-05, 0.00021, 0.000239, 0.000161, 3.2e-05, 0.000224, 0.001489, + 0.00078, 0.000127, 7e-06, 0.000197, 0.000703, 2.5e-05, 0.000145, + 0.00263, 0.001061, 0.001058, 8e-06, 1.5e-05, 4.6e-05, 0.001069, + 0.013118, 6.4e-05, 0.016585, 0.008005, 0.004525, 0.01047, 1.1e-05, + 4e-06, 1e-06, 1e-06, 1e-06, 0.000346, 0.003028, 0.3629, 0.605291, + 0.024532, 0.13292, 6e-06, 2e-06, 2e-06, 2e-06, 2e-06, 3.5e-05, + 0.000585, 0.000348, 0.000227, 0.000171, 7e-06, 0.08057, 0.758265, + 0.999926, 0.026228, 0.430843, 0.460833, 0.076263, 0.682728, + 0.000663, 0.286479, 0.000348, 1.2e-05, 5e-05, 0.000407, 4.8e-05, + 0.000171, 5e-05, 0.000202, 3.5e-05, 0.000215, 2.7e-05, 0.000227, + 3.3e-05, 0.000461, 0.000124, 8e-06, 0.000109, 0.000124, 7e-06, + 0.000115, 0.000123, 1e-06, 0.000122, 0.000125, 3e-06, 0.000122, + 0.000121, 1.8e-05, 0.000105, 3.5e-05, 4e-06, 4.6e-05, 0.000216, + 8.6e-05, 0.000174, 0.000106, 0.00019, 7.8e-05, 0.000171, 7.1e-05, + 0.000256, 0.000219, 0.000174, 8.899999999999999e-05, 0.000168, + 0.000114, 8e-06, 4.5e-05, 0.000549, 0.041588, 9.399999999999999e-05, + 0.000272, 5.8e-05, 4e-06, 4.2e-05, 0.000563, 0.012524, 0.011557, + 0.000133, 0.033325, 8.1e-05, 3.4e-05, 0.000523, 0.041159, 5.2e-05, + 2.3e-05, 5.7e-05, 0.016827, 9.500000000000001e-05, 0.000229, + 7.1e-05, 0.000184, 7.2e-05, 0.000183, 5.3e-05, 0.000166, 3.2e-05, + 0.000225, 0.037247, 1.000281, 1.5e-05, 1.8e-05, 3.9e-05, 7e-06, + 6e-06, 5.9e-05, 8e-06, 4e-06, 4.7e-05, 0.000492, 4.2e-05, 7e-06, + 4e-06, 3e-06, 6e-06, 2.5e-05, 6e-05, 1.8e-05, 6e-06, 1.8e-05, 6e-06, + 5.7e-05, 1.5e-05, 0.000178, 3.4e-05, 6e-06, 4e-06, 4e-06, 7e-06, + 0.000154, 1.6e-05, 4e-06, 3e-06, 4e-06, 5.7e-05, 0.000236, 4.2e-05, + 7e-06, 3e-06, 4e-06, 0.000261, 4.1e-05, 6e-06, 8.3e-05, 4.9e-05, + 8e-06, 5e-06, 4e-06, 4e-06, 5e-06, 1.1e-05, 0.000377, 4.3e-05, + 8e-06, 4e-06, 4e-06, 6e-06, 4e-06, 9e-06, 0.000183, 2.7e-05, 6e-06, + 3e-06, 4e-06, 0.000203, 2.5e-05, 6e-06, 3e-06, 4e-06, 6e-06, 0.0002, + 2.8e-05, 6e-06, 4e-06, 4e-06, 7e-06, 0.000205, 2.7e-05, 6e-06, + 4e-06, 3e-06, 0.000183, 2.9e-05, 6e-06, 4e-06, 3e-06, 7e-06, + 0.000217, 2.6e-05, 6e-06, 4e-06, 3e-06, 6e-06, 0.000209, 3.5e-05, + 6e-06, 3e-06, 3e-06, 0.000247, 4.3e-05, 5e-06, 3e-06, 3e-06, 7e-06, + 8.000000000000001e-05, 1.4e-05, 4e-06, 4e-06, 3e-06, 7.6e-05, + 0.000233, 4.2e-05, 6e-06, 3e-06, 3e-06, 0.000108, 1.4e-05, 5e-06, + 4e-06, 5.5e-05, 0.000259, 3.3e-05, 3.4e-05, 0.000106, 0.000304, + 0.000247, 3.3e-05, 0.000169, 0.000276, 3.3e-05, 3.2e-05, 0.000112, + 0.000275, 0.000284, 0.000244, 6.4e-05, 0.00013, 0.000222, 0.000244, + 0.000377, 0.000136, 0.000324, 6.1e-05, 0.000101, 0.000304, 0.000205, + 0.000298, 0.000202, 0.000265, 4.3e-05, 0.000182, 0.000198, 3.6e-05, + 0.036618, 0.167993, 0.000405, 5.6e-05, 0.132945, 0.5075499999999999, + 1.839101, 0.160079, 0.856059, 0.00019, 0.814619, 0.001748, 0.326707, + 0.016594, 0.104517, 0.000487, 1.2e-05, 3.5e-05, 0.030896, 1.3e-05, + 2.5e-05, 2e-06, 5.6e-05, 2e-06, 0.00016, 8e-06, 1e-06, 4.4e-05, + 6e-06, 0.000232, 2e-06, 9.6e-05, 5e-06, 1e-06, 0.000219, 3e-06, + 1e-06, 0.000281, 4e-06, 1e-06, 0.000247, 2e-06, 1e-06, 0.000182, + 4e-06, 1e-06, 0.000234, 3e-06, 2e-06, 0.000331, 7e-06, 2e-06, + 0.000228, 7e-06, 0.000124, 0.000342, 0.000243, 0.000109, 8e-06, + 0.00015, 6.1e-05, 8e-06, 0.006888, 7.4e-05, 0.033877, 0.03964, + 0.031221, 0.027626, 0.029209, 0.027819, 0.008146, 0.003837, + 0.054232, 0.141787, 0.189477, 0.000731, 0.037917, 0.239763, + 0.016276, 0.101792, 0.121279, 0.569522, 0.162138, 0.167452, + 0.100904, 0.050978, 0.193571, 0.023699, 0.00188, 0.7299330000000001, + 0.14706, 0.069059, 0.000354, 2.1e-05, 0.000376, 0.051512, 4e-05, + 0.00026, 1.9e-05, 5.1e-05, 4e-06, 6e-05, 0.000322, 4.5e-05, 1.3e-05, + 9e-06, 7.8e-05, 3.9e-05, 0.000258, 5.4e-05, 6.9e-05, 8e-06, 6.2e-05, + 0.000148, 4.2e-05, 0.000136, 5.7e-05, 4.7e-05, 0.000226, 0.00012, + 0.000106, 5.4e-05, 0.000169, 9.7e-05, 0.000135, 5.3e-05, 0.000161, + 5.6e-05, 2.9e-05, 1.1e-05, 2.8e-05, 2.9e-05, 0.000329, 4.8e-05, + 2.4e-05, 1e-05, 3.4e-05, 2.8e-05, 0.000345, 0.000111, 0.000216, + 8e-06, 0.010716, 0.000189, 0.002223, 0.000222, 0.000261, 6.1e-05, + 0.000497, 0.000121, 6e-06, 3.1e-05, 7.4e-05, 0.000316, 0.000201, + 0.000241, 0.037019, 0.011593, 0.025272, 1.2e-05, 0.005462, 0.000153, + 0.000308, 1.8e-05, 0.000457, 0.000157, 1.2e-05, 0.000111, + 6.499999999999999e-05, 8.500000000000001e-05, 0.000121, 0.036178, + 0.062789, 0.209764, 2.2e-05, 0.000104, 0.000598, 0.000113, 0.000858, + 0.001237, 1.1e-05, 6.4e-05, 0.022295, 0.002239, 0.02595, 0.048743, + 2.3e-05, 0.048933, 0.000101, 3.8e-05, 0.134329, 0.013961, 1e-05, + 0.003331, 7e-06, 0.006234, 0.000175, 8e-06, 0.0002, 0.000699, + 2.4e-05, 0.001724, 6e-06, 0.000252, 1.3e-05, 0.00269, 0.000125, + 7e-06, 0.000158, 0.007282, 0.015473, 0.064868, 6e-06, 0.216, + 2.2e-05, 2.9e-05, 6.9e-05, 0.000317, 1.4e-05, 0.002346, 0.00051, + 0.005226, 2e-05, 0.019417, 0.001007, 0.000196, 0.005594, 0.005761, + 0.008026, 0.09038, 0.000229, 0.000128, 0.209391, 0.231852, 0.032119, + 5e-06, 5e-06, 2e-06, 2e-06, 1e-06, 2e-06, 3.3e-05, 0.000664, 1e-05, + 2e-06, 0, 1e-06, 1e-06, 8.899999999999999e-05, 1.8e-05, 2.7e-05, + 5e-06, 1e-06, 1e-06, 0.000308, 4e-06, 2e-06, 2e-06, 0.000159, 5e-06, + 1e-06, 1e-06, 0.000537, 8e-06, 2e-06, 2e-06, 1e-06, 1e-06, 1e-06, + 0.00044, 1e-05, 2e-06, 3e-06, 3e-06, 3e-06, 2e-06, 0.0001, 0.000368, + 1e-05, 1e-06, 3e-06, 3e-06, 4e-06, 2e-06, 0.000452, 5e-06, 3e-06, + 2e-06, 2e-06, 2e-06, 0.000215, 6e-06, 2e-06, 2e-06, 0.000259, 7e-06, + 3e-06, 1e-06, 0.000209, 5e-06, 2e-06, 1e-06, 0.000236, 4e-06, 1e-06, + 2e-06, 0.000238, 3e-06, 1e-06, 2e-06, 0.000252, 1.6e-05, 1e-06, + 1e-06, 0.000255, 1.2e-05, 1e-06, 2e-06, 0.000202, 1.5e-05, 1e-06, + 1e-06, 0.000251, 1.2e-05, 1e-06, 1e-06, 0.000198, 4e-06, 1e-06, + 2e-06, 0.000254, 4e-06, 1e-06, 1e-06, 0.00013, 0.000103, 2e-06, + 1e-06, 1e-06, 0.00023, 5e-06, 2e-06, 1e-06, 0.000244, 4e-06, 1e-06, + 0, 0.000233, 6e-06, 1e-06, 1e-06, 0.000241, 4e-06, 1e-06, 1e-06, + 0.000238, 6e-06, 3e-06, 1e-06, 0.000234, 6e-06, 2e-06, 1e-06, + 0.000234, 8e-06, 1e-06, 1e-06, 0.000236, 7e-06, 1e-06, 1e-06, + 0.000236, 4e-06, 1e-06, 1e-06, 0.000237, 5e-06, 1e-06, 2e-06, + 0.000236, 2e-06, 3e-06, 4e-06, 0.000237, 6e-06, 3e-06, 3e-06, + 0.000232, 4e-06, 2e-06, 1e-06, 0.000238, 4e-06, 1e-06, 2e-06, + 0.000239, 6e-06, 1e-06, 1e-06, 0.00024, 2e-06, 1e-06, 1e-06, + 0.000241, 3e-06, 2e-06, 1e-06, 0.000238, 4e-06, 2e-06, 1e-06, + 0.000237, 3e-06, 1e-06, 2e-06, 0.00024, 5e-06, 1e-06, 1e-06, + 0.000237, 4e-06, 1e-06, 1e-06, 0.00024, 3e-06, 2e-06, 1e-06, + 0.000305, 4e-06, 2e-06, 0.000194, 1.2e-05, 1e-06, 0.000223, 1.2e-05, + 1e-06, 0.000235, 1.5e-05, 1e-06, 0.000224, 1.2e-05, 2e-06, 0.000231, + 1.1e-05, 2e-06, 0.000225, 6e-06, 2e-06, 1e-06, 0.000245, 1.4e-05, + 1e-06, 0.000218, 2e-06, 1e-06, 0.000243, 3e-06, 2e-06, 0.00024, + 4e-06, 1e-06, 0.00024, 4e-06, 2e-06, 0.000238, 2e-06, 1e-06, 1e-06, + 0.000241, 2e-06, 1e-06, 0.000242, 4e-06, 1e-06, 0.000241, 2e-06, + 1e-06, 0.000242, 4e-06, 1e-06, 0.00024, 4e-06, 1e-06, 0.000243, + 1.6e-05, 2e-06, 0.000225, 1.2e-05, 2e-06, 0.000231, 1.5e-05, + 0.00023, 1.1e-05, 2e-06, 0.000231, 1.1e-05, 0.000237, 1.4e-05, + 0.000219, 4e-06, 2e-06, 0.000241, 5e-06, 0.000245, 3e-06, 0.000247, + 6e-06, 3e-06, 0.000229, 5e-06, 0.000238, 6e-06, 3e-06, 0.000244, + 1.3e-05, 0.000243, 2e-06, 0.000222, 0.000245, 3e-06, 2e-06, + 0.000239, 3e-06, 3e-06, 0.000238, 1e-06, 1e-06, 0.000244, 3e-06, + 2e-06, 0.000239, 2e-06, 0.000244, 1e-06, 0.000244, 0.000245, + 0.000255, 0.000243, 0.000251, 1.6e-05, 0.000231, 1.3e-05, 0.000228, + 1.2e-05, 0.000238, 5e-06, 0.000235, 1.3e-05, 0.000192, 7.8e-05, + 1.4e-05, 9.8e-05, 9.7e-05, 0.000236, 0.000256, 0.000247, 2e-05, + 8.4e-05, 1.2e-05, 0.000104, 6.9e-05, 1.3e-05, 0.000179, 0.000245, + 0.000256, 1e-06, 9.2e-05, 0.000124, 1.7e-05, 0.000242, 0.000143, + 1.7e-05, 0.064764, 0.268533, 0.000247, 0.000117, 4.6e-05, 0.0001, + 0.00026, 1.3e-05, 7.8e-05, 0.000413, 7.499999999999999e-05, + 0.000187, 7.6e-05, 0.00019, 0.015809, 0.000237, 4e-05, 2.3e-05, + 0.000115, 0.000268, 9e-06, 3.1e-05, 0.000317, 0.000248, 0.00025, + 0.000111, 0.00018, 3.2e-05, 0.000196, 5.3e-05, 0.000188, 4.7e-05, + 0.000197, 6.1e-05, 0.000184, 6.8e-05, 0.000187, 0.03969, 0.401298, + 0.191103, 0.038273, 0.155567, 2.8e-05, 0.000256, + 6.600000000000001e-05, 1.2e-05, 0.000205, 1.5e-05, 0.413707, + 0.02753, 0.142191, 0.120225, 0.761589, 0.148513, + 0.07999199999999999, 0.443199, 1.476141, 0.380089, 0.005695, + 0.000311, 1.2e-05, 0.008484999999999999, 0.849543, 0.00359, + 0.751508, 1.292865, 0.179771, 0.5266, 0.366045, 2e-05, 1.03151, + 1.2e-05, 0.6017670000000001, 0.705453, 1.29376, 0.388697, 0.000119, + 0.000292, 1.4e-05, 7e-06, 0.000235, 1e-05, 0.171773, + 0.07598100000000001, 0.310302, 0.0004, 1.7e-05, 8.1e-05, 0.000385, + 0.000118, 0.000302, 0.000114, 0.000281, 2.9e-05, 0.000209, 2.7e-05, + 0.000239, 2.5e-05, 0.000212, 6e-05, 0.000224, 9.1e-05, 0.000233, + 1.9e-05, 0.000198, 1.9e-05, 0.000289, 0.000267, 0.000198, 6e-05, + 0.000195, 7.6e-05, 3e-06, 2e-06, 1e-06, 2e-06, 2e-06, 6.9e-05, + 0.000555, 0.000244, 0.000241, 0.039375, 0.000124, 0.000288, + 9.899999999999999e-05, 3e-06, 6.2e-05, 0.000571, 0.048884, 0.000149, + 1.4e-05, 6e-06, 6e-06, 3.3e-05, 1.6e-05, 7e-06, 2.5e-05, 0.000324, + 0.000219, 9e-06, 0.000153, 0.000128, 0.00011, 0.000155, 9e-06, + 0.00017, 7.3e-05, 0.037596, 0.027548, 0.000148, 0.00018, 0.016617, + 7.499999999999999e-05, 0.000234, 3.3e-05, 0.000171, 2.8e-05, + 0.000231, 3.5e-05, 0.00019, 2.8e-05, 0.000209, 0.039791, 0.832296, + 1.999254, 0.048807, 0.016688, 0.103137, 0.855847, 0.655344, + 0.000661, 0.013452, 0.168439, 0.136821, 0.025272, 9e-06, + 0.007948999999999999, 0.037041, 0.047981, 0.008460000000000001, + 0.04047, 0.009528, 0.020497, 0.072979, 0.009079, 0.11388, 0.023627, + 0.016839, 0.235363, 0.200238, 0.259802, 0.133895, 0.19443, 0.003572, + 0.124423, 0.003563, 0.37003, 0.040397, 0.3915, 0.000331, 1.7e-05, + 0.186427, 0.003647, 0.000144, 0.004702, 0.542918, 0.227775, + 0.641863, 0.034463, 0.016594, 0.419727, 0.000376, 3.6e-05, 0.000115, + 0.000327, 0.0005330000000000001, 0.00028, 0.000207, 0.000324, + 0.000296, 1e-05, 7e-06, 4.2e-05, 0.000562, 0.010122, 3.8e-05, + 0.018846, 0.000187, 0.000264, 0.000181, 0.000292, 0.000118, + 0.000469, 0.01084, 0.000237, 3.8e-05, 0.019239, 2.8e-05, 0.000227, + 0.0001, 0.000213, 0.000112, 0.000241, 0.000121, 0.000312, 0.000149, + 0.000209, 0.000133, 0.000296, 0.000132, 0.000214, 0.00166, 0.02373, + 0.001922, 4e-06, 4.3e-05, 3e-06, 5.1e-05, 3e-06, 5.6e-05, 2e-06, + 5.4e-05, 1e-06, 0.000392, 8e-06, 1e-06, 4.8e-05, 3e-06, 3.7e-05, + 2e-06, 0.000158, 1e-05, 2e-06, 1e-06, 4.7e-05, 0.000205, 3e-06, + 1e-06, 1e-06, 0.000516, 0.000201, 0.000213, 0.000308, 0.000241, + 0.00026, 0.000234, 0.169798, 8.500000000000001e-05, 0.0003, + 0.000144, 3e-06, 2e-06, 6.8e-05, 0.000589, 0.03856, 0.035385, + 0.000115, 0.000179, 5.8e-05, 0.000143, 0.000343, 0.000129, 0.000214, + 7.2e-05, 0.000288, 8.1e-05, 0.000203, 5.1e-05, 0.000369, + 9.500000000000001e-05, 0.000176, 0.001365, 0.013006, 0.001368, + 3e-06, 1e-06, 1e-06, 1e-06, 2e-06, 5.2e-05, 2e-06, 6.3e-05, 1.3e-05, + 1e-06, 1e-06, 6.7e-05, 2e-06, 1e-06, 4.3e-05, 4e-06, 6.1e-05, 1e-06, + 1e-06, 7.1e-05, 2e-06, 7e-06, 0.0002, 0.000255, 0.000229, 0.000516, + 0.000282, 0.000244, 0.000256, 0.000238, 0.000242, 0.000245, + 0.029151, 8.3e-05, 0.000294, 0.000143, 5e-06, 2e-06, 6.4e-05, + 0.000604, 0.012818, 0.00022, 0.019331, 0.000117, 0.000224, 0.000222, + 0.000234, 7.6e-05, 0.000216, 6.7e-05, 0.00028, 7.1e-05, 0.000219, + 4.5e-05, 0.000249, 6.7e-05, 0.000193, 0.001358, 0.013339, 0.001356, + 4e-06, 1e-06, 1e-06, 1e-06, 2e-06, 1e-06, 3.5e-05, 1e-06, 3.2e-05, + 6e-06, 6.8e-05, 1e-06, 1e-06, 4e-05, 7e-06, 1.5e-05, 2.7e-05, 5e-06, + 3.2e-05, 6e-06, 2.5e-05, 3e-05, 0.000278, 0.000251, 0.000215, + 0.000489, 0.000514, 0.000257, 0.000257, 0.000243, 0.000218, + 0.010181, 0.001256, 3e-05, 0.017594, 6.499999999999999e-05, + 0.000246, 0.000173, 4e-06, 1e-06, 6.499999999999999e-05, 0.000554, + 0.032475, 0.000117, 0.000258, 0.00054, 0.000265, 0.000146, 0.000199, + 6.9e-05, 0.000292, 0.000126, 0.000205, 0.000109, 0.000287, 0.000119, + 0.00021, 0.001505, 0.01251, 0.001603, 3e-06, 2e-06, 1e-06, 1e-06, + 2e-06, 1e-06, 4.5e-05, 3e-06, 6.7e-05, 1.2e-05, 1e-06, 1e-06, + 6.7e-05, 1.9e-05, 1e-06, 1e-06, 1e-05, 1.9e-05, 5.9e-05, 2e-06, + 9.3e-05, 2e-06, 0.000219, 0.000245, 0.000208, 0.000262, 0.000498, + 0.000251, 0.000244, 0.000246, 0.000244, 0.000247, 0.02889, 8.1e-05, + 0.000216, 0.000107, 3e-06, 2e-06, 6.9e-05, 0.0005820000000000001, + 0.01628, 0.00018, 5.4e-05, 0.000269, 0.015699, 2.2e-05, 0.000102, + 0.000347, 0.00041, 0.000227, 7.7e-05, 0.0002, 6.2e-05, 0.000236, + 4.8e-05, 0.00018, 7.499999999999999e-05, 0.000302, 9.2e-05, + 0.000167, 0.001491, 0.012937, 0.001596, 3e-06, 2e-06, 2e-06, 1e-06, + 2e-06, 2e-06, 2e-06, 1e-06, 3.4e-05, 3e-06, 7.499999999999999e-05, + 1.8e-05, 1e-06, 1e-06, 1e-06, 6e-05, 2e-06, 9e-06, 5.3e-05, 5e-06, + 2e-05, 1e-05, 0.000295, 0.000242, 0.000245, 0.000522, 0.000488, + 0.000247, 0.000243, 0.000246, 0.000246, 0.028895, 8.2e-05, 0.000303, + 0.000144, 5e-06, 2e-06, 6.8e-05, 0.000595, 0.009254, 0.027474, + 0.012253, 0.000107, 0.000184, 5.8e-05, 0.000119, 0.000216, 4e-05, + 0.000201, 2.2e-05, 0.000263, 4.1e-05, 0.000208, + 6.999999999999999e-05, 0.000266, 3.7e-05, 0.000167, 0.001494, + 0.013389, 0.001558, 4e-06, 2e-06, 1e-06, 2e-06, 1e-06, 1e-06, + 3.8e-05, 3e-06, 6.1e-05, 1e-06, 1e-06, 4.2e-05, 4e-06, 5.6e-05, + 4e-06, 1e-06, 3e-05, 8e-06, 5.4e-05, 1e-06, 1e-06, 2.6e-05, + 0.000256, 0.000241, 0.000244, 0.000553, 0.000246, 0.00022, 0.00024, + 0.000244, 0.000247, 0.000213, 0.028935, 8.899999999999999e-05, + 0.000214, 8.2e-05, 4e-06, 2e-06, 5.9e-05, 0.000562, 0.032548, + 0.000119, 0.000226, 0.0003, 0.000213, 4e-05, 0.000167, 3.3e-05, + 0.000333, 0.000132, 0.000208, 9.1e-05, 0.000296, 0.000118, 0.000181, + 0.00152, 0.013032, 0.001587, 4e-06, 2e-06, 1e-06, 2e-06, 2e-06, + 2e-06, 3.8e-05, 2e-06, 8.1e-05, 1e-06, 0, 1.6e-05, 1e-06, 5e-05, + 4e-06, 5.6e-05, 1e-06, 1e-06, 3.1e-05, 9e-06, 2.8e-05, 9e-06, + 0.00026, 0.000242, 0.000249, 0.000486, 0.000245, 0.000245, 0.000348, + 0.000419, 0.000279, 0.028802, 8.3e-05, 0.000286, 0.000115, 4e-06, + 2e-06, 5.9e-05, 0.000559, 0.000241, 0.002101, 3.5e-05, 0.030066, + 0.000106, 0.000205, 0.001807, 0.000205, 7.2e-05, 0.000191, 3e-05, + 0.000302, 0.000137, 0.000201, 8.899999999999999e-05, 0.000306, + 0.000116, 0.000325, 0.001743, 0.011198, 0.001645, 3e-06, 2e-06, + 2e-06, 1e-06, 2e-06, 1e-06, 1e-05, 3.5e-05, 2e-06, 6.7e-05, 2e-06, + 0, 4.5e-05, 8e-06, 2.2e-05, 3.3e-05, 8e-06, 7.1e-05, 1.4e-05, 1e-06, + 1e-06, 2.7e-05, 0.000255, 0.00024, 0.000243, 0.0005240000000000001, + 0.000242, 0.000246, 0.000282, 0.000452, 0.000251, 0.045419, + 8.500000000000001e-05, 0.000254, 6.1e-05, 2e-06, 3e-06, 6.9e-05, + 0.000559, 0.032483, 7.2e-05, 0.000221, 0.000143, 0.000211, 7.4e-05, + 0.0002, 4.9e-05, 0.000301, 0.000129, 0.000212, 9.2e-05, 0.000262, + 6e-05, 0.000198, 0.001624, 0.013169, 0.001673, 3e-06, 1e-06, 1e-06, + 2e-06, 2e-06, 1e-06, 4e-05, 3e-06, 6.4e-05, 1e-06, 1e-06, 4.8e-05, + 6e-06, 1.2e-05, 6.3e-05, 2e-06, 5.2e-05, 2e-06, 1e-06, 0, 3.5e-05, + 1e-06, 0.000295, 0.000239, 0.000243, 0.000492, 0.000243, 0.000278, + 0.00031, 0.000424, 0.000219, 0.028386, 0.000228, 5.4e-05, 0.000213, + 3.5e-05, 0.000238, 0.007959000000000001, 2.2e-05, 7.1e-05, 0.000481, + 0.000111, 4e-06, 1e-06, 6.8e-05, 0.000623, 0.038715, 0.010124, + 0.000116, 0.000228, 6.2e-05, 0.002913, 0.000265, 2.1e-05, 0.000179, + 1.5e-05, 1.3e-05, 0.000229, 3.9e-05, 0.000196, 3.5e-05, 0.000269, + 7.3e-05, 0.000191, 5.3e-05, 0.000247, 2.2e-05, 0.000177, 0.001569, + 0.010022, 0.001705, 3e-06, 2e-06, 1e-06, 1e-06, 3e-06, 1e-06, 1e-06, + 1e-06, 3.6e-05, 2e-06, 6.499999999999999e-05, 1e-06, 1e-06, 6e-05, + 1e-06, 1e-06, 5.6e-05, 1e-06, 4.2e-05, 4e-06, 1.7e-05, 2e-06, + 0.000327, 0.000232, 0.00025, 0.000239, 0.000501, 0.000215, 0.000245, + 0.000244, 0.000246, 0.000325, 0.02873, 8.7e-05, 0.000337, 0.000112, + 3e-06, 2e-06, 5.5e-05, 0.00056, 0.032383, 0.000119, 0.000246, + 0.001701, 0.000251, 0.004701, 0.000195, 0.006657, 0.027981, 7.3e-05, + 0.00024, 0.019186, 0.000333, 7.7e-05, 0.000241, 0.037189, 0.272651, + 0.227517, 6e-06, 2e-06, 2e-06, 1e-06, 2e-06, 3.7e-05, 2e-06, + 3.4e-05, 2e-06, 0.0006089999999999999, 1.8e-05, 3e-06, + 6.499999999999999e-05, 3e-06, 5.6e-05, 9e-06, 3e-06, 1e-06, + 6.499999999999999e-05, 5e-06, 1e-06, 0.000207, 9e-06, 2e-06, 1e-06, + 1e-06, 0.000442, 9e-06, 1e-06, 2e-06, 1e-06, 1e-06, 3.5e-05, + 0.000105, 1.2e-05, 7.499999999999999e-05, 3e-06, 1e-06, 1e-06, + 1e-06, 1e-06, 1e-06, 0.00047, 3e-06, 2e-06, 1e-06, 1e-06, 1e-06, + 1e-06, 0.000255, 4e-06, 1e-06, 2e-06, 1e-06, 1e-06, 2e-06, 0.000462, + 4e-06, 2e-06, 1e-06, 1e-06, 1e-06, 1e-06, 0.000234, 4e-06, 1e-06, + 1e-06, 1e-06, 0.00024, 6e-06, 1e-06, 2e-06, 1e-06, 0.000236, 5e-06, + 1e-06, 1e-06, 1e-06, 0.000256, 4e-06, 1e-06, 1e-06, 1e-06, 0.00022, + 2e-06, 1e-06, 0.000242, 4e-06, 2e-06, 0.000241, 5e-06, 2e-06, + 0.000233, 3e-06, 2e-06, 0.000239, 5e-06, 2e-06, 0.000238, 4e-06, + 1e-06, 0.00024, 5e-06, 1e-06, 0.000239, 3e-06, 1e-06, 0.000245, + 0.000279, 0.000142, 0.000114, 8.7e-05, 5e-06, 0.000157, 0.000225, + 0.000241, 6.2e-05, 0.000185, 6.2e-05, 4e-06, 0.000144, 0.000247, + 0.000255, 6.600000000000001e-05, 0.00017, 7.499999999999999e-05, + 1.5e-05, 0.000168, 0.000258, 6.8e-05, 0.000165, 7.7e-05, 5e-06, + 0.000145, 0.000242, 6.8e-05, 0.00018, 9.8e-05, 5e-06, 0.000169, + 0.000265, 0.000232, 5.3e-05, 2.5e-05, 5e-06, 0.009259, 0.039637, + 0.00865, 2.8e-05, 5e-06, 5e-06, 0.009263, 2.7e-05, 0.087632, 6e-05, + 0.000318, 1.4e-05, 1.6e-05, 2e-06, 5e-06, 4.2e-05, 0.00032, + 0.037569, 0.703033, 0.214916, 0.64994, 0.04462, 0.302059, 0.999951, + 0.137821, 0.039703, 0.027832, 0.000366, 1.7e-05, 0.000111, 0.000346, + 0.000131, 0.00019, 4.5e-05, 4e-06, 2e-06, 3.8e-05, 0.000618, + 0.036949, 0.0052, 0.000138, 0.0002, 0.000107, 9.399999999999999e-05, + 4e-06, 5.9e-05, 0.000579, 0.032121, 0.000118, 1.5e-05, 3.3e-05, + 3e-06, 0.000374, 0.000259, 6e-06, 0.00016, 5.3e-05, + 6.600000000000001e-05, 0.036463, 0.00435, 0.000131, 0.0002, + 0.016695, 0.000124, 0.000254, 7.7e-05, 0.000202, 6.9e-05, 0.000174, + 4.5e-05, 0.000229, 6.7e-05, 0.000176, 0.038503, 0.271061, 0.036943, + 0.003036, 0.307457, 0.23321, 0.029976, 0.000198, 0.62617, 3e-05, + 0.000353, 1.9e-05, 1e-05, 2e-06, 0.109966, 0.651886, 0.213682, + 4.9e-05, 2.7e-05, 0.000236, 1e-05, 4.6e-05, 2e-06, 0.00011, 2e-06, + 0.000152, 1e-06, 0.133729, 0.609789, 0.031985, 2.2e-05, 9.6e-05, + 0.016657, 9.1e-05, 0.000312, 0.000155, 0.000175, 3.6e-05, 0.000326, + 0.000222, 5e-06, 4.3e-05, 4e-06, 3.9e-05, 1.9e-05, 2.4e-05, 2.7e-05, + 2e-06, 5.9e-05, 0.000446, 2e-05, 3e-06, 5.8e-05, 2e-06, 6e-05, + 3e-06, 5.8e-05, 1e-05, 3e-06, 2e-06, 6.2e-05, 0.000145, 4e-06, + 1e-06, 1e-06, 3.7e-05, 0.000475, 4e-06, 2e-06, 1e-06, 2e-06, + 3.5e-05, 9e-06, 3.5e-05, 1e-06, 0.00041, 8e-06, 2e-06, 1e-06, 1e-06, + 2e-06, 1e-06, 3.9e-05, 2e-06, 0.000412, 4e-06, 2e-06, 1e-06, 1e-06, + 2e-06, 1e-06, 1e-06, 3.9e-05, 0.000437, 4e-06, 2e-06, 1e-06, 2e-06, + 1e-06, 1e-06, 2e-06, 1e-06, 0.000476, 4e-06, 2e-06, 1e-06, 2e-06, + 1e-06, 1e-06, 1e-06, 1e-06, 0.000455, 5e-06, 1e-06, 1e-06, 1e-06, + 1e-06, 1e-06, 0.000236, 1e-06, 2e-06, 1e-06, 1e-06, 0.000242, 5e-06, + 2e-06, 1e-06, 0.000302, 7e-06, 1e-06, 2e-06, 0.000174, 4e-06, 2e-06, + 1e-06, 0.000263, 3e-06, 2e-06, 1e-06, 0.000206, 5e-06, 1e-06, 2e-06, + 0.000263, 9e-06, 2e-06, 1e-06, 0.000241, 1.1e-05, 2e-06, 1e-06, + 0.000262, 1.9e-05, 3e-06, 1e-06, 0.000223, 1.9e-05, 0.000224, + 0.000248, 0.000244, 0.000217, 0.00024, 0.000244, 0.000246, 0.000221, + 0.000274, 0.000241, 0.000212, 0.000277, 0.000213, 0.000281, + 0.000242, 0.000245, 0.000244, 0.000246, 0.000244, 0.00025, 0.00024, + 0.000247, 0.000244, 0.000242, 0.001342, 0.000379, 0.034867, + 0.000105, 0.000224, 9.3e-05, 0.000182, 2.7e-05, 0.00026, 3.4e-05, + 0.000379, 0.039497, 0.5442, 0.357434, 1.099135, 0.041655, 0.85846, + 0.09723900000000001, 0.311746, 0.29389, 0.394283, 0.308007, + 0.445888, 0.148214, 0.097913, 0.307962, 0.692039, 0.307906, + 0.593507, 0.056654, 0.041922, 0.033815, 0.274117, + 0.8501919999999999, 4.8e-05, 4e-05, 5.2e-05, 0.000176, 3.5e-05, + 7.8e-05, 4.1e-05, 3.9e-05, 1.4e-05, 3.8e-05, 2e-05, 1e-05, 5e-06, + 3e-05, 1.3e-05, 0.14915, 0.026055, 0.003791, 0.562937, 1.999277, + 1.065992, 0.000143, 0.523873, 0.311931, 0.028066, 0.069262, + 0.239786, 1.759471, 0.246945, 0.756221, 0.697726, 0.000743, + 0.297642, 0.003465, 0.913362, 1.3e-05, 0.0866, 0.081234, 0.025897, + 0.050497, 0.259128, 0.014569, 0.564476, 0.004333, 0.312601, + 0.003488, 0.683764, 0.995133, 0.004903, 0.270456, + 0.6224730000000001, 0.000158, 0.161523, 0.000449, 2e-05, 0.000129, + 0.000428, 0.000134, 0.000275, 0.000131, 0.000373, 8.8e-05, 0.000344, + 7.6e-05, 0.000289, 9.899999999999999e-05, 0.000266, 0.00011, + 0.000218, 0.000129, 0.000203, 3.2e-05, 0.000265, + 8.899999999999999e-05, 0.000232, 7.9e-05, 0.000238, 0.000368, + 0.000233, 0.000121, 0.000228, 0.000164, 5e-06, 3e-06, 2e-06, 1e-06, + 8.8e-05, 0.000565, 0.000216, 0.034407, 0.000127, 0.000216, 5.8e-05, + 3e-06, 5.7e-05, 0.000566, 0.032524, 0.000164, 1.9e-05, 8e-06, + 2.2e-05, 1.4e-05, 1.4e-05, 4.4e-05, 0.000401, 5.6e-05, 9.6e-05, + 7e-06, 0.000133, 8e-06, 0.000248, 1.3e-05, 1e-06, 0.000302, 7.6e-05, + 0.036992, 0.028077, 0.000239, 0.000188, 0.016701, 0.000103, + 0.000332, 0.000134, 0.000307, 0.00013, 0.000323, 0.000139, 0.000212, + 0.000116, 0.000175, 0.037659, 0.132015, 0.312029, 0.297586, + 1.336091, 0.663151, 1.295715, 0.703577, 0.296261, 0.101385, 0.22987, + 0.000233, 0.434696, 0.000419, 3.6e-05, 0.000159, 0.000332, 0.000899, + 0.000119, 0.00019, 0.0352, 0.144224, 0.05227, 0.149337, 0.185305, + 0.000393, 0.184107, 5.8e-05, 0.000343, 0.183449, 0.000685, 0.000284, + 1.5e-05, 0.000102, 0.000448, 0.00037, 1.8e-05, 0.000112, 0.000401, + 0.00012, 0.00029, 0.000119, 0.000243, 6.4e-05, 0.000177, 5.4e-05, + 0.000188, 5.4e-05, 0.000279, 9.2e-05, 0.000504, 0.000166, 1.5e-05, + 5.4e-05, 0.000175, 1.5e-05, 7.7e-05, 0.000155, 1.5e-05, 0.000101, + 0.000401, 0.000268, 0.000207, 0.0001, 0.000145, + 0.0009700000000000001, 7.2e-05, 0.036994, 0.14733, 0.010867, + 0.037774, 0.056528, 0.10916, 0.000384, 1e-05, 2.9e-05, 0.000265, + 0.037653, 0.175573, 1.9e-05, 0.676889, 0.702174, 0.297846, 1.701447, + 0.066121, 5e-06, 5e-06, 2e-06, 2e-06, 3e-06, 1e-06, 2e-06, 3e-06, + 2e-06, 0.000725, 1.9e-05, 2e-06, 1e-06, 1e-06, 1e-06, 1e-06, + 6.999999999999999e-05, 2e-05, 2e-06, 3e-06, 1e-06, 1e-06, 1e-06, + 0.000218, 7e-06, 1e-06, 1e-06, 1e-06, 7.2e-05, 0.000155, 6e-06, + 1e-06, 1e-06, 1e-06, 0.000256, 3e-06, 2e-06, 1e-06, 0.000559, + 1.6e-05, 0.000227, 0.000299, 2.6e-05, 0.00012, 0.000264, 1.5e-05, + 0.000238, 1.5e-05, 1.4e-05, 0.000224, 0.000234, 1.5e-05, 0.000223, + 0.006457, 2.2e-05, 0.016599, 0.07625899999999999, 0.238719, + 0.000408, 0.037377, 0.08400299999999999, 0.003761, 0.124235, + 0.003565, 1.337726, 1.999245, 1.075482, 2.9e-05, 0.000378, 2e-05, + 9e-06, 2e-06, 1.8e-05, 6e-06, 0.923339, 1.999252, 1.10893, 0.003052, + 0.887231, 1.999357, 1.735131, 0.000561, 0.263547, 1.066412, + 0.000189, 6.7e-05, 0.932557, 0.069161, 0.000414, 1.7e-05, 0.000328, + 0.076215, 0.148162, 1.6e-05, 0.000117, 0.119362, 0.000372, 1.7e-05, + 0.7902090000000001, 0.794934, 0.918648, 0.0002, 1.080404, 0.413585, + 3.6e-05, 0.000285, 5.5e-05, 4e-06, 2.5e-05, 5e-06, 0.091326, + 0.003882, 0.572217, 7e-06, 4e-06, 2e-06, 2e-06, 8e-06, 4.3e-05, + 2e-06, 2e-06, 3.3e-05, 0.000581, 2.4e-05, 3e-06, 2e-06, 2e-06, + 2e-06, 2e-06, 0.000154, 6e-06, 2e-06, 2e-06, 2e-06, 0.000242, + 1.4e-05, 3e-06, 6.600000000000001e-05, 9e-06, 0.00015, 6.8e-05, + 2e-05, 0.000135, 6.7e-05, 1.3e-05, 0.000447, 6.3e-05, 6e-06, + 0.000211, 5e-06, 0.000197, 0.000266, 1.8e-05, 1.8e-05, 0.000206, + 5.2e-05, 1e-05, 0.070046, 1.1e-05, 0.844631, 1.999285, 0.37526, + 0.269128, 0.000144, 0.428814, 0.000377, 2e-05, 0.000132, 0.000335, + 0.000146, 0.00032, 0.00014, 0.000315, 9.000000000000001e-05, + 0.000326, 7.8e-05, 0.000348, 0.000138, 0.000309, 0.000191, 0.000269, + 9.2e-05, 0.000228, 8.1e-05, 0.000333, 0.000478, 0.000208, 0.000122, + 0.000251, 0.000158, 6e-06, 3e-06, 2e-06, 2e-06, 3.7e-05, 0.000592, + 0.000243, 0.026904, 0.000156, 0.000307, 0.000234, 1.1e-05, 5.5e-05, + 0.000566, 0.032068, 0.000263, 5.9e-05, 4.3e-05, 4.5e-05, 4.2e-05, + 4.2e-05, 4e-05, 0.000202, 0.000138, 3.5e-05, 2.2e-05, 3e-05, + 0.000149, 0.000149, 3e-05, 5.4e-05, 0.000164, 2.8e-05, 0.000127, + 0.03696, 0.019837, 0.00032, 0.000252, 0.016369, 0.000222, 0.000284, + 0.000233, 0.000254, 0.00022, 0.000266, 0.000239, 0.000251, 0.000192, + 0.000192, 0.037031, 1.7e-05, 0.116766, 0.192277, 0.435377, 0.091586, + 3.1e-05, 0.000373, 1.9e-05, 1e-05, 2e-06, 0.000261, 1.4e-05, + 0.280014, 0.023348, 3.2e-05, 2.9e-05, 0.000314, 2.2e-05, 1.2e-05, + 2e-06, 0.000253, 1.7e-05, 0.975979, 0.62699, 0.37293, + 0.9999749999999999, 0.626341, 0.492913, 0.014529, 0.570348, + 0.076026, 0.235104, 0.003504, 0.606799, 0.126116, 0.99708, 0.306968, + 0.005815, 0.563343, 0.123881, 0.303074, 0.697012, 0.303014, + 0.075444, 0.000103, 0.496756, 0.124502, 0.303213, + 0.06970899999999999, 0.6271060000000001, 0.303057, 0.571645, + 0.428396, 1.129816, 0.441094, 1.216598, 0.184097, 0.598553, + 1.762639, 0.000133, 0.236455, 0.700106, 0.025727, 0.876292, + 0.003488, 0.124494, 0.00356, 0.265654, 0.031362, 0.997795, + 0.9701149999999999, 0.029865, 0.913193, 0.000163, + 0.08662400000000001, 0.969381, 0.030588, 1.000004, 0.968747, + 1.999191, 0.181717, 0.003031, 0.476371, 0.000189, 0.498117, + 0.001757, 0.094473, 0.070796, 0.257284, 0.415613, 0.324319, + 0.103689, 3e-05, 0.000304, 1.9e-05, 1.3e-05, 1e-06, + 0.09349499999999999, 2.2e-05, 0.042766, 0.496198, 0.263337, + 0.138729, 0.028411, 0.088029, 0.031219, 0.388701, 0.324931, + 0.266295, 0.268827, 0.235355, 0.105707, 1.7e-05, 0.123881, 0.381654, + 0.076361, 0.09857399999999999, 0.11765, 0.07213, 0.144328, 0.047985, + 0.061286, 0.019094, 0.083081, 0.000315, 1.3e-05, 0.171753, 0.072075, + 0.152366, 0.031976, 0.46934, 0.197771, 0.036378 }; +#endif //TEST_FUNCTIONS + +}; + +#endif /* DATAPROCESSOR_H_ */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/c5/102fa794c8b500161808a5c64fd2084a b/.metadata/.plugins/org.eclipse.core.resources/.history/c5/102fa794c8b500161808a5c64fd2084a new file mode 100644 index 0000000..347d5ab --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/c5/102fa794c8b500161808a5c64fd2084a @@ -0,0 +1,1967 @@ +/* + * DataProcessor.cpp + * + * Created on: 14 de jun de 2016 + * Author: apaschoalon + */ + +#include "DataProcessor.h" + +DataProcessor::DataProcessor() +{ + //nothing to do at all +} + +DataProcessor::~DataProcessor() +{ + //nothing to do at all +} + +string DataProcessor::toString(void) +{ + string dataProcessor; + + dataProcessor = + "Used to calculate parameters of network flows; has no state."; + + return (dataProcessor); +} + +int DataProcessor::calculate(const string& experimentName, + DatabaseInterface* databaseInterface, NetworkTrace* netTrace) +{ + + //iterator variables + long int fcounter = 0; + long int nflows = 0; + databaseInterface->getNumberOfFlows(experimentName, &nflows); + +#ifdef DEBUG_DataProcessor_calculate + cout << "DataProcessor::calculate() -> Number of flows = " << nflows << endl; +#endif // DEBUG_DataProcessor_calculate + + //protocol variables + string flowStrData = ""; + long int flowIntData = 0; + double startDalay = 0; //time of the fist packet of the flow + double flowDuration = 0; //duration of the flow + list ttlList; + int ttl = 0; + + //flow-level variables + list relativeTime; //time relative to the 1st packet list + long int nKbytes = 0; //Number of kbytes (bytes/1024) of the + + //packetSize variables + list pslist; //packet-size list + long int ps_mostFrequent = 0; + double mean_packetRate = 0; + + //inter-deperture time variables + StochasticModelFit* modelVet = NULL; + list interArrival_list; // list of inter arrival times of a flow + list interArrival_fileStack; + list interArrival_interFileStack; + list interArrival_interSessionStack; + double lastTime = 0; + double idt = 0; + + for (fcounter = 0; fcounter < nflows; fcounter++) + { + + //new network flow + NetworkFlow* netFlow = NetworkFlow::make_flow("dummy"); + + //TODO checar valor retornado de databaseInterface + + //reset temp vars + flowStrData = ""; + flowIntData = 0; + relativeTime.clear(); + pslist.clear(); + interArrival_list.clear(); + interArrival_fileStack.clear(); + interArrival_interFileStack.clear(); + interArrival_interSessionStack.clear(); + + //load packet-size data + databaseInterface->getFlowData(experimentName, fcounter, "frame__len", + pslist); + + //laod time-relative data + databaseInterface->getFlowData(experimentName, fcounter, + "frame__time_relative", relativeTime); + + //evaluate inter-arrival data + //time relative to the begin of the measurement + lastTime = 0; + for (list::iterator it = relativeTime.begin(); + it != relativeTime.end(); it++) + { + idt = *it - lastTime; + interArrival_list.push_back(idt); + lastTime = *it; + } + + //###################################################################### + //Flow-level Options + //###################################################################### + startDalay = relativeTime.front(); + netFlow->setFlowStartDelay(startDalay); + + flowDuration = relativeTime.back() - relativeTime.front(); + netFlow->setFlowDuration(flowDuration); + + //TODO DS byte configuration -- now it is just set to zero + netFlow->setFlowDsByte(0); + + //flow kbytes + for (list::iterator it = pslist.begin(); it != pslist.end(); + it++) + { + nKbytes = nKbytes + *it; + } + nKbytes = nKbytes / 1024; + + netFlow->setNumberOfKbytes(nKbytes); + netFlow->setNumberOfPackets(relativeTime.size()); + + //###################################################################### + //Protocol Options + //###################################################################### + + // + //L3 protocols + //reference http://www.iana.org/assignments/ieee-802-numbers/ieee-802-numbers.xhtml + // + + databaseInterface->getFlowData(experimentName, fcounter, "eth__type", + &flowIntData); + if (flowIntData == IPV4_CODE) + { //IPv4 + netFlow->setNetworkProtocol(PROTOCOL__IPV4); + databaseInterface->getFlowData(experimentName, fcounter, "ip__src", + &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, "ip__dst", + &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + else if (flowIntData == (ARP_CODE || ARP_CODE_REV)) + { //ARP, Frame Relay ARP + netFlow->setNetworkProtocol(PROTOCOL__ARP); + databaseInterface->getFlowData(experimentName, fcounter, "ip__src", + &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, "ip__dst", + &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + else if (flowIntData == IPV6_CODE) + { //IPv6 + netFlow->setNetworkProtocol(PROTOCOL__ICMPV6); + databaseInterface->getFlowData(experimentName, fcounter, + "ipv6__addr", &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, + "ipv6__dst", &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + else + { //default IPv4 + netFlow->setNetworkProtocol(PROTOCOL__IPV4); + databaseInterface->getFlowData(experimentName, fcounter, "ip__src", + &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, "ip__dst", + &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + + //set ttl as the most frequent + databaseInterface->getFlowData(experimentName, fcounter, "ip__ttl", + ttlList); + //ttl = (int) mode(ttlList); + ttl = (int) mode(&ttlList); + netFlow->setNetworkTtl(ttl); + + // + //L4 Protocols + //reference https://en.wikipedia.org/wiki/List_of_IP_protocol_numbers + // + databaseInterface->getFlowData(experimentName, fcounter, "ip__proto", + &flowIntData); + if (flowIntData == ICMP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__ICMP); + } + else if (flowIntData == TCP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__TCP); + databaseInterface->getFlowData(experimentName, fcounter, + "tcp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "tcp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else if (flowIntData == UDP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__UDP); + databaseInterface->getFlowData(experimentName, fcounter, + "udp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "udp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else if (flowIntData == DCCP_CODE) + { + netFlow->setTransportDstPort(PROTOCOL__DCCP); + databaseInterface->getFlowData(experimentName, fcounter, + "dccp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "dccp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else if (flowIntData == GRE_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__GRE); + //TODO não suportado pelo D-ITG + } + else if (flowIntData == ICMPV6_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__ICMPV6); + } + else if (flowIntData == SCTP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__SCTP); + databaseInterface->getFlowData(experimentName, fcounter, + "sctp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "sctp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else + { //default: UDP + netFlow->setTransportProtocol(PROTOCOL__NULL); + //databaseInterface->getFlowData(experimentName, fcounter, "udp__dstport", &flowIntData); + //netFlow->setL4SrcPort(flowIntData); + //databaseInterface->getFlowData(experimentName, fcounter, "udp__srcport", &flowIntData); + //netFlow->setL4DstPort(flowIntData); + } + + //###################################################################### + //Packet Size Model + //###################################################################### + + // + // Constant model: Just set the packet size as the most frequent value + // + //ps_mostFrequent = mode(pslist); + //ps_mostFrequent = mode(&pslist); + //mean_packetRate = ((double) pslist.size() / flowDuration); + //netFlow->setPsConstant(ps_mostFrequent); + //netFlow->setIdtConstant(mean_packetRate); + + // + // Algorithm to choose the priority order of the models + // 1st version: just the constant model + // + //TODO implement a best algorithm + //netFlow->setPsModel1(MODEL__CONSTANT); + + //###################################################################### + //Inter-arrival-time Model + //###################################################################### + + for (list::iterator it = interArrival_list.begin(); + it != interArrival_list.end(); it++) + { + if (*it < FILE_CUT_TIME) + { + interArrival_fileStack.push_back(*it); + } + else if (*it < SESSION_CUT_TIME) + { + interArrival_interFileStack.push_back(*it); + } + else + { + interArrival_interSessionStack.push_back(*it); + } + } + +#ifdef DEBUG_DataProcessor_interArrival + if (fcounter == 0) + { + string file1 = "fileStack"; + string file2 = "interFileStack"; + string file3 = "interSessionStack"; + save_data_on_file(file1, interArrival_fileStack); + save_data_on_file(file2, interArrival_interFileStack); + save_data_on_file(file3, interArrival_interSessionStack); + } +#endif + + netFlow->setInterDepertureTimeModels( + fitModels(interArrival_list, "aic")); + + //TODO set the right model + + //netFlow->setIdtModel1(MODEL__CONSTANT); + + //TODO + + //TODO + + //###################################################################### + //Push-back the flow to Trace Flow-list + //###################################################################### + + netTrace->pushback_Netflow(netFlow); + +#ifdef DEBUG_DataProcessor_calculate_loop + cout << fcounter << ": ps_mostFrequent=" << ps_mostFrequent << endl; + cout << fcounter << ": startDalay=" << startDalay << endl; + cout << fcounter << ": mean_packetRate=" << mean_packetRate << endl; + cout << fcounter << ": idt_constant=" << netFlow->getIdtConstant() << endl; +#endif //DEBUG_DataProcessor_calculate_loop +#ifdef DEBUG_DataProcessor_calculate_loop + cout << fcounter << ": netFlow->getTransportProtocol() = " << netFlow->getTransportProtocol() << endl; + cout << fcounter << ": netFlow->getNetworkProtocol() = " << netFlow->getNetworkProtocol() << endl; + cout << fcounter << ": netFlow->getTransportDstPort() = " << netFlow->getTransportDstPort() << endl; + cout << fcounter << ": netFlow->getFlowDsByte() = " << netFlow->getFlowDsByte() << endl; + cout << fcounter << ": netFlow->getNetworkDstAddr() = " << netFlow->getNetworkDstAddr() << endl << endl; + +#endif //DEBUG_DataProcessor_calculate_loop + + } + +#ifdef DEBUG_DataProcessor_calculate + cout << "netTrace->networkFlow.size() = " << netTrace->networkFlow.size() << endl; + cout << "netTrace->getNumberOfFlows() = " << netTrace->getNumberOfFlows() << endl; +#endif //DEBUG_DataProcessor_calculate + + return (0); +} + +StochasticModelFit* DataProcessor::fitModels(list& empiricalData, + const string& criterion) +{ + //constants + const int numberOfModels = 8; + const int m = empiricalData.size(); //empirical data-size + //vars + int counter = 0; + StochasticModelFit* modelVet = NULL; + vec paramVec = zeros(2); + vec infoCriterion = zeros(2); + + if (m == 1) + { + modelVet = new StochasticModelFit[1]; + + //Constant + modelVet[0].aic = datum::inf; + modelVet[0].bic = datum::inf; + modelVet[0].modelName = CONSTANT; + modelVet[0].param1 = empiricalData.begin(); + modelVet[0].param2 = 0; + modelVet[0].size = 1; + + } + else + { + + modelVet = new StochasticModelFit[numberOfModels]; + + //Inter-arrival vec + vec interArrival = zeros(m); + counter = 0; + for (list::iterator it = empiricalData.begin(); + it != empiricalData.end(); it++) + { + interArrival(counter) = *it + min_time; + counter++; + } + //Empirical CDF of interArrival + vec* interArrivalCdf = empiricalCdf(empiricalData); + + //Weibull + weibullFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[0].aic = infoCriterion(0); + modelVet[0].bic = infoCriterion(1); + modelVet[0].modelName = WEIBULL; + modelVet[0].param1 = paramVec(0); + modelVet[0].param2 = paramVec(1); + modelVet[0].size = numberOfModels; + + //normal + normalFitting(interArrival, paramVec, infoCriterion); + modelVet[1].aic = infoCriterion(0); + modelVet[1].bic = infoCriterion(1); + modelVet[1].modelName = NORMAL; + modelVet[1].param1 = paramVec(0); + modelVet[1].param2 = paramVec(1); + modelVet[1].size = numberOfModels; + + //exponential mean + exponentialMeFitting(interArrival, paramVec, infoCriterion); + modelVet[2].aic = infoCriterion(0); + modelVet[2].bic = infoCriterion(1); + modelVet[2].modelName = EXPONENTIAL_MEAN; + modelVet[2].param1 = paramVec(0); + modelVet[2].param2 = paramVec(1); + modelVet[2].size = numberOfModels; + + //exponential Linear Regression (LR) + exponentialLrFitting(interArrival, *interArrivalCdf, paramVec, + infoCriterion); + modelVet[3].aic = infoCriterion(0); + modelVet[3].bic = infoCriterion(1); + modelVet[3].modelName = EXPONENTIAL_LINEAR_REGRESSION; + modelVet[3].param1 = paramVec(0); + modelVet[3].param2 = paramVec(1); + modelVet[3].size = numberOfModels; + + //pareto linear regression + paretoLrFitting(interArrival, *interArrivalCdf, paramVec, + infoCriterion); + modelVet[4].aic = infoCriterion(0); + modelVet[4].bic = infoCriterion(1); + modelVet[4].modelName = PARETO_LINEAR_REGRESSION; + modelVet[4].param1 = paramVec(0); + modelVet[4].param2 = paramVec(1); + modelVet[4].size = numberOfModels; + + //pareto maximum likehood + paretoMlhFitting(interArrival, *interArrivalCdf, paramVec, + infoCriterion); + modelVet[5].aic = infoCriterion(0); + modelVet[5].bic = infoCriterion(1); + modelVet[5].modelName = PARETO_MAXIMUM_LIKEHOOD; + modelVet[5].param1 = paramVec(0); + modelVet[5].param2 = paramVec(1); + modelVet[5].size = numberOfModels; + + //Cauchy + cauchyFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[6].aic = infoCriterion(0); + modelVet[6].bic = infoCriterion(1); + modelVet[6].modelName = CAUCHY; + modelVet[6].param1 = paramVec(0); + modelVet[6].param2 = paramVec(1); + modelVet[6].size = numberOfModels; + + //Constant + constantFitting(interArrival, paramVec, infoCriterion); + modelVet[7].aic = infoCriterion(0); + modelVet[7].bic = infoCriterion(1); + modelVet[7].modelName = CONSTANT; + modelVet[7].param1 = paramVec(0); + modelVet[7].param2 = paramVec(1); + modelVet[7].size = numberOfModels; + + if (criterion == "bic") + { + qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), + compareBic); + } + else if (criterion == "aic") + { + qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), + compareAic); + } + else + { + cout + << "Error @ DataProcessor::fitModels -> Invalid criterion argument: " + << criterion << endl; + cout << "AIC set as default" << endl; + qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), + compareAic); + + } + +#ifdef DEBUG_StochasticModelFit + //if (modelVet[0].modelName == WEIBULL) + //{ + // cout << modelVet[0].modelName << "aic:bic->" << modelVet[0].aic << ":" << modelVet[0].bic + // << " " << "alpha:betha->" << modelVet[0].param1 + // << modelVet[0].param2 << endl; + // string fileName = "weibulldata_" + std::to_string(abs(modelVet[0].aic)); + // save_data_on_file(fileName, interArrival, *interArrivalCdf); + //} +#endif //DEBUG_StochasticModelFit + + delete interArrivalCdf; + } + + return (modelVet); +} + +inline void DataProcessor::weibullFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //init + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + //linearization + vec y = log(-log(1.0 + diferential - interArrivalCdf)); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double weibull_alpha = theta(1); + double weibull_betha = exp(-theta(0) / theta(1)); + paramVec(0) = weibull_alpha; + paramVec(1) = weibull_betha; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "weibull", paramVec, "aic"); + double bic = informationCriterion(interArrival, "weibull", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; + +} + +inline void DataProcessor::normalFitting(const vec& interArrival, vec& paramVec, + vec& infoCriterion) +{ + double sigma = stddev(interArrival); + double mu = mean(interArrival); + paramVec(0) = mu; + paramVec(1) = sigma; + + //information criterion + double aic = informationCriterion(interArrival, "normal", paramVec, "aic"); + double bic = informationCriterion(interArrival, "normal", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::exponentialLrFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //init + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + //linearization + vec y = log(1.00 + diferential - interArrivalCdf); + //vec y = log(1.00 - interArrivalCdf); + vec x = interArrival; + mat* X = featureMatrix(x); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double exp_lambda = -theta(1); + paramVec(0) = exp_lambda; + paramVec(1) = 0; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "exponential", paramVec, + "aic"); + double bic = informationCriterion(interArrival, "exponential", paramVec, + "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::exponentialMeFitting(const vec& interArrival, + vec& paramVec, vec& infoCriterion) +{ + paramVec(0) = 1.0 / mean(interArrival); + paramVec(1) = 0; + + //information criterion + double aic = informationCriterion(interArrival, "exponential", paramVec, + "aic"); + double bic = informationCriterion(interArrival, "exponential", paramVec, + "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::paretoLrFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //init + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + //linearization + vec y = log(1.00 + diferential - interArrivalCdf); + //vec y = log(1.00 - interArrivalCdf); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double pareto_alpha = -theta(1); + double pareto_xm = interArrival.min(); + paramVec(0) = pareto_alpha; + paramVec(1) = pareto_xm; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "pareto", paramVec, "aic"); + double bic = informationCriterion(interArrival, "pareto", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::paretoMlhFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + double pareto_xm = interArrival.min(); + int m = interArrival.size(); + //vec logDiff = log(interArrival) - log(ones(m) * pareto_xm); + vec logDiff = log(interArrival) - log(pareto_xm); + double pareto_alpha = double(m) / (sum(logDiff)); + paramVec(0) = pareto_alpha; + paramVec(1) = pareto_xm; + + //information criterion + double aic = informationCriterion(interArrival, "pareto", paramVec, "aic"); + double bic = informationCriterion(interArrival, "pareto", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::cauchyFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //initialization + int iterations = 1500; + double learning_rate = 0.01; + int m = interArrival.size(); + double minInterArrival = interArrival.min(); + double y_max = 1.0 / minInterArrival; + vec y = tan(datum::pi * (interArrivalCdf - 0.5)); + for (int i = 0; i < m; i++) + { + //avoid too high numbers when tan() tends to infinity + if (y(i) > y_max) + y(i) = y_max; + } + + //linearization + vec J_history = zeros(iterations); + vec theta = zeros(2); + mat* X = featureMatrix(interArrival); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double cauchy_gamma = double(1.0) / theta(1); + double cauchy_x0 = -theta(0) / theta(1); + paramVec(0) = cauchy_gamma; + paramVec(1) = cauchy_x0; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "cauchy", paramVec, "aic"); + double bic = informationCriterion(interArrival, "cauchy", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; + +} + +void DataProcessor::constantFitting(const vec& interArrival, vec& paramVec, + vec& informationCriterion) +{ + paramVec(0) = mean(interArrival); + paramVec(1) = 0; + informationCriterion(0) = datum::inf; + informationCriterion(1) = datum::inf; +} + +template bool DataProcessor::isEqual(const T* vet1, const T* vet2, + const int size) +{ + for (int i = 0; i < size; i++) + { + if (vet1[i] != vet2[i]) + { + return (false); + } + } + + return (true); +} + +template void DataProcessor::vectorC_to_list(list* theList, + T* vet, int size) +{ + for (int i = 0; i < size; i++) + { + theList->push_back(vet[i]); + } +} + +template +void DataProcessor::quickSort(T* vet, int left, int right) +{ + int p = left; + int i = 0; + T ch = 0; + int j = 0; + + for (i = left + 1; i <= right; i++) + { + j = i; + if (vet[j] < vet[p]) + { + ch = vet[j]; + while (j > p) + { + vet[j] = vet[j - 1]; + j--; + } + vet[j] = ch; + p++; + } + } + if (p - 1 >= left) + quickSort(vet, left, p - 1); + if (p + 1 <= right) + quickSort(vet, p + 1, right); +} + +template +T DataProcessor::mode(list* theList) +{ + T* vet; + int listSize = theList->size(); + int i = 0; + T candidate = 0; + T prev = 0; + int counter = 0; + int largerCounter = 0; + T mode = 0; + vet = new T[listSize]; + + if (listSize == 0) + { + return (0); + } + + i = 0; + + for (typename list::iterator it = theList->begin(); it != theList->end(); + it++) + { + vet[i] = *it; + i++; + } + + quickSort(vet, 0, listSize - 1); + + prev = vet[0]; + largerCounter = 0; + for (i = 0; i < listSize; i++) + { + candidate = vet[i]; + if (candidate == prev) + { + counter++; + if (counter > largerCounter) + { + largerCounter = counter; + mode = vet[i]; + } + } + else + counter = 1; + + prev = vet[i]; + } + + delete[] vet; + + return (mode); +} + +template +inline T* DataProcessor::list_to_cvector(list* theList) +{ + int listSize = theList->size(); + T* vet; + int i = 0; + + vet = new T[listSize]; + if (listSize == 0) + { + return (0); + } + + i = 0; + for (typename list::iterator it = theList->begin(); it != theList->end(); + it++) + { + vet[i] = *it; + i++; + } + + return (vet); +} +template +inline void DataProcessor::delete_cvector(T* c_vet) +{ + delete[] c_vet; +} + +inline vec* DataProcessor::empiricalCdf(list& empiricalData) +{ + double* cvet_empiricalData = list_to_cvector(&empiricalData); + int data_size = empiricalData.size(); + quickSort(cvet_empiricalData, 0, data_size - 1); + double x = cvet_empiricalData[0]; // anchor - fist element; + int i1 = 0; // fist index + int i2 = 0; + double prob = 0; + vec* interArrivalCdf = new vec(zeros(data_size)); + + for (int i = 0; i < data_size; i++) + { + if (cvet_empiricalData[i] > x) + { + i2 = i - 1; + prob = double(i) / data_size; + for (int j = i1; j <= i2; j++) + { + (*interArrivalCdf)(j) = prob; + } + i1 = i; + x = cvet_empiricalData[i]; + } + } + //last position == 1 + (*interArrivalCdf)(data_size - 1) = 1; + + delete_cvector(cvet_empiricalData); + return (interArrivalCdf); +} + +inline mat* DataProcessor::featureMatrix(list& empiricalData) +{ + int data_size = empiricalData.size(); + mat* featureMatrix = new mat(ones(data_size, 2)); + + int i = 0; + for (list::iterator it = empiricalData.begin(); + it != empiricalData.end(); it++) + { + (*featureMatrix)(i, 1) = *it; + i++; + } + + return (featureMatrix); + +} + +inline mat* DataProcessor::featureMatrix(const vec& empiricalData) +{ + int data_size = empiricalData.size(); + mat* featureMatrix = new mat(ones(data_size, 2)); + for (int i = 0; i < data_size; i++) + { + (*featureMatrix)(i, 1) = empiricalData(i); + } + + return (featureMatrix); +} + +inline double DataProcessor::computeCost(const mat& X, const vec& y, + const vec& theta) +{ + double J = .0; + double jtemp = .0; + int m = y.size(); + + for (int i = 0; i < m; i++) + { + jtemp = jtemp + pow(double(theta(0) + theta(1) * X(i, 1) - y(i)), 2); + + } + J = (1.0 / double(2 * m)) * jtemp; + + return (J); +} + +inline void DataProcessor::gradientDescendent(const mat& X, const vec& y, + const double learning_rate, const int num_iters, vec& theta, + vec& J_history) +{ + + int m = y.n_rows; //number of training examples + double temp1 = .0; + double temp2 = .0; + double delta1 = .0; + double delta2 = .0; + vec x = X.col(1); + + for (int i = 0; i < num_iters; i++) + { + temp1 = .0; + temp2 = .0; + delta1 = .0; + delta2 = .0; + + //slope + delta1 = sum(theta(0) + theta(1) * x - y) / double(m); + delta2 = sum((theta(0) + theta(1) * x - y) % x) / double(m); + + //linear regression + temp1 = theta(0) - learning_rate * delta1; + temp2 = theta(1) - learning_rate * delta2; + + theta(0) = temp1; + theta(1) = temp2; + + //Save the cost J in every iteration + J_history(i) = computeCost(X, y, theta); + + } + +} + +inline double DataProcessor::informationCriterion(const vec& data, + const string& functionName, const vec& paramVet, + const string& criterion) +{ + double criterionVal = .0; + double nEstimatedParameters = double(paramVet.size()); + double likehoodLogVal = logLikehood(data, functionName, paramVet); + double logDataLen = log(double(data.size())); + + if (criterion == "aic") + { + criterionVal = 2 * nEstimatedParameters - 2 * likehoodLogVal; + } + else if (criterion == "bic") + { + criterionVal = nEstimatedParameters * logDataLen - 2 * likehoodLogVal; + } + else + { + cout << "\nInvalid functionName or no functionName selected: " + << functionName << endl; + printf("Selecting default criterion: AIC\n"); + criterionVal = 2 * nEstimatedParameters - 2 * likehoodLogVal; + } + + return (criterionVal); + +} + +inline double DataProcessor::logLikehood(const vec& data, + const string& functionName, const vec& paramVet) +{ + double param1 = paramVet(0); + double param2 = paramVet(1); + double m = data.size(); + double L = .0; + int i = 0; + vec data_prob = zeros(size(data)); + + if (functionName == "weibull") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_weibull(data(i), param1, param2); + } + else if (functionName == "normal") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_normal(data(i), param1, param2); + } + else if (functionName == "uniform") + { + data_prob = ones(size(data)) * pdf_uniform(param1, param2); + } + else if (functionName == "exponential") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_exponential(data(i), param1); + } + else if (functionName == "pareto") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_pareto(data(i), param1, param2); + } + else if (functionName == "cauchy") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_cauchy(data(i), param1, param2); + } + else + { + cout << "Warning, no valid stochastic function selected: " + << functionName << endl; + printf("Likehood logarithm seted to -Inf (worst as possible)\n"); + return (datum::inf); + } + + L = sum(log(data_prob)); + return (L); + +} + +inline double DataProcessor::pdf_weibull(double x, double alpha, double betha) +{ + if (x >= 0) + return ((alpha / pow(betha, alpha)) * pow(x, alpha - 1.0) + * exp(-(pow(x / betha, alpha)))); + else + return (.0); +} + +inline double DataProcessor::cdf_weibull(double x, double alpha, double betha) +{ + if (x >= 0) + return (1.0 - exp(-pow(x / betha, alpha))); + else + return (.0); +} + +inline double DataProcessor::pdf_exponential(double x, double lambda) +{ + if (x >= 0) + return (lambda * exp(-lambda * x)); + else + return (.0); + +} + +inline double DataProcessor::cdf_exponential(double x, double lambda) +{ + if (x >= 0) + return (1.0 - exp(-lambda * x)); + else + return (.0); +} + +inline double DataProcessor::pdf_pareto(double x, double alpha, double xm) +{ + if (x >= xm) + return (alpha * pow(xm, alpha) / (pow(x, alpha + 1.0))); + else + return (.0); +} + +inline double DataProcessor::cdf_pareto(double x, double alpha, double xm) +{ + if (x >= xm) + return (1.0 - pow(xm / x, alpha)); + else + return (.0); +} + +inline double DataProcessor::pdf_cauchy(double x, double gamma, double x0) +{ + return (1 / (datum::pi * gamma) + * (pow(gamma, 2) / (pow(x - x0, 2) + pow(gamma, 2)))); +} + +inline double DataProcessor::cdf_cauchy(double x, double gamma, double x0) +{ + return ((1 / datum::pi) * atan((x - x0) / (gamma)) + 0.5); +} + +inline double DataProcessor::pdf_normal(double x, double mu, double sigma) +{ + return (1 / (sqrt(2 * datum::pi) * sigma) + * exp(-0.5 * pow((x - mu) / sigma, 2))); +} + +inline double DataProcessor::cdf_normal(double x, double mu, double sigma) +{ + return (0.5 * (1 + erf((x - mu) / (sigma * sqrt(2))))); +} + +inline double DataProcessor::pdf_uniform(double x_min, double x_max) +{ + return (1.0 / (x_max - x_min)); +} + +inline double DataProcessor::cdf_uniform(double x, double x_min, double x_max) +{ + if (x < x_min) + return (0); + else if (x > x_max) + return (1); + else + return ((x - x_min) / (x_max - x_min)); +} + +#ifdef TEST_FUNCTIONS + +void DataProcessor::printTestResult(string testName, bool result) +{ + string outRes; + if (result == true) + outRes = "ok"; + else + outRes = "failed"; + + cout << testName << ":\t\t" << outRes << endl; +} + +bool DataProcessor::compareDouble(double val1, double val2) +{ + double error = 0; + + error = fabs(double(val1) - double(val2)); + if (error > double(1e-5)) + return (false); + else + return (true); + +} + +bool DataProcessor::compareDouble(double val1, double val2, double acErr) +{ + double error = 0; + + error = fabs(double(val1) - double(val2)); + if (error > double(acErr)) + return (false); + else + return (true); + +} + +bool DataProcessor::compareMat(mat& mat1, mat& mat2) +{ + int mat1_nc = mat1.n_cols; + int mat1_nr = mat1.n_rows; + int mat2_nc = mat2.n_cols; + int mat2_nr = mat2.n_rows; + + if ((mat1_nc != mat2_nc) || (mat1_nr != mat2_nr)) + { + cout << "mat1.n_cols and mat2.n_cols dont match. " << mat1_nc << ":" + << mat2_nc << " " << mat1_nr << ":" << mat2_nr << endl; + return (false); + } + for (int i = 0; i < mat1_nr; i++) + { + for (int j = 0; j < mat1_nc; j++) + { + if (compareDouble(mat1(i, j), mat2(i, j), 1e-5)) + { + //cout << " mat1(" << i << ", " << j << " ) = " << mat1(i,j); + //cout << " mat2(" << i << ", " << j << " ) = " << mat2(i,j); + return (false); + } + } + } + + return (true); +} + +void DataProcessor::save_data_on_file(const string& fileName, const mat& vet1, + const mat& vet2) +{ + string file_out = fileName + ".txt"; + int m = vet1.size(); + + ofstream writeOnFile(file_out, ios::out); + if (!writeOnFile) + { + cerr << "file could not be oppeded" << endl; + exit(1); + } + + for (int i = 0; i < m; i++) + { + writeOnFile << vet1(i) << " " << vet2(i) << endl; + } + +} + +void DataProcessor::save_data_on_file(const string& fileName, + list& theList) +{ + string file_out = fileName + ".txt"; + //int m = theList.size(); + + ofstream writeOnFile(file_out, ios::out); + if (!writeOnFile) + { + cerr << "file could not be oppeded" << endl; + exit(1); + } + + for (list::iterator it = theList.begin(); it != theList.end(); it++) + { + //list::iterator it = randInt_list1.begin(); + writeOnFile << *it << " \n"; + } +} + +bool DataProcessor::test_Mode() +{ + + int randint1[] = + { 1, 8, 1, 13, 9, 2, 1, 15, 4, 3, 10, 4, 13, 2, 14, 7, 7 }; + int randint1_mode = 1; + list l_randint1; + vectorC_to_list(&l_randint1, randint1, 17); + + int randint2[] = + { 5, 3, 6, 8, 14, 9, 11, 9, 11, 15, 8, 7, 12, 13, 14 }; + int randint2_mode = 8; + list l_randint2; + vectorC_to_list(&l_randint2, randint2, 15); + + int randint3[] = + { 9, 10, 6, 3, 13, 13, 14, 7, 7, 1, 5, 1, 8, 5, 9, 2, 3, 4, 5, 6, 6, 6 }; + int randint3_mode = 6; + list l_randint3; + vectorC_to_list(&l_randint3, randint3, 22); + + int randint4[] = + { 2, 1 }; + int randint4_mode = 1; + list l_randint4; + vectorC_to_list(&l_randint4, randint4, 2); + + int randint5[] = + { 1, 1, 1, 1, 1, 2, 2, 2, 2, 2 }; + int randint5_mode = 1; + list l_randint5; + vectorC_to_list(&l_randint5, randint5, 10); + + if (mode(&l_randint1) != randint1_mode) + return (false); + if (mode(&l_randint2) != randint2_mode) + return (false); + if (mode(&l_randint3) != randint3_mode) + return (false); + if (mode(&l_randint4) != randint4_mode) + return (false); + if (mode(&l_randint5) != randint5_mode) + return (false); + + return (true); +} + +bool DataProcessor::test_QuickSort() +{ + int randIntA[] = + { 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; + int randIntA_size = 18; + int randIntA_sorted[] = + { 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9 }; + int randIntB[] = + { 9, 2, 3, 3, 12, 15, 8, 14, 2, 7, 4, 6, 10, 2, 12 }; + int randIntB_size = 15; + int randIntB_sorted[] = + { 2, 2, 2, 3, 3, 4, 6, 7, 8, 9, 10, 12, 12, 14, 15 }; + double randDoubleA[] = + { 0.20872, 12.25501, 5.88210, 2.77962, 8.74916, 2.97454, 4.39641, 12.19733, + 4.66014, 4.52477, 5.19375, 12.11314, 13.35458, 11.56941, 6.59435 }; + int randDoubleA_size = 15; + double randDoubleA_sorted[] = + { 0.20872, 2.77962, 2.97454, 4.39641, 4.52477, 4.66014, 5.19375, 5.88210, + 6.59435, 8.74916, 11.56941, 12.11314, 12.19733, 12.25501, 13.35458 }; + + quickSort(randIntA, 0, randIntA_size - 1); + + if (isEqual(randIntA, randIntA_sorted, randIntA_size) == false) + { + return (false); + } + + quickSort(randIntB, 0, randIntB_size - 1); + if (isEqual(randIntB, randIntB_sorted, randIntB_size) == false) + { + return (false); + } + + quickSort(randDoubleA, 0, randDoubleA_size - 1); + if (isEqual(randDoubleA, randDoubleA_sorted, randDoubleA_size) == false) + { + return (false); + } + + return (true); + +} + +bool DataProcessor::test_list_tocvector() +{ + list randInt_list1 = + { 9, 2, 3, 3, 12, 15, 8, 14, 2, 7, 4, 6, 10, 2, 12 }; + list randInt_list2 = + { 2.2, 2.111, 3.16, 6.66, 13, 2.61 }; + list randInt_list3 = + { 1, 2, 3, 4, 5, 6, 6, 5, 4, 3, 2, 1 }; + + int* cvet1 = NULL; + double* cvet2 = NULL; + int* cvet3 = NULL; + + cvet1 = list_to_cvector(&randInt_list1); + cvet2 = list_to_cvector(&randInt_list2); + cvet3 = list_to_cvector(&randInt_list3); + + int i = 0; + for (list::iterator it = randInt_list1.begin(); + it != randInt_list1.end(); it++) + { + if (cvet1[i] != *it) + { + return (false); + } + //cout << *it << " "; + i++; + } + i = 0; + for (list::iterator it = randInt_list2.begin(); + it != randInt_list2.end(); it++) + { + if (cvet2[i] != *it) + { + return (false); + } + //cout << *it << " "; + i++; + } + i = 0; + for (list::iterator it = randInt_list3.begin(); + it != randInt_list3.end(); it++) + { + if (cvet3[i] != *it) + { + return (false); + } + //cout << *it << " "; + i++; + } + + delete_cvector(cvet1); + delete_cvector(cvet2); + delete_cvector(cvet3); + + return (true); +} + +bool DataProcessor::test_empiricalCdf() +{ + list interArrival_sample = + { 5.0000e-07, 1.5000e-06, 1.5000e-06, 2.5000e-06, 2.5000e-06, 3.5000e-06, + 4.5000e-06, 7.5000e-06, 1.2500e-05, 1.9500e-05, 3.1500e-05, + 4.3500e-05, 6.0500e-05, 7.6500e-05, 1.1050e-04, 1.4050e-04, + 1.8150e-04, 2.1150e-04, 2.3350e-04, 2.4350e-04, 2.5650e-04, + 3.0350e-04, 4.1250e-04, 1.3655e-03, 1.1593e-02, 3.2483e-02, + 8.1235e-02, 2.0939e-01, 5.0755e-01, 1.7351e+00 }; + vec emCdf_octave = + { 0.033333, 0.100000, 0.100000, 0.166667, 0.166667, 0.200000, 0.233333, + 0.266667, 0.300000, 0.333333, 0.366667, 0.400000, 0.433333, + 0.466667, 0.500000, 0.533333, 0.566667, 0.600000, 0.633333, + 0.666667, 0.700000, 0.733333, 0.766667, 0.800000, 0.833333, + 0.866667, 0.900000, 0.933333, 0.966667, 1.000000 }; + //emCdf_octave = emCdf_octave.t(); + + vec* emCdf_cpp = empiricalCdf(interArrival_sample); + + int list_size = interArrival_sample.size(); + for (int i = 0; i < list_size; i++) + { + if (!compareDouble(emCdf_octave(i), (*emCdf_cpp)(i), 1e-6)) + { + cout << "cdf error @ " << "i:" << i << " res:" << (*emCdf_cpp)(i, 0) + << " expected:" << emCdf_octave(i, 0) << endl; + return (false); + } + } + + delete emCdf_cpp; + return (true); +} + +bool DataProcessor::test_computeCost() +{ + list interArrival_sample = + { 5.0000e-07, 1.5000e-06, 1.5000e-06, 2.5000e-06, 2.5000e-06, 3.5000e-06, + 4.5000e-06, 7.5000e-06, 1.2500e-05, 1.9500e-05, 3.1500e-05, + 4.3500e-05, 6.0500e-05, 7.6500e-05, 1.1050e-04, 1.4050e-04, + 1.8150e-04, 2.1150e-04, 2.3350e-04, 2.4350e-04, 2.5650e-04, + 3.0350e-04, 4.1250e-04, 1.3655e-03, 1.1593e-02, 3.2483e-02, + 8.1235e-02, 2.0939e-01, 5.0755e-01, 1.7351e+00 }; + mat* X = featureMatrix(interArrival_sample); + vec emCdf_octave = + { 0.033333, 0.100000, 0.100000, 0.166667, 0.166667, 0.200000, 0.233333, + 0.266667, 0.300000, 0.333333, 0.366667, 0.400000, 0.433333, + 0.466667, 0.500000, 0.533333, 0.566667, 0.600000, 0.633333, + 0.666667, 0.700000, 0.733333, 0.766667, 0.800000, 0.833333, + 0.866667, 0.900000, 0.933333, 0.966667, 1.000000 }; + //emCdf_octave = emCdf_octave.t(); + double J_expected1 = 0.17535; + double J_expected2 = 1.5341; + double J_expected3 = 9.0244; + + vec theta = zeros(2); + + double J = computeCost(*X, emCdf_octave, theta); + if (!compareDouble(J, J_expected1, 0.001)) + { + //cout << "J1 = " << J << "\nJ_expected1 = "<< J_expected1 << endl; + return (false); + } + theta(0) = 2; + theta(1) = 2; + J = computeCost(*X, emCdf_octave, theta); + if (!compareDouble(J, J_expected2, 0.001)) + { + //cout << "J2 = " << J << "\nJ_expected2 = "<< J_expected2 << endl; + return (false); + } + theta(0) = 1.5; + theta(1) = 12; + J = computeCost(*X, emCdf_octave, theta); + if (!compareDouble(J, J_expected3, 0.001)) + { + //cout << "J3 = " << J << "\nJ_expected3 = "<< J_expected3 << endl; + return (false); + } + + delete X; + return (true); +} + +bool DataProcessor::test_informationCriterion() +{ + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + + int m = interArrival.size(); + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + //gradient descendent + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + vec y = log(-log(1.0 + diferential - *interArrivalCdf)); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + double weibull_alpha = theta(1); + double weibull_betha = exp(-theta(0) / theta(1)); + vec paramVec = + { weibull_alpha, weibull_betha }; + double weibull_bic = informationCriterion(interArrival, "weibull", paramVec, + "bic"); + double weibull_aic = informationCriterion(interArrival, "weibull", paramVec, + "aic"); + + if (!compareDouble(weibull_bic, -33712.7042, 0.001)) + return (false); + else if (!compareDouble(weibull_aic, -33724.6567, 0.001)) + return (false); + + return (true); +} + +bool DataProcessor::test_pdf_weibull() +{ + double alpha = 1.5000; + double betha = 0.3; + vec data = + { 0.010000, 2.300000, 0.500000 }; + vec dataprob_eval1 = + { 9.0733e-01, 8.3571e-09, 7.5066e-01 }; + vec dataprob_test = zeros(3); + + dataprob_test(0) = pdf_weibull(data(0), alpha, betha); + dataprob_test(1) = pdf_weibull(data(1), alpha, betha); + dataprob_test(2) = pdf_weibull(data(2), alpha, betha); + + if (compareDouble(dataprob_test(0), dataprob_eval1(0)) + && compareDouble(dataprob_test(1), dataprob_eval1(1)) + && compareDouble(dataprob_test(2), dataprob_eval1(2))) + { + return (true); + } + + return (false); +} + +bool DataProcessor::test_cdf_weibull() +{ + double alpha = 0.5; + double betha = 1.5; + vec data = + { 0.010000, 2.300000, 0.500000 }; + vec dataprob_eval1 = + { 0.078405, 0.710117, 0.438616 }; + vec dataprob_test = zeros(3); + + dataprob_test(0) = cdf_weibull(data(0), alpha, betha); + dataprob_test(1) = cdf_weibull(data(1), alpha, betha); + dataprob_test(2) = cdf_weibull(data(2), alpha, betha); + //cout << dataprob_test(0) << " : " << dataprob_test(1) << " : " << dataprob_test(2) << endl; + + if (compareDouble(dataprob_test(0), dataprob_eval1(0)) + && compareDouble(dataprob_test(1), dataprob_eval1(1)) + && compareDouble(dataprob_test(2), dataprob_eval1(2))) + { + return (true); + } + + return (false); +} + +bool DataProcessor::test_gradientDescendent() +{ + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + + int m = interArrival.size(); + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + //gradient descendent + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + vec y = log(-log(1.0 + diferential - *interArrivalCdf)); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //expected values + double Jlast = 0.083359; + double theta0 = 1.660453; + double theta1 = 0.248811; + + if (!compareDouble(J_history(iterations - 1), Jlast)) + + { + return (false); + } + else if (!compareDouble(theta(0), theta0)) + { + return (false); + } + else if (!compareDouble(theta(1), theta1)) + { + return (false); + } + + delete interArrivalCdf; + delete X; + return (true); + +} + +bool DataProcessor::test_pdf_exponential() +{ + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double lambda1 = 0.50000; + vec val1 = + { 0.49751, 0.15832, 0.38940 }; + vec res1 = zeros(3); + + double lambda2 = 3.0; + vec val2 = + { 2.9113366, 0.0030234, 0.6693905 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = pdf_exponential(data(i), lambda1); + res2(i) = pdf_exponential(data(i), lambda2); + + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + + } + + return (true); +} + +bool DataProcessor::test_cdf_exponential() +{ + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double lambda1 = 0.50000; + vec val1 = + { 0.0049875, 0.6833632, 0.2211992 }; + vec res1 = zeros(3); + + double lambda2 = 3.0; + vec val2 = + { 0.029554, 0.998992, 0.776870 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = cdf_exponential(data(i), lambda1); + res2(i) = cdf_exponential(data(i), lambda2); + + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + + return (true); +} + +bool DataProcessor::test_pdf_pareto() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double alpha1 = 0.50000; + double xm1 = 1.0; + vec val1 = + { 0, 0.14334, 0 }; + vec res1 = zeros(3); + double xm2 = 0.00001; + double alpha2 = 3.0; + vec val2 = + { 3.0000e-07, 1.0720e-16, 4.8000e-14 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = pdf_pareto(data(i), alpha1, xm1); + res2(i) = pdf_pareto(data(i), alpha2, xm2); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + + return (true); +} + +bool DataProcessor::test_cdf_pareto() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double alpha1 = 0.50000; + double xm1 = 0.001; + vec val1 = + { 0.68377, 0.97915, 0.95528 }; + vec res1 = zeros(3); + double xm2 = 0.2; + double alpha2 = 1; + vec val2 = + { 0, 0.91304, 0.60000 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = cdf_pareto(data(i), alpha1, xm1); + res2(i) = cdf_pareto(data(i), alpha2, xm2); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + return (true); +} + +bool DataProcessor::test_pdf_cauchy() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + double gamma1 = 0.50000; + double x01 = 0.001; + + vec val1 = + { 0.636414, 0.028752, 0.318947 }; + vec res1 = zeros(3); + double x02 = 2; + double gamma2 = 2; + + vec val2 = + { 0.079976, 0.155653, 0.101859 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = pdf_cauchy(data(i), gamma1, x01); + res2(i) = pdf_cauchy(data(i), gamma2, x02); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + return (true); +} + +bool DataProcessor::test_cdf_cauchy() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + double gamma1 = 0.50000; + double x01 = 0.001; + + vec val1 = + { 0.50573, 0.93183, 0.74968 }; + vec res1 = zeros(3); + double x02 = 2; + double gamma2 = 2; + + vec val2 = + { 0.25080, 0.54739, 0.29517 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = cdf_cauchy(data(i), gamma1, x01); + res2(i) = cdf_cauchy(data(i), gamma2, x02); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + return (true); +} + +bool DataProcessor::test_fitModels() +{ + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + + int m = interArrival.size(); + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + //list of expected values + double weibull_alpha = 0.24881; + double weibull_betha = 0.0012639; + double normal_mu = 0.054792; + double normal_sigma = 0.205602; + double exponentialMe_lambda = 18.250783; + double exponentialLr_lambda = 2.023115; + double paretoLr_alpha = 0.225451; + double paretoLr_xm = 0.000000; + double paretoMlh_alpha = 0.171674; + double paretoMlh_xm = 0.000000; + double cauchy_gamma = 0.000067; + double cauchy_x0 = 0.005750; + double acErr = 0.001; + + vec paramVec = zeros(2); + vec infoCriterion = zeros(2); + + weibullFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), weibull_alpha, acErr)) + { + cout << "weibullFitting alpha" << endl; + return (false); + } + if (!compareDouble(paramVec(1), weibull_betha, acErr)) + { + cout << "weibullFitting betha" << endl; + return (false); + } + + normalFitting(interArrival, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), normal_mu, acErr)) + { + cout << "normalFitting mu" << endl; + return (false); + } + if (!compareDouble(paramVec(1), normal_sigma, acErr)) + { + cout << "normalFitting sigma" << endl; + return (false); + } + + exponentialMeFitting(interArrival, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), exponentialMe_lambda, acErr)) + { + cout << "exponentialLrFitting lambda" << endl; + return (false); + } + + exponentialLrFitting(interArrival, *interArrivalCdf, paramVec, + infoCriterion); + if (!compareDouble(paramVec(0), exponentialLr_lambda, acErr)) + { + cout << exponentialLr_lambda << ":" << paramVec(0) << endl; + cout << "exponentialLrFitting lambda" << endl; + return (false); + } + + paretoLrFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), paretoLr_alpha, acErr)) + { + cout << "paretoLrFitting alpha" << endl; + return (false); + } + if (!compareDouble(paramVec(1), paretoLr_xm, acErr)) + { + cout << "paretoLrFitting xm" << endl; + return (false); + } + + paretoMlhFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), paretoMlh_alpha, acErr)) + { + cout << "paretoMlhFitting alpha" << endl; + return (false); + } + if (!compareDouble(paramVec(1), paretoMlh_xm, acErr)) + { + cout << "paretoMlhFitting xm" << endl; + return (false); + } + + cauchyFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), cauchy_gamma, acErr)) + { + cout << "cauchyFitting" << endl; + return (false); + } + if (!compareDouble(paramVec(1), cauchy_x0, acErr)) + { + return (false); + } + + delete interArrivalCdf; + + return (true); +} + +bool DataProcessor::test_modelSelection() +{ + + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + int m = interArrival.size(); + + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + StochasticModelFit* modelVet = NULL; + modelVet = fitModels(list_interArrival, "aic"); + + //int numberOfModels = modelVet[0].size; + //for (int i = 0; i < numberOfModels; i++) + // cout << modelVet[i].modelName << " " << "modelVet[" << i << "] = " + // << modelVet[i].aic << endl; + + delete interArrivalCdf; + delete[] modelVet; + return (true); +} + +#endif //TEST_FUNCTIONS diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/c5/4049f711acb500161808a5c64fd2084a b/.metadata/.plugins/org.eclipse.core.resources/.history/c5/4049f711acb500161808a5c64fd2084a new file mode 100644 index 0000000..a29bb76 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/c5/4049f711acb500161808a5c64fd2084a @@ -0,0 +1,1933 @@ +/* + * DataProcessor.cpp + * + * Created on: 14 de jun de 2016 + * Author: apaschoalon + */ + +#include "DataProcessor.h" + +DataProcessor::DataProcessor() +{ + //nothing to do at all +} + +DataProcessor::~DataProcessor() +{ + //nothing to do at all +} + +string DataProcessor::toString(void) +{ + string dataProcessor; + + dataProcessor = + "Used to calculate parameters of network flows; has no state."; + + return (dataProcessor); +} + +int DataProcessor::calculate(const string& experimentName, + DatabaseInterface* databaseInterface, NetworkTrace* netTrace) +{ + + //iterator variables + long int fcounter = 0; + long int nflows = 0; + databaseInterface->getNumberOfFlows(experimentName, &nflows); + +#ifdef DEBUG_DataProcessor_calculate + cout << "DataProcessor::calculate() -> Number of flows = " << nflows << endl; +#endif // DEBUG_DataProcessor_calculate + + //protocol variables + string flowStrData = ""; + long int flowIntData = 0; + double startDalay = 0; //time of the fist packet of the flow + double flowDuration = 0; //duration of the flow + list ttlList; + int ttl = 0; + + //flow-level variables + list relativeTime; //time relative to the 1st packet list + long int nKbytes = 0; //Number of kbytes (bytes/1024) of the + + //packetSize variables + list pslist; //packet-size list + long int ps_mostFrequent = 0; + double mean_packetRate = 0; + + //inter-deperture time variables + StochasticModelFit* modelVet = NULL; + list interArrival_list; // list of inter arrival times of a flow + list interArrival_fileStack; + list interArrival_interFileStack; + list interArrival_interSessionStack; + double lastTime = 0; + double idt = 0; + + for (fcounter = 0; fcounter < nflows; fcounter++) + { + + //new network flow + NetworkFlow* netFlow = NetworkFlow::make_flow("dummy"); + + //TODO checar valor retornado de databaseInterface + + //reset temp vars + flowStrData = ""; + flowIntData = 0; + relativeTime.clear(); + pslist.clear(); + interArrival_list.clear(); + interArrival_fileStack.clear(); + interArrival_interFileStack.clear(); + interArrival_interSessionStack.clear(); + + //load packet-size data + databaseInterface->getFlowData(experimentName, fcounter, "frame__len", + pslist); + + //laod time-relative data + databaseInterface->getFlowData(experimentName, fcounter, + "frame__time_relative", relativeTime); + + //evaluate inter-arrival data + //time relative to the begin of the measurement + lastTime = 0; + for (list::iterator it = relativeTime.begin(); + it != relativeTime.end(); it++) + { + idt = *it - lastTime; + interArrival_list.push_back(idt); + lastTime = *it; + } + + //###################################################################### + //Flow-level Options + //###################################################################### + startDalay = relativeTime.front(); + netFlow->setFlowStartDelay(startDalay); + + flowDuration = relativeTime.back() - relativeTime.front(); + netFlow->setFlowDuration(flowDuration); + + //TODO DS byte configuration -- now it is just set to zero + netFlow->setFlowDsByte(0); + + //flow kbytes + for (list::iterator it = pslist.begin(); it != pslist.end(); + it++) + { + nKbytes = nKbytes + *it; + } + nKbytes = nKbytes / 1024; + + netFlow->setNumberOfKbytes(nKbytes); + netFlow->setNumberOfPackets(relativeTime.size()); + + //###################################################################### + //Protocol Options + //###################################################################### + + // + //L3 protocols + //reference http://www.iana.org/assignments/ieee-802-numbers/ieee-802-numbers.xhtml + // + + databaseInterface->getFlowData(experimentName, fcounter, "eth__type", + &flowIntData); + if (flowIntData == IPV4_CODE) + { //IPv4 + netFlow->setNetworkProtocol(PROTOCOL__IPV4); + databaseInterface->getFlowData(experimentName, fcounter, "ip__src", + &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, "ip__dst", + &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + else if (flowIntData == (ARP_CODE || ARP_CODE_REV)) + { //ARP, Frame Relay ARP + netFlow->setNetworkProtocol(PROTOCOL__ARP); + databaseInterface->getFlowData(experimentName, fcounter, "ip__src", + &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, "ip__dst", + &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + else if (flowIntData == IPV6_CODE) + { //IPv6 + netFlow->setNetworkProtocol(PROTOCOL__ICMPV6); + databaseInterface->getFlowData(experimentName, fcounter, + "ipv6__addr", &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, + "ipv6__dst", &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + else + { //default IPv4 + netFlow->setNetworkProtocol(PROTOCOL__IPV4); + databaseInterface->getFlowData(experimentName, fcounter, "ip__src", + &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, "ip__dst", + &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + + //set ttl as the most frequent + databaseInterface->getFlowData(experimentName, fcounter, "ip__ttl", + ttlList); + //ttl = (int) mode(ttlList); + ttl = (int) mode(&ttlList); + netFlow->setNetworkTtl(ttl); + + // + //L4 Protocols + //reference https://en.wikipedia.org/wiki/List_of_IP_protocol_numbers + // + databaseInterface->getFlowData(experimentName, fcounter, "ip__proto", + &flowIntData); + if (flowIntData == ICMP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__ICMP); + } + else if (flowIntData == TCP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__TCP); + databaseInterface->getFlowData(experimentName, fcounter, + "tcp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "tcp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else if (flowIntData == UDP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__UDP); + databaseInterface->getFlowData(experimentName, fcounter, + "udp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "udp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else if (flowIntData == DCCP_CODE) + { + netFlow->setTransportDstPort(PROTOCOL__DCCP); + databaseInterface->getFlowData(experimentName, fcounter, + "dccp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "dccp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else if (flowIntData == GRE_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__GRE); + //TODO não suportado pelo D-ITG + } + else if (flowIntData == ICMPV6_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__ICMPV6); + } + else if (flowIntData == SCTP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__SCTP); + databaseInterface->getFlowData(experimentName, fcounter, + "sctp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "sctp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else + { //default: UDP + netFlow->setTransportProtocol(PROTOCOL__NULL); + //databaseInterface->getFlowData(experimentName, fcounter, "udp__dstport", &flowIntData); + //netFlow->setL4SrcPort(flowIntData); + //databaseInterface->getFlowData(experimentName, fcounter, "udp__srcport", &flowIntData); + //netFlow->setL4DstPort(flowIntData); + } + + //###################################################################### + //Packet Size Model + //###################################################################### + + // + // Constant model: Just set the packet size as the most frequent value + // + //ps_mostFrequent = mode(pslist); + //ps_mostFrequent = mode(&pslist); + //mean_packetRate = ((double) pslist.size() / flowDuration); + //netFlow->setPsConstant(ps_mostFrequent); + //netFlow->setIdtConstant(mean_packetRate); + + // + // Algorithm to choose the priority order of the models + // 1st version: just the constant model + // + //TODO implement a best algorithm + //netFlow->setPsModel1(MODEL__CONSTANT); + + //###################################################################### + //Inter-arrival-time Model + //###################################################################### + + for (list::iterator it = interArrival_list.begin(); + it != interArrival_list.end(); it++) + { + if(*it < FILE_CUT_TIME) + { + interArrival_fileStack.push_back(*it); + } + else if(*it < SESSION_CUT_TIME) + { + interArrival_interFileStack.push_back(*it); + } + else + { + interArrival_interSessionStack.push_back(*it); + } + } + + netFlow->setInterDepertureTimeModels( + fitModels(interArrival_list, "aic")); + + //TODO set the right model + + //netFlow->setIdtModel1(MODEL__CONSTANT); + + //TODO + + //TODO + + //###################################################################### + //Push-back the flow to Trace Flow-list + //###################################################################### + + netTrace->pushback_Netflow(netFlow); + +#ifdef DEBUG_DataProcessor_calculate_loop + cout << fcounter << ": ps_mostFrequent=" << ps_mostFrequent << endl; + cout << fcounter << ": startDalay=" << startDalay << endl; + cout << fcounter << ": mean_packetRate=" << mean_packetRate << endl; + cout << fcounter << ": idt_constant=" << netFlow->getIdtConstant() << endl; +#endif //DEBUG_DataProcessor_calculate_loop +#ifdef DEBUG_DataProcessor_calculate_loop + cout << fcounter << ": netFlow->getTransportProtocol() = " << netFlow->getTransportProtocol() << endl; + cout << fcounter << ": netFlow->getNetworkProtocol() = " << netFlow->getNetworkProtocol() << endl; + cout << fcounter << ": netFlow->getTransportDstPort() = " << netFlow->getTransportDstPort() << endl; + cout << fcounter << ": netFlow->getFlowDsByte() = " << netFlow->getFlowDsByte() << endl; + cout << fcounter << ": netFlow->getNetworkDstAddr() = " << netFlow->getNetworkDstAddr() << endl << endl; + +#endif //DEBUG_DataProcessor_calculate_loop + + } + +#ifdef DEBUG_DataProcessor_calculate + cout << "netTrace->networkFlow.size() = " << netTrace->networkFlow.size() << endl; + cout << "netTrace->getNumberOfFlows() = " << netTrace->getNumberOfFlows() << endl; +#endif //DEBUG_DataProcessor_calculate + + return (0); +} + +StochasticModelFit* DataProcessor::fitModels(list& empiricalData, + const string& criterion) +{ + //constants + const int numberOfModels = 8; + const int m = empiricalData.size(); //empirical data-size + //vars + int counter = 0; + StochasticModelFit* modelVet = NULL; + vec paramVec = zeros(2); + vec infoCriterion = zeros(2); + + modelVet = new StochasticModelFit[numberOfModels]; + + //Inter-arrival vec + vec interArrival = zeros(m); + counter = 0; + for (list::iterator it = empiricalData.begin(); + it != empiricalData.end(); it++) + { + interArrival(counter) = *it + min_time; + counter++; + } + //Empirical CDF of interArrival + vec* interArrivalCdf = empiricalCdf(empiricalData); + + //Weibull + weibullFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[0].aic = infoCriterion(0); + modelVet[0].bic = infoCriterion(1); + modelVet[0].modelName = WEIBULL; + modelVet[0].param1 = paramVec(0); + modelVet[0].param2 = paramVec(1); + modelVet[0].size = numberOfModels; + + //normal + normalFitting(interArrival, paramVec, infoCriterion); + modelVet[1].aic = infoCriterion(0); + modelVet[1].bic = infoCriterion(1); + modelVet[1].modelName = NORMAL; + modelVet[1].param1 = paramVec(0); + modelVet[1].param2 = paramVec(1); + modelVet[1].size = numberOfModels; + + //exponential mean + exponentialMeFitting(interArrival, paramVec, infoCriterion); + modelVet[2].aic = infoCriterion(0); + modelVet[2].bic = infoCriterion(1); + modelVet[2].modelName = EXPONENTIAL_MEAN; + modelVet[2].param1 = paramVec(0); + modelVet[2].param2 = paramVec(1); + modelVet[2].size = numberOfModels; + + //exponential Linear Regression (LR) + exponentialLrFitting(interArrival, *interArrivalCdf, paramVec, + infoCriterion); + modelVet[3].aic = infoCriterion(0); + modelVet[3].bic = infoCriterion(1); + modelVet[3].modelName = EXPONENTIAL_LINEAR_REGRESSION; + modelVet[3].param1 = paramVec(0); + modelVet[3].param2 = paramVec(1); + modelVet[3].size = numberOfModels; + + //pareto linear regression + paretoLrFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[4].aic = infoCriterion(0); + modelVet[4].bic = infoCriterion(1); + modelVet[4].modelName = PARETO_LINEAR_REGRESSION; + modelVet[4].param1 = paramVec(0); + modelVet[4].param2 = paramVec(1); + modelVet[4].size = numberOfModels; + + //pareto maximum likehood + paretoMlhFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[5].aic = infoCriterion(0); + modelVet[5].bic = infoCriterion(1); + modelVet[5].modelName = PARETO_MAXIMUM_LIKEHOOD; + modelVet[5].param1 = paramVec(0); + modelVet[5].param2 = paramVec(1); + modelVet[5].size = numberOfModels; + + //Cauchy + cauchyFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[6].aic = infoCriterion(0); + modelVet[6].bic = infoCriterion(1); + modelVet[6].modelName = CAUCHY; + modelVet[6].param1 = paramVec(0); + modelVet[6].param2 = paramVec(1); + modelVet[6].size = numberOfModels; + + //Constant + constantFitting(interArrival, paramVec, infoCriterion); + modelVet[7].aic = infoCriterion(0); + modelVet[7].bic = infoCriterion(1); + modelVet[7].modelName = CONSTANT; + modelVet[7].param1 = paramVec(0); + modelVet[7].param2 = paramVec(1); + modelVet[7].size = numberOfModels; + + if (criterion == "bic") + { + qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), compareBic); + } + else if (criterion == "aic") + { + qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), compareAic); + } + else + { + cout + << "Error @ DataProcessor::fitModels -> Invalid criterion argument: " + << criterion << endl; + cout << "AIC set as default" << endl; + qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), compareAic); + + } + +#ifdef DEBUG_StochasticModelFit + //if (modelVet[0].modelName == WEIBULL) + //{ + // cout << modelVet[0].modelName << "aic:bic->" << modelVet[0].aic << ":" << modelVet[0].bic + // << " " << "alpha:betha->" << modelVet[0].param1 + // << modelVet[0].param2 << endl; + // string fileName = "weibulldata_" + std::to_string(abs(modelVet[0].aic)); + // save_data_on_file(fileName, interArrival, *interArrivalCdf); + //} +#endif //DEBUG_StochasticModelFit + + delete interArrivalCdf; + + return (modelVet); +} + +inline void DataProcessor::weibullFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //init + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + //linearization + vec y = log(-log(1.0 + diferential - interArrivalCdf)); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double weibull_alpha = theta(1); + double weibull_betha = exp(-theta(0) / theta(1)); + paramVec(0) = weibull_alpha; + paramVec(1) = weibull_betha; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "weibull", paramVec, "aic"); + double bic = informationCriterion(interArrival, "weibull", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; + +} + +inline void DataProcessor::normalFitting(const vec& interArrival, vec& paramVec, + vec& infoCriterion) +{ + double sigma = stddev(interArrival); + double mu = mean(interArrival); + paramVec(0) = mu; + paramVec(1) = sigma; + + //information criterion + double aic = informationCriterion(interArrival, "normal", paramVec, "aic"); + double bic = informationCriterion(interArrival, "normal", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::exponentialLrFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //init + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + //linearization + vec y = log(1.00 + diferential - interArrivalCdf); + //vec y = log(1.00 - interArrivalCdf); + vec x = interArrival; + mat* X = featureMatrix(x); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double exp_lambda = -theta(1); + paramVec(0) = exp_lambda; + paramVec(1) = 0; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "exponential", paramVec, + "aic"); + double bic = informationCriterion(interArrival, "exponential", paramVec, + "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::exponentialMeFitting(const vec& interArrival, + vec& paramVec, vec& infoCriterion) +{ + paramVec(0) = 1.0 / mean(interArrival); + paramVec(1) = 0; + + //information criterion + double aic = informationCriterion(interArrival, "exponential", paramVec, + "aic"); + double bic = informationCriterion(interArrival, "exponential", paramVec, + "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::paretoLrFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //init + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + //linearization + vec y = log(1.00 + diferential - interArrivalCdf); + //vec y = log(1.00 - interArrivalCdf); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double pareto_alpha = -theta(1); + double pareto_xm = interArrival.min(); + paramVec(0) = pareto_alpha; + paramVec(1) = pareto_xm; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "pareto", paramVec, "aic"); + double bic = informationCriterion(interArrival, "pareto", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::paretoMlhFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + double pareto_xm = interArrival.min(); + int m = interArrival.size(); + //vec logDiff = log(interArrival) - log(ones(m) * pareto_xm); + vec logDiff = log(interArrival) - log(pareto_xm); + double pareto_alpha = double(m) / (sum(logDiff)); + paramVec(0) = pareto_alpha; + paramVec(1) = pareto_xm; + + //information criterion + double aic = informationCriterion(interArrival, "pareto", paramVec, "aic"); + double bic = informationCriterion(interArrival, "pareto", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::cauchyFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //initialization + int iterations = 1500; + double learning_rate = 0.01; + int m = interArrival.size(); + double minInterArrival = interArrival.min(); + double y_max = 1.0 / minInterArrival; + vec y = tan(datum::pi * (interArrivalCdf - 0.5)); + for (int i = 0; i < m; i++) + { + //avoid too high numbers when tan() tends to infinity + if (y(i) > y_max) + y(i) = y_max; + } + + //linearization + vec J_history = zeros(iterations); + vec theta = zeros(2); + mat* X = featureMatrix(interArrival); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double cauchy_gamma = double(1.0) / theta(1); + double cauchy_x0 = -theta(0) / theta(1); + paramVec(0) = cauchy_gamma; + paramVec(1) = cauchy_x0; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "cauchy", paramVec, "aic"); + double bic = informationCriterion(interArrival, "cauchy", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; + +} + +void DataProcessor::constantFitting(const vec& interArrival, vec& paramVec, + vec& informationCriterion) +{ + paramVec(0) = mean(interArrival); + paramVec(1) = 0; + informationCriterion(0) = datum::inf; + informationCriterion(1) = datum::inf; +} + +template bool DataProcessor::isEqual(const T* vet1, const T* vet2, + const int size) +{ + for (int i = 0; i < size; i++) + { + if (vet1[i] != vet2[i]) + { + return (false); + } + } + + return (true); +} + +template void DataProcessor::vectorC_to_list(list* theList, + T* vet, int size) +{ + for (int i = 0; i < size; i++) + { + theList->push_back(vet[i]); + } +} + +template +void DataProcessor::quickSort(T* vet, int left, int right) +{ + int p = left; + int i = 0; + T ch = 0; + int j = 0; + + for (i = left + 1; i <= right; i++) + { + j = i; + if (vet[j] < vet[p]) + { + ch = vet[j]; + while (j > p) + { + vet[j] = vet[j - 1]; + j--; + } + vet[j] = ch; + p++; + } + } + if (p - 1 >= left) + quickSort(vet, left, p - 1); + if (p + 1 <= right) + quickSort(vet, p + 1, right); +} + +template +T DataProcessor::mode(list* theList) +{ + T* vet; + int listSize = theList->size(); + int i = 0; + T candidate = 0; + T prev = 0; + int counter = 0; + int largerCounter = 0; + T mode = 0; + vet = new T[listSize]; + + if (listSize == 0) + { + return (0); + } + + i = 0; + + for (typename list::iterator it = theList->begin(); it != theList->end(); + it++) + { + vet[i] = *it; + i++; + } + + quickSort(vet, 0, listSize - 1); + + prev = vet[0]; + largerCounter = 0; + for (i = 0; i < listSize; i++) + { + candidate = vet[i]; + if (candidate == prev) + { + counter++; + if (counter > largerCounter) + { + largerCounter = counter; + mode = vet[i]; + } + } + else + counter = 1; + + prev = vet[i]; + } + + delete[] vet; + + return (mode); +} + +template +inline T* DataProcessor::list_to_cvector(list* theList) +{ + int listSize = theList->size(); + T* vet; + int i = 0; + + vet = new T[listSize]; + if (listSize == 0) + { + return (0); + } + + i = 0; + for (typename list::iterator it = theList->begin(); it != theList->end(); + it++) + { + vet[i] = *it; + i++; + } + + return (vet); +} +template +inline void DataProcessor::delete_cvector(T* c_vet) +{ + delete[] c_vet; +} + +inline vec* DataProcessor::empiricalCdf(list& empiricalData) +{ + double* cvet_empiricalData = list_to_cvector(&empiricalData); + int data_size = empiricalData.size(); + quickSort(cvet_empiricalData, 0, data_size - 1); + double x = cvet_empiricalData[0]; // anchor - fist element; + int i1 = 0; // fist index + int i2 = 0; + double prob = 0; + vec* interArrivalCdf = new vec(zeros(data_size)); + + for (int i = 0; i < data_size; i++) + { + if (cvet_empiricalData[i] > x) + { + i2 = i - 1; + prob = double(i) / data_size; + for (int j = i1; j <= i2; j++) + { + (*interArrivalCdf)(j) = prob; + } + i1 = i; + x = cvet_empiricalData[i]; + } + } + //last position == 1 + (*interArrivalCdf)(data_size - 1) = 1; + + delete_cvector(cvet_empiricalData); + return (interArrivalCdf); +} + +inline mat* DataProcessor::featureMatrix(list& empiricalData) +{ + int data_size = empiricalData.size(); + mat* featureMatrix = new mat(ones(data_size, 2)); + + int i = 0; + for (list::iterator it = empiricalData.begin(); + it != empiricalData.end(); it++) + { + (*featureMatrix)(i, 1) = *it; + i++; + } + + return (featureMatrix); + +} + +inline mat* DataProcessor::featureMatrix(const vec& empiricalData) +{ + int data_size = empiricalData.size(); + mat* featureMatrix = new mat(ones(data_size, 2)); + for (int i = 0; i < data_size; i++) + { + (*featureMatrix)(i, 1) = empiricalData(i); + } + + return (featureMatrix); +} + +inline double DataProcessor::computeCost(const mat& X, const vec& y, + const vec& theta) +{ + double J = .0; + double jtemp = .0; + int m = y.size(); + + for (int i = 0; i < m; i++) + { + jtemp = jtemp + pow(double(theta(0) + theta(1) * X(i, 1) - y(i)), 2); + + } + J = (1.0 / double(2 * m)) * jtemp; + + return (J); +} + +inline void DataProcessor::gradientDescendent(const mat& X, const vec& y, + const double learning_rate, const int num_iters, vec& theta, + vec& J_history) +{ + + int m = y.n_rows; //number of training examples + double temp1 = .0; + double temp2 = .0; + double delta1 = .0; + double delta2 = .0; + vec x = X.col(1); + + for (int i = 0; i < num_iters; i++) + { + temp1 = .0; + temp2 = .0; + delta1 = .0; + delta2 = .0; + + //slope + delta1 = sum(theta(0) + theta(1) * x - y) / double(m); + delta2 = sum((theta(0) + theta(1) * x - y) % x) / double(m); + + //linear regression + temp1 = theta(0) - learning_rate * delta1; + temp2 = theta(1) - learning_rate * delta2; + + theta(0) = temp1; + theta(1) = temp2; + + //Save the cost J in every iteration + J_history(i) = computeCost(X, y, theta); + + } + +} + +inline double DataProcessor::informationCriterion(const vec& data, + const string& functionName, const vec& paramVet, + const string& criterion) +{ + double criterionVal = .0; + double nEstimatedParameters = double(paramVet.size()); + double likehoodLogVal = logLikehood(data, functionName, paramVet); + double logDataLen = log(double(data.size())); + + if (criterion == "aic") + { + criterionVal = 2 * nEstimatedParameters - 2 * likehoodLogVal; + } + else if (criterion == "bic") + { + criterionVal = nEstimatedParameters * logDataLen - 2 * likehoodLogVal; + } + else + { + cout << "\nInvalid functionName or no functionName selected: " + << functionName << endl; + printf("Selecting default criterion: AIC\n"); + criterionVal = 2 * nEstimatedParameters - 2 * likehoodLogVal; + } + + return (criterionVal); + +} + +inline double DataProcessor::logLikehood(const vec& data, + const string& functionName, const vec& paramVet) +{ + double param1 = paramVet(0); + double param2 = paramVet(1); + double m = data.size(); + double L = .0; + int i = 0; + vec data_prob = zeros(size(data)); + + if (functionName == "weibull") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_weibull(data(i), param1, param2); + } + else if (functionName == "normal") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_normal(data(i), param1, param2); + } + else if (functionName == "uniform") + { + data_prob = ones(size(data)) * pdf_uniform(param1, param2); + } + else if (functionName == "exponential") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_exponential(data(i), param1); + } + else if (functionName == "pareto") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_pareto(data(i), param1, param2); + } + else if (functionName == "cauchy") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_cauchy(data(i), param1, param2); + } + else + { + cout << "Warning, no valid stochastic function selected: " + << functionName << endl; + printf("Likehood logarithm seted to -Inf (worst as possible)\n"); + return (datum::inf); + } + + L = sum(log(data_prob)); + return (L); + +} + +inline double DataProcessor::pdf_weibull(double x, double alpha, double betha) +{ + if (x >= 0) + return ((alpha / pow(betha, alpha)) * pow(x, alpha - 1.0) + * exp(-(pow(x / betha, alpha)))); + else + return (.0); +} + +inline double DataProcessor::cdf_weibull(double x, double alpha, double betha) +{ + if (x >= 0) + return (1.0 - exp(-pow(x / betha, alpha))); + else + return (.0); +} + +inline double DataProcessor::pdf_exponential(double x, double lambda) +{ + if (x >= 0) + return (lambda * exp(-lambda * x)); + else + return (.0); + +} + +inline double DataProcessor::cdf_exponential(double x, double lambda) +{ + if (x >= 0) + return (1.0 - exp(-lambda * x)); + else + return (.0); +} + +inline double DataProcessor::pdf_pareto(double x, double alpha, double xm) +{ + if (x >= xm) + return (alpha * pow(xm, alpha) / (pow(x, alpha + 1.0))); + else + return (.0); +} + +inline double DataProcessor::cdf_pareto(double x, double alpha, double xm) +{ + if (x >= xm) + return (1.0 - pow(xm / x, alpha)); + else + return (.0); +} + +inline double DataProcessor::pdf_cauchy(double x, double gamma, double x0) +{ + return (1 / (datum::pi * gamma) + * (pow(gamma, 2) / (pow(x - x0, 2) + pow(gamma, 2)))); +} + +inline double DataProcessor::cdf_cauchy(double x, double gamma, double x0) +{ + return ((1 / datum::pi) * atan((x - x0) / (gamma)) + 0.5); +} + +inline double DataProcessor::pdf_normal(double x, double mu, double sigma) +{ + return (1 / (sqrt(2 * datum::pi) * sigma) + * exp(-0.5 * pow((x - mu) / sigma, 2))); +} + +inline double DataProcessor::cdf_normal(double x, double mu, double sigma) +{ + return (0.5 * (1 + erf((x - mu) / (sigma * sqrt(2))))); +} + +inline double DataProcessor::pdf_uniform(double x_min, double x_max) +{ + return (1.0 / (x_max - x_min)); +} + +inline double DataProcessor::cdf_uniform(double x, double x_min, double x_max) +{ + if (x < x_min) + return (0); + else if (x > x_max) + return (1); + else + return ((x - x_min) / (x_max - x_min)); +} + +#ifdef TEST_FUNCTIONS + +void DataProcessor::printTestResult(string testName, bool result) +{ + string outRes; + if (result == true) + outRes = "ok"; + else + outRes = "failed"; + + cout << testName << ":\t\t" << outRes << endl; +} + +bool DataProcessor::compareDouble(double val1, double val2) +{ + double error = 0; + + error = fabs(double(val1) - double(val2)); + if (error > double(1e-5)) + return (false); + else + return (true); + +} + +bool DataProcessor::compareDouble(double val1, double val2, double acErr) +{ + double error = 0; + + error = fabs(double(val1) - double(val2)); + if (error > double(acErr)) + return (false); + else + return (true); + +} + +bool DataProcessor::compareMat(mat& mat1, mat& mat2) +{ + int mat1_nc = mat1.n_cols; + int mat1_nr = mat1.n_rows; + int mat2_nc = mat2.n_cols; + int mat2_nr = mat2.n_rows; + + if ((mat1_nc != mat2_nc) || (mat1_nr != mat2_nr)) + { + cout << "mat1.n_cols and mat2.n_cols dont match. " << mat1_nc << ":" + << mat2_nc << " " << mat1_nr << ":" << mat2_nr << endl; + return (false); + } + for (int i = 0; i < mat1_nr; i++) + { + for (int j = 0; j < mat1_nc; j++) + { + if (compareDouble(mat1(i, j), mat2(i, j), 1e-5)) + { + //cout << " mat1(" << i << ", " << j << " ) = " << mat1(i,j); + //cout << " mat2(" << i << ", " << j << " ) = " << mat2(i,j); + return (false); + } + } + } + + return (true); +} + +void DataProcessor::save_data_on_file(const string& fileName, const mat& vet1, + const mat& vet2) +{ + string file_out = fileName + ".txt"; + int m = vet1.size(); + + ofstream writeOnFile(file_out, ios::out); + if (!writeOnFile) + { + cerr << "file could not be oppeded" << endl; + exit(1); + } + + for (int i = 0; i < m; i++) + { + writeOnFile << vet1(i) << " " << vet2(i) << endl; + } + +} + +template +void DataProcessor::save_data_on_file(const string& fileName, list theList) +{ + string file_out = fileName + ".txt"; + int m = theList.size(); + + ofstream writeOnFile(file_out, ios::out); + if (!writeOnFile) + { + cerr << "file could not be oppeded" << endl; + exit(1); + } + + for (list::iterator it = theList.begin(); it != theList.end(); it++) + { + //list::iterator it = randInt_list1.begin(); + writeOnFile << *it << " \n"; + } +} + +bool DataProcessor::test_Mode() +{ + + int randint1[] = + { 1, 8, 1, 13, 9, 2, 1, 15, 4, 3, 10, 4, 13, 2, 14, 7, 7 }; + int randint1_mode = 1; + list l_randint1; + vectorC_to_list(&l_randint1, randint1, 17); + + int randint2[] = + { 5, 3, 6, 8, 14, 9, 11, 9, 11, 15, 8, 7, 12, 13, 14 }; + int randint2_mode = 8; + list l_randint2; + vectorC_to_list(&l_randint2, randint2, 15); + + int randint3[] = + { 9, 10, 6, 3, 13, 13, 14, 7, 7, 1, 5, 1, 8, 5, 9, 2, 3, 4, 5, 6, 6, 6 }; + int randint3_mode = 6; + list l_randint3; + vectorC_to_list(&l_randint3, randint3, 22); + + int randint4[] = + { 2, 1 }; + int randint4_mode = 1; + list l_randint4; + vectorC_to_list(&l_randint4, randint4, 2); + + int randint5[] = + { 1, 1, 1, 1, 1, 2, 2, 2, 2, 2 }; + int randint5_mode = 1; + list l_randint5; + vectorC_to_list(&l_randint5, randint5, 10); + + if (mode(&l_randint1) != randint1_mode) + return (false); + if (mode(&l_randint2) != randint2_mode) + return (false); + if (mode(&l_randint3) != randint3_mode) + return (false); + if (mode(&l_randint4) != randint4_mode) + return (false); + if (mode(&l_randint5) != randint5_mode) + return (false); + + return (true); +} + +bool DataProcessor::test_QuickSort() +{ + int randIntA[] = + { 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; + int randIntA_size = 18; + int randIntA_sorted[] = + { 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9 }; + int randIntB[] = + { 9, 2, 3, 3, 12, 15, 8, 14, 2, 7, 4, 6, 10, 2, 12 }; + int randIntB_size = 15; + int randIntB_sorted[] = + { 2, 2, 2, 3, 3, 4, 6, 7, 8, 9, 10, 12, 12, 14, 15 }; + double randDoubleA[] = + { 0.20872, 12.25501, 5.88210, 2.77962, 8.74916, 2.97454, 4.39641, 12.19733, + 4.66014, 4.52477, 5.19375, 12.11314, 13.35458, 11.56941, 6.59435 }; + int randDoubleA_size = 15; + double randDoubleA_sorted[] = + { 0.20872, 2.77962, 2.97454, 4.39641, 4.52477, 4.66014, 5.19375, 5.88210, + 6.59435, 8.74916, 11.56941, 12.11314, 12.19733, 12.25501, 13.35458 }; + + quickSort(randIntA, 0, randIntA_size - 1); + + if (isEqual(randIntA, randIntA_sorted, randIntA_size) == false) + { + return (false); + } + + quickSort(randIntB, 0, randIntB_size - 1); + if (isEqual(randIntB, randIntB_sorted, randIntB_size) == false) + { + return (false); + } + + quickSort(randDoubleA, 0, randDoubleA_size - 1); + if (isEqual(randDoubleA, randDoubleA_sorted, randDoubleA_size) == false) + { + return (false); + } + + return (true); + +} + +bool DataProcessor::test_list_tocvector() +{ + list randInt_list1 = + { 9, 2, 3, 3, 12, 15, 8, 14, 2, 7, 4, 6, 10, 2, 12 }; + list randInt_list2 = + { 2.2, 2.111, 3.16, 6.66, 13, 2.61 }; + list randInt_list3 = + { 1, 2, 3, 4, 5, 6, 6, 5, 4, 3, 2, 1 }; + + int* cvet1 = NULL; + double* cvet2 = NULL; + int* cvet3 = NULL; + + cvet1 = list_to_cvector(&randInt_list1); + cvet2 = list_to_cvector(&randInt_list2); + cvet3 = list_to_cvector(&randInt_list3); + + int i = 0; + for (list::iterator it = randInt_list1.begin(); + it != randInt_list1.end(); it++) + { + if (cvet1[i] != *it) + { + return (false); + } + //cout << *it << " "; + i++; + } + i = 0; + for (list::iterator it = randInt_list2.begin(); + it != randInt_list2.end(); it++) + { + if (cvet2[i] != *it) + { + return (false); + } + //cout << *it << " "; + i++; + } + i = 0; + for (list::iterator it = randInt_list3.begin(); + it != randInt_list3.end(); it++) + { + if (cvet3[i] != *it) + { + return (false); + } + //cout << *it << " "; + i++; + } + + delete_cvector(cvet1); + delete_cvector(cvet2); + delete_cvector(cvet3); + + return (true); +} + +bool DataProcessor::test_empiricalCdf() +{ + list interArrival_sample = + { 5.0000e-07, 1.5000e-06, 1.5000e-06, 2.5000e-06, 2.5000e-06, 3.5000e-06, + 4.5000e-06, 7.5000e-06, 1.2500e-05, 1.9500e-05, 3.1500e-05, + 4.3500e-05, 6.0500e-05, 7.6500e-05, 1.1050e-04, 1.4050e-04, + 1.8150e-04, 2.1150e-04, 2.3350e-04, 2.4350e-04, 2.5650e-04, + 3.0350e-04, 4.1250e-04, 1.3655e-03, 1.1593e-02, 3.2483e-02, + 8.1235e-02, 2.0939e-01, 5.0755e-01, 1.7351e+00 }; + vec emCdf_octave = + { 0.033333, 0.100000, 0.100000, 0.166667, 0.166667, 0.200000, 0.233333, + 0.266667, 0.300000, 0.333333, 0.366667, 0.400000, 0.433333, + 0.466667, 0.500000, 0.533333, 0.566667, 0.600000, 0.633333, + 0.666667, 0.700000, 0.733333, 0.766667, 0.800000, 0.833333, + 0.866667, 0.900000, 0.933333, 0.966667, 1.000000 }; + //emCdf_octave = emCdf_octave.t(); + + vec* emCdf_cpp = empiricalCdf(interArrival_sample); + + int list_size = interArrival_sample.size(); + for (int i = 0; i < list_size; i++) + { + if (!compareDouble(emCdf_octave(i), (*emCdf_cpp)(i), 1e-6)) + { + cout << "cdf error @ " << "i:" << i << " res:" << (*emCdf_cpp)(i, 0) + << " expected:" << emCdf_octave(i, 0) << endl; + return (false); + } + } + + delete emCdf_cpp; + return (true); +} + +bool DataProcessor::test_computeCost() +{ + list interArrival_sample = + { 5.0000e-07, 1.5000e-06, 1.5000e-06, 2.5000e-06, 2.5000e-06, 3.5000e-06, + 4.5000e-06, 7.5000e-06, 1.2500e-05, 1.9500e-05, 3.1500e-05, + 4.3500e-05, 6.0500e-05, 7.6500e-05, 1.1050e-04, 1.4050e-04, + 1.8150e-04, 2.1150e-04, 2.3350e-04, 2.4350e-04, 2.5650e-04, + 3.0350e-04, 4.1250e-04, 1.3655e-03, 1.1593e-02, 3.2483e-02, + 8.1235e-02, 2.0939e-01, 5.0755e-01, 1.7351e+00 }; + mat* X = featureMatrix(interArrival_sample); + vec emCdf_octave = + { 0.033333, 0.100000, 0.100000, 0.166667, 0.166667, 0.200000, 0.233333, + 0.266667, 0.300000, 0.333333, 0.366667, 0.400000, 0.433333, + 0.466667, 0.500000, 0.533333, 0.566667, 0.600000, 0.633333, + 0.666667, 0.700000, 0.733333, 0.766667, 0.800000, 0.833333, + 0.866667, 0.900000, 0.933333, 0.966667, 1.000000 }; + //emCdf_octave = emCdf_octave.t(); + double J_expected1 = 0.17535; + double J_expected2 = 1.5341; + double J_expected3 = 9.0244; + + vec theta = zeros(2); + + double J = computeCost(*X, emCdf_octave, theta); + if (!compareDouble(J, J_expected1, 0.001)) + { + //cout << "J1 = " << J << "\nJ_expected1 = "<< J_expected1 << endl; + return (false); + } + theta(0) = 2; + theta(1) = 2; + J = computeCost(*X, emCdf_octave, theta); + if (!compareDouble(J, J_expected2, 0.001)) + { + //cout << "J2 = " << J << "\nJ_expected2 = "<< J_expected2 << endl; + return (false); + } + theta(0) = 1.5; + theta(1) = 12; + J = computeCost(*X, emCdf_octave, theta); + if (!compareDouble(J, J_expected3, 0.001)) + { + //cout << "J3 = " << J << "\nJ_expected3 = "<< J_expected3 << endl; + return (false); + } + + delete X; + return (true); +} + +bool DataProcessor::test_informationCriterion() +{ + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + + int m = interArrival.size(); + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + //gradient descendent + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + vec y = log(-log(1.0 + diferential - *interArrivalCdf)); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + double weibull_alpha = theta(1); + double weibull_betha = exp(-theta(0) / theta(1)); + vec paramVec = + { weibull_alpha, weibull_betha }; + double weibull_bic = informationCriterion(interArrival, "weibull", paramVec, + "bic"); + double weibull_aic = informationCriterion(interArrival, "weibull", paramVec, + "aic"); + + if (!compareDouble(weibull_bic, -33712.7042, 0.001)) + return (false); + else if (!compareDouble(weibull_aic, -33724.6567, 0.001)) + return (false); + + return (true); +} + +bool DataProcessor::test_pdf_weibull() +{ + double alpha = 1.5000; + double betha = 0.3; + vec data = + { 0.010000, 2.300000, 0.500000 }; + vec dataprob_eval1 = + { 9.0733e-01, 8.3571e-09, 7.5066e-01 }; + vec dataprob_test = zeros(3); + + dataprob_test(0) = pdf_weibull(data(0), alpha, betha); + dataprob_test(1) = pdf_weibull(data(1), alpha, betha); + dataprob_test(2) = pdf_weibull(data(2), alpha, betha); + + if (compareDouble(dataprob_test(0), dataprob_eval1(0)) + && compareDouble(dataprob_test(1), dataprob_eval1(1)) + && compareDouble(dataprob_test(2), dataprob_eval1(2))) + { + return (true); + } + + return (false); +} + +bool DataProcessor::test_cdf_weibull() +{ + double alpha = 0.5; + double betha = 1.5; + vec data = + { 0.010000, 2.300000, 0.500000 }; + vec dataprob_eval1 = + { 0.078405, 0.710117, 0.438616 }; + vec dataprob_test = zeros(3); + + dataprob_test(0) = cdf_weibull(data(0), alpha, betha); + dataprob_test(1) = cdf_weibull(data(1), alpha, betha); + dataprob_test(2) = cdf_weibull(data(2), alpha, betha); + //cout << dataprob_test(0) << " : " << dataprob_test(1) << " : " << dataprob_test(2) << endl; + + if (compareDouble(dataprob_test(0), dataprob_eval1(0)) + && compareDouble(dataprob_test(1), dataprob_eval1(1)) + && compareDouble(dataprob_test(2), dataprob_eval1(2))) + { + return (true); + } + + return (false); +} + +bool DataProcessor::test_gradientDescendent() +{ + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + + int m = interArrival.size(); + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + //gradient descendent + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + vec y = log(-log(1.0 + diferential - *interArrivalCdf)); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //expected values + double Jlast = 0.083359; + double theta0 = 1.660453; + double theta1 = 0.248811; + + if (!compareDouble(J_history(iterations - 1), Jlast)) + + { + return (false); + } + else if (!compareDouble(theta(0), theta0)) + { + return (false); + } + else if (!compareDouble(theta(1), theta1)) + { + return (false); + } + + delete interArrivalCdf; + delete X; + return (true); + +} + +bool DataProcessor::test_pdf_exponential() +{ + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double lambda1 = 0.50000; + vec val1 = + { 0.49751, 0.15832, 0.38940 }; + vec res1 = zeros(3); + + double lambda2 = 3.0; + vec val2 = + { 2.9113366, 0.0030234, 0.6693905 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = pdf_exponential(data(i), lambda1); + res2(i) = pdf_exponential(data(i), lambda2); + + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + + } + + return (true); +} + +bool DataProcessor::test_cdf_exponential() +{ + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double lambda1 = 0.50000; + vec val1 = + { 0.0049875, 0.6833632, 0.2211992 }; + vec res1 = zeros(3); + + double lambda2 = 3.0; + vec val2 = + { 0.029554, 0.998992, 0.776870 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = cdf_exponential(data(i), lambda1); + res2(i) = cdf_exponential(data(i), lambda2); + + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + + return (true); +} + +bool DataProcessor::test_pdf_pareto() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double alpha1 = 0.50000; + double xm1 = 1.0; + vec val1 = + { 0, 0.14334, 0 }; + vec res1 = zeros(3); + double xm2 = 0.00001; + double alpha2 = 3.0; + vec val2 = + { 3.0000e-07, 1.0720e-16, 4.8000e-14 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = pdf_pareto(data(i), alpha1, xm1); + res2(i) = pdf_pareto(data(i), alpha2, xm2); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + + return (true); +} + +bool DataProcessor::test_cdf_pareto() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double alpha1 = 0.50000; + double xm1 = 0.001; + vec val1 = + { 0.68377, 0.97915, 0.95528 }; + vec res1 = zeros(3); + double xm2 = 0.2; + double alpha2 = 1; + vec val2 = + { 0, 0.91304, 0.60000 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = cdf_pareto(data(i), alpha1, xm1); + res2(i) = cdf_pareto(data(i), alpha2, xm2); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + return (true); +} + +bool DataProcessor::test_pdf_cauchy() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + double gamma1 = 0.50000; + double x01 = 0.001; + + vec val1 = + { 0.636414, 0.028752, 0.318947 }; + vec res1 = zeros(3); + double x02 = 2; + double gamma2 = 2; + + vec val2 = + { 0.079976, 0.155653, 0.101859 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = pdf_cauchy(data(i), gamma1, x01); + res2(i) = pdf_cauchy(data(i), gamma2, x02); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + return (true); +} + +bool DataProcessor::test_cdf_cauchy() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + double gamma1 = 0.50000; + double x01 = 0.001; + + vec val1 = + { 0.50573, 0.93183, 0.74968 }; + vec res1 = zeros(3); + double x02 = 2; + double gamma2 = 2; + + vec val2 = + { 0.25080, 0.54739, 0.29517 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = cdf_cauchy(data(i), gamma1, x01); + res2(i) = cdf_cauchy(data(i), gamma2, x02); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + return (true); +} + +bool DataProcessor::test_fitModels() +{ + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + + int m = interArrival.size(); + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + //list of expected values + double weibull_alpha = 0.24881; + double weibull_betha = 0.0012639; + double normal_mu = 0.054792; + double normal_sigma = 0.205602; + double exponentialMe_lambda = 18.250783; + double exponentialLr_lambda = 2.023115; + double paretoLr_alpha = 0.225451; + double paretoLr_xm = 0.000000; + double paretoMlh_alpha = 0.171674; + double paretoMlh_xm = 0.000000; + double cauchy_gamma = 0.000067; + double cauchy_x0 = 0.005750; + double acErr = 0.001; + + vec paramVec = zeros(2); + vec infoCriterion = zeros(2); + + weibullFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), weibull_alpha, acErr)) + { + cout << "weibullFitting alpha" << endl; + return (false); + } + if (!compareDouble(paramVec(1), weibull_betha, acErr)) + { + cout << "weibullFitting betha" << endl; + return (false); + } + + normalFitting(interArrival, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), normal_mu, acErr)) + { + cout << "normalFitting mu" << endl; + return (false); + } + if (!compareDouble(paramVec(1), normal_sigma, acErr)) + { + cout << "normalFitting sigma" << endl; + return (false); + } + + exponentialMeFitting(interArrival, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), exponentialMe_lambda, acErr)) + { + cout << "exponentialLrFitting lambda" << endl; + return (false); + } + + exponentialLrFitting(interArrival, *interArrivalCdf, paramVec, + infoCriterion); + if (!compareDouble(paramVec(0), exponentialLr_lambda, acErr)) + { + cout << exponentialLr_lambda << ":" << paramVec(0) << endl; + cout << "exponentialLrFitting lambda" << endl; + return (false); + } + + paretoLrFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), paretoLr_alpha, acErr)) + { + cout << "paretoLrFitting alpha" << endl; + return (false); + } + if (!compareDouble(paramVec(1), paretoLr_xm, acErr)) + { + cout << "paretoLrFitting xm" << endl; + return (false); + } + + paretoMlhFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), paretoMlh_alpha, acErr)) + { + cout << "paretoMlhFitting alpha" << endl; + return (false); + } + if (!compareDouble(paramVec(1), paretoMlh_xm, acErr)) + { + cout << "paretoMlhFitting xm" << endl; + return (false); + } + + cauchyFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), cauchy_gamma, acErr)) + { + cout << "cauchyFitting" << endl; + return (false); + } + if (!compareDouble(paramVec(1), cauchy_x0, acErr)) + { + return (false); + } + + delete interArrivalCdf; + + return (true); +} + +bool DataProcessor::test_modelSelection() +{ + + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + int m = interArrival.size(); + + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + StochasticModelFit* modelVet = NULL; + modelVet = fitModels(list_interArrival, "aic"); + + //int numberOfModels = modelVet[0].size; + //for (int i = 0; i < numberOfModels; i++) + // cout << modelVet[i].modelName << " " << "modelVet[" << i << "] = " + // << modelVet[i].aic << endl; + + delete interArrivalCdf; + delete[] modelVet; + return (true); +} + +#endif //TEST_FUNCTIONS diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/c7/10d09ebda2b500161808a5c64fd2084a b/.metadata/.plugins/org.eclipse.core.resources/.history/c7/10d09ebda2b500161808a5c64fd2084a new file mode 100644 index 0000000..e81dd71 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/c7/10d09ebda2b500161808a5c64fd2084a @@ -0,0 +1,85 @@ +/* + * ConstantsDeinition.h + * + * Created on: 4 de jul de 2016 + * Author: apaschoalon + */ + +#ifndef DEFINES_H_ +#define DEFINES_H_ + +// Debug defines +//#define DEBUG 1 // basic debug +//#define DEBUG_DataProcessor_calculate_loop 1 +//#define DEBUG_DataProcessor_calculate 1 +//#define DEBUG_NetworkFlow 1 +//#define DEBUG_flowThread 1 +//#define DEBUG_DatabaseInterface 1 +//#define DEBUG_NetworkTrace_exec 1 + +#define DEBUG_ + +//Math +#define MEGA_POWER 1000000 + +//Protocol code +typedef unsigned short int protocol_code; +#define IPV4_CODE 2048 +#define ARP_CODE 2054 +#define ARP_CODE_REV 2056 +#define IPV6_CODE 34525 +#define ICMP_CODE 1 +#define TCP_CODE 6 +#define UDP_CODE 17 +#define DCCP_CODE 33 +#define GRE_CODE 47 +#define ICMPV6_CODE 58 +#define SCTP_CODE 132 + +//Protocols +typedef unsigned short int protocol; +#define PROTOCOL__NULL 0 +#define PROTOCOL__ETHERNET 1 +#define PROTOCOL__IPV4 2 +#define PROTOCOL__IPV6 3 +#define PROTOCOL__ARP 4 +#define PROTOCOL__ICMP 5 +#define PROTOCOL__ICMPV6 6 +#define PROTOCOL__TCP 7 +#define PROTOCOL__UDP 8 +#define PROTOCOL__DCCP 9 +#define PROTOCOL__GRE 10 +#define PROTOCOL__SCTP 11 +#define PROTOCOL__HTTP 12 +#define PROTOCOL__HTML 13 +#define PROTOCOL__SMTP 14 + +//Stochastic models +typedef unsigned short int stochastic_model; +#define WEIBULL "weibull" +#define NORMAL "normal" +#define EXPONENTIAL_MEAN "exponential-mean" +#define EXPONENTIAL_LINEAR_REGRESSION "exponential-linear-regression" +#define PARETO_LINEAR_REGRESSION "pareto-linear-regression" +#define PARETO_MAXIMUM_LIKEHOOD "pareto-maximum-likehood" +#define CAUCHY "cauchy" +#define CONSTANT "constant" +#define NO_MODEL "no-model-selected" + + +//packet analysis features +const double FILE_CUT_TIME = 0.1; +const double SESSION_CUT_TIME = 30; +const int PACKET_SIZE_MODE_CUT_VALUE = 500; + + +//Miscellaneous +//typedef string ip_addr; +typedef int port_number; +#define HLINE "----------" +#define TAB "::" +const int MAX_TRANSPORT_PORT_NUMBER = 65535; // +#define TEST_FUNCTIONS 1 //execute regression testes + + +#endif /* DEFINES_H_ */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/db/802eecc9acb500161808a5c64fd2084a b/.metadata/.plugins/org.eclipse.core.resources/.history/db/802eecc9acb500161808a5c64fd2084a new file mode 100644 index 0000000..e3a1976 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/db/802eecc9acb500161808a5c64fd2084a @@ -0,0 +1,885 @@ +/* + * DataProcessor.h + * + * Created on: 14 de jun de 2016 + * Author: apaschoalon + */ + +#ifndef DATAPROCESSOR_H_ +#define DATAPROCESSOR_H_ + +//external libs +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +//local libs +#include "DatabaseInterface.h" +#include "NetworkTrace.h" +#include "Defines.h" +#include "StochasticModelFit.h" + +//namespaces +using std::string; +using namespace arma; + +#define DEBUG_StochasticModelFit 1 + + +//TODO: this class must be static +class DataProcessor +{ +public: + + /** + * Default constructor + */ + DataProcessor(); + + /** + * Destructor. Clean any allocated memory + */ + virtual ~DataProcessor(); + + /** + * @brief Returns a string information about the class + * Returns a string information about the class + * + * @param void + * @return string + */ + string toString(void); + + /** + * @brief This method parameterize a network trace. + * Through the database interface class, this method retrieves all desired + * data from the database, in order to calculate and set parameters in a + * NetworkTrace class instance. This method knows all the labels and types + * of each database column, and how to deal with them correctly. So this + * method should be up to date with the database. After calculating all + * parameters, this class should save the data on the Network trace + * object and on its flows through netTrace.set() and netTace.flow[n].set() + * methods. + * + * @param experimentName experiment name string + * @param databaseInterface class interface to the database + * @param netTrace network trace class, which will be parameterized + * @return returns 0 in success + */ + int calculate(const string& experimentName, + DatabaseInterface* databaseInterface, NetworkTrace* netTrace); + +#ifdef TEST_FUNCTIONS + void save_data_on_file(const string& fileName, const mat& vet1, + const mat& vet2); + void DataProcessor::save_data_on_file(const string& fileName, list& theList); + void printTestResult(string testName, bool result); + bool compareDouble(double val1, double val2); + bool compareDouble(double val1, double val2, double acErr); + bool compareMat(mat& mat1, mat& mat2); + bool test_QuickSort(); + bool test_Mode(); + bool test_list_tocvector(); + bool test_empiricalCdf(); + bool test_computeCost(); + bool test_informationCriterion(); + bool test_gradientDescendent(); + bool test_pdf_weibull(); + bool test_cdf_weibull(); + bool test_pdf_exponential(); + bool test_cdf_exponential(); + bool test_pdf_pareto(); + bool test_cdf_pareto(); + bool test_pdf_cauchy(); + bool test_cdf_cauchy(); + bool test_fitModels(); + bool test_modelSelection(); +#endif //TEST_FUNCTIONS + +private: + /** + * A time smaller than the min_time resolution. Once the current resolution + * is 1e-6, min_time is half of this value. This value is used as default + * as substitute for times equal to zero. + */ + double min_time = 5e-7; + + /** + * A very small time value. This is used to avoid evaluating the operation + * log(0), which is undefined. + */ + double diferential = 4e-14; + + // calculate the mean packet rate + int mean_packetRate(list& pakcetSizeList, double duration); + + //calculate the most frequent element from a list + long int mode(list& thelist); + + /** + * ACTUAL FUNCTIONS + */ + // Take as input a vector vet[], its first and last position to be + // sorted. After the execution vet[] will be sorted. + // T* vet : C vector + // int left: fist position of the C vector to be sorted, usually 0. + // int right: last position of the C vector to be sorted, usually size-1; + template void quickSort(T* vet, int left, int right); + // Evaluate the mode (the most frequent value) of a list list + template T mode(list* theList); + + /** + * @brief Converts a list to a C vector. + * Converts a list to a C vector. + * @param theList + * @return + */ + template T* list_to_cvector(list* theList); + + /** + * @brief Delete a C vector + * @param c_vet pointer to the C vector + */ + template void delete_cvector(T* c_vet); + + /** + * @brief Compare two C vectors T. + * Compare two C vectors of types T. If they are equal, returns "true". If + * they are not, returns "false". + * + * @param vet1 + * @param vet2 + * @param size + * @return + */ + template bool isEqual(const T* vet1, const T* vet2, + const int size); + /** + * \brief convert a C vector T to a list + * + * @param theList pointer to an empty list + * @param vet pointer to a C vector + * @param size size of the C vector + */ + template void vectorC_to_list(list* theList, T* vet, + int size); + + /** + * Return an empirical vector of the Cumulative distribution function. + * This method take as input a list of empirical data, and create a + * vector (of the same size) of an empirical evaluation of the cumulative + * distribution function. Return must be freed using delete. + * + * @param list + * @return vec* empirical cumulative vector + */ + vec* empiricalCdf(list& empiricalData); + + //feature matrix: return a matrix X(m, 2) = [1 data]. Must be freed using delete. + /** + * @brief Creates a feature matrix for linear regression + * Creates a feature matrix X(m, 2) = [1 data], for the linear regression. + * Must be freed using delete. + * + * @param empiricalData list of the empirical data. + * @return returns a pointer to the feature matrix + */ + mat* featureMatrix(list& empiricalData); + + /** + * @brief Creates a feature matrix for linear regression + * Creates a feature matrix X(m, 2) = [1 data], for the linear regression. + * Must be freed using delete. + * + * @param empiricalData vector vec of the empirical data. + * @return returns a pointer to the feature matrix + */ + mat* featureMatrix(const vec& empiricalData); + + /** + * @brief Compute cost of the gradient descendent function + * It returns the value of the cost function for the list of parameteres + * + * @param X feature matrix + * @param y expected values + * @param theta linear regression coeficients [theta1; theta2] + * @return cost value + */ + double computeCost(const mat& X, const vec& y, const vec& theta); + + /** + * @brief Gradient descendent algorithm + * Evaluates the gradient descendent + * + * @param X feature matrix + * @param y + * @param learning_rate + * @param num_iters + * @param theta + * @param J_history + */ + void gradientDescendent(const mat& X, const vec& y, + const double learning_rate, const int num_iters, vec& theta, + vec& J_history); + + /** + * @brief information criterion + * + * @param data + * @param functionName + * @param paramVet + * @param criterion + * @return + */ + double informationCriterion(const vec& data, const string& functionName, + const vec& paramVet, const string& criterion); + + /** + * @brief natural logarithm of likehood function + * + * @param data + * @param functionName + * @param paramVet + * @return + */ + double logLikehood(const vec& data, const string& functionName, + const vec& paramVet); + /** + * @brief fit weibull alpha and betha using linear regression + * + * @param interArrival + * @param interArrivalCdf + * @param paramVec + * @param informationCriterion + */ + void weibullFitting(const vec& interArrival, const vec& interArrivalCdf, + vec& paramVec, vec& informationCriterion); + + /** + * @brief evaluate mean and standard deviation + * + * @param interArrival + * @param paramVec + * @param informationCriterion + */ + void normalFitting(const vec& interArrival, vec& paramVec, + vec& informationCriterion); + + /** + * @brief evaluate lambda using linear regression + * + * @param interArrival + * @param interArrivalCdf + * @param paramVec + * @param informationCriterion + */ + void exponentialLrFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, + vec& informationCriterion); + + /** + * @brief evaluate lambda using mean estimation + * + * @param interArrival + * @param paramVec + * @param informationCriterion + */ + void exponentialMeFitting(const vec& interArrival, vec& paramVec, + vec& informationCriterion); + + /** + * @brief evaluate pareto's alpha and xm using Linear regression + * + * @param interArrival + * @param interArrivalCdf + * @param paramVec + * @param informationCriterion + */ + void paretoLrFitting(const vec& interArrival, const vec& interArrivalCdf, + vec& paramVec, vec& informationCriterion); + + /** + * @brief evaluate pareto's alpha and xm using maximum likehood method + * + * @param interArrival + * @param interArrivalCdf + * @param paramVec + * @param informationCriterion + */ + void paretoMlhFitting(const vec& interArrival, const vec& interArrivalCdf, + vec& paramVec, vec& informationCriterion); + + /** + * @brief evaluate cauchy's gamma and x0 using linear regression + * + * @param interArrival + * @param interArrivalCdf + * @param paramVec + * @param informationCriterion + */ + void cauchyFitting(const vec& interArrival, const vec& interArrivalCdf, + vec& paramVec, vec& informationCriterion); + + /** + * @brief + * + * @param interArrival + * @param paramVec + * @param informationCriterion + */ + void constantFitting(const vec& interArrival, vec& paramVec, + vec& informationCriterion); + + /** + * @brief returns probability of a given + * @param x + * @param alpha + * @param betha + * @return + */ + double pdf_weibull(double x, double alpha, double betha); + + /** + * + * @param x + * @param alpha + * @param betha + * @return + */ + double cdf_weibull(double x, double alpha, double betha); + + /** + * + * @param x + * @param lambda + * @return + */ + double pdf_exponential(double x, double lambda); + + /** + * + * @param x + * @param lambda + * @return + */ + double cdf_exponential(double x, double lambda); + + /** + * + * @param x + * @param alpha + * @param xm + * @return + */ + double pdf_pareto(double x, double alpha, double xm); + + /** + * + * @param x + * @param alpha + * @param xm + * @return + */ + double cdf_pareto(double x, double alpha, double xm); + + /** + * + * @param x + * @param gamma + * @param x0 + * @return + */ + double pdf_cauchy(double x, double gamma, double x0); + + /** + * + * @param x + * @param gamma + * @param x0 + * @return + */ + double cdf_cauchy(double x, double gamma, double x0); + + /** + * + * @param x + * @param mu + * @param sigma + * @return + */ + double pdf_normal(double x, double mu, double sigma); + + /** + * + * @param x + * @param mu + * @param sigma + * @return + */ + double cdf_normal(double x, double mu, double sigma); + + /** + * + * @param x_min + * @param x_max + * @return + */ + double pdf_uniform(double x_min, double x_max); + + /** + * + * @param x + * @param x_min + * @param x_max + * @return + */ + double cdf_uniform(double x, double x_min, double x_max); + + // Take as input a list o inter-arrival times, and a pointer to a C vector + // of the struct StochasticModelFit. The available models are ordered here, + // from the best to the worst, according to the specified criterion BIC or + // AIC. If it is not specified, it uses as default AIC. + + /** + * + * @param empiricalData + * @param criterion + * @return + */ + StochasticModelFit* fitModels(list& empiricalData, + const string& criterion); + +#ifdef TEST_FUNCTIONS + + vec interArrivalSample = + { 0, 0, 0.000203, 1e-05, 0.318392, 1.00003, 0.517214, 3.2e-05, 7.6e-05, + 0.159572, 0.028456, 0.000267, 1.6e-05, 0.000362, 0.001436, 0.012243, + 0.052051, 0.010572, 0.300375, 1.6e-05, 0.00012, 0.171993, 0.000161, + 0.180517, 0.336145, 9e-06, 0.007852, 0.044852, 0.020313, 0.030458, + 0.218979, 0.250961, 0.158453, 0.042762, 0.129894, 0.01578, 0.016078, + 3.1e-05, 2.2e-05, 0.000309, 1.8e-05, 7.1e-05, 3e-06, 0.00018, 6e-06, + 0.041497, 0.094336, 0.030568, 0.69278, 0.083745, + 0.09501999999999999, 0.246721, 0.000322, 1.5e-05, 6.4e-05, 0.00031, + 6.600000000000001e-05, 0.000203, 5.4e-05, 4e-06, 4.6e-05, + 0.0005509999999999999, 0.046676, 0.000133, 0.00025, 0.000106, 4e-06, + 6e-05, 0.000579, 0.020548, 0.020144, 0.00017, 4.3e-05, 3.8e-05, + 0.000403, 8.8e-05, 9.2e-05, 2.1e-05, 8.899999999999999e-05, 7.9e-05, + 0.037013, 0.003625, 0.000174, 0.001402, 0.01547, 0.000137, 0.000257, + 0.000181, 0.000249, 0.000175, 0.000262, 0.000188, 0.000245, + 0.000198, 0.000194, 0.039691, 0.377134, 0.025489, + 0.08887399999999999, 0.071201, 0.118396, 0.011301, 0.18306, + 0.471818, 1.2e-05, 0.057105, 0.158384, 0.033412, 0.279247, 0.615341, + 0.07193099999999999, 0.041286, 6e-06, 6.4e-05, 0.000615, 0.000159, + 1.5e-05, 0.179127, 0.003532, 0.087938, 0.128529, 0.003537, 0.555139, + 0.312737, 0.614656, 0.20354, 0.18178, 0.728741, 0.227757, 0.657457, + 1.122729, 0.000405, 1.1e-05, 0.876119, 1.999258, 0.936457, 0.000285, + 1.2e-05, 4.5e-05, 5.3e-05, 0.000321, 0.000137, 0.00026, 0.00031, + 0.000224, 2.5e-05, 0.000171, 3.7e-05, 0.000211, 9.3e-05, 0.000175, + 2.8e-05, 0.000447, 0.000124, 3e-06, 0.000121, 0.000124, 1.3e-05, + 0.000111, 0.000129, 3e-06, 3.6e-05, 3e-06, 1.8e-05, 3.9e-05, + 8.6e-05, 0.00021, 0.000239, 0.000161, 3.2e-05, 0.000224, 0.001489, + 0.00078, 0.000127, 7e-06, 0.000197, 0.000703, 2.5e-05, 0.000145, + 0.00263, 0.001061, 0.001058, 8e-06, 1.5e-05, 4.6e-05, 0.001069, + 0.013118, 6.4e-05, 0.016585, 0.008005, 0.004525, 0.01047, 1.1e-05, + 4e-06, 1e-06, 1e-06, 1e-06, 0.000346, 0.003028, 0.3629, 0.605291, + 0.024532, 0.13292, 6e-06, 2e-06, 2e-06, 2e-06, 2e-06, 3.5e-05, + 0.000585, 0.000348, 0.000227, 0.000171, 7e-06, 0.08057, 0.758265, + 0.999926, 0.026228, 0.430843, 0.460833, 0.076263, 0.682728, + 0.000663, 0.286479, 0.000348, 1.2e-05, 5e-05, 0.000407, 4.8e-05, + 0.000171, 5e-05, 0.000202, 3.5e-05, 0.000215, 2.7e-05, 0.000227, + 3.3e-05, 0.000461, 0.000124, 8e-06, 0.000109, 0.000124, 7e-06, + 0.000115, 0.000123, 1e-06, 0.000122, 0.000125, 3e-06, 0.000122, + 0.000121, 1.8e-05, 0.000105, 3.5e-05, 4e-06, 4.6e-05, 0.000216, + 8.6e-05, 0.000174, 0.000106, 0.00019, 7.8e-05, 0.000171, 7.1e-05, + 0.000256, 0.000219, 0.000174, 8.899999999999999e-05, 0.000168, + 0.000114, 8e-06, 4.5e-05, 0.000549, 0.041588, 9.399999999999999e-05, + 0.000272, 5.8e-05, 4e-06, 4.2e-05, 0.000563, 0.012524, 0.011557, + 0.000133, 0.033325, 8.1e-05, 3.4e-05, 0.000523, 0.041159, 5.2e-05, + 2.3e-05, 5.7e-05, 0.016827, 9.500000000000001e-05, 0.000229, + 7.1e-05, 0.000184, 7.2e-05, 0.000183, 5.3e-05, 0.000166, 3.2e-05, + 0.000225, 0.037247, 1.000281, 1.5e-05, 1.8e-05, 3.9e-05, 7e-06, + 6e-06, 5.9e-05, 8e-06, 4e-06, 4.7e-05, 0.000492, 4.2e-05, 7e-06, + 4e-06, 3e-06, 6e-06, 2.5e-05, 6e-05, 1.8e-05, 6e-06, 1.8e-05, 6e-06, + 5.7e-05, 1.5e-05, 0.000178, 3.4e-05, 6e-06, 4e-06, 4e-06, 7e-06, + 0.000154, 1.6e-05, 4e-06, 3e-06, 4e-06, 5.7e-05, 0.000236, 4.2e-05, + 7e-06, 3e-06, 4e-06, 0.000261, 4.1e-05, 6e-06, 8.3e-05, 4.9e-05, + 8e-06, 5e-06, 4e-06, 4e-06, 5e-06, 1.1e-05, 0.000377, 4.3e-05, + 8e-06, 4e-06, 4e-06, 6e-06, 4e-06, 9e-06, 0.000183, 2.7e-05, 6e-06, + 3e-06, 4e-06, 0.000203, 2.5e-05, 6e-06, 3e-06, 4e-06, 6e-06, 0.0002, + 2.8e-05, 6e-06, 4e-06, 4e-06, 7e-06, 0.000205, 2.7e-05, 6e-06, + 4e-06, 3e-06, 0.000183, 2.9e-05, 6e-06, 4e-06, 3e-06, 7e-06, + 0.000217, 2.6e-05, 6e-06, 4e-06, 3e-06, 6e-06, 0.000209, 3.5e-05, + 6e-06, 3e-06, 3e-06, 0.000247, 4.3e-05, 5e-06, 3e-06, 3e-06, 7e-06, + 8.000000000000001e-05, 1.4e-05, 4e-06, 4e-06, 3e-06, 7.6e-05, + 0.000233, 4.2e-05, 6e-06, 3e-06, 3e-06, 0.000108, 1.4e-05, 5e-06, + 4e-06, 5.5e-05, 0.000259, 3.3e-05, 3.4e-05, 0.000106, 0.000304, + 0.000247, 3.3e-05, 0.000169, 0.000276, 3.3e-05, 3.2e-05, 0.000112, + 0.000275, 0.000284, 0.000244, 6.4e-05, 0.00013, 0.000222, 0.000244, + 0.000377, 0.000136, 0.000324, 6.1e-05, 0.000101, 0.000304, 0.000205, + 0.000298, 0.000202, 0.000265, 4.3e-05, 0.000182, 0.000198, 3.6e-05, + 0.036618, 0.167993, 0.000405, 5.6e-05, 0.132945, 0.5075499999999999, + 1.839101, 0.160079, 0.856059, 0.00019, 0.814619, 0.001748, 0.326707, + 0.016594, 0.104517, 0.000487, 1.2e-05, 3.5e-05, 0.030896, 1.3e-05, + 2.5e-05, 2e-06, 5.6e-05, 2e-06, 0.00016, 8e-06, 1e-06, 4.4e-05, + 6e-06, 0.000232, 2e-06, 9.6e-05, 5e-06, 1e-06, 0.000219, 3e-06, + 1e-06, 0.000281, 4e-06, 1e-06, 0.000247, 2e-06, 1e-06, 0.000182, + 4e-06, 1e-06, 0.000234, 3e-06, 2e-06, 0.000331, 7e-06, 2e-06, + 0.000228, 7e-06, 0.000124, 0.000342, 0.000243, 0.000109, 8e-06, + 0.00015, 6.1e-05, 8e-06, 0.006888, 7.4e-05, 0.033877, 0.03964, + 0.031221, 0.027626, 0.029209, 0.027819, 0.008146, 0.003837, + 0.054232, 0.141787, 0.189477, 0.000731, 0.037917, 0.239763, + 0.016276, 0.101792, 0.121279, 0.569522, 0.162138, 0.167452, + 0.100904, 0.050978, 0.193571, 0.023699, 0.00188, 0.7299330000000001, + 0.14706, 0.069059, 0.000354, 2.1e-05, 0.000376, 0.051512, 4e-05, + 0.00026, 1.9e-05, 5.1e-05, 4e-06, 6e-05, 0.000322, 4.5e-05, 1.3e-05, + 9e-06, 7.8e-05, 3.9e-05, 0.000258, 5.4e-05, 6.9e-05, 8e-06, 6.2e-05, + 0.000148, 4.2e-05, 0.000136, 5.7e-05, 4.7e-05, 0.000226, 0.00012, + 0.000106, 5.4e-05, 0.000169, 9.7e-05, 0.000135, 5.3e-05, 0.000161, + 5.6e-05, 2.9e-05, 1.1e-05, 2.8e-05, 2.9e-05, 0.000329, 4.8e-05, + 2.4e-05, 1e-05, 3.4e-05, 2.8e-05, 0.000345, 0.000111, 0.000216, + 8e-06, 0.010716, 0.000189, 0.002223, 0.000222, 0.000261, 6.1e-05, + 0.000497, 0.000121, 6e-06, 3.1e-05, 7.4e-05, 0.000316, 0.000201, + 0.000241, 0.037019, 0.011593, 0.025272, 1.2e-05, 0.005462, 0.000153, + 0.000308, 1.8e-05, 0.000457, 0.000157, 1.2e-05, 0.000111, + 6.499999999999999e-05, 8.500000000000001e-05, 0.000121, 0.036178, + 0.062789, 0.209764, 2.2e-05, 0.000104, 0.000598, 0.000113, 0.000858, + 0.001237, 1.1e-05, 6.4e-05, 0.022295, 0.002239, 0.02595, 0.048743, + 2.3e-05, 0.048933, 0.000101, 3.8e-05, 0.134329, 0.013961, 1e-05, + 0.003331, 7e-06, 0.006234, 0.000175, 8e-06, 0.0002, 0.000699, + 2.4e-05, 0.001724, 6e-06, 0.000252, 1.3e-05, 0.00269, 0.000125, + 7e-06, 0.000158, 0.007282, 0.015473, 0.064868, 6e-06, 0.216, + 2.2e-05, 2.9e-05, 6.9e-05, 0.000317, 1.4e-05, 0.002346, 0.00051, + 0.005226, 2e-05, 0.019417, 0.001007, 0.000196, 0.005594, 0.005761, + 0.008026, 0.09038, 0.000229, 0.000128, 0.209391, 0.231852, 0.032119, + 5e-06, 5e-06, 2e-06, 2e-06, 1e-06, 2e-06, 3.3e-05, 0.000664, 1e-05, + 2e-06, 0, 1e-06, 1e-06, 8.899999999999999e-05, 1.8e-05, 2.7e-05, + 5e-06, 1e-06, 1e-06, 0.000308, 4e-06, 2e-06, 2e-06, 0.000159, 5e-06, + 1e-06, 1e-06, 0.000537, 8e-06, 2e-06, 2e-06, 1e-06, 1e-06, 1e-06, + 0.00044, 1e-05, 2e-06, 3e-06, 3e-06, 3e-06, 2e-06, 0.0001, 0.000368, + 1e-05, 1e-06, 3e-06, 3e-06, 4e-06, 2e-06, 0.000452, 5e-06, 3e-06, + 2e-06, 2e-06, 2e-06, 0.000215, 6e-06, 2e-06, 2e-06, 0.000259, 7e-06, + 3e-06, 1e-06, 0.000209, 5e-06, 2e-06, 1e-06, 0.000236, 4e-06, 1e-06, + 2e-06, 0.000238, 3e-06, 1e-06, 2e-06, 0.000252, 1.6e-05, 1e-06, + 1e-06, 0.000255, 1.2e-05, 1e-06, 2e-06, 0.000202, 1.5e-05, 1e-06, + 1e-06, 0.000251, 1.2e-05, 1e-06, 1e-06, 0.000198, 4e-06, 1e-06, + 2e-06, 0.000254, 4e-06, 1e-06, 1e-06, 0.00013, 0.000103, 2e-06, + 1e-06, 1e-06, 0.00023, 5e-06, 2e-06, 1e-06, 0.000244, 4e-06, 1e-06, + 0, 0.000233, 6e-06, 1e-06, 1e-06, 0.000241, 4e-06, 1e-06, 1e-06, + 0.000238, 6e-06, 3e-06, 1e-06, 0.000234, 6e-06, 2e-06, 1e-06, + 0.000234, 8e-06, 1e-06, 1e-06, 0.000236, 7e-06, 1e-06, 1e-06, + 0.000236, 4e-06, 1e-06, 1e-06, 0.000237, 5e-06, 1e-06, 2e-06, + 0.000236, 2e-06, 3e-06, 4e-06, 0.000237, 6e-06, 3e-06, 3e-06, + 0.000232, 4e-06, 2e-06, 1e-06, 0.000238, 4e-06, 1e-06, 2e-06, + 0.000239, 6e-06, 1e-06, 1e-06, 0.00024, 2e-06, 1e-06, 1e-06, + 0.000241, 3e-06, 2e-06, 1e-06, 0.000238, 4e-06, 2e-06, 1e-06, + 0.000237, 3e-06, 1e-06, 2e-06, 0.00024, 5e-06, 1e-06, 1e-06, + 0.000237, 4e-06, 1e-06, 1e-06, 0.00024, 3e-06, 2e-06, 1e-06, + 0.000305, 4e-06, 2e-06, 0.000194, 1.2e-05, 1e-06, 0.000223, 1.2e-05, + 1e-06, 0.000235, 1.5e-05, 1e-06, 0.000224, 1.2e-05, 2e-06, 0.000231, + 1.1e-05, 2e-06, 0.000225, 6e-06, 2e-06, 1e-06, 0.000245, 1.4e-05, + 1e-06, 0.000218, 2e-06, 1e-06, 0.000243, 3e-06, 2e-06, 0.00024, + 4e-06, 1e-06, 0.00024, 4e-06, 2e-06, 0.000238, 2e-06, 1e-06, 1e-06, + 0.000241, 2e-06, 1e-06, 0.000242, 4e-06, 1e-06, 0.000241, 2e-06, + 1e-06, 0.000242, 4e-06, 1e-06, 0.00024, 4e-06, 1e-06, 0.000243, + 1.6e-05, 2e-06, 0.000225, 1.2e-05, 2e-06, 0.000231, 1.5e-05, + 0.00023, 1.1e-05, 2e-06, 0.000231, 1.1e-05, 0.000237, 1.4e-05, + 0.000219, 4e-06, 2e-06, 0.000241, 5e-06, 0.000245, 3e-06, 0.000247, + 6e-06, 3e-06, 0.000229, 5e-06, 0.000238, 6e-06, 3e-06, 0.000244, + 1.3e-05, 0.000243, 2e-06, 0.000222, 0.000245, 3e-06, 2e-06, + 0.000239, 3e-06, 3e-06, 0.000238, 1e-06, 1e-06, 0.000244, 3e-06, + 2e-06, 0.000239, 2e-06, 0.000244, 1e-06, 0.000244, 0.000245, + 0.000255, 0.000243, 0.000251, 1.6e-05, 0.000231, 1.3e-05, 0.000228, + 1.2e-05, 0.000238, 5e-06, 0.000235, 1.3e-05, 0.000192, 7.8e-05, + 1.4e-05, 9.8e-05, 9.7e-05, 0.000236, 0.000256, 0.000247, 2e-05, + 8.4e-05, 1.2e-05, 0.000104, 6.9e-05, 1.3e-05, 0.000179, 0.000245, + 0.000256, 1e-06, 9.2e-05, 0.000124, 1.7e-05, 0.000242, 0.000143, + 1.7e-05, 0.064764, 0.268533, 0.000247, 0.000117, 4.6e-05, 0.0001, + 0.00026, 1.3e-05, 7.8e-05, 0.000413, 7.499999999999999e-05, + 0.000187, 7.6e-05, 0.00019, 0.015809, 0.000237, 4e-05, 2.3e-05, + 0.000115, 0.000268, 9e-06, 3.1e-05, 0.000317, 0.000248, 0.00025, + 0.000111, 0.00018, 3.2e-05, 0.000196, 5.3e-05, 0.000188, 4.7e-05, + 0.000197, 6.1e-05, 0.000184, 6.8e-05, 0.000187, 0.03969, 0.401298, + 0.191103, 0.038273, 0.155567, 2.8e-05, 0.000256, + 6.600000000000001e-05, 1.2e-05, 0.000205, 1.5e-05, 0.413707, + 0.02753, 0.142191, 0.120225, 0.761589, 0.148513, + 0.07999199999999999, 0.443199, 1.476141, 0.380089, 0.005695, + 0.000311, 1.2e-05, 0.008484999999999999, 0.849543, 0.00359, + 0.751508, 1.292865, 0.179771, 0.5266, 0.366045, 2e-05, 1.03151, + 1.2e-05, 0.6017670000000001, 0.705453, 1.29376, 0.388697, 0.000119, + 0.000292, 1.4e-05, 7e-06, 0.000235, 1e-05, 0.171773, + 0.07598100000000001, 0.310302, 0.0004, 1.7e-05, 8.1e-05, 0.000385, + 0.000118, 0.000302, 0.000114, 0.000281, 2.9e-05, 0.000209, 2.7e-05, + 0.000239, 2.5e-05, 0.000212, 6e-05, 0.000224, 9.1e-05, 0.000233, + 1.9e-05, 0.000198, 1.9e-05, 0.000289, 0.000267, 0.000198, 6e-05, + 0.000195, 7.6e-05, 3e-06, 2e-06, 1e-06, 2e-06, 2e-06, 6.9e-05, + 0.000555, 0.000244, 0.000241, 0.039375, 0.000124, 0.000288, + 9.899999999999999e-05, 3e-06, 6.2e-05, 0.000571, 0.048884, 0.000149, + 1.4e-05, 6e-06, 6e-06, 3.3e-05, 1.6e-05, 7e-06, 2.5e-05, 0.000324, + 0.000219, 9e-06, 0.000153, 0.000128, 0.00011, 0.000155, 9e-06, + 0.00017, 7.3e-05, 0.037596, 0.027548, 0.000148, 0.00018, 0.016617, + 7.499999999999999e-05, 0.000234, 3.3e-05, 0.000171, 2.8e-05, + 0.000231, 3.5e-05, 0.00019, 2.8e-05, 0.000209, 0.039791, 0.832296, + 1.999254, 0.048807, 0.016688, 0.103137, 0.855847, 0.655344, + 0.000661, 0.013452, 0.168439, 0.136821, 0.025272, 9e-06, + 0.007948999999999999, 0.037041, 0.047981, 0.008460000000000001, + 0.04047, 0.009528, 0.020497, 0.072979, 0.009079, 0.11388, 0.023627, + 0.016839, 0.235363, 0.200238, 0.259802, 0.133895, 0.19443, 0.003572, + 0.124423, 0.003563, 0.37003, 0.040397, 0.3915, 0.000331, 1.7e-05, + 0.186427, 0.003647, 0.000144, 0.004702, 0.542918, 0.227775, + 0.641863, 0.034463, 0.016594, 0.419727, 0.000376, 3.6e-05, 0.000115, + 0.000327, 0.0005330000000000001, 0.00028, 0.000207, 0.000324, + 0.000296, 1e-05, 7e-06, 4.2e-05, 0.000562, 0.010122, 3.8e-05, + 0.018846, 0.000187, 0.000264, 0.000181, 0.000292, 0.000118, + 0.000469, 0.01084, 0.000237, 3.8e-05, 0.019239, 2.8e-05, 0.000227, + 0.0001, 0.000213, 0.000112, 0.000241, 0.000121, 0.000312, 0.000149, + 0.000209, 0.000133, 0.000296, 0.000132, 0.000214, 0.00166, 0.02373, + 0.001922, 4e-06, 4.3e-05, 3e-06, 5.1e-05, 3e-06, 5.6e-05, 2e-06, + 5.4e-05, 1e-06, 0.000392, 8e-06, 1e-06, 4.8e-05, 3e-06, 3.7e-05, + 2e-06, 0.000158, 1e-05, 2e-06, 1e-06, 4.7e-05, 0.000205, 3e-06, + 1e-06, 1e-06, 0.000516, 0.000201, 0.000213, 0.000308, 0.000241, + 0.00026, 0.000234, 0.169798, 8.500000000000001e-05, 0.0003, + 0.000144, 3e-06, 2e-06, 6.8e-05, 0.000589, 0.03856, 0.035385, + 0.000115, 0.000179, 5.8e-05, 0.000143, 0.000343, 0.000129, 0.000214, + 7.2e-05, 0.000288, 8.1e-05, 0.000203, 5.1e-05, 0.000369, + 9.500000000000001e-05, 0.000176, 0.001365, 0.013006, 0.001368, + 3e-06, 1e-06, 1e-06, 1e-06, 2e-06, 5.2e-05, 2e-06, 6.3e-05, 1.3e-05, + 1e-06, 1e-06, 6.7e-05, 2e-06, 1e-06, 4.3e-05, 4e-06, 6.1e-05, 1e-06, + 1e-06, 7.1e-05, 2e-06, 7e-06, 0.0002, 0.000255, 0.000229, 0.000516, + 0.000282, 0.000244, 0.000256, 0.000238, 0.000242, 0.000245, + 0.029151, 8.3e-05, 0.000294, 0.000143, 5e-06, 2e-06, 6.4e-05, + 0.000604, 0.012818, 0.00022, 0.019331, 0.000117, 0.000224, 0.000222, + 0.000234, 7.6e-05, 0.000216, 6.7e-05, 0.00028, 7.1e-05, 0.000219, + 4.5e-05, 0.000249, 6.7e-05, 0.000193, 0.001358, 0.013339, 0.001356, + 4e-06, 1e-06, 1e-06, 1e-06, 2e-06, 1e-06, 3.5e-05, 1e-06, 3.2e-05, + 6e-06, 6.8e-05, 1e-06, 1e-06, 4e-05, 7e-06, 1.5e-05, 2.7e-05, 5e-06, + 3.2e-05, 6e-06, 2.5e-05, 3e-05, 0.000278, 0.000251, 0.000215, + 0.000489, 0.000514, 0.000257, 0.000257, 0.000243, 0.000218, + 0.010181, 0.001256, 3e-05, 0.017594, 6.499999999999999e-05, + 0.000246, 0.000173, 4e-06, 1e-06, 6.499999999999999e-05, 0.000554, + 0.032475, 0.000117, 0.000258, 0.00054, 0.000265, 0.000146, 0.000199, + 6.9e-05, 0.000292, 0.000126, 0.000205, 0.000109, 0.000287, 0.000119, + 0.00021, 0.001505, 0.01251, 0.001603, 3e-06, 2e-06, 1e-06, 1e-06, + 2e-06, 1e-06, 4.5e-05, 3e-06, 6.7e-05, 1.2e-05, 1e-06, 1e-06, + 6.7e-05, 1.9e-05, 1e-06, 1e-06, 1e-05, 1.9e-05, 5.9e-05, 2e-06, + 9.3e-05, 2e-06, 0.000219, 0.000245, 0.000208, 0.000262, 0.000498, + 0.000251, 0.000244, 0.000246, 0.000244, 0.000247, 0.02889, 8.1e-05, + 0.000216, 0.000107, 3e-06, 2e-06, 6.9e-05, 0.0005820000000000001, + 0.01628, 0.00018, 5.4e-05, 0.000269, 0.015699, 2.2e-05, 0.000102, + 0.000347, 0.00041, 0.000227, 7.7e-05, 0.0002, 6.2e-05, 0.000236, + 4.8e-05, 0.00018, 7.499999999999999e-05, 0.000302, 9.2e-05, + 0.000167, 0.001491, 0.012937, 0.001596, 3e-06, 2e-06, 2e-06, 1e-06, + 2e-06, 2e-06, 2e-06, 1e-06, 3.4e-05, 3e-06, 7.499999999999999e-05, + 1.8e-05, 1e-06, 1e-06, 1e-06, 6e-05, 2e-06, 9e-06, 5.3e-05, 5e-06, + 2e-05, 1e-05, 0.000295, 0.000242, 0.000245, 0.000522, 0.000488, + 0.000247, 0.000243, 0.000246, 0.000246, 0.028895, 8.2e-05, 0.000303, + 0.000144, 5e-06, 2e-06, 6.8e-05, 0.000595, 0.009254, 0.027474, + 0.012253, 0.000107, 0.000184, 5.8e-05, 0.000119, 0.000216, 4e-05, + 0.000201, 2.2e-05, 0.000263, 4.1e-05, 0.000208, + 6.999999999999999e-05, 0.000266, 3.7e-05, 0.000167, 0.001494, + 0.013389, 0.001558, 4e-06, 2e-06, 1e-06, 2e-06, 1e-06, 1e-06, + 3.8e-05, 3e-06, 6.1e-05, 1e-06, 1e-06, 4.2e-05, 4e-06, 5.6e-05, + 4e-06, 1e-06, 3e-05, 8e-06, 5.4e-05, 1e-06, 1e-06, 2.6e-05, + 0.000256, 0.000241, 0.000244, 0.000553, 0.000246, 0.00022, 0.00024, + 0.000244, 0.000247, 0.000213, 0.028935, 8.899999999999999e-05, + 0.000214, 8.2e-05, 4e-06, 2e-06, 5.9e-05, 0.000562, 0.032548, + 0.000119, 0.000226, 0.0003, 0.000213, 4e-05, 0.000167, 3.3e-05, + 0.000333, 0.000132, 0.000208, 9.1e-05, 0.000296, 0.000118, 0.000181, + 0.00152, 0.013032, 0.001587, 4e-06, 2e-06, 1e-06, 2e-06, 2e-06, + 2e-06, 3.8e-05, 2e-06, 8.1e-05, 1e-06, 0, 1.6e-05, 1e-06, 5e-05, + 4e-06, 5.6e-05, 1e-06, 1e-06, 3.1e-05, 9e-06, 2.8e-05, 9e-06, + 0.00026, 0.000242, 0.000249, 0.000486, 0.000245, 0.000245, 0.000348, + 0.000419, 0.000279, 0.028802, 8.3e-05, 0.000286, 0.000115, 4e-06, + 2e-06, 5.9e-05, 0.000559, 0.000241, 0.002101, 3.5e-05, 0.030066, + 0.000106, 0.000205, 0.001807, 0.000205, 7.2e-05, 0.000191, 3e-05, + 0.000302, 0.000137, 0.000201, 8.899999999999999e-05, 0.000306, + 0.000116, 0.000325, 0.001743, 0.011198, 0.001645, 3e-06, 2e-06, + 2e-06, 1e-06, 2e-06, 1e-06, 1e-05, 3.5e-05, 2e-06, 6.7e-05, 2e-06, + 0, 4.5e-05, 8e-06, 2.2e-05, 3.3e-05, 8e-06, 7.1e-05, 1.4e-05, 1e-06, + 1e-06, 2.7e-05, 0.000255, 0.00024, 0.000243, 0.0005240000000000001, + 0.000242, 0.000246, 0.000282, 0.000452, 0.000251, 0.045419, + 8.500000000000001e-05, 0.000254, 6.1e-05, 2e-06, 3e-06, 6.9e-05, + 0.000559, 0.032483, 7.2e-05, 0.000221, 0.000143, 0.000211, 7.4e-05, + 0.0002, 4.9e-05, 0.000301, 0.000129, 0.000212, 9.2e-05, 0.000262, + 6e-05, 0.000198, 0.001624, 0.013169, 0.001673, 3e-06, 1e-06, 1e-06, + 2e-06, 2e-06, 1e-06, 4e-05, 3e-06, 6.4e-05, 1e-06, 1e-06, 4.8e-05, + 6e-06, 1.2e-05, 6.3e-05, 2e-06, 5.2e-05, 2e-06, 1e-06, 0, 3.5e-05, + 1e-06, 0.000295, 0.000239, 0.000243, 0.000492, 0.000243, 0.000278, + 0.00031, 0.000424, 0.000219, 0.028386, 0.000228, 5.4e-05, 0.000213, + 3.5e-05, 0.000238, 0.007959000000000001, 2.2e-05, 7.1e-05, 0.000481, + 0.000111, 4e-06, 1e-06, 6.8e-05, 0.000623, 0.038715, 0.010124, + 0.000116, 0.000228, 6.2e-05, 0.002913, 0.000265, 2.1e-05, 0.000179, + 1.5e-05, 1.3e-05, 0.000229, 3.9e-05, 0.000196, 3.5e-05, 0.000269, + 7.3e-05, 0.000191, 5.3e-05, 0.000247, 2.2e-05, 0.000177, 0.001569, + 0.010022, 0.001705, 3e-06, 2e-06, 1e-06, 1e-06, 3e-06, 1e-06, 1e-06, + 1e-06, 3.6e-05, 2e-06, 6.499999999999999e-05, 1e-06, 1e-06, 6e-05, + 1e-06, 1e-06, 5.6e-05, 1e-06, 4.2e-05, 4e-06, 1.7e-05, 2e-06, + 0.000327, 0.000232, 0.00025, 0.000239, 0.000501, 0.000215, 0.000245, + 0.000244, 0.000246, 0.000325, 0.02873, 8.7e-05, 0.000337, 0.000112, + 3e-06, 2e-06, 5.5e-05, 0.00056, 0.032383, 0.000119, 0.000246, + 0.001701, 0.000251, 0.004701, 0.000195, 0.006657, 0.027981, 7.3e-05, + 0.00024, 0.019186, 0.000333, 7.7e-05, 0.000241, 0.037189, 0.272651, + 0.227517, 6e-06, 2e-06, 2e-06, 1e-06, 2e-06, 3.7e-05, 2e-06, + 3.4e-05, 2e-06, 0.0006089999999999999, 1.8e-05, 3e-06, + 6.499999999999999e-05, 3e-06, 5.6e-05, 9e-06, 3e-06, 1e-06, + 6.499999999999999e-05, 5e-06, 1e-06, 0.000207, 9e-06, 2e-06, 1e-06, + 1e-06, 0.000442, 9e-06, 1e-06, 2e-06, 1e-06, 1e-06, 3.5e-05, + 0.000105, 1.2e-05, 7.499999999999999e-05, 3e-06, 1e-06, 1e-06, + 1e-06, 1e-06, 1e-06, 0.00047, 3e-06, 2e-06, 1e-06, 1e-06, 1e-06, + 1e-06, 0.000255, 4e-06, 1e-06, 2e-06, 1e-06, 1e-06, 2e-06, 0.000462, + 4e-06, 2e-06, 1e-06, 1e-06, 1e-06, 1e-06, 0.000234, 4e-06, 1e-06, + 1e-06, 1e-06, 0.00024, 6e-06, 1e-06, 2e-06, 1e-06, 0.000236, 5e-06, + 1e-06, 1e-06, 1e-06, 0.000256, 4e-06, 1e-06, 1e-06, 1e-06, 0.00022, + 2e-06, 1e-06, 0.000242, 4e-06, 2e-06, 0.000241, 5e-06, 2e-06, + 0.000233, 3e-06, 2e-06, 0.000239, 5e-06, 2e-06, 0.000238, 4e-06, + 1e-06, 0.00024, 5e-06, 1e-06, 0.000239, 3e-06, 1e-06, 0.000245, + 0.000279, 0.000142, 0.000114, 8.7e-05, 5e-06, 0.000157, 0.000225, + 0.000241, 6.2e-05, 0.000185, 6.2e-05, 4e-06, 0.000144, 0.000247, + 0.000255, 6.600000000000001e-05, 0.00017, 7.499999999999999e-05, + 1.5e-05, 0.000168, 0.000258, 6.8e-05, 0.000165, 7.7e-05, 5e-06, + 0.000145, 0.000242, 6.8e-05, 0.00018, 9.8e-05, 5e-06, 0.000169, + 0.000265, 0.000232, 5.3e-05, 2.5e-05, 5e-06, 0.009259, 0.039637, + 0.00865, 2.8e-05, 5e-06, 5e-06, 0.009263, 2.7e-05, 0.087632, 6e-05, + 0.000318, 1.4e-05, 1.6e-05, 2e-06, 5e-06, 4.2e-05, 0.00032, + 0.037569, 0.703033, 0.214916, 0.64994, 0.04462, 0.302059, 0.999951, + 0.137821, 0.039703, 0.027832, 0.000366, 1.7e-05, 0.000111, 0.000346, + 0.000131, 0.00019, 4.5e-05, 4e-06, 2e-06, 3.8e-05, 0.000618, + 0.036949, 0.0052, 0.000138, 0.0002, 0.000107, 9.399999999999999e-05, + 4e-06, 5.9e-05, 0.000579, 0.032121, 0.000118, 1.5e-05, 3.3e-05, + 3e-06, 0.000374, 0.000259, 6e-06, 0.00016, 5.3e-05, + 6.600000000000001e-05, 0.036463, 0.00435, 0.000131, 0.0002, + 0.016695, 0.000124, 0.000254, 7.7e-05, 0.000202, 6.9e-05, 0.000174, + 4.5e-05, 0.000229, 6.7e-05, 0.000176, 0.038503, 0.271061, 0.036943, + 0.003036, 0.307457, 0.23321, 0.029976, 0.000198, 0.62617, 3e-05, + 0.000353, 1.9e-05, 1e-05, 2e-06, 0.109966, 0.651886, 0.213682, + 4.9e-05, 2.7e-05, 0.000236, 1e-05, 4.6e-05, 2e-06, 0.00011, 2e-06, + 0.000152, 1e-06, 0.133729, 0.609789, 0.031985, 2.2e-05, 9.6e-05, + 0.016657, 9.1e-05, 0.000312, 0.000155, 0.000175, 3.6e-05, 0.000326, + 0.000222, 5e-06, 4.3e-05, 4e-06, 3.9e-05, 1.9e-05, 2.4e-05, 2.7e-05, + 2e-06, 5.9e-05, 0.000446, 2e-05, 3e-06, 5.8e-05, 2e-06, 6e-05, + 3e-06, 5.8e-05, 1e-05, 3e-06, 2e-06, 6.2e-05, 0.000145, 4e-06, + 1e-06, 1e-06, 3.7e-05, 0.000475, 4e-06, 2e-06, 1e-06, 2e-06, + 3.5e-05, 9e-06, 3.5e-05, 1e-06, 0.00041, 8e-06, 2e-06, 1e-06, 1e-06, + 2e-06, 1e-06, 3.9e-05, 2e-06, 0.000412, 4e-06, 2e-06, 1e-06, 1e-06, + 2e-06, 1e-06, 1e-06, 3.9e-05, 0.000437, 4e-06, 2e-06, 1e-06, 2e-06, + 1e-06, 1e-06, 2e-06, 1e-06, 0.000476, 4e-06, 2e-06, 1e-06, 2e-06, + 1e-06, 1e-06, 1e-06, 1e-06, 0.000455, 5e-06, 1e-06, 1e-06, 1e-06, + 1e-06, 1e-06, 0.000236, 1e-06, 2e-06, 1e-06, 1e-06, 0.000242, 5e-06, + 2e-06, 1e-06, 0.000302, 7e-06, 1e-06, 2e-06, 0.000174, 4e-06, 2e-06, + 1e-06, 0.000263, 3e-06, 2e-06, 1e-06, 0.000206, 5e-06, 1e-06, 2e-06, + 0.000263, 9e-06, 2e-06, 1e-06, 0.000241, 1.1e-05, 2e-06, 1e-06, + 0.000262, 1.9e-05, 3e-06, 1e-06, 0.000223, 1.9e-05, 0.000224, + 0.000248, 0.000244, 0.000217, 0.00024, 0.000244, 0.000246, 0.000221, + 0.000274, 0.000241, 0.000212, 0.000277, 0.000213, 0.000281, + 0.000242, 0.000245, 0.000244, 0.000246, 0.000244, 0.00025, 0.00024, + 0.000247, 0.000244, 0.000242, 0.001342, 0.000379, 0.034867, + 0.000105, 0.000224, 9.3e-05, 0.000182, 2.7e-05, 0.00026, 3.4e-05, + 0.000379, 0.039497, 0.5442, 0.357434, 1.099135, 0.041655, 0.85846, + 0.09723900000000001, 0.311746, 0.29389, 0.394283, 0.308007, + 0.445888, 0.148214, 0.097913, 0.307962, 0.692039, 0.307906, + 0.593507, 0.056654, 0.041922, 0.033815, 0.274117, + 0.8501919999999999, 4.8e-05, 4e-05, 5.2e-05, 0.000176, 3.5e-05, + 7.8e-05, 4.1e-05, 3.9e-05, 1.4e-05, 3.8e-05, 2e-05, 1e-05, 5e-06, + 3e-05, 1.3e-05, 0.14915, 0.026055, 0.003791, 0.562937, 1.999277, + 1.065992, 0.000143, 0.523873, 0.311931, 0.028066, 0.069262, + 0.239786, 1.759471, 0.246945, 0.756221, 0.697726, 0.000743, + 0.297642, 0.003465, 0.913362, 1.3e-05, 0.0866, 0.081234, 0.025897, + 0.050497, 0.259128, 0.014569, 0.564476, 0.004333, 0.312601, + 0.003488, 0.683764, 0.995133, 0.004903, 0.270456, + 0.6224730000000001, 0.000158, 0.161523, 0.000449, 2e-05, 0.000129, + 0.000428, 0.000134, 0.000275, 0.000131, 0.000373, 8.8e-05, 0.000344, + 7.6e-05, 0.000289, 9.899999999999999e-05, 0.000266, 0.00011, + 0.000218, 0.000129, 0.000203, 3.2e-05, 0.000265, + 8.899999999999999e-05, 0.000232, 7.9e-05, 0.000238, 0.000368, + 0.000233, 0.000121, 0.000228, 0.000164, 5e-06, 3e-06, 2e-06, 1e-06, + 8.8e-05, 0.000565, 0.000216, 0.034407, 0.000127, 0.000216, 5.8e-05, + 3e-06, 5.7e-05, 0.000566, 0.032524, 0.000164, 1.9e-05, 8e-06, + 2.2e-05, 1.4e-05, 1.4e-05, 4.4e-05, 0.000401, 5.6e-05, 9.6e-05, + 7e-06, 0.000133, 8e-06, 0.000248, 1.3e-05, 1e-06, 0.000302, 7.6e-05, + 0.036992, 0.028077, 0.000239, 0.000188, 0.016701, 0.000103, + 0.000332, 0.000134, 0.000307, 0.00013, 0.000323, 0.000139, 0.000212, + 0.000116, 0.000175, 0.037659, 0.132015, 0.312029, 0.297586, + 1.336091, 0.663151, 1.295715, 0.703577, 0.296261, 0.101385, 0.22987, + 0.000233, 0.434696, 0.000419, 3.6e-05, 0.000159, 0.000332, 0.000899, + 0.000119, 0.00019, 0.0352, 0.144224, 0.05227, 0.149337, 0.185305, + 0.000393, 0.184107, 5.8e-05, 0.000343, 0.183449, 0.000685, 0.000284, + 1.5e-05, 0.000102, 0.000448, 0.00037, 1.8e-05, 0.000112, 0.000401, + 0.00012, 0.00029, 0.000119, 0.000243, 6.4e-05, 0.000177, 5.4e-05, + 0.000188, 5.4e-05, 0.000279, 9.2e-05, 0.000504, 0.000166, 1.5e-05, + 5.4e-05, 0.000175, 1.5e-05, 7.7e-05, 0.000155, 1.5e-05, 0.000101, + 0.000401, 0.000268, 0.000207, 0.0001, 0.000145, + 0.0009700000000000001, 7.2e-05, 0.036994, 0.14733, 0.010867, + 0.037774, 0.056528, 0.10916, 0.000384, 1e-05, 2.9e-05, 0.000265, + 0.037653, 0.175573, 1.9e-05, 0.676889, 0.702174, 0.297846, 1.701447, + 0.066121, 5e-06, 5e-06, 2e-06, 2e-06, 3e-06, 1e-06, 2e-06, 3e-06, + 2e-06, 0.000725, 1.9e-05, 2e-06, 1e-06, 1e-06, 1e-06, 1e-06, + 6.999999999999999e-05, 2e-05, 2e-06, 3e-06, 1e-06, 1e-06, 1e-06, + 0.000218, 7e-06, 1e-06, 1e-06, 1e-06, 7.2e-05, 0.000155, 6e-06, + 1e-06, 1e-06, 1e-06, 0.000256, 3e-06, 2e-06, 1e-06, 0.000559, + 1.6e-05, 0.000227, 0.000299, 2.6e-05, 0.00012, 0.000264, 1.5e-05, + 0.000238, 1.5e-05, 1.4e-05, 0.000224, 0.000234, 1.5e-05, 0.000223, + 0.006457, 2.2e-05, 0.016599, 0.07625899999999999, 0.238719, + 0.000408, 0.037377, 0.08400299999999999, 0.003761, 0.124235, + 0.003565, 1.337726, 1.999245, 1.075482, 2.9e-05, 0.000378, 2e-05, + 9e-06, 2e-06, 1.8e-05, 6e-06, 0.923339, 1.999252, 1.10893, 0.003052, + 0.887231, 1.999357, 1.735131, 0.000561, 0.263547, 1.066412, + 0.000189, 6.7e-05, 0.932557, 0.069161, 0.000414, 1.7e-05, 0.000328, + 0.076215, 0.148162, 1.6e-05, 0.000117, 0.119362, 0.000372, 1.7e-05, + 0.7902090000000001, 0.794934, 0.918648, 0.0002, 1.080404, 0.413585, + 3.6e-05, 0.000285, 5.5e-05, 4e-06, 2.5e-05, 5e-06, 0.091326, + 0.003882, 0.572217, 7e-06, 4e-06, 2e-06, 2e-06, 8e-06, 4.3e-05, + 2e-06, 2e-06, 3.3e-05, 0.000581, 2.4e-05, 3e-06, 2e-06, 2e-06, + 2e-06, 2e-06, 0.000154, 6e-06, 2e-06, 2e-06, 2e-06, 0.000242, + 1.4e-05, 3e-06, 6.600000000000001e-05, 9e-06, 0.00015, 6.8e-05, + 2e-05, 0.000135, 6.7e-05, 1.3e-05, 0.000447, 6.3e-05, 6e-06, + 0.000211, 5e-06, 0.000197, 0.000266, 1.8e-05, 1.8e-05, 0.000206, + 5.2e-05, 1e-05, 0.070046, 1.1e-05, 0.844631, 1.999285, 0.37526, + 0.269128, 0.000144, 0.428814, 0.000377, 2e-05, 0.000132, 0.000335, + 0.000146, 0.00032, 0.00014, 0.000315, 9.000000000000001e-05, + 0.000326, 7.8e-05, 0.000348, 0.000138, 0.000309, 0.000191, 0.000269, + 9.2e-05, 0.000228, 8.1e-05, 0.000333, 0.000478, 0.000208, 0.000122, + 0.000251, 0.000158, 6e-06, 3e-06, 2e-06, 2e-06, 3.7e-05, 0.000592, + 0.000243, 0.026904, 0.000156, 0.000307, 0.000234, 1.1e-05, 5.5e-05, + 0.000566, 0.032068, 0.000263, 5.9e-05, 4.3e-05, 4.5e-05, 4.2e-05, + 4.2e-05, 4e-05, 0.000202, 0.000138, 3.5e-05, 2.2e-05, 3e-05, + 0.000149, 0.000149, 3e-05, 5.4e-05, 0.000164, 2.8e-05, 0.000127, + 0.03696, 0.019837, 0.00032, 0.000252, 0.016369, 0.000222, 0.000284, + 0.000233, 0.000254, 0.00022, 0.000266, 0.000239, 0.000251, 0.000192, + 0.000192, 0.037031, 1.7e-05, 0.116766, 0.192277, 0.435377, 0.091586, + 3.1e-05, 0.000373, 1.9e-05, 1e-05, 2e-06, 0.000261, 1.4e-05, + 0.280014, 0.023348, 3.2e-05, 2.9e-05, 0.000314, 2.2e-05, 1.2e-05, + 2e-06, 0.000253, 1.7e-05, 0.975979, 0.62699, 0.37293, + 0.9999749999999999, 0.626341, 0.492913, 0.014529, 0.570348, + 0.076026, 0.235104, 0.003504, 0.606799, 0.126116, 0.99708, 0.306968, + 0.005815, 0.563343, 0.123881, 0.303074, 0.697012, 0.303014, + 0.075444, 0.000103, 0.496756, 0.124502, 0.303213, + 0.06970899999999999, 0.6271060000000001, 0.303057, 0.571645, + 0.428396, 1.129816, 0.441094, 1.216598, 0.184097, 0.598553, + 1.762639, 0.000133, 0.236455, 0.700106, 0.025727, 0.876292, + 0.003488, 0.124494, 0.00356, 0.265654, 0.031362, 0.997795, + 0.9701149999999999, 0.029865, 0.913193, 0.000163, + 0.08662400000000001, 0.969381, 0.030588, 1.000004, 0.968747, + 1.999191, 0.181717, 0.003031, 0.476371, 0.000189, 0.498117, + 0.001757, 0.094473, 0.070796, 0.257284, 0.415613, 0.324319, + 0.103689, 3e-05, 0.000304, 1.9e-05, 1.3e-05, 1e-06, + 0.09349499999999999, 2.2e-05, 0.042766, 0.496198, 0.263337, + 0.138729, 0.028411, 0.088029, 0.031219, 0.388701, 0.324931, + 0.266295, 0.268827, 0.235355, 0.105707, 1.7e-05, 0.123881, 0.381654, + 0.076361, 0.09857399999999999, 0.11765, 0.07213, 0.144328, 0.047985, + 0.061286, 0.019094, 0.083081, 0.000315, 1.3e-05, 0.171753, 0.072075, + 0.152366, 0.031976, 0.46934, 0.197771, 0.036378 }; +#endif //TEST_FUNCTIONS + +}; + +#endif /* DATAPROCESSOR_H_ */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/dc/20882d9d8ab500161808a5c64fd2084a b/.metadata/.plugins/org.eclipse.core.resources/.history/dc/20882d9d8ab500161808a5c64fd2084a new file mode 100644 index 0000000..3c94b38 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/dc/20882d9d8ab500161808a5c64fd2084a @@ -0,0 +1,885 @@ +/* + * DataProcessor.h + * + * Created on: 14 de jun de 2016 + * Author: apaschoalon + */ + +#ifndef DATAPROCESSOR_H_ +#define DATAPROCESSOR_H_ + +//external libs +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +//local libs +#include "DatabaseInterface.h" +#include "NetworkTrace.h" +#include "Defines.h" +#include "StochasticModelFit.h" + +//namespaces +using std::string; +using namespace arma; + +#define DEBUG_StochasticModelFit 1 + + +//TODO: this class must be static +class DataProcessor +{ +public: + + /** + * Default constructor + */ + DataProcessor(); + + /** + * Destructor. Clean any allocated memory + */ + virtual ~DataProcessor(); + + /** + * @brief Returns a string information about the class + * Returns a string information about the class + * + * @param void + * @return string + */ + string toString(void); + + /** + * @brief This method parameterize a network trace. + * Through the database interface class, this method retrieves all desired + * data from the database, in order to calculate and set parameters in a + * NetworkTrace class instance. This method knows all the labels and types + * of each database column, and how to deal with them correctly. So this + * method should be up to date with the database. After calculating all + * parameters, this class should save the data on the Network trace + * object and on its flows through netTrace.set() and netTace.flow[n].set() + * methods. + * + * @param experimentName experiment name string + * @param databaseInterface class interface to the database + * @param netTrace network trace class, which will be parameterized + * @return returns 0 in success + */ + int calculate(const string& experimentName, + DatabaseInterface* databaseInterface, NetworkTrace* netTrace); + +#ifdef TEST_FUNCTIONS + void save_data_on_file(const string& fileName, const mat& vet1, + const mat& vet2); + void save_data_on_file(const string& fileName, const StochasticModelFit& data); + void printTestResult(string testName, bool result); + bool compareDouble(double val1, double val2); + bool compareDouble(double val1, double val2, double acErr); + bool compareMat(mat& mat1, mat& mat2); + bool test_QuickSort(); + bool test_Mode(); + bool test_list_tocvector(); + bool test_empiricalCdf(); + bool test_computeCost(); + bool test_informationCriterion(); + bool test_gradientDescendent(); + bool test_pdf_weibull(); + bool test_cdf_weibull(); + bool test_pdf_exponential(); + bool test_cdf_exponential(); + bool test_pdf_pareto(); + bool test_cdf_pareto(); + bool test_pdf_cauchy(); + bool test_cdf_cauchy(); + bool test_fitModels(); + bool test_modelSelection(); +#endif //TEST_FUNCTIONS + +private: + /** + * A time smaller than the min_time resolution. Once the current resolution + * is 1e-6, min_time is half of this value. This value is used as default + * as substitute for times equal to zero. + */ + double min_time = 5e-7; + + /** + * A very small time value. This is used to avoid evaluating the operation + * log(0), which is undefined. + */ + double diferential = 4e-14; + + // calculate the mean packet rate + int mean_packetRate(list& pakcetSizeList, double duration); + + //calculate the most frequent element from a list + long int mode(list& thelist); + + /** + * ACTUAL FUNCTIONS + */ + // Take as input a vector vet[], its first and last position to be + // sorted. After the execution vet[] will be sorted. + // T* vet : C vector + // int left: fist position of the C vector to be sorted, usually 0. + // int right: last position of the C vector to be sorted, usually size-1; + template void quickSort(T* vet, int left, int right); + // Evaluate the mode (the most frequent value) of a list list + template T mode(list* theList); + + /** + * @brief Converts a list to a C vector. + * Converts a list to a C vector. + * @param theList + * @return + */ + template T* list_to_cvector(list* theList); + + /** + * @brief Delete a C vector + * @param c_vet pointer to the C vector + */ + template void delete_cvector(T* c_vet); + + /** + * @brief Compare two C vectors T. + * Compare two C vectors of types T. If they are equal, returns "true". If + * they are not, returns "false". + * + * @param vet1 + * @param vet2 + * @param size + * @return + */ + template bool isEqual(const T* vet1, const T* vet2, + const int size); + /** + * \brief convert a C vector T to a list + * + * @param theList pointer to an empty list + * @param vet pointer to a C vector + * @param size size of the C vector + */ + template void vectorC_to_list(list* theList, T* vet, + int size); + + /** + * Return an empirical vector of the Cumulative distribution function. + * This method take as input a list of empirical data, and create a + * vector (of the same size) of an empirical evaluation of the cumulative + * distribution function. Return must be freed using delete. + * + * @param list + * @return vec* empirical cumulative vector + */ + vec* empiricalCdf(list& empiricalData); + + //feature matrix: return a matrix X(m, 2) = [1 data]. Must be freed using delete. + /** + * @brief Creates a feature matrix for linear regression + * Creates a feature matrix X(m, 2) = [1 data], for the linear regression. + * Must be freed using delete. + * + * @param empiricalData list of the empirical data. + * @return returns a pointer to the feature matrix + */ + mat* featureMatrix(list& empiricalData); + + /** + * @brief Creates a feature matrix for linear regression + * Creates a feature matrix X(m, 2) = [1 data], for the linear regression. + * Must be freed using delete. + * + * @param empiricalData vector vec of the empirical data. + * @return returns a pointer to the feature matrix + */ + mat* featureMatrix(const vec& empiricalData); + + /** + * @brief Compute cost of the gradient descendent function + * It returns the value of the cost function for the list of parameteres + * + * @param X feature matrix + * @param y expected values + * @param theta linear regression coeficients [theta1; theta2] + * @return cost value + */ + double computeCost(const mat& X, const vec& y, const vec& theta); + + /** + * @brief Gradient descendent algorithm + * Evaluates the gradient descendent + * + * @param X feature matrix + * @param y + * @param learning_rate + * @param num_iters + * @param theta + * @param J_history + */ + void gradientDescendent(const mat& X, const vec& y, + const double learning_rate, const int num_iters, vec& theta, + vec& J_history); + + /** + * @brief information criterion + * + * @param data + * @param functionName + * @param paramVet + * @param criterion + * @return + */ + double informationCriterion(const vec& data, const string& functionName, + const vec& paramVet, const string& criterion); + + /** + * @brief natural logarithm of likehood function + * + * @param data + * @param functionName + * @param paramVet + * @return + */ + double logLikehood(const vec& data, const string& functionName, + const vec& paramVet); + /** + * @brief fit weibull alpha and betha using linear regression + * + * @param interArrival + * @param interArrivalCdf + * @param paramVec + * @param informationCriterion + */ + void weibullFitting(const vec& interArrival, const vec& interArrivalCdf, + vec& paramVec, vec& informationCriterion); + + /** + * @brief evaluate mean and standard deviation + * + * @param interArrival + * @param paramVec + * @param informationCriterion + */ + void normalFitting(const vec& interArrival, vec& paramVec, + vec& informationCriterion); + + /** + * @brief evaluate lambda using linear regression + * + * @param interArrival + * @param interArrivalCdf + * @param paramVec + * @param informationCriterion + */ + void exponentialLrFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, + vec& informationCriterion); + + /** + * @brief evaluate lambda using mean estimation + * + * @param interArrival + * @param paramVec + * @param informationCriterion + */ + void exponentialMeFitting(const vec& interArrival, vec& paramVec, + vec& informationCriterion); + + /** + * @brief evaluate pareto's alpha and xm using Linear regression + * + * @param interArrival + * @param interArrivalCdf + * @param paramVec + * @param informationCriterion + */ + void paretoLrFitting(const vec& interArrival, const vec& interArrivalCdf, + vec& paramVec, vec& informationCriterion); + + /** + * @brief evaluate pareto's alpha and xm using maximum likehood method + * + * @param interArrival + * @param interArrivalCdf + * @param paramVec + * @param informationCriterion + */ + void paretoMlhFitting(const vec& interArrival, const vec& interArrivalCdf, + vec& paramVec, vec& informationCriterion); + + /** + * @brief evaluate cauchy's gamma and x0 using linear regression + * + * @param interArrival + * @param interArrivalCdf + * @param paramVec + * @param informationCriterion + */ + void cauchyFitting(const vec& interArrival, const vec& interArrivalCdf, + vec& paramVec, vec& informationCriterion); + + /** + * @brief + * + * @param interArrival + * @param paramVec + * @param informationCriterion + */ + void constantFitting(const vec& interArrival, vec& paramVec, + vec& informationCriterion); + + /** + * @brief returns probability of a given + * @param x + * @param alpha + * @param betha + * @return + */ + double pdf_weibull(double x, double alpha, double betha); + + /** + * + * @param x + * @param alpha + * @param betha + * @return + */ + double cdf_weibull(double x, double alpha, double betha); + + /** + * + * @param x + * @param lambda + * @return + */ + double pdf_exponential(double x, double lambda); + + /** + * + * @param x + * @param lambda + * @return + */ + double cdf_exponential(double x, double lambda); + + /** + * + * @param x + * @param alpha + * @param xm + * @return + */ + double pdf_pareto(double x, double alpha, double xm); + + /** + * + * @param x + * @param alpha + * @param xm + * @return + */ + double cdf_pareto(double x, double alpha, double xm); + + /** + * + * @param x + * @param gamma + * @param x0 + * @return + */ + double pdf_cauchy(double x, double gamma, double x0); + + /** + * + * @param x + * @param gamma + * @param x0 + * @return + */ + double cdf_cauchy(double x, double gamma, double x0); + + /** + * + * @param x + * @param mu + * @param sigma + * @return + */ + double pdf_normal(double x, double mu, double sigma); + + /** + * + * @param x + * @param mu + * @param sigma + * @return + */ + double cdf_normal(double x, double mu, double sigma); + + /** + * + * @param x_min + * @param x_max + * @return + */ + double pdf_uniform(double x_min, double x_max); + + /** + * + * @param x + * @param x_min + * @param x_max + * @return + */ + double cdf_uniform(double x, double x_min, double x_max); + + // Take as input a list o inter-arrival times, and a pointer to a C vector + // of the struct StochasticModelFit. The available models are ordered here, + // from the best to the worst, according to the specified criterion BIC or + // AIC. If it is not specified, it uses as default AIC. + + /** + * + * @param empiricalData + * @param criterion + * @return + */ + StochasticModelFit* fitModels(list& empiricalData, + const string& criterion); + +#ifdef TEST_FUNCTIONS + + vec interArrivalSample = + { 0, 0, 0.000203, 1e-05, 0.318392, 1.00003, 0.517214, 3.2e-05, 7.6e-05, + 0.159572, 0.028456, 0.000267, 1.6e-05, 0.000362, 0.001436, 0.012243, + 0.052051, 0.010572, 0.300375, 1.6e-05, 0.00012, 0.171993, 0.000161, + 0.180517, 0.336145, 9e-06, 0.007852, 0.044852, 0.020313, 0.030458, + 0.218979, 0.250961, 0.158453, 0.042762, 0.129894, 0.01578, 0.016078, + 3.1e-05, 2.2e-05, 0.000309, 1.8e-05, 7.1e-05, 3e-06, 0.00018, 6e-06, + 0.041497, 0.094336, 0.030568, 0.69278, 0.083745, + 0.09501999999999999, 0.246721, 0.000322, 1.5e-05, 6.4e-05, 0.00031, + 6.600000000000001e-05, 0.000203, 5.4e-05, 4e-06, 4.6e-05, + 0.0005509999999999999, 0.046676, 0.000133, 0.00025, 0.000106, 4e-06, + 6e-05, 0.000579, 0.020548, 0.020144, 0.00017, 4.3e-05, 3.8e-05, + 0.000403, 8.8e-05, 9.2e-05, 2.1e-05, 8.899999999999999e-05, 7.9e-05, + 0.037013, 0.003625, 0.000174, 0.001402, 0.01547, 0.000137, 0.000257, + 0.000181, 0.000249, 0.000175, 0.000262, 0.000188, 0.000245, + 0.000198, 0.000194, 0.039691, 0.377134, 0.025489, + 0.08887399999999999, 0.071201, 0.118396, 0.011301, 0.18306, + 0.471818, 1.2e-05, 0.057105, 0.158384, 0.033412, 0.279247, 0.615341, + 0.07193099999999999, 0.041286, 6e-06, 6.4e-05, 0.000615, 0.000159, + 1.5e-05, 0.179127, 0.003532, 0.087938, 0.128529, 0.003537, 0.555139, + 0.312737, 0.614656, 0.20354, 0.18178, 0.728741, 0.227757, 0.657457, + 1.122729, 0.000405, 1.1e-05, 0.876119, 1.999258, 0.936457, 0.000285, + 1.2e-05, 4.5e-05, 5.3e-05, 0.000321, 0.000137, 0.00026, 0.00031, + 0.000224, 2.5e-05, 0.000171, 3.7e-05, 0.000211, 9.3e-05, 0.000175, + 2.8e-05, 0.000447, 0.000124, 3e-06, 0.000121, 0.000124, 1.3e-05, + 0.000111, 0.000129, 3e-06, 3.6e-05, 3e-06, 1.8e-05, 3.9e-05, + 8.6e-05, 0.00021, 0.000239, 0.000161, 3.2e-05, 0.000224, 0.001489, + 0.00078, 0.000127, 7e-06, 0.000197, 0.000703, 2.5e-05, 0.000145, + 0.00263, 0.001061, 0.001058, 8e-06, 1.5e-05, 4.6e-05, 0.001069, + 0.013118, 6.4e-05, 0.016585, 0.008005, 0.004525, 0.01047, 1.1e-05, + 4e-06, 1e-06, 1e-06, 1e-06, 0.000346, 0.003028, 0.3629, 0.605291, + 0.024532, 0.13292, 6e-06, 2e-06, 2e-06, 2e-06, 2e-06, 3.5e-05, + 0.000585, 0.000348, 0.000227, 0.000171, 7e-06, 0.08057, 0.758265, + 0.999926, 0.026228, 0.430843, 0.460833, 0.076263, 0.682728, + 0.000663, 0.286479, 0.000348, 1.2e-05, 5e-05, 0.000407, 4.8e-05, + 0.000171, 5e-05, 0.000202, 3.5e-05, 0.000215, 2.7e-05, 0.000227, + 3.3e-05, 0.000461, 0.000124, 8e-06, 0.000109, 0.000124, 7e-06, + 0.000115, 0.000123, 1e-06, 0.000122, 0.000125, 3e-06, 0.000122, + 0.000121, 1.8e-05, 0.000105, 3.5e-05, 4e-06, 4.6e-05, 0.000216, + 8.6e-05, 0.000174, 0.000106, 0.00019, 7.8e-05, 0.000171, 7.1e-05, + 0.000256, 0.000219, 0.000174, 8.899999999999999e-05, 0.000168, + 0.000114, 8e-06, 4.5e-05, 0.000549, 0.041588, 9.399999999999999e-05, + 0.000272, 5.8e-05, 4e-06, 4.2e-05, 0.000563, 0.012524, 0.011557, + 0.000133, 0.033325, 8.1e-05, 3.4e-05, 0.000523, 0.041159, 5.2e-05, + 2.3e-05, 5.7e-05, 0.016827, 9.500000000000001e-05, 0.000229, + 7.1e-05, 0.000184, 7.2e-05, 0.000183, 5.3e-05, 0.000166, 3.2e-05, + 0.000225, 0.037247, 1.000281, 1.5e-05, 1.8e-05, 3.9e-05, 7e-06, + 6e-06, 5.9e-05, 8e-06, 4e-06, 4.7e-05, 0.000492, 4.2e-05, 7e-06, + 4e-06, 3e-06, 6e-06, 2.5e-05, 6e-05, 1.8e-05, 6e-06, 1.8e-05, 6e-06, + 5.7e-05, 1.5e-05, 0.000178, 3.4e-05, 6e-06, 4e-06, 4e-06, 7e-06, + 0.000154, 1.6e-05, 4e-06, 3e-06, 4e-06, 5.7e-05, 0.000236, 4.2e-05, + 7e-06, 3e-06, 4e-06, 0.000261, 4.1e-05, 6e-06, 8.3e-05, 4.9e-05, + 8e-06, 5e-06, 4e-06, 4e-06, 5e-06, 1.1e-05, 0.000377, 4.3e-05, + 8e-06, 4e-06, 4e-06, 6e-06, 4e-06, 9e-06, 0.000183, 2.7e-05, 6e-06, + 3e-06, 4e-06, 0.000203, 2.5e-05, 6e-06, 3e-06, 4e-06, 6e-06, 0.0002, + 2.8e-05, 6e-06, 4e-06, 4e-06, 7e-06, 0.000205, 2.7e-05, 6e-06, + 4e-06, 3e-06, 0.000183, 2.9e-05, 6e-06, 4e-06, 3e-06, 7e-06, + 0.000217, 2.6e-05, 6e-06, 4e-06, 3e-06, 6e-06, 0.000209, 3.5e-05, + 6e-06, 3e-06, 3e-06, 0.000247, 4.3e-05, 5e-06, 3e-06, 3e-06, 7e-06, + 8.000000000000001e-05, 1.4e-05, 4e-06, 4e-06, 3e-06, 7.6e-05, + 0.000233, 4.2e-05, 6e-06, 3e-06, 3e-06, 0.000108, 1.4e-05, 5e-06, + 4e-06, 5.5e-05, 0.000259, 3.3e-05, 3.4e-05, 0.000106, 0.000304, + 0.000247, 3.3e-05, 0.000169, 0.000276, 3.3e-05, 3.2e-05, 0.000112, + 0.000275, 0.000284, 0.000244, 6.4e-05, 0.00013, 0.000222, 0.000244, + 0.000377, 0.000136, 0.000324, 6.1e-05, 0.000101, 0.000304, 0.000205, + 0.000298, 0.000202, 0.000265, 4.3e-05, 0.000182, 0.000198, 3.6e-05, + 0.036618, 0.167993, 0.000405, 5.6e-05, 0.132945, 0.5075499999999999, + 1.839101, 0.160079, 0.856059, 0.00019, 0.814619, 0.001748, 0.326707, + 0.016594, 0.104517, 0.000487, 1.2e-05, 3.5e-05, 0.030896, 1.3e-05, + 2.5e-05, 2e-06, 5.6e-05, 2e-06, 0.00016, 8e-06, 1e-06, 4.4e-05, + 6e-06, 0.000232, 2e-06, 9.6e-05, 5e-06, 1e-06, 0.000219, 3e-06, + 1e-06, 0.000281, 4e-06, 1e-06, 0.000247, 2e-06, 1e-06, 0.000182, + 4e-06, 1e-06, 0.000234, 3e-06, 2e-06, 0.000331, 7e-06, 2e-06, + 0.000228, 7e-06, 0.000124, 0.000342, 0.000243, 0.000109, 8e-06, + 0.00015, 6.1e-05, 8e-06, 0.006888, 7.4e-05, 0.033877, 0.03964, + 0.031221, 0.027626, 0.029209, 0.027819, 0.008146, 0.003837, + 0.054232, 0.141787, 0.189477, 0.000731, 0.037917, 0.239763, + 0.016276, 0.101792, 0.121279, 0.569522, 0.162138, 0.167452, + 0.100904, 0.050978, 0.193571, 0.023699, 0.00188, 0.7299330000000001, + 0.14706, 0.069059, 0.000354, 2.1e-05, 0.000376, 0.051512, 4e-05, + 0.00026, 1.9e-05, 5.1e-05, 4e-06, 6e-05, 0.000322, 4.5e-05, 1.3e-05, + 9e-06, 7.8e-05, 3.9e-05, 0.000258, 5.4e-05, 6.9e-05, 8e-06, 6.2e-05, + 0.000148, 4.2e-05, 0.000136, 5.7e-05, 4.7e-05, 0.000226, 0.00012, + 0.000106, 5.4e-05, 0.000169, 9.7e-05, 0.000135, 5.3e-05, 0.000161, + 5.6e-05, 2.9e-05, 1.1e-05, 2.8e-05, 2.9e-05, 0.000329, 4.8e-05, + 2.4e-05, 1e-05, 3.4e-05, 2.8e-05, 0.000345, 0.000111, 0.000216, + 8e-06, 0.010716, 0.000189, 0.002223, 0.000222, 0.000261, 6.1e-05, + 0.000497, 0.000121, 6e-06, 3.1e-05, 7.4e-05, 0.000316, 0.000201, + 0.000241, 0.037019, 0.011593, 0.025272, 1.2e-05, 0.005462, 0.000153, + 0.000308, 1.8e-05, 0.000457, 0.000157, 1.2e-05, 0.000111, + 6.499999999999999e-05, 8.500000000000001e-05, 0.000121, 0.036178, + 0.062789, 0.209764, 2.2e-05, 0.000104, 0.000598, 0.000113, 0.000858, + 0.001237, 1.1e-05, 6.4e-05, 0.022295, 0.002239, 0.02595, 0.048743, + 2.3e-05, 0.048933, 0.000101, 3.8e-05, 0.134329, 0.013961, 1e-05, + 0.003331, 7e-06, 0.006234, 0.000175, 8e-06, 0.0002, 0.000699, + 2.4e-05, 0.001724, 6e-06, 0.000252, 1.3e-05, 0.00269, 0.000125, + 7e-06, 0.000158, 0.007282, 0.015473, 0.064868, 6e-06, 0.216, + 2.2e-05, 2.9e-05, 6.9e-05, 0.000317, 1.4e-05, 0.002346, 0.00051, + 0.005226, 2e-05, 0.019417, 0.001007, 0.000196, 0.005594, 0.005761, + 0.008026, 0.09038, 0.000229, 0.000128, 0.209391, 0.231852, 0.032119, + 5e-06, 5e-06, 2e-06, 2e-06, 1e-06, 2e-06, 3.3e-05, 0.000664, 1e-05, + 2e-06, 0, 1e-06, 1e-06, 8.899999999999999e-05, 1.8e-05, 2.7e-05, + 5e-06, 1e-06, 1e-06, 0.000308, 4e-06, 2e-06, 2e-06, 0.000159, 5e-06, + 1e-06, 1e-06, 0.000537, 8e-06, 2e-06, 2e-06, 1e-06, 1e-06, 1e-06, + 0.00044, 1e-05, 2e-06, 3e-06, 3e-06, 3e-06, 2e-06, 0.0001, 0.000368, + 1e-05, 1e-06, 3e-06, 3e-06, 4e-06, 2e-06, 0.000452, 5e-06, 3e-06, + 2e-06, 2e-06, 2e-06, 0.000215, 6e-06, 2e-06, 2e-06, 0.000259, 7e-06, + 3e-06, 1e-06, 0.000209, 5e-06, 2e-06, 1e-06, 0.000236, 4e-06, 1e-06, + 2e-06, 0.000238, 3e-06, 1e-06, 2e-06, 0.000252, 1.6e-05, 1e-06, + 1e-06, 0.000255, 1.2e-05, 1e-06, 2e-06, 0.000202, 1.5e-05, 1e-06, + 1e-06, 0.000251, 1.2e-05, 1e-06, 1e-06, 0.000198, 4e-06, 1e-06, + 2e-06, 0.000254, 4e-06, 1e-06, 1e-06, 0.00013, 0.000103, 2e-06, + 1e-06, 1e-06, 0.00023, 5e-06, 2e-06, 1e-06, 0.000244, 4e-06, 1e-06, + 0, 0.000233, 6e-06, 1e-06, 1e-06, 0.000241, 4e-06, 1e-06, 1e-06, + 0.000238, 6e-06, 3e-06, 1e-06, 0.000234, 6e-06, 2e-06, 1e-06, + 0.000234, 8e-06, 1e-06, 1e-06, 0.000236, 7e-06, 1e-06, 1e-06, + 0.000236, 4e-06, 1e-06, 1e-06, 0.000237, 5e-06, 1e-06, 2e-06, + 0.000236, 2e-06, 3e-06, 4e-06, 0.000237, 6e-06, 3e-06, 3e-06, + 0.000232, 4e-06, 2e-06, 1e-06, 0.000238, 4e-06, 1e-06, 2e-06, + 0.000239, 6e-06, 1e-06, 1e-06, 0.00024, 2e-06, 1e-06, 1e-06, + 0.000241, 3e-06, 2e-06, 1e-06, 0.000238, 4e-06, 2e-06, 1e-06, + 0.000237, 3e-06, 1e-06, 2e-06, 0.00024, 5e-06, 1e-06, 1e-06, + 0.000237, 4e-06, 1e-06, 1e-06, 0.00024, 3e-06, 2e-06, 1e-06, + 0.000305, 4e-06, 2e-06, 0.000194, 1.2e-05, 1e-06, 0.000223, 1.2e-05, + 1e-06, 0.000235, 1.5e-05, 1e-06, 0.000224, 1.2e-05, 2e-06, 0.000231, + 1.1e-05, 2e-06, 0.000225, 6e-06, 2e-06, 1e-06, 0.000245, 1.4e-05, + 1e-06, 0.000218, 2e-06, 1e-06, 0.000243, 3e-06, 2e-06, 0.00024, + 4e-06, 1e-06, 0.00024, 4e-06, 2e-06, 0.000238, 2e-06, 1e-06, 1e-06, + 0.000241, 2e-06, 1e-06, 0.000242, 4e-06, 1e-06, 0.000241, 2e-06, + 1e-06, 0.000242, 4e-06, 1e-06, 0.00024, 4e-06, 1e-06, 0.000243, + 1.6e-05, 2e-06, 0.000225, 1.2e-05, 2e-06, 0.000231, 1.5e-05, + 0.00023, 1.1e-05, 2e-06, 0.000231, 1.1e-05, 0.000237, 1.4e-05, + 0.000219, 4e-06, 2e-06, 0.000241, 5e-06, 0.000245, 3e-06, 0.000247, + 6e-06, 3e-06, 0.000229, 5e-06, 0.000238, 6e-06, 3e-06, 0.000244, + 1.3e-05, 0.000243, 2e-06, 0.000222, 0.000245, 3e-06, 2e-06, + 0.000239, 3e-06, 3e-06, 0.000238, 1e-06, 1e-06, 0.000244, 3e-06, + 2e-06, 0.000239, 2e-06, 0.000244, 1e-06, 0.000244, 0.000245, + 0.000255, 0.000243, 0.000251, 1.6e-05, 0.000231, 1.3e-05, 0.000228, + 1.2e-05, 0.000238, 5e-06, 0.000235, 1.3e-05, 0.000192, 7.8e-05, + 1.4e-05, 9.8e-05, 9.7e-05, 0.000236, 0.000256, 0.000247, 2e-05, + 8.4e-05, 1.2e-05, 0.000104, 6.9e-05, 1.3e-05, 0.000179, 0.000245, + 0.000256, 1e-06, 9.2e-05, 0.000124, 1.7e-05, 0.000242, 0.000143, + 1.7e-05, 0.064764, 0.268533, 0.000247, 0.000117, 4.6e-05, 0.0001, + 0.00026, 1.3e-05, 7.8e-05, 0.000413, 7.499999999999999e-05, + 0.000187, 7.6e-05, 0.00019, 0.015809, 0.000237, 4e-05, 2.3e-05, + 0.000115, 0.000268, 9e-06, 3.1e-05, 0.000317, 0.000248, 0.00025, + 0.000111, 0.00018, 3.2e-05, 0.000196, 5.3e-05, 0.000188, 4.7e-05, + 0.000197, 6.1e-05, 0.000184, 6.8e-05, 0.000187, 0.03969, 0.401298, + 0.191103, 0.038273, 0.155567, 2.8e-05, 0.000256, + 6.600000000000001e-05, 1.2e-05, 0.000205, 1.5e-05, 0.413707, + 0.02753, 0.142191, 0.120225, 0.761589, 0.148513, + 0.07999199999999999, 0.443199, 1.476141, 0.380089, 0.005695, + 0.000311, 1.2e-05, 0.008484999999999999, 0.849543, 0.00359, + 0.751508, 1.292865, 0.179771, 0.5266, 0.366045, 2e-05, 1.03151, + 1.2e-05, 0.6017670000000001, 0.705453, 1.29376, 0.388697, 0.000119, + 0.000292, 1.4e-05, 7e-06, 0.000235, 1e-05, 0.171773, + 0.07598100000000001, 0.310302, 0.0004, 1.7e-05, 8.1e-05, 0.000385, + 0.000118, 0.000302, 0.000114, 0.000281, 2.9e-05, 0.000209, 2.7e-05, + 0.000239, 2.5e-05, 0.000212, 6e-05, 0.000224, 9.1e-05, 0.000233, + 1.9e-05, 0.000198, 1.9e-05, 0.000289, 0.000267, 0.000198, 6e-05, + 0.000195, 7.6e-05, 3e-06, 2e-06, 1e-06, 2e-06, 2e-06, 6.9e-05, + 0.000555, 0.000244, 0.000241, 0.039375, 0.000124, 0.000288, + 9.899999999999999e-05, 3e-06, 6.2e-05, 0.000571, 0.048884, 0.000149, + 1.4e-05, 6e-06, 6e-06, 3.3e-05, 1.6e-05, 7e-06, 2.5e-05, 0.000324, + 0.000219, 9e-06, 0.000153, 0.000128, 0.00011, 0.000155, 9e-06, + 0.00017, 7.3e-05, 0.037596, 0.027548, 0.000148, 0.00018, 0.016617, + 7.499999999999999e-05, 0.000234, 3.3e-05, 0.000171, 2.8e-05, + 0.000231, 3.5e-05, 0.00019, 2.8e-05, 0.000209, 0.039791, 0.832296, + 1.999254, 0.048807, 0.016688, 0.103137, 0.855847, 0.655344, + 0.000661, 0.013452, 0.168439, 0.136821, 0.025272, 9e-06, + 0.007948999999999999, 0.037041, 0.047981, 0.008460000000000001, + 0.04047, 0.009528, 0.020497, 0.072979, 0.009079, 0.11388, 0.023627, + 0.016839, 0.235363, 0.200238, 0.259802, 0.133895, 0.19443, 0.003572, + 0.124423, 0.003563, 0.37003, 0.040397, 0.3915, 0.000331, 1.7e-05, + 0.186427, 0.003647, 0.000144, 0.004702, 0.542918, 0.227775, + 0.641863, 0.034463, 0.016594, 0.419727, 0.000376, 3.6e-05, 0.000115, + 0.000327, 0.0005330000000000001, 0.00028, 0.000207, 0.000324, + 0.000296, 1e-05, 7e-06, 4.2e-05, 0.000562, 0.010122, 3.8e-05, + 0.018846, 0.000187, 0.000264, 0.000181, 0.000292, 0.000118, + 0.000469, 0.01084, 0.000237, 3.8e-05, 0.019239, 2.8e-05, 0.000227, + 0.0001, 0.000213, 0.000112, 0.000241, 0.000121, 0.000312, 0.000149, + 0.000209, 0.000133, 0.000296, 0.000132, 0.000214, 0.00166, 0.02373, + 0.001922, 4e-06, 4.3e-05, 3e-06, 5.1e-05, 3e-06, 5.6e-05, 2e-06, + 5.4e-05, 1e-06, 0.000392, 8e-06, 1e-06, 4.8e-05, 3e-06, 3.7e-05, + 2e-06, 0.000158, 1e-05, 2e-06, 1e-06, 4.7e-05, 0.000205, 3e-06, + 1e-06, 1e-06, 0.000516, 0.000201, 0.000213, 0.000308, 0.000241, + 0.00026, 0.000234, 0.169798, 8.500000000000001e-05, 0.0003, + 0.000144, 3e-06, 2e-06, 6.8e-05, 0.000589, 0.03856, 0.035385, + 0.000115, 0.000179, 5.8e-05, 0.000143, 0.000343, 0.000129, 0.000214, + 7.2e-05, 0.000288, 8.1e-05, 0.000203, 5.1e-05, 0.000369, + 9.500000000000001e-05, 0.000176, 0.001365, 0.013006, 0.001368, + 3e-06, 1e-06, 1e-06, 1e-06, 2e-06, 5.2e-05, 2e-06, 6.3e-05, 1.3e-05, + 1e-06, 1e-06, 6.7e-05, 2e-06, 1e-06, 4.3e-05, 4e-06, 6.1e-05, 1e-06, + 1e-06, 7.1e-05, 2e-06, 7e-06, 0.0002, 0.000255, 0.000229, 0.000516, + 0.000282, 0.000244, 0.000256, 0.000238, 0.000242, 0.000245, + 0.029151, 8.3e-05, 0.000294, 0.000143, 5e-06, 2e-06, 6.4e-05, + 0.000604, 0.012818, 0.00022, 0.019331, 0.000117, 0.000224, 0.000222, + 0.000234, 7.6e-05, 0.000216, 6.7e-05, 0.00028, 7.1e-05, 0.000219, + 4.5e-05, 0.000249, 6.7e-05, 0.000193, 0.001358, 0.013339, 0.001356, + 4e-06, 1e-06, 1e-06, 1e-06, 2e-06, 1e-06, 3.5e-05, 1e-06, 3.2e-05, + 6e-06, 6.8e-05, 1e-06, 1e-06, 4e-05, 7e-06, 1.5e-05, 2.7e-05, 5e-06, + 3.2e-05, 6e-06, 2.5e-05, 3e-05, 0.000278, 0.000251, 0.000215, + 0.000489, 0.000514, 0.000257, 0.000257, 0.000243, 0.000218, + 0.010181, 0.001256, 3e-05, 0.017594, 6.499999999999999e-05, + 0.000246, 0.000173, 4e-06, 1e-06, 6.499999999999999e-05, 0.000554, + 0.032475, 0.000117, 0.000258, 0.00054, 0.000265, 0.000146, 0.000199, + 6.9e-05, 0.000292, 0.000126, 0.000205, 0.000109, 0.000287, 0.000119, + 0.00021, 0.001505, 0.01251, 0.001603, 3e-06, 2e-06, 1e-06, 1e-06, + 2e-06, 1e-06, 4.5e-05, 3e-06, 6.7e-05, 1.2e-05, 1e-06, 1e-06, + 6.7e-05, 1.9e-05, 1e-06, 1e-06, 1e-05, 1.9e-05, 5.9e-05, 2e-06, + 9.3e-05, 2e-06, 0.000219, 0.000245, 0.000208, 0.000262, 0.000498, + 0.000251, 0.000244, 0.000246, 0.000244, 0.000247, 0.02889, 8.1e-05, + 0.000216, 0.000107, 3e-06, 2e-06, 6.9e-05, 0.0005820000000000001, + 0.01628, 0.00018, 5.4e-05, 0.000269, 0.015699, 2.2e-05, 0.000102, + 0.000347, 0.00041, 0.000227, 7.7e-05, 0.0002, 6.2e-05, 0.000236, + 4.8e-05, 0.00018, 7.499999999999999e-05, 0.000302, 9.2e-05, + 0.000167, 0.001491, 0.012937, 0.001596, 3e-06, 2e-06, 2e-06, 1e-06, + 2e-06, 2e-06, 2e-06, 1e-06, 3.4e-05, 3e-06, 7.499999999999999e-05, + 1.8e-05, 1e-06, 1e-06, 1e-06, 6e-05, 2e-06, 9e-06, 5.3e-05, 5e-06, + 2e-05, 1e-05, 0.000295, 0.000242, 0.000245, 0.000522, 0.000488, + 0.000247, 0.000243, 0.000246, 0.000246, 0.028895, 8.2e-05, 0.000303, + 0.000144, 5e-06, 2e-06, 6.8e-05, 0.000595, 0.009254, 0.027474, + 0.012253, 0.000107, 0.000184, 5.8e-05, 0.000119, 0.000216, 4e-05, + 0.000201, 2.2e-05, 0.000263, 4.1e-05, 0.000208, + 6.999999999999999e-05, 0.000266, 3.7e-05, 0.000167, 0.001494, + 0.013389, 0.001558, 4e-06, 2e-06, 1e-06, 2e-06, 1e-06, 1e-06, + 3.8e-05, 3e-06, 6.1e-05, 1e-06, 1e-06, 4.2e-05, 4e-06, 5.6e-05, + 4e-06, 1e-06, 3e-05, 8e-06, 5.4e-05, 1e-06, 1e-06, 2.6e-05, + 0.000256, 0.000241, 0.000244, 0.000553, 0.000246, 0.00022, 0.00024, + 0.000244, 0.000247, 0.000213, 0.028935, 8.899999999999999e-05, + 0.000214, 8.2e-05, 4e-06, 2e-06, 5.9e-05, 0.000562, 0.032548, + 0.000119, 0.000226, 0.0003, 0.000213, 4e-05, 0.000167, 3.3e-05, + 0.000333, 0.000132, 0.000208, 9.1e-05, 0.000296, 0.000118, 0.000181, + 0.00152, 0.013032, 0.001587, 4e-06, 2e-06, 1e-06, 2e-06, 2e-06, + 2e-06, 3.8e-05, 2e-06, 8.1e-05, 1e-06, 0, 1.6e-05, 1e-06, 5e-05, + 4e-06, 5.6e-05, 1e-06, 1e-06, 3.1e-05, 9e-06, 2.8e-05, 9e-06, + 0.00026, 0.000242, 0.000249, 0.000486, 0.000245, 0.000245, 0.000348, + 0.000419, 0.000279, 0.028802, 8.3e-05, 0.000286, 0.000115, 4e-06, + 2e-06, 5.9e-05, 0.000559, 0.000241, 0.002101, 3.5e-05, 0.030066, + 0.000106, 0.000205, 0.001807, 0.000205, 7.2e-05, 0.000191, 3e-05, + 0.000302, 0.000137, 0.000201, 8.899999999999999e-05, 0.000306, + 0.000116, 0.000325, 0.001743, 0.011198, 0.001645, 3e-06, 2e-06, + 2e-06, 1e-06, 2e-06, 1e-06, 1e-05, 3.5e-05, 2e-06, 6.7e-05, 2e-06, + 0, 4.5e-05, 8e-06, 2.2e-05, 3.3e-05, 8e-06, 7.1e-05, 1.4e-05, 1e-06, + 1e-06, 2.7e-05, 0.000255, 0.00024, 0.000243, 0.0005240000000000001, + 0.000242, 0.000246, 0.000282, 0.000452, 0.000251, 0.045419, + 8.500000000000001e-05, 0.000254, 6.1e-05, 2e-06, 3e-06, 6.9e-05, + 0.000559, 0.032483, 7.2e-05, 0.000221, 0.000143, 0.000211, 7.4e-05, + 0.0002, 4.9e-05, 0.000301, 0.000129, 0.000212, 9.2e-05, 0.000262, + 6e-05, 0.000198, 0.001624, 0.013169, 0.001673, 3e-06, 1e-06, 1e-06, + 2e-06, 2e-06, 1e-06, 4e-05, 3e-06, 6.4e-05, 1e-06, 1e-06, 4.8e-05, + 6e-06, 1.2e-05, 6.3e-05, 2e-06, 5.2e-05, 2e-06, 1e-06, 0, 3.5e-05, + 1e-06, 0.000295, 0.000239, 0.000243, 0.000492, 0.000243, 0.000278, + 0.00031, 0.000424, 0.000219, 0.028386, 0.000228, 5.4e-05, 0.000213, + 3.5e-05, 0.000238, 0.007959000000000001, 2.2e-05, 7.1e-05, 0.000481, + 0.000111, 4e-06, 1e-06, 6.8e-05, 0.000623, 0.038715, 0.010124, + 0.000116, 0.000228, 6.2e-05, 0.002913, 0.000265, 2.1e-05, 0.000179, + 1.5e-05, 1.3e-05, 0.000229, 3.9e-05, 0.000196, 3.5e-05, 0.000269, + 7.3e-05, 0.000191, 5.3e-05, 0.000247, 2.2e-05, 0.000177, 0.001569, + 0.010022, 0.001705, 3e-06, 2e-06, 1e-06, 1e-06, 3e-06, 1e-06, 1e-06, + 1e-06, 3.6e-05, 2e-06, 6.499999999999999e-05, 1e-06, 1e-06, 6e-05, + 1e-06, 1e-06, 5.6e-05, 1e-06, 4.2e-05, 4e-06, 1.7e-05, 2e-06, + 0.000327, 0.000232, 0.00025, 0.000239, 0.000501, 0.000215, 0.000245, + 0.000244, 0.000246, 0.000325, 0.02873, 8.7e-05, 0.000337, 0.000112, + 3e-06, 2e-06, 5.5e-05, 0.00056, 0.032383, 0.000119, 0.000246, + 0.001701, 0.000251, 0.004701, 0.000195, 0.006657, 0.027981, 7.3e-05, + 0.00024, 0.019186, 0.000333, 7.7e-05, 0.000241, 0.037189, 0.272651, + 0.227517, 6e-06, 2e-06, 2e-06, 1e-06, 2e-06, 3.7e-05, 2e-06, + 3.4e-05, 2e-06, 0.0006089999999999999, 1.8e-05, 3e-06, + 6.499999999999999e-05, 3e-06, 5.6e-05, 9e-06, 3e-06, 1e-06, + 6.499999999999999e-05, 5e-06, 1e-06, 0.000207, 9e-06, 2e-06, 1e-06, + 1e-06, 0.000442, 9e-06, 1e-06, 2e-06, 1e-06, 1e-06, 3.5e-05, + 0.000105, 1.2e-05, 7.499999999999999e-05, 3e-06, 1e-06, 1e-06, + 1e-06, 1e-06, 1e-06, 0.00047, 3e-06, 2e-06, 1e-06, 1e-06, 1e-06, + 1e-06, 0.000255, 4e-06, 1e-06, 2e-06, 1e-06, 1e-06, 2e-06, 0.000462, + 4e-06, 2e-06, 1e-06, 1e-06, 1e-06, 1e-06, 0.000234, 4e-06, 1e-06, + 1e-06, 1e-06, 0.00024, 6e-06, 1e-06, 2e-06, 1e-06, 0.000236, 5e-06, + 1e-06, 1e-06, 1e-06, 0.000256, 4e-06, 1e-06, 1e-06, 1e-06, 0.00022, + 2e-06, 1e-06, 0.000242, 4e-06, 2e-06, 0.000241, 5e-06, 2e-06, + 0.000233, 3e-06, 2e-06, 0.000239, 5e-06, 2e-06, 0.000238, 4e-06, + 1e-06, 0.00024, 5e-06, 1e-06, 0.000239, 3e-06, 1e-06, 0.000245, + 0.000279, 0.000142, 0.000114, 8.7e-05, 5e-06, 0.000157, 0.000225, + 0.000241, 6.2e-05, 0.000185, 6.2e-05, 4e-06, 0.000144, 0.000247, + 0.000255, 6.600000000000001e-05, 0.00017, 7.499999999999999e-05, + 1.5e-05, 0.000168, 0.000258, 6.8e-05, 0.000165, 7.7e-05, 5e-06, + 0.000145, 0.000242, 6.8e-05, 0.00018, 9.8e-05, 5e-06, 0.000169, + 0.000265, 0.000232, 5.3e-05, 2.5e-05, 5e-06, 0.009259, 0.039637, + 0.00865, 2.8e-05, 5e-06, 5e-06, 0.009263, 2.7e-05, 0.087632, 6e-05, + 0.000318, 1.4e-05, 1.6e-05, 2e-06, 5e-06, 4.2e-05, 0.00032, + 0.037569, 0.703033, 0.214916, 0.64994, 0.04462, 0.302059, 0.999951, + 0.137821, 0.039703, 0.027832, 0.000366, 1.7e-05, 0.000111, 0.000346, + 0.000131, 0.00019, 4.5e-05, 4e-06, 2e-06, 3.8e-05, 0.000618, + 0.036949, 0.0052, 0.000138, 0.0002, 0.000107, 9.399999999999999e-05, + 4e-06, 5.9e-05, 0.000579, 0.032121, 0.000118, 1.5e-05, 3.3e-05, + 3e-06, 0.000374, 0.000259, 6e-06, 0.00016, 5.3e-05, + 6.600000000000001e-05, 0.036463, 0.00435, 0.000131, 0.0002, + 0.016695, 0.000124, 0.000254, 7.7e-05, 0.000202, 6.9e-05, 0.000174, + 4.5e-05, 0.000229, 6.7e-05, 0.000176, 0.038503, 0.271061, 0.036943, + 0.003036, 0.307457, 0.23321, 0.029976, 0.000198, 0.62617, 3e-05, + 0.000353, 1.9e-05, 1e-05, 2e-06, 0.109966, 0.651886, 0.213682, + 4.9e-05, 2.7e-05, 0.000236, 1e-05, 4.6e-05, 2e-06, 0.00011, 2e-06, + 0.000152, 1e-06, 0.133729, 0.609789, 0.031985, 2.2e-05, 9.6e-05, + 0.016657, 9.1e-05, 0.000312, 0.000155, 0.000175, 3.6e-05, 0.000326, + 0.000222, 5e-06, 4.3e-05, 4e-06, 3.9e-05, 1.9e-05, 2.4e-05, 2.7e-05, + 2e-06, 5.9e-05, 0.000446, 2e-05, 3e-06, 5.8e-05, 2e-06, 6e-05, + 3e-06, 5.8e-05, 1e-05, 3e-06, 2e-06, 6.2e-05, 0.000145, 4e-06, + 1e-06, 1e-06, 3.7e-05, 0.000475, 4e-06, 2e-06, 1e-06, 2e-06, + 3.5e-05, 9e-06, 3.5e-05, 1e-06, 0.00041, 8e-06, 2e-06, 1e-06, 1e-06, + 2e-06, 1e-06, 3.9e-05, 2e-06, 0.000412, 4e-06, 2e-06, 1e-06, 1e-06, + 2e-06, 1e-06, 1e-06, 3.9e-05, 0.000437, 4e-06, 2e-06, 1e-06, 2e-06, + 1e-06, 1e-06, 2e-06, 1e-06, 0.000476, 4e-06, 2e-06, 1e-06, 2e-06, + 1e-06, 1e-06, 1e-06, 1e-06, 0.000455, 5e-06, 1e-06, 1e-06, 1e-06, + 1e-06, 1e-06, 0.000236, 1e-06, 2e-06, 1e-06, 1e-06, 0.000242, 5e-06, + 2e-06, 1e-06, 0.000302, 7e-06, 1e-06, 2e-06, 0.000174, 4e-06, 2e-06, + 1e-06, 0.000263, 3e-06, 2e-06, 1e-06, 0.000206, 5e-06, 1e-06, 2e-06, + 0.000263, 9e-06, 2e-06, 1e-06, 0.000241, 1.1e-05, 2e-06, 1e-06, + 0.000262, 1.9e-05, 3e-06, 1e-06, 0.000223, 1.9e-05, 0.000224, + 0.000248, 0.000244, 0.000217, 0.00024, 0.000244, 0.000246, 0.000221, + 0.000274, 0.000241, 0.000212, 0.000277, 0.000213, 0.000281, + 0.000242, 0.000245, 0.000244, 0.000246, 0.000244, 0.00025, 0.00024, + 0.000247, 0.000244, 0.000242, 0.001342, 0.000379, 0.034867, + 0.000105, 0.000224, 9.3e-05, 0.000182, 2.7e-05, 0.00026, 3.4e-05, + 0.000379, 0.039497, 0.5442, 0.357434, 1.099135, 0.041655, 0.85846, + 0.09723900000000001, 0.311746, 0.29389, 0.394283, 0.308007, + 0.445888, 0.148214, 0.097913, 0.307962, 0.692039, 0.307906, + 0.593507, 0.056654, 0.041922, 0.033815, 0.274117, + 0.8501919999999999, 4.8e-05, 4e-05, 5.2e-05, 0.000176, 3.5e-05, + 7.8e-05, 4.1e-05, 3.9e-05, 1.4e-05, 3.8e-05, 2e-05, 1e-05, 5e-06, + 3e-05, 1.3e-05, 0.14915, 0.026055, 0.003791, 0.562937, 1.999277, + 1.065992, 0.000143, 0.523873, 0.311931, 0.028066, 0.069262, + 0.239786, 1.759471, 0.246945, 0.756221, 0.697726, 0.000743, + 0.297642, 0.003465, 0.913362, 1.3e-05, 0.0866, 0.081234, 0.025897, + 0.050497, 0.259128, 0.014569, 0.564476, 0.004333, 0.312601, + 0.003488, 0.683764, 0.995133, 0.004903, 0.270456, + 0.6224730000000001, 0.000158, 0.161523, 0.000449, 2e-05, 0.000129, + 0.000428, 0.000134, 0.000275, 0.000131, 0.000373, 8.8e-05, 0.000344, + 7.6e-05, 0.000289, 9.899999999999999e-05, 0.000266, 0.00011, + 0.000218, 0.000129, 0.000203, 3.2e-05, 0.000265, + 8.899999999999999e-05, 0.000232, 7.9e-05, 0.000238, 0.000368, + 0.000233, 0.000121, 0.000228, 0.000164, 5e-06, 3e-06, 2e-06, 1e-06, + 8.8e-05, 0.000565, 0.000216, 0.034407, 0.000127, 0.000216, 5.8e-05, + 3e-06, 5.7e-05, 0.000566, 0.032524, 0.000164, 1.9e-05, 8e-06, + 2.2e-05, 1.4e-05, 1.4e-05, 4.4e-05, 0.000401, 5.6e-05, 9.6e-05, + 7e-06, 0.000133, 8e-06, 0.000248, 1.3e-05, 1e-06, 0.000302, 7.6e-05, + 0.036992, 0.028077, 0.000239, 0.000188, 0.016701, 0.000103, + 0.000332, 0.000134, 0.000307, 0.00013, 0.000323, 0.000139, 0.000212, + 0.000116, 0.000175, 0.037659, 0.132015, 0.312029, 0.297586, + 1.336091, 0.663151, 1.295715, 0.703577, 0.296261, 0.101385, 0.22987, + 0.000233, 0.434696, 0.000419, 3.6e-05, 0.000159, 0.000332, 0.000899, + 0.000119, 0.00019, 0.0352, 0.144224, 0.05227, 0.149337, 0.185305, + 0.000393, 0.184107, 5.8e-05, 0.000343, 0.183449, 0.000685, 0.000284, + 1.5e-05, 0.000102, 0.000448, 0.00037, 1.8e-05, 0.000112, 0.000401, + 0.00012, 0.00029, 0.000119, 0.000243, 6.4e-05, 0.000177, 5.4e-05, + 0.000188, 5.4e-05, 0.000279, 9.2e-05, 0.000504, 0.000166, 1.5e-05, + 5.4e-05, 0.000175, 1.5e-05, 7.7e-05, 0.000155, 1.5e-05, 0.000101, + 0.000401, 0.000268, 0.000207, 0.0001, 0.000145, + 0.0009700000000000001, 7.2e-05, 0.036994, 0.14733, 0.010867, + 0.037774, 0.056528, 0.10916, 0.000384, 1e-05, 2.9e-05, 0.000265, + 0.037653, 0.175573, 1.9e-05, 0.676889, 0.702174, 0.297846, 1.701447, + 0.066121, 5e-06, 5e-06, 2e-06, 2e-06, 3e-06, 1e-06, 2e-06, 3e-06, + 2e-06, 0.000725, 1.9e-05, 2e-06, 1e-06, 1e-06, 1e-06, 1e-06, + 6.999999999999999e-05, 2e-05, 2e-06, 3e-06, 1e-06, 1e-06, 1e-06, + 0.000218, 7e-06, 1e-06, 1e-06, 1e-06, 7.2e-05, 0.000155, 6e-06, + 1e-06, 1e-06, 1e-06, 0.000256, 3e-06, 2e-06, 1e-06, 0.000559, + 1.6e-05, 0.000227, 0.000299, 2.6e-05, 0.00012, 0.000264, 1.5e-05, + 0.000238, 1.5e-05, 1.4e-05, 0.000224, 0.000234, 1.5e-05, 0.000223, + 0.006457, 2.2e-05, 0.016599, 0.07625899999999999, 0.238719, + 0.000408, 0.037377, 0.08400299999999999, 0.003761, 0.124235, + 0.003565, 1.337726, 1.999245, 1.075482, 2.9e-05, 0.000378, 2e-05, + 9e-06, 2e-06, 1.8e-05, 6e-06, 0.923339, 1.999252, 1.10893, 0.003052, + 0.887231, 1.999357, 1.735131, 0.000561, 0.263547, 1.066412, + 0.000189, 6.7e-05, 0.932557, 0.069161, 0.000414, 1.7e-05, 0.000328, + 0.076215, 0.148162, 1.6e-05, 0.000117, 0.119362, 0.000372, 1.7e-05, + 0.7902090000000001, 0.794934, 0.918648, 0.0002, 1.080404, 0.413585, + 3.6e-05, 0.000285, 5.5e-05, 4e-06, 2.5e-05, 5e-06, 0.091326, + 0.003882, 0.572217, 7e-06, 4e-06, 2e-06, 2e-06, 8e-06, 4.3e-05, + 2e-06, 2e-06, 3.3e-05, 0.000581, 2.4e-05, 3e-06, 2e-06, 2e-06, + 2e-06, 2e-06, 0.000154, 6e-06, 2e-06, 2e-06, 2e-06, 0.000242, + 1.4e-05, 3e-06, 6.600000000000001e-05, 9e-06, 0.00015, 6.8e-05, + 2e-05, 0.000135, 6.7e-05, 1.3e-05, 0.000447, 6.3e-05, 6e-06, + 0.000211, 5e-06, 0.000197, 0.000266, 1.8e-05, 1.8e-05, 0.000206, + 5.2e-05, 1e-05, 0.070046, 1.1e-05, 0.844631, 1.999285, 0.37526, + 0.269128, 0.000144, 0.428814, 0.000377, 2e-05, 0.000132, 0.000335, + 0.000146, 0.00032, 0.00014, 0.000315, 9.000000000000001e-05, + 0.000326, 7.8e-05, 0.000348, 0.000138, 0.000309, 0.000191, 0.000269, + 9.2e-05, 0.000228, 8.1e-05, 0.000333, 0.000478, 0.000208, 0.000122, + 0.000251, 0.000158, 6e-06, 3e-06, 2e-06, 2e-06, 3.7e-05, 0.000592, + 0.000243, 0.026904, 0.000156, 0.000307, 0.000234, 1.1e-05, 5.5e-05, + 0.000566, 0.032068, 0.000263, 5.9e-05, 4.3e-05, 4.5e-05, 4.2e-05, + 4.2e-05, 4e-05, 0.000202, 0.000138, 3.5e-05, 2.2e-05, 3e-05, + 0.000149, 0.000149, 3e-05, 5.4e-05, 0.000164, 2.8e-05, 0.000127, + 0.03696, 0.019837, 0.00032, 0.000252, 0.016369, 0.000222, 0.000284, + 0.000233, 0.000254, 0.00022, 0.000266, 0.000239, 0.000251, 0.000192, + 0.000192, 0.037031, 1.7e-05, 0.116766, 0.192277, 0.435377, 0.091586, + 3.1e-05, 0.000373, 1.9e-05, 1e-05, 2e-06, 0.000261, 1.4e-05, + 0.280014, 0.023348, 3.2e-05, 2.9e-05, 0.000314, 2.2e-05, 1.2e-05, + 2e-06, 0.000253, 1.7e-05, 0.975979, 0.62699, 0.37293, + 0.9999749999999999, 0.626341, 0.492913, 0.014529, 0.570348, + 0.076026, 0.235104, 0.003504, 0.606799, 0.126116, 0.99708, 0.306968, + 0.005815, 0.563343, 0.123881, 0.303074, 0.697012, 0.303014, + 0.075444, 0.000103, 0.496756, 0.124502, 0.303213, + 0.06970899999999999, 0.6271060000000001, 0.303057, 0.571645, + 0.428396, 1.129816, 0.441094, 1.216598, 0.184097, 0.598553, + 1.762639, 0.000133, 0.236455, 0.700106, 0.025727, 0.876292, + 0.003488, 0.124494, 0.00356, 0.265654, 0.031362, 0.997795, + 0.9701149999999999, 0.029865, 0.913193, 0.000163, + 0.08662400000000001, 0.969381, 0.030588, 1.000004, 0.968747, + 1.999191, 0.181717, 0.003031, 0.476371, 0.000189, 0.498117, + 0.001757, 0.094473, 0.070796, 0.257284, 0.415613, 0.324319, + 0.103689, 3e-05, 0.000304, 1.9e-05, 1.3e-05, 1e-06, + 0.09349499999999999, 2.2e-05, 0.042766, 0.496198, 0.263337, + 0.138729, 0.028411, 0.088029, 0.031219, 0.388701, 0.324931, + 0.266295, 0.268827, 0.235355, 0.105707, 1.7e-05, 0.123881, 0.381654, + 0.076361, 0.09857399999999999, 0.11765, 0.07213, 0.144328, 0.047985, + 0.061286, 0.019094, 0.083081, 0.000315, 1.3e-05, 0.171753, 0.072075, + 0.152366, 0.031976, 0.46934, 0.197771, 0.036378 }; +#endif //TEST_FUNCTIONS + +}; + +#endif /* DATAPROCESSOR_H_ */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/de/9094c5bf8ab500161808a5c64fd2084a b/.metadata/.plugins/org.eclipse.core.resources/.history/de/9094c5bf8ab500161808a5c64fd2084a new file mode 100644 index 0000000..a81daab --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/de/9094c5bf8ab500161808a5c64fd2084a @@ -0,0 +1,886 @@ +/* + * DataProcessor.h + * + * Created on: 14 de jun de 2016 + * Author: apaschoalon + */ + +#ifndef DATAPROCESSOR_H_ +#define DATAPROCESSOR_H_ + +//external libs +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +//local libs +#include "DatabaseInterface.h" +#include "NetworkTrace.h" +#include "Defines.h" +#include "StochasticModelFit.h" + +//namespaces +using std::string; +using namespace arma; + +#define DEBUG_StochasticModelFit 1 + + +//TODO: this class must be static +class DataProcessor +{ +public: + + /** + * Default constructor + */ + DataProcessor(); + + /** + * Destructor. Clean any allocated memory + */ + virtual ~DataProcessor(); + + /** + * @brief Returns a string information about the class + * Returns a string information about the class + * + * @param void + * @return string + */ + string toString(void); + + /** + * @brief This method parameterize a network trace. + * Through the database interface class, this method retrieves all desired + * data from the database, in order to calculate and set parameters in a + * NetworkTrace class instance. This method knows all the labels and types + * of each database column, and how to deal with them correctly. So this + * method should be up to date with the database. After calculating all + * parameters, this class should save the data on the Network trace + * object and on its flows through netTrace.set() and netTace.flow[n].set() + * methods. + * + * @param experimentName experiment name string + * @param databaseInterface class interface to the database + * @param netTrace network trace class, which will be parameterized + * @return returns 0 in success + */ + int calculate(const string& experimentName, + DatabaseInterface* databaseInterface, NetworkTrace* netTrace); + +#ifdef TEST_FUNCTIONS + void save_data_on_file(const string& fileName, const mat& vet1, + const mat& vet2); + template + void DataProcessor::save_data_on_file(const string& fileName, const list); + void printTestResult(string testName, bool result); + bool compareDouble(double val1, double val2); + bool compareDouble(double val1, double val2, double acErr); + bool compareMat(mat& mat1, mat& mat2); + bool test_QuickSort(); + bool test_Mode(); + bool test_list_tocvector(); + bool test_empiricalCdf(); + bool test_computeCost(); + bool test_informationCriterion(); + bool test_gradientDescendent(); + bool test_pdf_weibull(); + bool test_cdf_weibull(); + bool test_pdf_exponential(); + bool test_cdf_exponential(); + bool test_pdf_pareto(); + bool test_cdf_pareto(); + bool test_pdf_cauchy(); + bool test_cdf_cauchy(); + bool test_fitModels(); + bool test_modelSelection(); +#endif //TEST_FUNCTIONS + +private: + /** + * A time smaller than the min_time resolution. Once the current resolution + * is 1e-6, min_time is half of this value. This value is used as default + * as substitute for times equal to zero. + */ + double min_time = 5e-7; + + /** + * A very small time value. This is used to avoid evaluating the operation + * log(0), which is undefined. + */ + double diferential = 4e-14; + + // calculate the mean packet rate + int mean_packetRate(list& pakcetSizeList, double duration); + + //calculate the most frequent element from a list + long int mode(list& thelist); + + /** + * ACTUAL FUNCTIONS + */ + // Take as input a vector vet[], its first and last position to be + // sorted. After the execution vet[] will be sorted. + // T* vet : C vector + // int left: fist position of the C vector to be sorted, usually 0. + // int right: last position of the C vector to be sorted, usually size-1; + template void quickSort(T* vet, int left, int right); + // Evaluate the mode (the most frequent value) of a list list + template T mode(list* theList); + + /** + * @brief Converts a list to a C vector. + * Converts a list to a C vector. + * @param theList + * @return + */ + template T* list_to_cvector(list* theList); + + /** + * @brief Delete a C vector + * @param c_vet pointer to the C vector + */ + template void delete_cvector(T* c_vet); + + /** + * @brief Compare two C vectors T. + * Compare two C vectors of types T. If they are equal, returns "true". If + * they are not, returns "false". + * + * @param vet1 + * @param vet2 + * @param size + * @return + */ + template bool isEqual(const T* vet1, const T* vet2, + const int size); + /** + * \brief convert a C vector T to a list + * + * @param theList pointer to an empty list + * @param vet pointer to a C vector + * @param size size of the C vector + */ + template void vectorC_to_list(list* theList, T* vet, + int size); + + /** + * Return an empirical vector of the Cumulative distribution function. + * This method take as input a list of empirical data, and create a + * vector (of the same size) of an empirical evaluation of the cumulative + * distribution function. Return must be freed using delete. + * + * @param list + * @return vec* empirical cumulative vector + */ + vec* empiricalCdf(list& empiricalData); + + //feature matrix: return a matrix X(m, 2) = [1 data]. Must be freed using delete. + /** + * @brief Creates a feature matrix for linear regression + * Creates a feature matrix X(m, 2) = [1 data], for the linear regression. + * Must be freed using delete. + * + * @param empiricalData list of the empirical data. + * @return returns a pointer to the feature matrix + */ + mat* featureMatrix(list& empiricalData); + + /** + * @brief Creates a feature matrix for linear regression + * Creates a feature matrix X(m, 2) = [1 data], for the linear regression. + * Must be freed using delete. + * + * @param empiricalData vector vec of the empirical data. + * @return returns a pointer to the feature matrix + */ + mat* featureMatrix(const vec& empiricalData); + + /** + * @brief Compute cost of the gradient descendent function + * It returns the value of the cost function for the list of parameteres + * + * @param X feature matrix + * @param y expected values + * @param theta linear regression coeficients [theta1; theta2] + * @return cost value + */ + double computeCost(const mat& X, const vec& y, const vec& theta); + + /** + * @brief Gradient descendent algorithm + * Evaluates the gradient descendent + * + * @param X feature matrix + * @param y + * @param learning_rate + * @param num_iters + * @param theta + * @param J_history + */ + void gradientDescendent(const mat& X, const vec& y, + const double learning_rate, const int num_iters, vec& theta, + vec& J_history); + + /** + * @brief information criterion + * + * @param data + * @param functionName + * @param paramVet + * @param criterion + * @return + */ + double informationCriterion(const vec& data, const string& functionName, + const vec& paramVet, const string& criterion); + + /** + * @brief natural logarithm of likehood function + * + * @param data + * @param functionName + * @param paramVet + * @return + */ + double logLikehood(const vec& data, const string& functionName, + const vec& paramVet); + /** + * @brief fit weibull alpha and betha using linear regression + * + * @param interArrival + * @param interArrivalCdf + * @param paramVec + * @param informationCriterion + */ + void weibullFitting(const vec& interArrival, const vec& interArrivalCdf, + vec& paramVec, vec& informationCriterion); + + /** + * @brief evaluate mean and standard deviation + * + * @param interArrival + * @param paramVec + * @param informationCriterion + */ + void normalFitting(const vec& interArrival, vec& paramVec, + vec& informationCriterion); + + /** + * @brief evaluate lambda using linear regression + * + * @param interArrival + * @param interArrivalCdf + * @param paramVec + * @param informationCriterion + */ + void exponentialLrFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, + vec& informationCriterion); + + /** + * @brief evaluate lambda using mean estimation + * + * @param interArrival + * @param paramVec + * @param informationCriterion + */ + void exponentialMeFitting(const vec& interArrival, vec& paramVec, + vec& informationCriterion); + + /** + * @brief evaluate pareto's alpha and xm using Linear regression + * + * @param interArrival + * @param interArrivalCdf + * @param paramVec + * @param informationCriterion + */ + void paretoLrFitting(const vec& interArrival, const vec& interArrivalCdf, + vec& paramVec, vec& informationCriterion); + + /** + * @brief evaluate pareto's alpha and xm using maximum likehood method + * + * @param interArrival + * @param interArrivalCdf + * @param paramVec + * @param informationCriterion + */ + void paretoMlhFitting(const vec& interArrival, const vec& interArrivalCdf, + vec& paramVec, vec& informationCriterion); + + /** + * @brief evaluate cauchy's gamma and x0 using linear regression + * + * @param interArrival + * @param interArrivalCdf + * @param paramVec + * @param informationCriterion + */ + void cauchyFitting(const vec& interArrival, const vec& interArrivalCdf, + vec& paramVec, vec& informationCriterion); + + /** + * @brief + * + * @param interArrival + * @param paramVec + * @param informationCriterion + */ + void constantFitting(const vec& interArrival, vec& paramVec, + vec& informationCriterion); + + /** + * @brief returns probability of a given + * @param x + * @param alpha + * @param betha + * @return + */ + double pdf_weibull(double x, double alpha, double betha); + + /** + * + * @param x + * @param alpha + * @param betha + * @return + */ + double cdf_weibull(double x, double alpha, double betha); + + /** + * + * @param x + * @param lambda + * @return + */ + double pdf_exponential(double x, double lambda); + + /** + * + * @param x + * @param lambda + * @return + */ + double cdf_exponential(double x, double lambda); + + /** + * + * @param x + * @param alpha + * @param xm + * @return + */ + double pdf_pareto(double x, double alpha, double xm); + + /** + * + * @param x + * @param alpha + * @param xm + * @return + */ + double cdf_pareto(double x, double alpha, double xm); + + /** + * + * @param x + * @param gamma + * @param x0 + * @return + */ + double pdf_cauchy(double x, double gamma, double x0); + + /** + * + * @param x + * @param gamma + * @param x0 + * @return + */ + double cdf_cauchy(double x, double gamma, double x0); + + /** + * + * @param x + * @param mu + * @param sigma + * @return + */ + double pdf_normal(double x, double mu, double sigma); + + /** + * + * @param x + * @param mu + * @param sigma + * @return + */ + double cdf_normal(double x, double mu, double sigma); + + /** + * + * @param x_min + * @param x_max + * @return + */ + double pdf_uniform(double x_min, double x_max); + + /** + * + * @param x + * @param x_min + * @param x_max + * @return + */ + double cdf_uniform(double x, double x_min, double x_max); + + // Take as input a list o inter-arrival times, and a pointer to a C vector + // of the struct StochasticModelFit. The available models are ordered here, + // from the best to the worst, according to the specified criterion BIC or + // AIC. If it is not specified, it uses as default AIC. + + /** + * + * @param empiricalData + * @param criterion + * @return + */ + StochasticModelFit* fitModels(list& empiricalData, + const string& criterion); + +#ifdef TEST_FUNCTIONS + + vec interArrivalSample = + { 0, 0, 0.000203, 1e-05, 0.318392, 1.00003, 0.517214, 3.2e-05, 7.6e-05, + 0.159572, 0.028456, 0.000267, 1.6e-05, 0.000362, 0.001436, 0.012243, + 0.052051, 0.010572, 0.300375, 1.6e-05, 0.00012, 0.171993, 0.000161, + 0.180517, 0.336145, 9e-06, 0.007852, 0.044852, 0.020313, 0.030458, + 0.218979, 0.250961, 0.158453, 0.042762, 0.129894, 0.01578, 0.016078, + 3.1e-05, 2.2e-05, 0.000309, 1.8e-05, 7.1e-05, 3e-06, 0.00018, 6e-06, + 0.041497, 0.094336, 0.030568, 0.69278, 0.083745, + 0.09501999999999999, 0.246721, 0.000322, 1.5e-05, 6.4e-05, 0.00031, + 6.600000000000001e-05, 0.000203, 5.4e-05, 4e-06, 4.6e-05, + 0.0005509999999999999, 0.046676, 0.000133, 0.00025, 0.000106, 4e-06, + 6e-05, 0.000579, 0.020548, 0.020144, 0.00017, 4.3e-05, 3.8e-05, + 0.000403, 8.8e-05, 9.2e-05, 2.1e-05, 8.899999999999999e-05, 7.9e-05, + 0.037013, 0.003625, 0.000174, 0.001402, 0.01547, 0.000137, 0.000257, + 0.000181, 0.000249, 0.000175, 0.000262, 0.000188, 0.000245, + 0.000198, 0.000194, 0.039691, 0.377134, 0.025489, + 0.08887399999999999, 0.071201, 0.118396, 0.011301, 0.18306, + 0.471818, 1.2e-05, 0.057105, 0.158384, 0.033412, 0.279247, 0.615341, + 0.07193099999999999, 0.041286, 6e-06, 6.4e-05, 0.000615, 0.000159, + 1.5e-05, 0.179127, 0.003532, 0.087938, 0.128529, 0.003537, 0.555139, + 0.312737, 0.614656, 0.20354, 0.18178, 0.728741, 0.227757, 0.657457, + 1.122729, 0.000405, 1.1e-05, 0.876119, 1.999258, 0.936457, 0.000285, + 1.2e-05, 4.5e-05, 5.3e-05, 0.000321, 0.000137, 0.00026, 0.00031, + 0.000224, 2.5e-05, 0.000171, 3.7e-05, 0.000211, 9.3e-05, 0.000175, + 2.8e-05, 0.000447, 0.000124, 3e-06, 0.000121, 0.000124, 1.3e-05, + 0.000111, 0.000129, 3e-06, 3.6e-05, 3e-06, 1.8e-05, 3.9e-05, + 8.6e-05, 0.00021, 0.000239, 0.000161, 3.2e-05, 0.000224, 0.001489, + 0.00078, 0.000127, 7e-06, 0.000197, 0.000703, 2.5e-05, 0.000145, + 0.00263, 0.001061, 0.001058, 8e-06, 1.5e-05, 4.6e-05, 0.001069, + 0.013118, 6.4e-05, 0.016585, 0.008005, 0.004525, 0.01047, 1.1e-05, + 4e-06, 1e-06, 1e-06, 1e-06, 0.000346, 0.003028, 0.3629, 0.605291, + 0.024532, 0.13292, 6e-06, 2e-06, 2e-06, 2e-06, 2e-06, 3.5e-05, + 0.000585, 0.000348, 0.000227, 0.000171, 7e-06, 0.08057, 0.758265, + 0.999926, 0.026228, 0.430843, 0.460833, 0.076263, 0.682728, + 0.000663, 0.286479, 0.000348, 1.2e-05, 5e-05, 0.000407, 4.8e-05, + 0.000171, 5e-05, 0.000202, 3.5e-05, 0.000215, 2.7e-05, 0.000227, + 3.3e-05, 0.000461, 0.000124, 8e-06, 0.000109, 0.000124, 7e-06, + 0.000115, 0.000123, 1e-06, 0.000122, 0.000125, 3e-06, 0.000122, + 0.000121, 1.8e-05, 0.000105, 3.5e-05, 4e-06, 4.6e-05, 0.000216, + 8.6e-05, 0.000174, 0.000106, 0.00019, 7.8e-05, 0.000171, 7.1e-05, + 0.000256, 0.000219, 0.000174, 8.899999999999999e-05, 0.000168, + 0.000114, 8e-06, 4.5e-05, 0.000549, 0.041588, 9.399999999999999e-05, + 0.000272, 5.8e-05, 4e-06, 4.2e-05, 0.000563, 0.012524, 0.011557, + 0.000133, 0.033325, 8.1e-05, 3.4e-05, 0.000523, 0.041159, 5.2e-05, + 2.3e-05, 5.7e-05, 0.016827, 9.500000000000001e-05, 0.000229, + 7.1e-05, 0.000184, 7.2e-05, 0.000183, 5.3e-05, 0.000166, 3.2e-05, + 0.000225, 0.037247, 1.000281, 1.5e-05, 1.8e-05, 3.9e-05, 7e-06, + 6e-06, 5.9e-05, 8e-06, 4e-06, 4.7e-05, 0.000492, 4.2e-05, 7e-06, + 4e-06, 3e-06, 6e-06, 2.5e-05, 6e-05, 1.8e-05, 6e-06, 1.8e-05, 6e-06, + 5.7e-05, 1.5e-05, 0.000178, 3.4e-05, 6e-06, 4e-06, 4e-06, 7e-06, + 0.000154, 1.6e-05, 4e-06, 3e-06, 4e-06, 5.7e-05, 0.000236, 4.2e-05, + 7e-06, 3e-06, 4e-06, 0.000261, 4.1e-05, 6e-06, 8.3e-05, 4.9e-05, + 8e-06, 5e-06, 4e-06, 4e-06, 5e-06, 1.1e-05, 0.000377, 4.3e-05, + 8e-06, 4e-06, 4e-06, 6e-06, 4e-06, 9e-06, 0.000183, 2.7e-05, 6e-06, + 3e-06, 4e-06, 0.000203, 2.5e-05, 6e-06, 3e-06, 4e-06, 6e-06, 0.0002, + 2.8e-05, 6e-06, 4e-06, 4e-06, 7e-06, 0.000205, 2.7e-05, 6e-06, + 4e-06, 3e-06, 0.000183, 2.9e-05, 6e-06, 4e-06, 3e-06, 7e-06, + 0.000217, 2.6e-05, 6e-06, 4e-06, 3e-06, 6e-06, 0.000209, 3.5e-05, + 6e-06, 3e-06, 3e-06, 0.000247, 4.3e-05, 5e-06, 3e-06, 3e-06, 7e-06, + 8.000000000000001e-05, 1.4e-05, 4e-06, 4e-06, 3e-06, 7.6e-05, + 0.000233, 4.2e-05, 6e-06, 3e-06, 3e-06, 0.000108, 1.4e-05, 5e-06, + 4e-06, 5.5e-05, 0.000259, 3.3e-05, 3.4e-05, 0.000106, 0.000304, + 0.000247, 3.3e-05, 0.000169, 0.000276, 3.3e-05, 3.2e-05, 0.000112, + 0.000275, 0.000284, 0.000244, 6.4e-05, 0.00013, 0.000222, 0.000244, + 0.000377, 0.000136, 0.000324, 6.1e-05, 0.000101, 0.000304, 0.000205, + 0.000298, 0.000202, 0.000265, 4.3e-05, 0.000182, 0.000198, 3.6e-05, + 0.036618, 0.167993, 0.000405, 5.6e-05, 0.132945, 0.5075499999999999, + 1.839101, 0.160079, 0.856059, 0.00019, 0.814619, 0.001748, 0.326707, + 0.016594, 0.104517, 0.000487, 1.2e-05, 3.5e-05, 0.030896, 1.3e-05, + 2.5e-05, 2e-06, 5.6e-05, 2e-06, 0.00016, 8e-06, 1e-06, 4.4e-05, + 6e-06, 0.000232, 2e-06, 9.6e-05, 5e-06, 1e-06, 0.000219, 3e-06, + 1e-06, 0.000281, 4e-06, 1e-06, 0.000247, 2e-06, 1e-06, 0.000182, + 4e-06, 1e-06, 0.000234, 3e-06, 2e-06, 0.000331, 7e-06, 2e-06, + 0.000228, 7e-06, 0.000124, 0.000342, 0.000243, 0.000109, 8e-06, + 0.00015, 6.1e-05, 8e-06, 0.006888, 7.4e-05, 0.033877, 0.03964, + 0.031221, 0.027626, 0.029209, 0.027819, 0.008146, 0.003837, + 0.054232, 0.141787, 0.189477, 0.000731, 0.037917, 0.239763, + 0.016276, 0.101792, 0.121279, 0.569522, 0.162138, 0.167452, + 0.100904, 0.050978, 0.193571, 0.023699, 0.00188, 0.7299330000000001, + 0.14706, 0.069059, 0.000354, 2.1e-05, 0.000376, 0.051512, 4e-05, + 0.00026, 1.9e-05, 5.1e-05, 4e-06, 6e-05, 0.000322, 4.5e-05, 1.3e-05, + 9e-06, 7.8e-05, 3.9e-05, 0.000258, 5.4e-05, 6.9e-05, 8e-06, 6.2e-05, + 0.000148, 4.2e-05, 0.000136, 5.7e-05, 4.7e-05, 0.000226, 0.00012, + 0.000106, 5.4e-05, 0.000169, 9.7e-05, 0.000135, 5.3e-05, 0.000161, + 5.6e-05, 2.9e-05, 1.1e-05, 2.8e-05, 2.9e-05, 0.000329, 4.8e-05, + 2.4e-05, 1e-05, 3.4e-05, 2.8e-05, 0.000345, 0.000111, 0.000216, + 8e-06, 0.010716, 0.000189, 0.002223, 0.000222, 0.000261, 6.1e-05, + 0.000497, 0.000121, 6e-06, 3.1e-05, 7.4e-05, 0.000316, 0.000201, + 0.000241, 0.037019, 0.011593, 0.025272, 1.2e-05, 0.005462, 0.000153, + 0.000308, 1.8e-05, 0.000457, 0.000157, 1.2e-05, 0.000111, + 6.499999999999999e-05, 8.500000000000001e-05, 0.000121, 0.036178, + 0.062789, 0.209764, 2.2e-05, 0.000104, 0.000598, 0.000113, 0.000858, + 0.001237, 1.1e-05, 6.4e-05, 0.022295, 0.002239, 0.02595, 0.048743, + 2.3e-05, 0.048933, 0.000101, 3.8e-05, 0.134329, 0.013961, 1e-05, + 0.003331, 7e-06, 0.006234, 0.000175, 8e-06, 0.0002, 0.000699, + 2.4e-05, 0.001724, 6e-06, 0.000252, 1.3e-05, 0.00269, 0.000125, + 7e-06, 0.000158, 0.007282, 0.015473, 0.064868, 6e-06, 0.216, + 2.2e-05, 2.9e-05, 6.9e-05, 0.000317, 1.4e-05, 0.002346, 0.00051, + 0.005226, 2e-05, 0.019417, 0.001007, 0.000196, 0.005594, 0.005761, + 0.008026, 0.09038, 0.000229, 0.000128, 0.209391, 0.231852, 0.032119, + 5e-06, 5e-06, 2e-06, 2e-06, 1e-06, 2e-06, 3.3e-05, 0.000664, 1e-05, + 2e-06, 0, 1e-06, 1e-06, 8.899999999999999e-05, 1.8e-05, 2.7e-05, + 5e-06, 1e-06, 1e-06, 0.000308, 4e-06, 2e-06, 2e-06, 0.000159, 5e-06, + 1e-06, 1e-06, 0.000537, 8e-06, 2e-06, 2e-06, 1e-06, 1e-06, 1e-06, + 0.00044, 1e-05, 2e-06, 3e-06, 3e-06, 3e-06, 2e-06, 0.0001, 0.000368, + 1e-05, 1e-06, 3e-06, 3e-06, 4e-06, 2e-06, 0.000452, 5e-06, 3e-06, + 2e-06, 2e-06, 2e-06, 0.000215, 6e-06, 2e-06, 2e-06, 0.000259, 7e-06, + 3e-06, 1e-06, 0.000209, 5e-06, 2e-06, 1e-06, 0.000236, 4e-06, 1e-06, + 2e-06, 0.000238, 3e-06, 1e-06, 2e-06, 0.000252, 1.6e-05, 1e-06, + 1e-06, 0.000255, 1.2e-05, 1e-06, 2e-06, 0.000202, 1.5e-05, 1e-06, + 1e-06, 0.000251, 1.2e-05, 1e-06, 1e-06, 0.000198, 4e-06, 1e-06, + 2e-06, 0.000254, 4e-06, 1e-06, 1e-06, 0.00013, 0.000103, 2e-06, + 1e-06, 1e-06, 0.00023, 5e-06, 2e-06, 1e-06, 0.000244, 4e-06, 1e-06, + 0, 0.000233, 6e-06, 1e-06, 1e-06, 0.000241, 4e-06, 1e-06, 1e-06, + 0.000238, 6e-06, 3e-06, 1e-06, 0.000234, 6e-06, 2e-06, 1e-06, + 0.000234, 8e-06, 1e-06, 1e-06, 0.000236, 7e-06, 1e-06, 1e-06, + 0.000236, 4e-06, 1e-06, 1e-06, 0.000237, 5e-06, 1e-06, 2e-06, + 0.000236, 2e-06, 3e-06, 4e-06, 0.000237, 6e-06, 3e-06, 3e-06, + 0.000232, 4e-06, 2e-06, 1e-06, 0.000238, 4e-06, 1e-06, 2e-06, + 0.000239, 6e-06, 1e-06, 1e-06, 0.00024, 2e-06, 1e-06, 1e-06, + 0.000241, 3e-06, 2e-06, 1e-06, 0.000238, 4e-06, 2e-06, 1e-06, + 0.000237, 3e-06, 1e-06, 2e-06, 0.00024, 5e-06, 1e-06, 1e-06, + 0.000237, 4e-06, 1e-06, 1e-06, 0.00024, 3e-06, 2e-06, 1e-06, + 0.000305, 4e-06, 2e-06, 0.000194, 1.2e-05, 1e-06, 0.000223, 1.2e-05, + 1e-06, 0.000235, 1.5e-05, 1e-06, 0.000224, 1.2e-05, 2e-06, 0.000231, + 1.1e-05, 2e-06, 0.000225, 6e-06, 2e-06, 1e-06, 0.000245, 1.4e-05, + 1e-06, 0.000218, 2e-06, 1e-06, 0.000243, 3e-06, 2e-06, 0.00024, + 4e-06, 1e-06, 0.00024, 4e-06, 2e-06, 0.000238, 2e-06, 1e-06, 1e-06, + 0.000241, 2e-06, 1e-06, 0.000242, 4e-06, 1e-06, 0.000241, 2e-06, + 1e-06, 0.000242, 4e-06, 1e-06, 0.00024, 4e-06, 1e-06, 0.000243, + 1.6e-05, 2e-06, 0.000225, 1.2e-05, 2e-06, 0.000231, 1.5e-05, + 0.00023, 1.1e-05, 2e-06, 0.000231, 1.1e-05, 0.000237, 1.4e-05, + 0.000219, 4e-06, 2e-06, 0.000241, 5e-06, 0.000245, 3e-06, 0.000247, + 6e-06, 3e-06, 0.000229, 5e-06, 0.000238, 6e-06, 3e-06, 0.000244, + 1.3e-05, 0.000243, 2e-06, 0.000222, 0.000245, 3e-06, 2e-06, + 0.000239, 3e-06, 3e-06, 0.000238, 1e-06, 1e-06, 0.000244, 3e-06, + 2e-06, 0.000239, 2e-06, 0.000244, 1e-06, 0.000244, 0.000245, + 0.000255, 0.000243, 0.000251, 1.6e-05, 0.000231, 1.3e-05, 0.000228, + 1.2e-05, 0.000238, 5e-06, 0.000235, 1.3e-05, 0.000192, 7.8e-05, + 1.4e-05, 9.8e-05, 9.7e-05, 0.000236, 0.000256, 0.000247, 2e-05, + 8.4e-05, 1.2e-05, 0.000104, 6.9e-05, 1.3e-05, 0.000179, 0.000245, + 0.000256, 1e-06, 9.2e-05, 0.000124, 1.7e-05, 0.000242, 0.000143, + 1.7e-05, 0.064764, 0.268533, 0.000247, 0.000117, 4.6e-05, 0.0001, + 0.00026, 1.3e-05, 7.8e-05, 0.000413, 7.499999999999999e-05, + 0.000187, 7.6e-05, 0.00019, 0.015809, 0.000237, 4e-05, 2.3e-05, + 0.000115, 0.000268, 9e-06, 3.1e-05, 0.000317, 0.000248, 0.00025, + 0.000111, 0.00018, 3.2e-05, 0.000196, 5.3e-05, 0.000188, 4.7e-05, + 0.000197, 6.1e-05, 0.000184, 6.8e-05, 0.000187, 0.03969, 0.401298, + 0.191103, 0.038273, 0.155567, 2.8e-05, 0.000256, + 6.600000000000001e-05, 1.2e-05, 0.000205, 1.5e-05, 0.413707, + 0.02753, 0.142191, 0.120225, 0.761589, 0.148513, + 0.07999199999999999, 0.443199, 1.476141, 0.380089, 0.005695, + 0.000311, 1.2e-05, 0.008484999999999999, 0.849543, 0.00359, + 0.751508, 1.292865, 0.179771, 0.5266, 0.366045, 2e-05, 1.03151, + 1.2e-05, 0.6017670000000001, 0.705453, 1.29376, 0.388697, 0.000119, + 0.000292, 1.4e-05, 7e-06, 0.000235, 1e-05, 0.171773, + 0.07598100000000001, 0.310302, 0.0004, 1.7e-05, 8.1e-05, 0.000385, + 0.000118, 0.000302, 0.000114, 0.000281, 2.9e-05, 0.000209, 2.7e-05, + 0.000239, 2.5e-05, 0.000212, 6e-05, 0.000224, 9.1e-05, 0.000233, + 1.9e-05, 0.000198, 1.9e-05, 0.000289, 0.000267, 0.000198, 6e-05, + 0.000195, 7.6e-05, 3e-06, 2e-06, 1e-06, 2e-06, 2e-06, 6.9e-05, + 0.000555, 0.000244, 0.000241, 0.039375, 0.000124, 0.000288, + 9.899999999999999e-05, 3e-06, 6.2e-05, 0.000571, 0.048884, 0.000149, + 1.4e-05, 6e-06, 6e-06, 3.3e-05, 1.6e-05, 7e-06, 2.5e-05, 0.000324, + 0.000219, 9e-06, 0.000153, 0.000128, 0.00011, 0.000155, 9e-06, + 0.00017, 7.3e-05, 0.037596, 0.027548, 0.000148, 0.00018, 0.016617, + 7.499999999999999e-05, 0.000234, 3.3e-05, 0.000171, 2.8e-05, + 0.000231, 3.5e-05, 0.00019, 2.8e-05, 0.000209, 0.039791, 0.832296, + 1.999254, 0.048807, 0.016688, 0.103137, 0.855847, 0.655344, + 0.000661, 0.013452, 0.168439, 0.136821, 0.025272, 9e-06, + 0.007948999999999999, 0.037041, 0.047981, 0.008460000000000001, + 0.04047, 0.009528, 0.020497, 0.072979, 0.009079, 0.11388, 0.023627, + 0.016839, 0.235363, 0.200238, 0.259802, 0.133895, 0.19443, 0.003572, + 0.124423, 0.003563, 0.37003, 0.040397, 0.3915, 0.000331, 1.7e-05, + 0.186427, 0.003647, 0.000144, 0.004702, 0.542918, 0.227775, + 0.641863, 0.034463, 0.016594, 0.419727, 0.000376, 3.6e-05, 0.000115, + 0.000327, 0.0005330000000000001, 0.00028, 0.000207, 0.000324, + 0.000296, 1e-05, 7e-06, 4.2e-05, 0.000562, 0.010122, 3.8e-05, + 0.018846, 0.000187, 0.000264, 0.000181, 0.000292, 0.000118, + 0.000469, 0.01084, 0.000237, 3.8e-05, 0.019239, 2.8e-05, 0.000227, + 0.0001, 0.000213, 0.000112, 0.000241, 0.000121, 0.000312, 0.000149, + 0.000209, 0.000133, 0.000296, 0.000132, 0.000214, 0.00166, 0.02373, + 0.001922, 4e-06, 4.3e-05, 3e-06, 5.1e-05, 3e-06, 5.6e-05, 2e-06, + 5.4e-05, 1e-06, 0.000392, 8e-06, 1e-06, 4.8e-05, 3e-06, 3.7e-05, + 2e-06, 0.000158, 1e-05, 2e-06, 1e-06, 4.7e-05, 0.000205, 3e-06, + 1e-06, 1e-06, 0.000516, 0.000201, 0.000213, 0.000308, 0.000241, + 0.00026, 0.000234, 0.169798, 8.500000000000001e-05, 0.0003, + 0.000144, 3e-06, 2e-06, 6.8e-05, 0.000589, 0.03856, 0.035385, + 0.000115, 0.000179, 5.8e-05, 0.000143, 0.000343, 0.000129, 0.000214, + 7.2e-05, 0.000288, 8.1e-05, 0.000203, 5.1e-05, 0.000369, + 9.500000000000001e-05, 0.000176, 0.001365, 0.013006, 0.001368, + 3e-06, 1e-06, 1e-06, 1e-06, 2e-06, 5.2e-05, 2e-06, 6.3e-05, 1.3e-05, + 1e-06, 1e-06, 6.7e-05, 2e-06, 1e-06, 4.3e-05, 4e-06, 6.1e-05, 1e-06, + 1e-06, 7.1e-05, 2e-06, 7e-06, 0.0002, 0.000255, 0.000229, 0.000516, + 0.000282, 0.000244, 0.000256, 0.000238, 0.000242, 0.000245, + 0.029151, 8.3e-05, 0.000294, 0.000143, 5e-06, 2e-06, 6.4e-05, + 0.000604, 0.012818, 0.00022, 0.019331, 0.000117, 0.000224, 0.000222, + 0.000234, 7.6e-05, 0.000216, 6.7e-05, 0.00028, 7.1e-05, 0.000219, + 4.5e-05, 0.000249, 6.7e-05, 0.000193, 0.001358, 0.013339, 0.001356, + 4e-06, 1e-06, 1e-06, 1e-06, 2e-06, 1e-06, 3.5e-05, 1e-06, 3.2e-05, + 6e-06, 6.8e-05, 1e-06, 1e-06, 4e-05, 7e-06, 1.5e-05, 2.7e-05, 5e-06, + 3.2e-05, 6e-06, 2.5e-05, 3e-05, 0.000278, 0.000251, 0.000215, + 0.000489, 0.000514, 0.000257, 0.000257, 0.000243, 0.000218, + 0.010181, 0.001256, 3e-05, 0.017594, 6.499999999999999e-05, + 0.000246, 0.000173, 4e-06, 1e-06, 6.499999999999999e-05, 0.000554, + 0.032475, 0.000117, 0.000258, 0.00054, 0.000265, 0.000146, 0.000199, + 6.9e-05, 0.000292, 0.000126, 0.000205, 0.000109, 0.000287, 0.000119, + 0.00021, 0.001505, 0.01251, 0.001603, 3e-06, 2e-06, 1e-06, 1e-06, + 2e-06, 1e-06, 4.5e-05, 3e-06, 6.7e-05, 1.2e-05, 1e-06, 1e-06, + 6.7e-05, 1.9e-05, 1e-06, 1e-06, 1e-05, 1.9e-05, 5.9e-05, 2e-06, + 9.3e-05, 2e-06, 0.000219, 0.000245, 0.000208, 0.000262, 0.000498, + 0.000251, 0.000244, 0.000246, 0.000244, 0.000247, 0.02889, 8.1e-05, + 0.000216, 0.000107, 3e-06, 2e-06, 6.9e-05, 0.0005820000000000001, + 0.01628, 0.00018, 5.4e-05, 0.000269, 0.015699, 2.2e-05, 0.000102, + 0.000347, 0.00041, 0.000227, 7.7e-05, 0.0002, 6.2e-05, 0.000236, + 4.8e-05, 0.00018, 7.499999999999999e-05, 0.000302, 9.2e-05, + 0.000167, 0.001491, 0.012937, 0.001596, 3e-06, 2e-06, 2e-06, 1e-06, + 2e-06, 2e-06, 2e-06, 1e-06, 3.4e-05, 3e-06, 7.499999999999999e-05, + 1.8e-05, 1e-06, 1e-06, 1e-06, 6e-05, 2e-06, 9e-06, 5.3e-05, 5e-06, + 2e-05, 1e-05, 0.000295, 0.000242, 0.000245, 0.000522, 0.000488, + 0.000247, 0.000243, 0.000246, 0.000246, 0.028895, 8.2e-05, 0.000303, + 0.000144, 5e-06, 2e-06, 6.8e-05, 0.000595, 0.009254, 0.027474, + 0.012253, 0.000107, 0.000184, 5.8e-05, 0.000119, 0.000216, 4e-05, + 0.000201, 2.2e-05, 0.000263, 4.1e-05, 0.000208, + 6.999999999999999e-05, 0.000266, 3.7e-05, 0.000167, 0.001494, + 0.013389, 0.001558, 4e-06, 2e-06, 1e-06, 2e-06, 1e-06, 1e-06, + 3.8e-05, 3e-06, 6.1e-05, 1e-06, 1e-06, 4.2e-05, 4e-06, 5.6e-05, + 4e-06, 1e-06, 3e-05, 8e-06, 5.4e-05, 1e-06, 1e-06, 2.6e-05, + 0.000256, 0.000241, 0.000244, 0.000553, 0.000246, 0.00022, 0.00024, + 0.000244, 0.000247, 0.000213, 0.028935, 8.899999999999999e-05, + 0.000214, 8.2e-05, 4e-06, 2e-06, 5.9e-05, 0.000562, 0.032548, + 0.000119, 0.000226, 0.0003, 0.000213, 4e-05, 0.000167, 3.3e-05, + 0.000333, 0.000132, 0.000208, 9.1e-05, 0.000296, 0.000118, 0.000181, + 0.00152, 0.013032, 0.001587, 4e-06, 2e-06, 1e-06, 2e-06, 2e-06, + 2e-06, 3.8e-05, 2e-06, 8.1e-05, 1e-06, 0, 1.6e-05, 1e-06, 5e-05, + 4e-06, 5.6e-05, 1e-06, 1e-06, 3.1e-05, 9e-06, 2.8e-05, 9e-06, + 0.00026, 0.000242, 0.000249, 0.000486, 0.000245, 0.000245, 0.000348, + 0.000419, 0.000279, 0.028802, 8.3e-05, 0.000286, 0.000115, 4e-06, + 2e-06, 5.9e-05, 0.000559, 0.000241, 0.002101, 3.5e-05, 0.030066, + 0.000106, 0.000205, 0.001807, 0.000205, 7.2e-05, 0.000191, 3e-05, + 0.000302, 0.000137, 0.000201, 8.899999999999999e-05, 0.000306, + 0.000116, 0.000325, 0.001743, 0.011198, 0.001645, 3e-06, 2e-06, + 2e-06, 1e-06, 2e-06, 1e-06, 1e-05, 3.5e-05, 2e-06, 6.7e-05, 2e-06, + 0, 4.5e-05, 8e-06, 2.2e-05, 3.3e-05, 8e-06, 7.1e-05, 1.4e-05, 1e-06, + 1e-06, 2.7e-05, 0.000255, 0.00024, 0.000243, 0.0005240000000000001, + 0.000242, 0.000246, 0.000282, 0.000452, 0.000251, 0.045419, + 8.500000000000001e-05, 0.000254, 6.1e-05, 2e-06, 3e-06, 6.9e-05, + 0.000559, 0.032483, 7.2e-05, 0.000221, 0.000143, 0.000211, 7.4e-05, + 0.0002, 4.9e-05, 0.000301, 0.000129, 0.000212, 9.2e-05, 0.000262, + 6e-05, 0.000198, 0.001624, 0.013169, 0.001673, 3e-06, 1e-06, 1e-06, + 2e-06, 2e-06, 1e-06, 4e-05, 3e-06, 6.4e-05, 1e-06, 1e-06, 4.8e-05, + 6e-06, 1.2e-05, 6.3e-05, 2e-06, 5.2e-05, 2e-06, 1e-06, 0, 3.5e-05, + 1e-06, 0.000295, 0.000239, 0.000243, 0.000492, 0.000243, 0.000278, + 0.00031, 0.000424, 0.000219, 0.028386, 0.000228, 5.4e-05, 0.000213, + 3.5e-05, 0.000238, 0.007959000000000001, 2.2e-05, 7.1e-05, 0.000481, + 0.000111, 4e-06, 1e-06, 6.8e-05, 0.000623, 0.038715, 0.010124, + 0.000116, 0.000228, 6.2e-05, 0.002913, 0.000265, 2.1e-05, 0.000179, + 1.5e-05, 1.3e-05, 0.000229, 3.9e-05, 0.000196, 3.5e-05, 0.000269, + 7.3e-05, 0.000191, 5.3e-05, 0.000247, 2.2e-05, 0.000177, 0.001569, + 0.010022, 0.001705, 3e-06, 2e-06, 1e-06, 1e-06, 3e-06, 1e-06, 1e-06, + 1e-06, 3.6e-05, 2e-06, 6.499999999999999e-05, 1e-06, 1e-06, 6e-05, + 1e-06, 1e-06, 5.6e-05, 1e-06, 4.2e-05, 4e-06, 1.7e-05, 2e-06, + 0.000327, 0.000232, 0.00025, 0.000239, 0.000501, 0.000215, 0.000245, + 0.000244, 0.000246, 0.000325, 0.02873, 8.7e-05, 0.000337, 0.000112, + 3e-06, 2e-06, 5.5e-05, 0.00056, 0.032383, 0.000119, 0.000246, + 0.001701, 0.000251, 0.004701, 0.000195, 0.006657, 0.027981, 7.3e-05, + 0.00024, 0.019186, 0.000333, 7.7e-05, 0.000241, 0.037189, 0.272651, + 0.227517, 6e-06, 2e-06, 2e-06, 1e-06, 2e-06, 3.7e-05, 2e-06, + 3.4e-05, 2e-06, 0.0006089999999999999, 1.8e-05, 3e-06, + 6.499999999999999e-05, 3e-06, 5.6e-05, 9e-06, 3e-06, 1e-06, + 6.499999999999999e-05, 5e-06, 1e-06, 0.000207, 9e-06, 2e-06, 1e-06, + 1e-06, 0.000442, 9e-06, 1e-06, 2e-06, 1e-06, 1e-06, 3.5e-05, + 0.000105, 1.2e-05, 7.499999999999999e-05, 3e-06, 1e-06, 1e-06, + 1e-06, 1e-06, 1e-06, 0.00047, 3e-06, 2e-06, 1e-06, 1e-06, 1e-06, + 1e-06, 0.000255, 4e-06, 1e-06, 2e-06, 1e-06, 1e-06, 2e-06, 0.000462, + 4e-06, 2e-06, 1e-06, 1e-06, 1e-06, 1e-06, 0.000234, 4e-06, 1e-06, + 1e-06, 1e-06, 0.00024, 6e-06, 1e-06, 2e-06, 1e-06, 0.000236, 5e-06, + 1e-06, 1e-06, 1e-06, 0.000256, 4e-06, 1e-06, 1e-06, 1e-06, 0.00022, + 2e-06, 1e-06, 0.000242, 4e-06, 2e-06, 0.000241, 5e-06, 2e-06, + 0.000233, 3e-06, 2e-06, 0.000239, 5e-06, 2e-06, 0.000238, 4e-06, + 1e-06, 0.00024, 5e-06, 1e-06, 0.000239, 3e-06, 1e-06, 0.000245, + 0.000279, 0.000142, 0.000114, 8.7e-05, 5e-06, 0.000157, 0.000225, + 0.000241, 6.2e-05, 0.000185, 6.2e-05, 4e-06, 0.000144, 0.000247, + 0.000255, 6.600000000000001e-05, 0.00017, 7.499999999999999e-05, + 1.5e-05, 0.000168, 0.000258, 6.8e-05, 0.000165, 7.7e-05, 5e-06, + 0.000145, 0.000242, 6.8e-05, 0.00018, 9.8e-05, 5e-06, 0.000169, + 0.000265, 0.000232, 5.3e-05, 2.5e-05, 5e-06, 0.009259, 0.039637, + 0.00865, 2.8e-05, 5e-06, 5e-06, 0.009263, 2.7e-05, 0.087632, 6e-05, + 0.000318, 1.4e-05, 1.6e-05, 2e-06, 5e-06, 4.2e-05, 0.00032, + 0.037569, 0.703033, 0.214916, 0.64994, 0.04462, 0.302059, 0.999951, + 0.137821, 0.039703, 0.027832, 0.000366, 1.7e-05, 0.000111, 0.000346, + 0.000131, 0.00019, 4.5e-05, 4e-06, 2e-06, 3.8e-05, 0.000618, + 0.036949, 0.0052, 0.000138, 0.0002, 0.000107, 9.399999999999999e-05, + 4e-06, 5.9e-05, 0.000579, 0.032121, 0.000118, 1.5e-05, 3.3e-05, + 3e-06, 0.000374, 0.000259, 6e-06, 0.00016, 5.3e-05, + 6.600000000000001e-05, 0.036463, 0.00435, 0.000131, 0.0002, + 0.016695, 0.000124, 0.000254, 7.7e-05, 0.000202, 6.9e-05, 0.000174, + 4.5e-05, 0.000229, 6.7e-05, 0.000176, 0.038503, 0.271061, 0.036943, + 0.003036, 0.307457, 0.23321, 0.029976, 0.000198, 0.62617, 3e-05, + 0.000353, 1.9e-05, 1e-05, 2e-06, 0.109966, 0.651886, 0.213682, + 4.9e-05, 2.7e-05, 0.000236, 1e-05, 4.6e-05, 2e-06, 0.00011, 2e-06, + 0.000152, 1e-06, 0.133729, 0.609789, 0.031985, 2.2e-05, 9.6e-05, + 0.016657, 9.1e-05, 0.000312, 0.000155, 0.000175, 3.6e-05, 0.000326, + 0.000222, 5e-06, 4.3e-05, 4e-06, 3.9e-05, 1.9e-05, 2.4e-05, 2.7e-05, + 2e-06, 5.9e-05, 0.000446, 2e-05, 3e-06, 5.8e-05, 2e-06, 6e-05, + 3e-06, 5.8e-05, 1e-05, 3e-06, 2e-06, 6.2e-05, 0.000145, 4e-06, + 1e-06, 1e-06, 3.7e-05, 0.000475, 4e-06, 2e-06, 1e-06, 2e-06, + 3.5e-05, 9e-06, 3.5e-05, 1e-06, 0.00041, 8e-06, 2e-06, 1e-06, 1e-06, + 2e-06, 1e-06, 3.9e-05, 2e-06, 0.000412, 4e-06, 2e-06, 1e-06, 1e-06, + 2e-06, 1e-06, 1e-06, 3.9e-05, 0.000437, 4e-06, 2e-06, 1e-06, 2e-06, + 1e-06, 1e-06, 2e-06, 1e-06, 0.000476, 4e-06, 2e-06, 1e-06, 2e-06, + 1e-06, 1e-06, 1e-06, 1e-06, 0.000455, 5e-06, 1e-06, 1e-06, 1e-06, + 1e-06, 1e-06, 0.000236, 1e-06, 2e-06, 1e-06, 1e-06, 0.000242, 5e-06, + 2e-06, 1e-06, 0.000302, 7e-06, 1e-06, 2e-06, 0.000174, 4e-06, 2e-06, + 1e-06, 0.000263, 3e-06, 2e-06, 1e-06, 0.000206, 5e-06, 1e-06, 2e-06, + 0.000263, 9e-06, 2e-06, 1e-06, 0.000241, 1.1e-05, 2e-06, 1e-06, + 0.000262, 1.9e-05, 3e-06, 1e-06, 0.000223, 1.9e-05, 0.000224, + 0.000248, 0.000244, 0.000217, 0.00024, 0.000244, 0.000246, 0.000221, + 0.000274, 0.000241, 0.000212, 0.000277, 0.000213, 0.000281, + 0.000242, 0.000245, 0.000244, 0.000246, 0.000244, 0.00025, 0.00024, + 0.000247, 0.000244, 0.000242, 0.001342, 0.000379, 0.034867, + 0.000105, 0.000224, 9.3e-05, 0.000182, 2.7e-05, 0.00026, 3.4e-05, + 0.000379, 0.039497, 0.5442, 0.357434, 1.099135, 0.041655, 0.85846, + 0.09723900000000001, 0.311746, 0.29389, 0.394283, 0.308007, + 0.445888, 0.148214, 0.097913, 0.307962, 0.692039, 0.307906, + 0.593507, 0.056654, 0.041922, 0.033815, 0.274117, + 0.8501919999999999, 4.8e-05, 4e-05, 5.2e-05, 0.000176, 3.5e-05, + 7.8e-05, 4.1e-05, 3.9e-05, 1.4e-05, 3.8e-05, 2e-05, 1e-05, 5e-06, + 3e-05, 1.3e-05, 0.14915, 0.026055, 0.003791, 0.562937, 1.999277, + 1.065992, 0.000143, 0.523873, 0.311931, 0.028066, 0.069262, + 0.239786, 1.759471, 0.246945, 0.756221, 0.697726, 0.000743, + 0.297642, 0.003465, 0.913362, 1.3e-05, 0.0866, 0.081234, 0.025897, + 0.050497, 0.259128, 0.014569, 0.564476, 0.004333, 0.312601, + 0.003488, 0.683764, 0.995133, 0.004903, 0.270456, + 0.6224730000000001, 0.000158, 0.161523, 0.000449, 2e-05, 0.000129, + 0.000428, 0.000134, 0.000275, 0.000131, 0.000373, 8.8e-05, 0.000344, + 7.6e-05, 0.000289, 9.899999999999999e-05, 0.000266, 0.00011, + 0.000218, 0.000129, 0.000203, 3.2e-05, 0.000265, + 8.899999999999999e-05, 0.000232, 7.9e-05, 0.000238, 0.000368, + 0.000233, 0.000121, 0.000228, 0.000164, 5e-06, 3e-06, 2e-06, 1e-06, + 8.8e-05, 0.000565, 0.000216, 0.034407, 0.000127, 0.000216, 5.8e-05, + 3e-06, 5.7e-05, 0.000566, 0.032524, 0.000164, 1.9e-05, 8e-06, + 2.2e-05, 1.4e-05, 1.4e-05, 4.4e-05, 0.000401, 5.6e-05, 9.6e-05, + 7e-06, 0.000133, 8e-06, 0.000248, 1.3e-05, 1e-06, 0.000302, 7.6e-05, + 0.036992, 0.028077, 0.000239, 0.000188, 0.016701, 0.000103, + 0.000332, 0.000134, 0.000307, 0.00013, 0.000323, 0.000139, 0.000212, + 0.000116, 0.000175, 0.037659, 0.132015, 0.312029, 0.297586, + 1.336091, 0.663151, 1.295715, 0.703577, 0.296261, 0.101385, 0.22987, + 0.000233, 0.434696, 0.000419, 3.6e-05, 0.000159, 0.000332, 0.000899, + 0.000119, 0.00019, 0.0352, 0.144224, 0.05227, 0.149337, 0.185305, + 0.000393, 0.184107, 5.8e-05, 0.000343, 0.183449, 0.000685, 0.000284, + 1.5e-05, 0.000102, 0.000448, 0.00037, 1.8e-05, 0.000112, 0.000401, + 0.00012, 0.00029, 0.000119, 0.000243, 6.4e-05, 0.000177, 5.4e-05, + 0.000188, 5.4e-05, 0.000279, 9.2e-05, 0.000504, 0.000166, 1.5e-05, + 5.4e-05, 0.000175, 1.5e-05, 7.7e-05, 0.000155, 1.5e-05, 0.000101, + 0.000401, 0.000268, 0.000207, 0.0001, 0.000145, + 0.0009700000000000001, 7.2e-05, 0.036994, 0.14733, 0.010867, + 0.037774, 0.056528, 0.10916, 0.000384, 1e-05, 2.9e-05, 0.000265, + 0.037653, 0.175573, 1.9e-05, 0.676889, 0.702174, 0.297846, 1.701447, + 0.066121, 5e-06, 5e-06, 2e-06, 2e-06, 3e-06, 1e-06, 2e-06, 3e-06, + 2e-06, 0.000725, 1.9e-05, 2e-06, 1e-06, 1e-06, 1e-06, 1e-06, + 6.999999999999999e-05, 2e-05, 2e-06, 3e-06, 1e-06, 1e-06, 1e-06, + 0.000218, 7e-06, 1e-06, 1e-06, 1e-06, 7.2e-05, 0.000155, 6e-06, + 1e-06, 1e-06, 1e-06, 0.000256, 3e-06, 2e-06, 1e-06, 0.000559, + 1.6e-05, 0.000227, 0.000299, 2.6e-05, 0.00012, 0.000264, 1.5e-05, + 0.000238, 1.5e-05, 1.4e-05, 0.000224, 0.000234, 1.5e-05, 0.000223, + 0.006457, 2.2e-05, 0.016599, 0.07625899999999999, 0.238719, + 0.000408, 0.037377, 0.08400299999999999, 0.003761, 0.124235, + 0.003565, 1.337726, 1.999245, 1.075482, 2.9e-05, 0.000378, 2e-05, + 9e-06, 2e-06, 1.8e-05, 6e-06, 0.923339, 1.999252, 1.10893, 0.003052, + 0.887231, 1.999357, 1.735131, 0.000561, 0.263547, 1.066412, + 0.000189, 6.7e-05, 0.932557, 0.069161, 0.000414, 1.7e-05, 0.000328, + 0.076215, 0.148162, 1.6e-05, 0.000117, 0.119362, 0.000372, 1.7e-05, + 0.7902090000000001, 0.794934, 0.918648, 0.0002, 1.080404, 0.413585, + 3.6e-05, 0.000285, 5.5e-05, 4e-06, 2.5e-05, 5e-06, 0.091326, + 0.003882, 0.572217, 7e-06, 4e-06, 2e-06, 2e-06, 8e-06, 4.3e-05, + 2e-06, 2e-06, 3.3e-05, 0.000581, 2.4e-05, 3e-06, 2e-06, 2e-06, + 2e-06, 2e-06, 0.000154, 6e-06, 2e-06, 2e-06, 2e-06, 0.000242, + 1.4e-05, 3e-06, 6.600000000000001e-05, 9e-06, 0.00015, 6.8e-05, + 2e-05, 0.000135, 6.7e-05, 1.3e-05, 0.000447, 6.3e-05, 6e-06, + 0.000211, 5e-06, 0.000197, 0.000266, 1.8e-05, 1.8e-05, 0.000206, + 5.2e-05, 1e-05, 0.070046, 1.1e-05, 0.844631, 1.999285, 0.37526, + 0.269128, 0.000144, 0.428814, 0.000377, 2e-05, 0.000132, 0.000335, + 0.000146, 0.00032, 0.00014, 0.000315, 9.000000000000001e-05, + 0.000326, 7.8e-05, 0.000348, 0.000138, 0.000309, 0.000191, 0.000269, + 9.2e-05, 0.000228, 8.1e-05, 0.000333, 0.000478, 0.000208, 0.000122, + 0.000251, 0.000158, 6e-06, 3e-06, 2e-06, 2e-06, 3.7e-05, 0.000592, + 0.000243, 0.026904, 0.000156, 0.000307, 0.000234, 1.1e-05, 5.5e-05, + 0.000566, 0.032068, 0.000263, 5.9e-05, 4.3e-05, 4.5e-05, 4.2e-05, + 4.2e-05, 4e-05, 0.000202, 0.000138, 3.5e-05, 2.2e-05, 3e-05, + 0.000149, 0.000149, 3e-05, 5.4e-05, 0.000164, 2.8e-05, 0.000127, + 0.03696, 0.019837, 0.00032, 0.000252, 0.016369, 0.000222, 0.000284, + 0.000233, 0.000254, 0.00022, 0.000266, 0.000239, 0.000251, 0.000192, + 0.000192, 0.037031, 1.7e-05, 0.116766, 0.192277, 0.435377, 0.091586, + 3.1e-05, 0.000373, 1.9e-05, 1e-05, 2e-06, 0.000261, 1.4e-05, + 0.280014, 0.023348, 3.2e-05, 2.9e-05, 0.000314, 2.2e-05, 1.2e-05, + 2e-06, 0.000253, 1.7e-05, 0.975979, 0.62699, 0.37293, + 0.9999749999999999, 0.626341, 0.492913, 0.014529, 0.570348, + 0.076026, 0.235104, 0.003504, 0.606799, 0.126116, 0.99708, 0.306968, + 0.005815, 0.563343, 0.123881, 0.303074, 0.697012, 0.303014, + 0.075444, 0.000103, 0.496756, 0.124502, 0.303213, + 0.06970899999999999, 0.6271060000000001, 0.303057, 0.571645, + 0.428396, 1.129816, 0.441094, 1.216598, 0.184097, 0.598553, + 1.762639, 0.000133, 0.236455, 0.700106, 0.025727, 0.876292, + 0.003488, 0.124494, 0.00356, 0.265654, 0.031362, 0.997795, + 0.9701149999999999, 0.029865, 0.913193, 0.000163, + 0.08662400000000001, 0.969381, 0.030588, 1.000004, 0.968747, + 1.999191, 0.181717, 0.003031, 0.476371, 0.000189, 0.498117, + 0.001757, 0.094473, 0.070796, 0.257284, 0.415613, 0.324319, + 0.103689, 3e-05, 0.000304, 1.9e-05, 1.3e-05, 1e-06, + 0.09349499999999999, 2.2e-05, 0.042766, 0.496198, 0.263337, + 0.138729, 0.028411, 0.088029, 0.031219, 0.388701, 0.324931, + 0.266295, 0.268827, 0.235355, 0.105707, 1.7e-05, 0.123881, 0.381654, + 0.076361, 0.09857399999999999, 0.11765, 0.07213, 0.144328, 0.047985, + 0.061286, 0.019094, 0.083081, 0.000315, 1.3e-05, 0.171753, 0.072075, + 0.152366, 0.031976, 0.46934, 0.197771, 0.036378 }; +#endif //TEST_FUNCTIONS + +}; + +#endif /* DATAPROCESSOR_H_ */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/e0/0046bc9eacb500161808a5c64fd2084a b/.metadata/.plugins/org.eclipse.core.resources/.history/e0/0046bc9eacb500161808a5c64fd2084a new file mode 100644 index 0000000..870f4ee --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/e0/0046bc9eacb500161808a5c64fd2084a @@ -0,0 +1,1945 @@ +/* + * DataProcessor.cpp + * + * Created on: 14 de jun de 2016 + * Author: apaschoalon + */ + +#include "DataProcessor.h" + +DataProcessor::DataProcessor() +{ + //nothing to do at all +} + +DataProcessor::~DataProcessor() +{ + //nothing to do at all +} + +string DataProcessor::toString(void) +{ + string dataProcessor; + + dataProcessor = + "Used to calculate parameters of network flows; has no state."; + + return (dataProcessor); +} + +int DataProcessor::calculate(const string& experimentName, + DatabaseInterface* databaseInterface, NetworkTrace* netTrace) +{ + + //iterator variables + long int fcounter = 0; + long int nflows = 0; + databaseInterface->getNumberOfFlows(experimentName, &nflows); + +#ifdef DEBUG_DataProcessor_calculate + cout << "DataProcessor::calculate() -> Number of flows = " << nflows << endl; +#endif // DEBUG_DataProcessor_calculate + + //protocol variables + string flowStrData = ""; + long int flowIntData = 0; + double startDalay = 0; //time of the fist packet of the flow + double flowDuration = 0; //duration of the flow + list ttlList; + int ttl = 0; + + //flow-level variables + list relativeTime; //time relative to the 1st packet list + long int nKbytes = 0; //Number of kbytes (bytes/1024) of the + + //packetSize variables + list pslist; //packet-size list + long int ps_mostFrequent = 0; + double mean_packetRate = 0; + + //inter-deperture time variables + StochasticModelFit* modelVet = NULL; + list interArrival_list; // list of inter arrival times of a flow + list interArrival_fileStack; + list interArrival_interFileStack; + list interArrival_interSessionStack; + double lastTime = 0; + double idt = 0; + + for (fcounter = 0; fcounter < nflows; fcounter++) + { + + //new network flow + NetworkFlow* netFlow = NetworkFlow::make_flow("dummy"); + + //TODO checar valor retornado de databaseInterface + + //reset temp vars + flowStrData = ""; + flowIntData = 0; + relativeTime.clear(); + pslist.clear(); + interArrival_list.clear(); + interArrival_fileStack.clear(); + interArrival_interFileStack.clear(); + interArrival_interSessionStack.clear(); + + //load packet-size data + databaseInterface->getFlowData(experimentName, fcounter, "frame__len", + pslist); + + //laod time-relative data + databaseInterface->getFlowData(experimentName, fcounter, + "frame__time_relative", relativeTime); + + //evaluate inter-arrival data + //time relative to the begin of the measurement + lastTime = 0; + for (list::iterator it = relativeTime.begin(); + it != relativeTime.end(); it++) + { + idt = *it - lastTime; + interArrival_list.push_back(idt); + lastTime = *it; + } + + //###################################################################### + //Flow-level Options + //###################################################################### + startDalay = relativeTime.front(); + netFlow->setFlowStartDelay(startDalay); + + flowDuration = relativeTime.back() - relativeTime.front(); + netFlow->setFlowDuration(flowDuration); + + //TODO DS byte configuration -- now it is just set to zero + netFlow->setFlowDsByte(0); + + //flow kbytes + for (list::iterator it = pslist.begin(); it != pslist.end(); + it++) + { + nKbytes = nKbytes + *it; + } + nKbytes = nKbytes / 1024; + + netFlow->setNumberOfKbytes(nKbytes); + netFlow->setNumberOfPackets(relativeTime.size()); + + //###################################################################### + //Protocol Options + //###################################################################### + + // + //L3 protocols + //reference http://www.iana.org/assignments/ieee-802-numbers/ieee-802-numbers.xhtml + // + + databaseInterface->getFlowData(experimentName, fcounter, "eth__type", + &flowIntData); + if (flowIntData == IPV4_CODE) + { //IPv4 + netFlow->setNetworkProtocol(PROTOCOL__IPV4); + databaseInterface->getFlowData(experimentName, fcounter, "ip__src", + &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, "ip__dst", + &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + else if (flowIntData == (ARP_CODE || ARP_CODE_REV)) + { //ARP, Frame Relay ARP + netFlow->setNetworkProtocol(PROTOCOL__ARP); + databaseInterface->getFlowData(experimentName, fcounter, "ip__src", + &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, "ip__dst", + &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + else if (flowIntData == IPV6_CODE) + { //IPv6 + netFlow->setNetworkProtocol(PROTOCOL__ICMPV6); + databaseInterface->getFlowData(experimentName, fcounter, + "ipv6__addr", &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, + "ipv6__dst", &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + else + { //default IPv4 + netFlow->setNetworkProtocol(PROTOCOL__IPV4); + databaseInterface->getFlowData(experimentName, fcounter, "ip__src", + &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, "ip__dst", + &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + + //set ttl as the most frequent + databaseInterface->getFlowData(experimentName, fcounter, "ip__ttl", + ttlList); + //ttl = (int) mode(ttlList); + ttl = (int) mode(&ttlList); + netFlow->setNetworkTtl(ttl); + + // + //L4 Protocols + //reference https://en.wikipedia.org/wiki/List_of_IP_protocol_numbers + // + databaseInterface->getFlowData(experimentName, fcounter, "ip__proto", + &flowIntData); + if (flowIntData == ICMP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__ICMP); + } + else if (flowIntData == TCP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__TCP); + databaseInterface->getFlowData(experimentName, fcounter, + "tcp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "tcp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else if (flowIntData == UDP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__UDP); + databaseInterface->getFlowData(experimentName, fcounter, + "udp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "udp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else if (flowIntData == DCCP_CODE) + { + netFlow->setTransportDstPort(PROTOCOL__DCCP); + databaseInterface->getFlowData(experimentName, fcounter, + "dccp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "dccp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else if (flowIntData == GRE_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__GRE); + //TODO não suportado pelo D-ITG + } + else if (flowIntData == ICMPV6_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__ICMPV6); + } + else if (flowIntData == SCTP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__SCTP); + databaseInterface->getFlowData(experimentName, fcounter, + "sctp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "sctp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else + { //default: UDP + netFlow->setTransportProtocol(PROTOCOL__NULL); + //databaseInterface->getFlowData(experimentName, fcounter, "udp__dstport", &flowIntData); + //netFlow->setL4SrcPort(flowIntData); + //databaseInterface->getFlowData(experimentName, fcounter, "udp__srcport", &flowIntData); + //netFlow->setL4DstPort(flowIntData); + } + + //###################################################################### + //Packet Size Model + //###################################################################### + + // + // Constant model: Just set the packet size as the most frequent value + // + //ps_mostFrequent = mode(pslist); + //ps_mostFrequent = mode(&pslist); + //mean_packetRate = ((double) pslist.size() / flowDuration); + //netFlow->setPsConstant(ps_mostFrequent); + //netFlow->setIdtConstant(mean_packetRate); + + // + // Algorithm to choose the priority order of the models + // 1st version: just the constant model + // + //TODO implement a best algorithm + //netFlow->setPsModel1(MODEL__CONSTANT); + + //###################################################################### + //Inter-arrival-time Model + //###################################################################### + + for (list::iterator it = interArrival_list.begin(); + it != interArrival_list.end(); it++) + { + if(*it < FILE_CUT_TIME) + { + interArrival_fileStack.push_back(*it); + } + else if(*it < SESSION_CUT_TIME) + { + interArrival_interFileStack.push_back(*it); + } + else + { + interArrival_interSessionStack.push_back(*it); + } + } + +#ifdef DEBUG_DataProcessor_interArrival + if(fcounter == 0) + { + string file1 = "fileStack"; + string file2 = "interFileStack"; + string file3 = "interSessionStack"; + save_data_on_file(file1, interArrival_fileStack); + save_data_on_file(file2, interArrival_interFileStack); + save_data_on_file(file3, interArrival_interSessionStack); + } +#endif + + + netFlow->setInterDepertureTimeModels( + fitModels(interArrival_list, "aic")); + + //TODO set the right model + + //netFlow->setIdtModel1(MODEL__CONSTANT); + + //TODO + + //TODO + + //###################################################################### + //Push-back the flow to Trace Flow-list + //###################################################################### + + netTrace->pushback_Netflow(netFlow); + +#ifdef DEBUG_DataProcessor_calculate_loop + cout << fcounter << ": ps_mostFrequent=" << ps_mostFrequent << endl; + cout << fcounter << ": startDalay=" << startDalay << endl; + cout << fcounter << ": mean_packetRate=" << mean_packetRate << endl; + cout << fcounter << ": idt_constant=" << netFlow->getIdtConstant() << endl; +#endif //DEBUG_DataProcessor_calculate_loop +#ifdef DEBUG_DataProcessor_calculate_loop + cout << fcounter << ": netFlow->getTransportProtocol() = " << netFlow->getTransportProtocol() << endl; + cout << fcounter << ": netFlow->getNetworkProtocol() = " << netFlow->getNetworkProtocol() << endl; + cout << fcounter << ": netFlow->getTransportDstPort() = " << netFlow->getTransportDstPort() << endl; + cout << fcounter << ": netFlow->getFlowDsByte() = " << netFlow->getFlowDsByte() << endl; + cout << fcounter << ": netFlow->getNetworkDstAddr() = " << netFlow->getNetworkDstAddr() << endl << endl; + +#endif //DEBUG_DataProcessor_calculate_loop + + } + +#ifdef DEBUG_DataProcessor_calculate + cout << "netTrace->networkFlow.size() = " << netTrace->networkFlow.size() << endl; + cout << "netTrace->getNumberOfFlows() = " << netTrace->getNumberOfFlows() << endl; +#endif //DEBUG_DataProcessor_calculate + + return (0); +} + +StochasticModelFit* DataProcessor::fitModels(list& empiricalData, + const string& criterion) +{ + //constants + const int numberOfModels = 8; + const int m = empiricalData.size(); //empirical data-size + //vars + int counter = 0; + StochasticModelFit* modelVet = NULL; + vec paramVec = zeros(2); + vec infoCriterion = zeros(2); + + modelVet = new StochasticModelFit[numberOfModels]; + + //Inter-arrival vec + vec interArrival = zeros(m); + counter = 0; + for (list::iterator it = empiricalData.begin(); + it != empiricalData.end(); it++) + { + interArrival(counter) = *it + min_time; + counter++; + } + //Empirical CDF of interArrival + vec* interArrivalCdf = empiricalCdf(empiricalData); + + //Weibull + weibullFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[0].aic = infoCriterion(0); + modelVet[0].bic = infoCriterion(1); + modelVet[0].modelName = WEIBULL; + modelVet[0].param1 = paramVec(0); + modelVet[0].param2 = paramVec(1); + modelVet[0].size = numberOfModels; + + //normal + normalFitting(interArrival, paramVec, infoCriterion); + modelVet[1].aic = infoCriterion(0); + modelVet[1].bic = infoCriterion(1); + modelVet[1].modelName = NORMAL; + modelVet[1].param1 = paramVec(0); + modelVet[1].param2 = paramVec(1); + modelVet[1].size = numberOfModels; + + //exponential mean + exponentialMeFitting(interArrival, paramVec, infoCriterion); + modelVet[2].aic = infoCriterion(0); + modelVet[2].bic = infoCriterion(1); + modelVet[2].modelName = EXPONENTIAL_MEAN; + modelVet[2].param1 = paramVec(0); + modelVet[2].param2 = paramVec(1); + modelVet[2].size = numberOfModels; + + //exponential Linear Regression (LR) + exponentialLrFitting(interArrival, *interArrivalCdf, paramVec, + infoCriterion); + modelVet[3].aic = infoCriterion(0); + modelVet[3].bic = infoCriterion(1); + modelVet[3].modelName = EXPONENTIAL_LINEAR_REGRESSION; + modelVet[3].param1 = paramVec(0); + modelVet[3].param2 = paramVec(1); + modelVet[3].size = numberOfModels; + + //pareto linear regression + paretoLrFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[4].aic = infoCriterion(0); + modelVet[4].bic = infoCriterion(1); + modelVet[4].modelName = PARETO_LINEAR_REGRESSION; + modelVet[4].param1 = paramVec(0); + modelVet[4].param2 = paramVec(1); + modelVet[4].size = numberOfModels; + + //pareto maximum likehood + paretoMlhFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[5].aic = infoCriterion(0); + modelVet[5].bic = infoCriterion(1); + modelVet[5].modelName = PARETO_MAXIMUM_LIKEHOOD; + modelVet[5].param1 = paramVec(0); + modelVet[5].param2 = paramVec(1); + modelVet[5].size = numberOfModels; + + //Cauchy + cauchyFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[6].aic = infoCriterion(0); + modelVet[6].bic = infoCriterion(1); + modelVet[6].modelName = CAUCHY; + modelVet[6].param1 = paramVec(0); + modelVet[6].param2 = paramVec(1); + modelVet[6].size = numberOfModels; + + //Constant + constantFitting(interArrival, paramVec, infoCriterion); + modelVet[7].aic = infoCriterion(0); + modelVet[7].bic = infoCriterion(1); + modelVet[7].modelName = CONSTANT; + modelVet[7].param1 = paramVec(0); + modelVet[7].param2 = paramVec(1); + modelVet[7].size = numberOfModels; + + if (criterion == "bic") + { + qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), compareBic); + } + else if (criterion == "aic") + { + qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), compareAic); + } + else + { + cout + << "Error @ DataProcessor::fitModels -> Invalid criterion argument: " + << criterion << endl; + cout << "AIC set as default" << endl; + qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), compareAic); + + } + +#ifdef DEBUG_StochasticModelFit + //if (modelVet[0].modelName == WEIBULL) + //{ + // cout << modelVet[0].modelName << "aic:bic->" << modelVet[0].aic << ":" << modelVet[0].bic + // << " " << "alpha:betha->" << modelVet[0].param1 + // << modelVet[0].param2 << endl; + // string fileName = "weibulldata_" + std::to_string(abs(modelVet[0].aic)); + // save_data_on_file(fileName, interArrival, *interArrivalCdf); + //} +#endif //DEBUG_StochasticModelFit + + delete interArrivalCdf; + + return (modelVet); +} + +inline void DataProcessor::weibullFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //init + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + //linearization + vec y = log(-log(1.0 + diferential - interArrivalCdf)); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double weibull_alpha = theta(1); + double weibull_betha = exp(-theta(0) / theta(1)); + paramVec(0) = weibull_alpha; + paramVec(1) = weibull_betha; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "weibull", paramVec, "aic"); + double bic = informationCriterion(interArrival, "weibull", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; + +} + +inline void DataProcessor::normalFitting(const vec& interArrival, vec& paramVec, + vec& infoCriterion) +{ + double sigma = stddev(interArrival); + double mu = mean(interArrival); + paramVec(0) = mu; + paramVec(1) = sigma; + + //information criterion + double aic = informationCriterion(interArrival, "normal", paramVec, "aic"); + double bic = informationCriterion(interArrival, "normal", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::exponentialLrFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //init + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + //linearization + vec y = log(1.00 + diferential - interArrivalCdf); + //vec y = log(1.00 - interArrivalCdf); + vec x = interArrival; + mat* X = featureMatrix(x); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double exp_lambda = -theta(1); + paramVec(0) = exp_lambda; + paramVec(1) = 0; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "exponential", paramVec, + "aic"); + double bic = informationCriterion(interArrival, "exponential", paramVec, + "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::exponentialMeFitting(const vec& interArrival, + vec& paramVec, vec& infoCriterion) +{ + paramVec(0) = 1.0 / mean(interArrival); + paramVec(1) = 0; + + //information criterion + double aic = informationCriterion(interArrival, "exponential", paramVec, + "aic"); + double bic = informationCriterion(interArrival, "exponential", paramVec, + "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::paretoLrFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //init + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + //linearization + vec y = log(1.00 + diferential - interArrivalCdf); + //vec y = log(1.00 - interArrivalCdf); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double pareto_alpha = -theta(1); + double pareto_xm = interArrival.min(); + paramVec(0) = pareto_alpha; + paramVec(1) = pareto_xm; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "pareto", paramVec, "aic"); + double bic = informationCriterion(interArrival, "pareto", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::paretoMlhFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + double pareto_xm = interArrival.min(); + int m = interArrival.size(); + //vec logDiff = log(interArrival) - log(ones(m) * pareto_xm); + vec logDiff = log(interArrival) - log(pareto_xm); + double pareto_alpha = double(m) / (sum(logDiff)); + paramVec(0) = pareto_alpha; + paramVec(1) = pareto_xm; + + //information criterion + double aic = informationCriterion(interArrival, "pareto", paramVec, "aic"); + double bic = informationCriterion(interArrival, "pareto", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::cauchyFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //initialization + int iterations = 1500; + double learning_rate = 0.01; + int m = interArrival.size(); + double minInterArrival = interArrival.min(); + double y_max = 1.0 / minInterArrival; + vec y = tan(datum::pi * (interArrivalCdf - 0.5)); + for (int i = 0; i < m; i++) + { + //avoid too high numbers when tan() tends to infinity + if (y(i) > y_max) + y(i) = y_max; + } + + //linearization + vec J_history = zeros(iterations); + vec theta = zeros(2); + mat* X = featureMatrix(interArrival); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double cauchy_gamma = double(1.0) / theta(1); + double cauchy_x0 = -theta(0) / theta(1); + paramVec(0) = cauchy_gamma; + paramVec(1) = cauchy_x0; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "cauchy", paramVec, "aic"); + double bic = informationCriterion(interArrival, "cauchy", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; + +} + +void DataProcessor::constantFitting(const vec& interArrival, vec& paramVec, + vec& informationCriterion) +{ + paramVec(0) = mean(interArrival); + paramVec(1) = 0; + informationCriterion(0) = datum::inf; + informationCriterion(1) = datum::inf; +} + +template bool DataProcessor::isEqual(const T* vet1, const T* vet2, + const int size) +{ + for (int i = 0; i < size; i++) + { + if (vet1[i] != vet2[i]) + { + return (false); + } + } + + return (true); +} + +template void DataProcessor::vectorC_to_list(list* theList, + T* vet, int size) +{ + for (int i = 0; i < size; i++) + { + theList->push_back(vet[i]); + } +} + +template +void DataProcessor::quickSort(T* vet, int left, int right) +{ + int p = left; + int i = 0; + T ch = 0; + int j = 0; + + for (i = left + 1; i <= right; i++) + { + j = i; + if (vet[j] < vet[p]) + { + ch = vet[j]; + while (j > p) + { + vet[j] = vet[j - 1]; + j--; + } + vet[j] = ch; + p++; + } + } + if (p - 1 >= left) + quickSort(vet, left, p - 1); + if (p + 1 <= right) + quickSort(vet, p + 1, right); +} + +template +T DataProcessor::mode(list* theList) +{ + T* vet; + int listSize = theList->size(); + int i = 0; + T candidate = 0; + T prev = 0; + int counter = 0; + int largerCounter = 0; + T mode = 0; + vet = new T[listSize]; + + if (listSize == 0) + { + return (0); + } + + i = 0; + + for (typename list::iterator it = theList->begin(); it != theList->end(); + it++) + { + vet[i] = *it; + i++; + } + + quickSort(vet, 0, listSize - 1); + + prev = vet[0]; + largerCounter = 0; + for (i = 0; i < listSize; i++) + { + candidate = vet[i]; + if (candidate == prev) + { + counter++; + if (counter > largerCounter) + { + largerCounter = counter; + mode = vet[i]; + } + } + else + counter = 1; + + prev = vet[i]; + } + + delete[] vet; + + return (mode); +} + +template +inline T* DataProcessor::list_to_cvector(list* theList) +{ + int listSize = theList->size(); + T* vet; + int i = 0; + + vet = new T[listSize]; + if (listSize == 0) + { + return (0); + } + + i = 0; + for (typename list::iterator it = theList->begin(); it != theList->end(); + it++) + { + vet[i] = *it; + i++; + } + + return (vet); +} +template +inline void DataProcessor::delete_cvector(T* c_vet) +{ + delete[] c_vet; +} + +inline vec* DataProcessor::empiricalCdf(list& empiricalData) +{ + double* cvet_empiricalData = list_to_cvector(&empiricalData); + int data_size = empiricalData.size(); + quickSort(cvet_empiricalData, 0, data_size - 1); + double x = cvet_empiricalData[0]; // anchor - fist element; + int i1 = 0; // fist index + int i2 = 0; + double prob = 0; + vec* interArrivalCdf = new vec(zeros(data_size)); + + for (int i = 0; i < data_size; i++) + { + if (cvet_empiricalData[i] > x) + { + i2 = i - 1; + prob = double(i) / data_size; + for (int j = i1; j <= i2; j++) + { + (*interArrivalCdf)(j) = prob; + } + i1 = i; + x = cvet_empiricalData[i]; + } + } + //last position == 1 + (*interArrivalCdf)(data_size - 1) = 1; + + delete_cvector(cvet_empiricalData); + return (interArrivalCdf); +} + +inline mat* DataProcessor::featureMatrix(list& empiricalData) +{ + int data_size = empiricalData.size(); + mat* featureMatrix = new mat(ones(data_size, 2)); + + int i = 0; + for (list::iterator it = empiricalData.begin(); + it != empiricalData.end(); it++) + { + (*featureMatrix)(i, 1) = *it; + i++; + } + + return (featureMatrix); + +} + +inline mat* DataProcessor::featureMatrix(const vec& empiricalData) +{ + int data_size = empiricalData.size(); + mat* featureMatrix = new mat(ones(data_size, 2)); + for (int i = 0; i < data_size; i++) + { + (*featureMatrix)(i, 1) = empiricalData(i); + } + + return (featureMatrix); +} + +inline double DataProcessor::computeCost(const mat& X, const vec& y, + const vec& theta) +{ + double J = .0; + double jtemp = .0; + int m = y.size(); + + for (int i = 0; i < m; i++) + { + jtemp = jtemp + pow(double(theta(0) + theta(1) * X(i, 1) - y(i)), 2); + + } + J = (1.0 / double(2 * m)) * jtemp; + + return (J); +} + +inline void DataProcessor::gradientDescendent(const mat& X, const vec& y, + const double learning_rate, const int num_iters, vec& theta, + vec& J_history) +{ + + int m = y.n_rows; //number of training examples + double temp1 = .0; + double temp2 = .0; + double delta1 = .0; + double delta2 = .0; + vec x = X.col(1); + + for (int i = 0; i < num_iters; i++) + { + temp1 = .0; + temp2 = .0; + delta1 = .0; + delta2 = .0; + + //slope + delta1 = sum(theta(0) + theta(1) * x - y) / double(m); + delta2 = sum((theta(0) + theta(1) * x - y) % x) / double(m); + + //linear regression + temp1 = theta(0) - learning_rate * delta1; + temp2 = theta(1) - learning_rate * delta2; + + theta(0) = temp1; + theta(1) = temp2; + + //Save the cost J in every iteration + J_history(i) = computeCost(X, y, theta); + + } + +} + +inline double DataProcessor::informationCriterion(const vec& data, + const string& functionName, const vec& paramVet, + const string& criterion) +{ + double criterionVal = .0; + double nEstimatedParameters = double(paramVet.size()); + double likehoodLogVal = logLikehood(data, functionName, paramVet); + double logDataLen = log(double(data.size())); + + if (criterion == "aic") + { + criterionVal = 2 * nEstimatedParameters - 2 * likehoodLogVal; + } + else if (criterion == "bic") + { + criterionVal = nEstimatedParameters * logDataLen - 2 * likehoodLogVal; + } + else + { + cout << "\nInvalid functionName or no functionName selected: " + << functionName << endl; + printf("Selecting default criterion: AIC\n"); + criterionVal = 2 * nEstimatedParameters - 2 * likehoodLogVal; + } + + return (criterionVal); + +} + +inline double DataProcessor::logLikehood(const vec& data, + const string& functionName, const vec& paramVet) +{ + double param1 = paramVet(0); + double param2 = paramVet(1); + double m = data.size(); + double L = .0; + int i = 0; + vec data_prob = zeros(size(data)); + + if (functionName == "weibull") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_weibull(data(i), param1, param2); + } + else if (functionName == "normal") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_normal(data(i), param1, param2); + } + else if (functionName == "uniform") + { + data_prob = ones(size(data)) * pdf_uniform(param1, param2); + } + else if (functionName == "exponential") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_exponential(data(i), param1); + } + else if (functionName == "pareto") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_pareto(data(i), param1, param2); + } + else if (functionName == "cauchy") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_cauchy(data(i), param1, param2); + } + else + { + cout << "Warning, no valid stochastic function selected: " + << functionName << endl; + printf("Likehood logarithm seted to -Inf (worst as possible)\n"); + return (datum::inf); + } + + L = sum(log(data_prob)); + return (L); + +} + +inline double DataProcessor::pdf_weibull(double x, double alpha, double betha) +{ + if (x >= 0) + return ((alpha / pow(betha, alpha)) * pow(x, alpha - 1.0) + * exp(-(pow(x / betha, alpha)))); + else + return (.0); +} + +inline double DataProcessor::cdf_weibull(double x, double alpha, double betha) +{ + if (x >= 0) + return (1.0 - exp(-pow(x / betha, alpha))); + else + return (.0); +} + +inline double DataProcessor::pdf_exponential(double x, double lambda) +{ + if (x >= 0) + return (lambda * exp(-lambda * x)); + else + return (.0); + +} + +inline double DataProcessor::cdf_exponential(double x, double lambda) +{ + if (x >= 0) + return (1.0 - exp(-lambda * x)); + else + return (.0); +} + +inline double DataProcessor::pdf_pareto(double x, double alpha, double xm) +{ + if (x >= xm) + return (alpha * pow(xm, alpha) / (pow(x, alpha + 1.0))); + else + return (.0); +} + +inline double DataProcessor::cdf_pareto(double x, double alpha, double xm) +{ + if (x >= xm) + return (1.0 - pow(xm / x, alpha)); + else + return (.0); +} + +inline double DataProcessor::pdf_cauchy(double x, double gamma, double x0) +{ + return (1 / (datum::pi * gamma) + * (pow(gamma, 2) / (pow(x - x0, 2) + pow(gamma, 2)))); +} + +inline double DataProcessor::cdf_cauchy(double x, double gamma, double x0) +{ + return ((1 / datum::pi) * atan((x - x0) / (gamma)) + 0.5); +} + +inline double DataProcessor::pdf_normal(double x, double mu, double sigma) +{ + return (1 / (sqrt(2 * datum::pi) * sigma) + * exp(-0.5 * pow((x - mu) / sigma, 2))); +} + +inline double DataProcessor::cdf_normal(double x, double mu, double sigma) +{ + return (0.5 * (1 + erf((x - mu) / (sigma * sqrt(2))))); +} + +inline double DataProcessor::pdf_uniform(double x_min, double x_max) +{ + return (1.0 / (x_max - x_min)); +} + +inline double DataProcessor::cdf_uniform(double x, double x_min, double x_max) +{ + if (x < x_min) + return (0); + else if (x > x_max) + return (1); + else + return ((x - x_min) / (x_max - x_min)); +} + +#ifdef TEST_FUNCTIONS + +void DataProcessor::printTestResult(string testName, bool result) +{ + string outRes; + if (result == true) + outRes = "ok"; + else + outRes = "failed"; + + cout << testName << ":\t\t" << outRes << endl; +} + +bool DataProcessor::compareDouble(double val1, double val2) +{ + double error = 0; + + error = fabs(double(val1) - double(val2)); + if (error > double(1e-5)) + return (false); + else + return (true); + +} + +bool DataProcessor::compareDouble(double val1, double val2, double acErr) +{ + double error = 0; + + error = fabs(double(val1) - double(val2)); + if (error > double(acErr)) + return (false); + else + return (true); + +} + +bool DataProcessor::compareMat(mat& mat1, mat& mat2) +{ + int mat1_nc = mat1.n_cols; + int mat1_nr = mat1.n_rows; + int mat2_nc = mat2.n_cols; + int mat2_nr = mat2.n_rows; + + if ((mat1_nc != mat2_nc) || (mat1_nr != mat2_nr)) + { + cout << "mat1.n_cols and mat2.n_cols dont match. " << mat1_nc << ":" + << mat2_nc << " " << mat1_nr << ":" << mat2_nr << endl; + return (false); + } + for (int i = 0; i < mat1_nr; i++) + { + for (int j = 0; j < mat1_nc; j++) + { + if (compareDouble(mat1(i, j), mat2(i, j), 1e-5)) + { + //cout << " mat1(" << i << ", " << j << " ) = " << mat1(i,j); + //cout << " mat2(" << i << ", " << j << " ) = " << mat2(i,j); + return (false); + } + } + } + + return (true); +} + +void DataProcessor::save_data_on_file(const string& fileName, const mat& vet1, + const mat& vet2) +{ + string file_out = fileName + ".txt"; + int m = vet1.size(); + + ofstream writeOnFile(file_out, ios::out); + if (!writeOnFile) + { + cerr << "file could not be oppeded" << endl; + exit(1); + } + + for (int i = 0; i < m; i++) + { + writeOnFile << vet1(i) << " " << vet2(i) << endl; + } + +} + +void DataProcessor::save_data_on_file(const string& fileName, list& theList) +{ + string file_out = fileName + ".txt"; + int m = theList.size(); + + ofstream writeOnFile(file_out, ios::out); + if (!writeOnFile) + { + cerr << "file could not be oppeded" << endl; + exit(1); + } + + for (list::iterator it = theList.begin(); it != theList.end(); it++) + { + //list::iterator it = randInt_list1.begin(); + writeOnFile << *it << " \n"; + } +} + +bool DataProcessor::test_Mode() +{ + + int randint1[] = + { 1, 8, 1, 13, 9, 2, 1, 15, 4, 3, 10, 4, 13, 2, 14, 7, 7 }; + int randint1_mode = 1; + list l_randint1; + vectorC_to_list(&l_randint1, randint1, 17); + + int randint2[] = + { 5, 3, 6, 8, 14, 9, 11, 9, 11, 15, 8, 7, 12, 13, 14 }; + int randint2_mode = 8; + list l_randint2; + vectorC_to_list(&l_randint2, randint2, 15); + + int randint3[] = + { 9, 10, 6, 3, 13, 13, 14, 7, 7, 1, 5, 1, 8, 5, 9, 2, 3, 4, 5, 6, 6, 6 }; + int randint3_mode = 6; + list l_randint3; + vectorC_to_list(&l_randint3, randint3, 22); + + int randint4[] = + { 2, 1 }; + int randint4_mode = 1; + list l_randint4; + vectorC_to_list(&l_randint4, randint4, 2); + + int randint5[] = + { 1, 1, 1, 1, 1, 2, 2, 2, 2, 2 }; + int randint5_mode = 1; + list l_randint5; + vectorC_to_list(&l_randint5, randint5, 10); + + if (mode(&l_randint1) != randint1_mode) + return (false); + if (mode(&l_randint2) != randint2_mode) + return (false); + if (mode(&l_randint3) != randint3_mode) + return (false); + if (mode(&l_randint4) != randint4_mode) + return (false); + if (mode(&l_randint5) != randint5_mode) + return (false); + + return (true); +} + +bool DataProcessor::test_QuickSort() +{ + int randIntA[] = + { 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; + int randIntA_size = 18; + int randIntA_sorted[] = + { 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9 }; + int randIntB[] = + { 9, 2, 3, 3, 12, 15, 8, 14, 2, 7, 4, 6, 10, 2, 12 }; + int randIntB_size = 15; + int randIntB_sorted[] = + { 2, 2, 2, 3, 3, 4, 6, 7, 8, 9, 10, 12, 12, 14, 15 }; + double randDoubleA[] = + { 0.20872, 12.25501, 5.88210, 2.77962, 8.74916, 2.97454, 4.39641, 12.19733, + 4.66014, 4.52477, 5.19375, 12.11314, 13.35458, 11.56941, 6.59435 }; + int randDoubleA_size = 15; + double randDoubleA_sorted[] = + { 0.20872, 2.77962, 2.97454, 4.39641, 4.52477, 4.66014, 5.19375, 5.88210, + 6.59435, 8.74916, 11.56941, 12.11314, 12.19733, 12.25501, 13.35458 }; + + quickSort(randIntA, 0, randIntA_size - 1); + + if (isEqual(randIntA, randIntA_sorted, randIntA_size) == false) + { + return (false); + } + + quickSort(randIntB, 0, randIntB_size - 1); + if (isEqual(randIntB, randIntB_sorted, randIntB_size) == false) + { + return (false); + } + + quickSort(randDoubleA, 0, randDoubleA_size - 1); + if (isEqual(randDoubleA, randDoubleA_sorted, randDoubleA_size) == false) + { + return (false); + } + + return (true); + +} + +bool DataProcessor::test_list_tocvector() +{ + list randInt_list1 = + { 9, 2, 3, 3, 12, 15, 8, 14, 2, 7, 4, 6, 10, 2, 12 }; + list randInt_list2 = + { 2.2, 2.111, 3.16, 6.66, 13, 2.61 }; + list randInt_list3 = + { 1, 2, 3, 4, 5, 6, 6, 5, 4, 3, 2, 1 }; + + int* cvet1 = NULL; + double* cvet2 = NULL; + int* cvet3 = NULL; + + cvet1 = list_to_cvector(&randInt_list1); + cvet2 = list_to_cvector(&randInt_list2); + cvet3 = list_to_cvector(&randInt_list3); + + int i = 0; + for (list::iterator it = randInt_list1.begin(); + it != randInt_list1.end(); it++) + { + if (cvet1[i] != *it) + { + return (false); + } + //cout << *it << " "; + i++; + } + i = 0; + for (list::iterator it = randInt_list2.begin(); + it != randInt_list2.end(); it++) + { + if (cvet2[i] != *it) + { + return (false); + } + //cout << *it << " "; + i++; + } + i = 0; + for (list::iterator it = randInt_list3.begin(); + it != randInt_list3.end(); it++) + { + if (cvet3[i] != *it) + { + return (false); + } + //cout << *it << " "; + i++; + } + + delete_cvector(cvet1); + delete_cvector(cvet2); + delete_cvector(cvet3); + + return (true); +} + +bool DataProcessor::test_empiricalCdf() +{ + list interArrival_sample = + { 5.0000e-07, 1.5000e-06, 1.5000e-06, 2.5000e-06, 2.5000e-06, 3.5000e-06, + 4.5000e-06, 7.5000e-06, 1.2500e-05, 1.9500e-05, 3.1500e-05, + 4.3500e-05, 6.0500e-05, 7.6500e-05, 1.1050e-04, 1.4050e-04, + 1.8150e-04, 2.1150e-04, 2.3350e-04, 2.4350e-04, 2.5650e-04, + 3.0350e-04, 4.1250e-04, 1.3655e-03, 1.1593e-02, 3.2483e-02, + 8.1235e-02, 2.0939e-01, 5.0755e-01, 1.7351e+00 }; + vec emCdf_octave = + { 0.033333, 0.100000, 0.100000, 0.166667, 0.166667, 0.200000, 0.233333, + 0.266667, 0.300000, 0.333333, 0.366667, 0.400000, 0.433333, + 0.466667, 0.500000, 0.533333, 0.566667, 0.600000, 0.633333, + 0.666667, 0.700000, 0.733333, 0.766667, 0.800000, 0.833333, + 0.866667, 0.900000, 0.933333, 0.966667, 1.000000 }; + //emCdf_octave = emCdf_octave.t(); + + vec* emCdf_cpp = empiricalCdf(interArrival_sample); + + int list_size = interArrival_sample.size(); + for (int i = 0; i < list_size; i++) + { + if (!compareDouble(emCdf_octave(i), (*emCdf_cpp)(i), 1e-6)) + { + cout << "cdf error @ " << "i:" << i << " res:" << (*emCdf_cpp)(i, 0) + << " expected:" << emCdf_octave(i, 0) << endl; + return (false); + } + } + + delete emCdf_cpp; + return (true); +} + +bool DataProcessor::test_computeCost() +{ + list interArrival_sample = + { 5.0000e-07, 1.5000e-06, 1.5000e-06, 2.5000e-06, 2.5000e-06, 3.5000e-06, + 4.5000e-06, 7.5000e-06, 1.2500e-05, 1.9500e-05, 3.1500e-05, + 4.3500e-05, 6.0500e-05, 7.6500e-05, 1.1050e-04, 1.4050e-04, + 1.8150e-04, 2.1150e-04, 2.3350e-04, 2.4350e-04, 2.5650e-04, + 3.0350e-04, 4.1250e-04, 1.3655e-03, 1.1593e-02, 3.2483e-02, + 8.1235e-02, 2.0939e-01, 5.0755e-01, 1.7351e+00 }; + mat* X = featureMatrix(interArrival_sample); + vec emCdf_octave = + { 0.033333, 0.100000, 0.100000, 0.166667, 0.166667, 0.200000, 0.233333, + 0.266667, 0.300000, 0.333333, 0.366667, 0.400000, 0.433333, + 0.466667, 0.500000, 0.533333, 0.566667, 0.600000, 0.633333, + 0.666667, 0.700000, 0.733333, 0.766667, 0.800000, 0.833333, + 0.866667, 0.900000, 0.933333, 0.966667, 1.000000 }; + //emCdf_octave = emCdf_octave.t(); + double J_expected1 = 0.17535; + double J_expected2 = 1.5341; + double J_expected3 = 9.0244; + + vec theta = zeros(2); + + double J = computeCost(*X, emCdf_octave, theta); + if (!compareDouble(J, J_expected1, 0.001)) + { + //cout << "J1 = " << J << "\nJ_expected1 = "<< J_expected1 << endl; + return (false); + } + theta(0) = 2; + theta(1) = 2; + J = computeCost(*X, emCdf_octave, theta); + if (!compareDouble(J, J_expected2, 0.001)) + { + //cout << "J2 = " << J << "\nJ_expected2 = "<< J_expected2 << endl; + return (false); + } + theta(0) = 1.5; + theta(1) = 12; + J = computeCost(*X, emCdf_octave, theta); + if (!compareDouble(J, J_expected3, 0.001)) + { + //cout << "J3 = " << J << "\nJ_expected3 = "<< J_expected3 << endl; + return (false); + } + + delete X; + return (true); +} + +bool DataProcessor::test_informationCriterion() +{ + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + + int m = interArrival.size(); + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + //gradient descendent + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + vec y = log(-log(1.0 + diferential - *interArrivalCdf)); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + double weibull_alpha = theta(1); + double weibull_betha = exp(-theta(0) / theta(1)); + vec paramVec = + { weibull_alpha, weibull_betha }; + double weibull_bic = informationCriterion(interArrival, "weibull", paramVec, + "bic"); + double weibull_aic = informationCriterion(interArrival, "weibull", paramVec, + "aic"); + + if (!compareDouble(weibull_bic, -33712.7042, 0.001)) + return (false); + else if (!compareDouble(weibull_aic, -33724.6567, 0.001)) + return (false); + + return (true); +} + +bool DataProcessor::test_pdf_weibull() +{ + double alpha = 1.5000; + double betha = 0.3; + vec data = + { 0.010000, 2.300000, 0.500000 }; + vec dataprob_eval1 = + { 9.0733e-01, 8.3571e-09, 7.5066e-01 }; + vec dataprob_test = zeros(3); + + dataprob_test(0) = pdf_weibull(data(0), alpha, betha); + dataprob_test(1) = pdf_weibull(data(1), alpha, betha); + dataprob_test(2) = pdf_weibull(data(2), alpha, betha); + + if (compareDouble(dataprob_test(0), dataprob_eval1(0)) + && compareDouble(dataprob_test(1), dataprob_eval1(1)) + && compareDouble(dataprob_test(2), dataprob_eval1(2))) + { + return (true); + } + + return (false); +} + +bool DataProcessor::test_cdf_weibull() +{ + double alpha = 0.5; + double betha = 1.5; + vec data = + { 0.010000, 2.300000, 0.500000 }; + vec dataprob_eval1 = + { 0.078405, 0.710117, 0.438616 }; + vec dataprob_test = zeros(3); + + dataprob_test(0) = cdf_weibull(data(0), alpha, betha); + dataprob_test(1) = cdf_weibull(data(1), alpha, betha); + dataprob_test(2) = cdf_weibull(data(2), alpha, betha); + //cout << dataprob_test(0) << " : " << dataprob_test(1) << " : " << dataprob_test(2) << endl; + + if (compareDouble(dataprob_test(0), dataprob_eval1(0)) + && compareDouble(dataprob_test(1), dataprob_eval1(1)) + && compareDouble(dataprob_test(2), dataprob_eval1(2))) + { + return (true); + } + + return (false); +} + +bool DataProcessor::test_gradientDescendent() +{ + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + + int m = interArrival.size(); + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + //gradient descendent + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + vec y = log(-log(1.0 + diferential - *interArrivalCdf)); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //expected values + double Jlast = 0.083359; + double theta0 = 1.660453; + double theta1 = 0.248811; + + if (!compareDouble(J_history(iterations - 1), Jlast)) + + { + return (false); + } + else if (!compareDouble(theta(0), theta0)) + { + return (false); + } + else if (!compareDouble(theta(1), theta1)) + { + return (false); + } + + delete interArrivalCdf; + delete X; + return (true); + +} + +bool DataProcessor::test_pdf_exponential() +{ + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double lambda1 = 0.50000; + vec val1 = + { 0.49751, 0.15832, 0.38940 }; + vec res1 = zeros(3); + + double lambda2 = 3.0; + vec val2 = + { 2.9113366, 0.0030234, 0.6693905 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = pdf_exponential(data(i), lambda1); + res2(i) = pdf_exponential(data(i), lambda2); + + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + + } + + return (true); +} + +bool DataProcessor::test_cdf_exponential() +{ + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double lambda1 = 0.50000; + vec val1 = + { 0.0049875, 0.6833632, 0.2211992 }; + vec res1 = zeros(3); + + double lambda2 = 3.0; + vec val2 = + { 0.029554, 0.998992, 0.776870 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = cdf_exponential(data(i), lambda1); + res2(i) = cdf_exponential(data(i), lambda2); + + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + + return (true); +} + +bool DataProcessor::test_pdf_pareto() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double alpha1 = 0.50000; + double xm1 = 1.0; + vec val1 = + { 0, 0.14334, 0 }; + vec res1 = zeros(3); + double xm2 = 0.00001; + double alpha2 = 3.0; + vec val2 = + { 3.0000e-07, 1.0720e-16, 4.8000e-14 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = pdf_pareto(data(i), alpha1, xm1); + res2(i) = pdf_pareto(data(i), alpha2, xm2); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + + return (true); +} + +bool DataProcessor::test_cdf_pareto() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double alpha1 = 0.50000; + double xm1 = 0.001; + vec val1 = + { 0.68377, 0.97915, 0.95528 }; + vec res1 = zeros(3); + double xm2 = 0.2; + double alpha2 = 1; + vec val2 = + { 0, 0.91304, 0.60000 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = cdf_pareto(data(i), alpha1, xm1); + res2(i) = cdf_pareto(data(i), alpha2, xm2); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + return (true); +} + +bool DataProcessor::test_pdf_cauchy() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + double gamma1 = 0.50000; + double x01 = 0.001; + + vec val1 = + { 0.636414, 0.028752, 0.318947 }; + vec res1 = zeros(3); + double x02 = 2; + double gamma2 = 2; + + vec val2 = + { 0.079976, 0.155653, 0.101859 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = pdf_cauchy(data(i), gamma1, x01); + res2(i) = pdf_cauchy(data(i), gamma2, x02); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + return (true); +} + +bool DataProcessor::test_cdf_cauchy() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + double gamma1 = 0.50000; + double x01 = 0.001; + + vec val1 = + { 0.50573, 0.93183, 0.74968 }; + vec res1 = zeros(3); + double x02 = 2; + double gamma2 = 2; + + vec val2 = + { 0.25080, 0.54739, 0.29517 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = cdf_cauchy(data(i), gamma1, x01); + res2(i) = cdf_cauchy(data(i), gamma2, x02); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + return (true); +} + +bool DataProcessor::test_fitModels() +{ + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + + int m = interArrival.size(); + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + //list of expected values + double weibull_alpha = 0.24881; + double weibull_betha = 0.0012639; + double normal_mu = 0.054792; + double normal_sigma = 0.205602; + double exponentialMe_lambda = 18.250783; + double exponentialLr_lambda = 2.023115; + double paretoLr_alpha = 0.225451; + double paretoLr_xm = 0.000000; + double paretoMlh_alpha = 0.171674; + double paretoMlh_xm = 0.000000; + double cauchy_gamma = 0.000067; + double cauchy_x0 = 0.005750; + double acErr = 0.001; + + vec paramVec = zeros(2); + vec infoCriterion = zeros(2); + + weibullFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), weibull_alpha, acErr)) + { + cout << "weibullFitting alpha" << endl; + return (false); + } + if (!compareDouble(paramVec(1), weibull_betha, acErr)) + { + cout << "weibullFitting betha" << endl; + return (false); + } + + normalFitting(interArrival, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), normal_mu, acErr)) + { + cout << "normalFitting mu" << endl; + return (false); + } + if (!compareDouble(paramVec(1), normal_sigma, acErr)) + { + cout << "normalFitting sigma" << endl; + return (false); + } + + exponentialMeFitting(interArrival, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), exponentialMe_lambda, acErr)) + { + cout << "exponentialLrFitting lambda" << endl; + return (false); + } + + exponentialLrFitting(interArrival, *interArrivalCdf, paramVec, + infoCriterion); + if (!compareDouble(paramVec(0), exponentialLr_lambda, acErr)) + { + cout << exponentialLr_lambda << ":" << paramVec(0) << endl; + cout << "exponentialLrFitting lambda" << endl; + return (false); + } + + paretoLrFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), paretoLr_alpha, acErr)) + { + cout << "paretoLrFitting alpha" << endl; + return (false); + } + if (!compareDouble(paramVec(1), paretoLr_xm, acErr)) + { + cout << "paretoLrFitting xm" << endl; + return (false); + } + + paretoMlhFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), paretoMlh_alpha, acErr)) + { + cout << "paretoMlhFitting alpha" << endl; + return (false); + } + if (!compareDouble(paramVec(1), paretoMlh_xm, acErr)) + { + cout << "paretoMlhFitting xm" << endl; + return (false); + } + + cauchyFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), cauchy_gamma, acErr)) + { + cout << "cauchyFitting" << endl; + return (false); + } + if (!compareDouble(paramVec(1), cauchy_x0, acErr)) + { + return (false); + } + + delete interArrivalCdf; + + return (true); +} + +bool DataProcessor::test_modelSelection() +{ + + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + int m = interArrival.size(); + + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + StochasticModelFit* modelVet = NULL; + modelVet = fitModels(list_interArrival, "aic"); + + //int numberOfModels = modelVet[0].size; + //for (int i = 0; i < numberOfModels; i++) + // cout << modelVet[i].modelName << " " << "modelVet[" << i << "] = " + // << modelVet[i].aic << endl; + + delete interArrivalCdf; + delete[] modelVet; + return (true); +} + +#endif //TEST_FUNCTIONS diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/e0/10e3bea0c8b500161808a5c64fd2084a b/.metadata/.plugins/org.eclipse.core.resources/.history/e0/10e3bea0c8b500161808a5c64fd2084a new file mode 100644 index 0000000..34578e8 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/e0/10e3bea0c8b500161808a5c64fd2084a @@ -0,0 +1,1967 @@ +/* + * DataProcessor.cpp + * + * Created on: 14 de jun de 2016 + * Author: apaschoalon + */ + +#include "DataProcessor.h" + +DataProcessor::DataProcessor() +{ + //nothing to do at all +} + +DataProcessor::~DataProcessor() +{ + //nothing to do at all +} + +string DataProcessor::toString(void) +{ + string dataProcessor; + + dataProcessor = + "Used to calculate parameters of network flows; has no state."; + + return (dataProcessor); +} + +int DataProcessor::calculate(const string& experimentName, + DatabaseInterface* databaseInterface, NetworkTrace* netTrace) +{ + + //iterator variables + long int fcounter = 0; + long int nflows = 0; + databaseInterface->getNumberOfFlows(experimentName, &nflows); + +#ifdef DEBUG_DataProcessor_calculate + cout << "DataProcessor::calculate() -> Number of flows = " << nflows << endl; +#endif // DEBUG_DataProcessor_calculate + + //protocol variables + string flowStrData = ""; + long int flowIntData = 0; + double startDalay = 0; //time of the fist packet of the flow + double flowDuration = 0; //duration of the flow + list ttlList; + int ttl = 0; + + //flow-level variables + list relativeTime; //time relative to the 1st packet list + long int nKbytes = 0; //Number of kbytes (bytes/1024) of the + + //packetSize variables + list pslist; //packet-size list + long int ps_mostFrequent = 0; + double mean_packetRate = 0; + + //inter-deperture time variables + StochasticModelFit* modelVet = NULL; + list interArrival_list; // list of inter arrival times of a flow + list interArrival_fileStack; + list interArrival_interFileStack; + list interArrival_interSessionStack; + double lastTime = 0; + double idt = 0; + + for (fcounter = 0; fcounter < nflows; fcounter++) + { + + //new network flow + NetworkFlow* netFlow = NetworkFlow::make_flow("dummy"); + + //TODO checar valor retornado de databaseInterface + + //reset temp vars + flowStrData = ""; + flowIntData = 0; + relativeTime.clear(); + pslist.clear(); + interArrival_list.clear(); + interArrival_fileStack.clear(); + interArrival_interFileStack.clear(); + interArrival_interSessionStack.clear(); + + //load packet-size data + databaseInterface->getFlowData(experimentName, fcounter, "frame__len", + pslist); + + //laod time-relative data + databaseInterface->getFlowData(experimentName, fcounter, + "frame__time_relative", relativeTime); + + //evaluate inter-arrival data + //time relative to the begin of the measurement + lastTime = 0; + for (list::iterator it = relativeTime.begin(); + it != relativeTime.end(); it++) + { + idt = *it - lastTime; + interArrival_list.push_back(idt); + lastTime = *it; + } + + //###################################################################### + //Flow-level Options + //###################################################################### + startDalay = relativeTime.front(); + netFlow->setFlowStartDelay(startDalay); + + flowDuration = relativeTime.back() - relativeTime.front(); + netFlow->setFlowDuration(flowDuration); + + //TODO DS byte configuration -- now it is just set to zero + netFlow->setFlowDsByte(0); + + //flow kbytes + for (list::iterator it = pslist.begin(); it != pslist.end(); + it++) + { + nKbytes = nKbytes + *it; + } + nKbytes = nKbytes / 1024; + + netFlow->setNumberOfKbytes(nKbytes); + netFlow->setNumberOfPackets(relativeTime.size()); + + //###################################################################### + //Protocol Options + //###################################################################### + + // + //L3 protocols + //reference http://www.iana.org/assignments/ieee-802-numbers/ieee-802-numbers.xhtml + // + + databaseInterface->getFlowData(experimentName, fcounter, "eth__type", + &flowIntData); + if (flowIntData == IPV4_CODE) + { //IPv4 + netFlow->setNetworkProtocol(PROTOCOL__IPV4); + databaseInterface->getFlowData(experimentName, fcounter, "ip__src", + &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, "ip__dst", + &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + else if (flowIntData == (ARP_CODE || ARP_CODE_REV)) + { //ARP, Frame Relay ARP + netFlow->setNetworkProtocol(PROTOCOL__ARP); + databaseInterface->getFlowData(experimentName, fcounter, "ip__src", + &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, "ip__dst", + &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + else if (flowIntData == IPV6_CODE) + { //IPv6 + netFlow->setNetworkProtocol(PROTOCOL__ICMPV6); + databaseInterface->getFlowData(experimentName, fcounter, + "ipv6__addr", &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, + "ipv6__dst", &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + else + { //default IPv4 + netFlow->setNetworkProtocol(PROTOCOL__IPV4); + databaseInterface->getFlowData(experimentName, fcounter, "ip__src", + &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, "ip__dst", + &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + + //set ttl as the most frequent + databaseInterface->getFlowData(experimentName, fcounter, "ip__ttl", + ttlList); + //ttl = (int) mode(ttlList); + ttl = (int) mode(&ttlList); + netFlow->setNetworkTtl(ttl); + + // + //L4 Protocols + //reference https://en.wikipedia.org/wiki/List_of_IP_protocol_numbers + // + databaseInterface->getFlowData(experimentName, fcounter, "ip__proto", + &flowIntData); + if (flowIntData == ICMP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__ICMP); + } + else if (flowIntData == TCP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__TCP); + databaseInterface->getFlowData(experimentName, fcounter, + "tcp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "tcp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else if (flowIntData == UDP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__UDP); + databaseInterface->getFlowData(experimentName, fcounter, + "udp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "udp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else if (flowIntData == DCCP_CODE) + { + netFlow->setTransportDstPort(PROTOCOL__DCCP); + databaseInterface->getFlowData(experimentName, fcounter, + "dccp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "dccp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else if (flowIntData == GRE_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__GRE); + //TODO não suportado pelo D-ITG + } + else if (flowIntData == ICMPV6_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__ICMPV6); + } + else if (flowIntData == SCTP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__SCTP); + databaseInterface->getFlowData(experimentName, fcounter, + "sctp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "sctp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else + { //default: UDP + netFlow->setTransportProtocol(PROTOCOL__NULL); + //databaseInterface->getFlowData(experimentName, fcounter, "udp__dstport", &flowIntData); + //netFlow->setL4SrcPort(flowIntData); + //databaseInterface->getFlowData(experimentName, fcounter, "udp__srcport", &flowIntData); + //netFlow->setL4DstPort(flowIntData); + } + + //###################################################################### + //Packet Size Model + //###################################################################### + + // + // Constant model: Just set the packet size as the most frequent value + // + //ps_mostFrequent = mode(pslist); + //ps_mostFrequent = mode(&pslist); + //mean_packetRate = ((double) pslist.size() / flowDuration); + //netFlow->setPsConstant(ps_mostFrequent); + //netFlow->setIdtConstant(mean_packetRate); + + // + // Algorithm to choose the priority order of the models + // 1st version: just the constant model + // + //TODO implement a best algorithm + //netFlow->setPsModel1(MODEL__CONSTANT); + + //###################################################################### + //Inter-arrival-time Model + //###################################################################### + + for (list::iterator it = interArrival_list.begin(); + it != interArrival_list.end(); it++) + { + if (*it < FILE_CUT_TIME) + { + interArrival_fileStack.push_back(*it); + } + else if (*it < SESSION_CUT_TIME) + { + interArrival_interFileStack.push_back(*it); + } + else + { + interArrival_interSessionStack.push_back(*it); + } + } + +#ifdef DEBUG_DataProcessor_interArrival + if (fcounter == 0) + { + string file1 = "fileStack"; + string file2 = "interFileStack"; + string file3 = "interSessionStack"; + save_data_on_file(file1, interArrival_fileStack); + save_data_on_file(file2, interArrival_interFileStack); + save_data_on_file(file3, interArrival_interSessionStack); + } +#endif + + netFlow->setInterDepertureTimeModels( + fitModels(interArrival_list, "aic")); + + //TODO set the right model + + //netFlow->setIdtModel1(MODEL__CONSTANT); + + //TODO + + //TODO + + //###################################################################### + //Push-back the flow to Trace Flow-list + //###################################################################### + + netTrace->pushback_Netflow(netFlow); + +#ifdef DEBUG_DataProcessor_calculate_loop + cout << fcounter << ": ps_mostFrequent=" << ps_mostFrequent << endl; + cout << fcounter << ": startDalay=" << startDalay << endl; + cout << fcounter << ": mean_packetRate=" << mean_packetRate << endl; + cout << fcounter << ": idt_constant=" << netFlow->getIdtConstant() << endl; +#endif //DEBUG_DataProcessor_calculate_loop +#ifdef DEBUG_DataProcessor_calculate_loop + cout << fcounter << ": netFlow->getTransportProtocol() = " << netFlow->getTransportProtocol() << endl; + cout << fcounter << ": netFlow->getNetworkProtocol() = " << netFlow->getNetworkProtocol() << endl; + cout << fcounter << ": netFlow->getTransportDstPort() = " << netFlow->getTransportDstPort() << endl; + cout << fcounter << ": netFlow->getFlowDsByte() = " << netFlow->getFlowDsByte() << endl; + cout << fcounter << ": netFlow->getNetworkDstAddr() = " << netFlow->getNetworkDstAddr() << endl << endl; + +#endif //DEBUG_DataProcessor_calculate_loop + + } + +#ifdef DEBUG_DataProcessor_calculate + cout << "netTrace->networkFlow.size() = " << netTrace->networkFlow.size() << endl; + cout << "netTrace->getNumberOfFlows() = " << netTrace->getNumberOfFlows() << endl; +#endif //DEBUG_DataProcessor_calculate + + return (0); +} + +StochasticModelFit* DataProcessor::fitModels(list& empiricalData, + const string& criterion) +{ + //constants + const int numberOfModels = 8; + const int m = empiricalData.size(); //empirical data-size + //vars + int counter = 0; + StochasticModelFit* modelVet = NULL; + vec paramVec = zeros(2); + vec infoCriterion = zeros(2); + + if (m == 1) + { + modelVet = new StochasticModelFit[1]; + + //Constant + modelVet[0].aic = datum::inf; + modelVet[0].bic = datum::inf; + modelVet[0].modelName = CONSTANT; + modelVet[0].param1 = empiricalData.push_back(); + modelVet[0].param2 = 0; + modelVet[0].size = 1; + + } + else + { + + modelVet = new StochasticModelFit[numberOfModels]; + + //Inter-arrival vec + vec interArrival = zeros(m); + counter = 0; + for (list::iterator it = empiricalData.begin(); + it != empiricalData.end(); it++) + { + interArrival(counter) = *it + min_time; + counter++; + } + //Empirical CDF of interArrival + vec* interArrivalCdf = empiricalCdf(empiricalData); + + //Weibull + weibullFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[0].aic = infoCriterion(0); + modelVet[0].bic = infoCriterion(1); + modelVet[0].modelName = WEIBULL; + modelVet[0].param1 = paramVec(0); + modelVet[0].param2 = paramVec(1); + modelVet[0].size = numberOfModels; + + //normal + normalFitting(interArrival, paramVec, infoCriterion); + modelVet[1].aic = infoCriterion(0); + modelVet[1].bic = infoCriterion(1); + modelVet[1].modelName = NORMAL; + modelVet[1].param1 = paramVec(0); + modelVet[1].param2 = paramVec(1); + modelVet[1].size = numberOfModels; + + //exponential mean + exponentialMeFitting(interArrival, paramVec, infoCriterion); + modelVet[2].aic = infoCriterion(0); + modelVet[2].bic = infoCriterion(1); + modelVet[2].modelName = EXPONENTIAL_MEAN; + modelVet[2].param1 = paramVec(0); + modelVet[2].param2 = paramVec(1); + modelVet[2].size = numberOfModels; + + //exponential Linear Regression (LR) + exponentialLrFitting(interArrival, *interArrivalCdf, paramVec, + infoCriterion); + modelVet[3].aic = infoCriterion(0); + modelVet[3].bic = infoCriterion(1); + modelVet[3].modelName = EXPONENTIAL_LINEAR_REGRESSION; + modelVet[3].param1 = paramVec(0); + modelVet[3].param2 = paramVec(1); + modelVet[3].size = numberOfModels; + + //pareto linear regression + paretoLrFitting(interArrival, *interArrivalCdf, paramVec, + infoCriterion); + modelVet[4].aic = infoCriterion(0); + modelVet[4].bic = infoCriterion(1); + modelVet[4].modelName = PARETO_LINEAR_REGRESSION; + modelVet[4].param1 = paramVec(0); + modelVet[4].param2 = paramVec(1); + modelVet[4].size = numberOfModels; + + //pareto maximum likehood + paretoMlhFitting(interArrival, *interArrivalCdf, paramVec, + infoCriterion); + modelVet[5].aic = infoCriterion(0); + modelVet[5].bic = infoCriterion(1); + modelVet[5].modelName = PARETO_MAXIMUM_LIKEHOOD; + modelVet[5].param1 = paramVec(0); + modelVet[5].param2 = paramVec(1); + modelVet[5].size = numberOfModels; + + //Cauchy + cauchyFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[6].aic = infoCriterion(0); + modelVet[6].bic = infoCriterion(1); + modelVet[6].modelName = CAUCHY; + modelVet[6].param1 = paramVec(0); + modelVet[6].param2 = paramVec(1); + modelVet[6].size = numberOfModels; + + //Constant + constantFitting(interArrival, paramVec, infoCriterion); + modelVet[7].aic = infoCriterion(0); + modelVet[7].bic = infoCriterion(1); + modelVet[7].modelName = CONSTANT; + modelVet[7].param1 = paramVec(0); + modelVet[7].param2 = paramVec(1); + modelVet[7].size = numberOfModels; + + if (criterion == "bic") + { + qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), + compareBic); + } + else if (criterion == "aic") + { + qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), + compareAic); + } + else + { + cout + << "Error @ DataProcessor::fitModels -> Invalid criterion argument: " + << criterion << endl; + cout << "AIC set as default" << endl; + qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), + compareAic); + + } + +#ifdef DEBUG_StochasticModelFit + //if (modelVet[0].modelName == WEIBULL) + //{ + // cout << modelVet[0].modelName << "aic:bic->" << modelVet[0].aic << ":" << modelVet[0].bic + // << " " << "alpha:betha->" << modelVet[0].param1 + // << modelVet[0].param2 << endl; + // string fileName = "weibulldata_" + std::to_string(abs(modelVet[0].aic)); + // save_data_on_file(fileName, interArrival, *interArrivalCdf); + //} +#endif //DEBUG_StochasticModelFit + + delete interArrivalCdf; + } + + return (modelVet); +} + +inline void DataProcessor::weibullFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //init + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + //linearization + vec y = log(-log(1.0 + diferential - interArrivalCdf)); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double weibull_alpha = theta(1); + double weibull_betha = exp(-theta(0) / theta(1)); + paramVec(0) = weibull_alpha; + paramVec(1) = weibull_betha; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "weibull", paramVec, "aic"); + double bic = informationCriterion(interArrival, "weibull", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; + +} + +inline void DataProcessor::normalFitting(const vec& interArrival, vec& paramVec, + vec& infoCriterion) +{ + double sigma = stddev(interArrival); + double mu = mean(interArrival); + paramVec(0) = mu; + paramVec(1) = sigma; + + //information criterion + double aic = informationCriterion(interArrival, "normal", paramVec, "aic"); + double bic = informationCriterion(interArrival, "normal", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::exponentialLrFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //init + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + //linearization + vec y = log(1.00 + diferential - interArrivalCdf); + //vec y = log(1.00 - interArrivalCdf); + vec x = interArrival; + mat* X = featureMatrix(x); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double exp_lambda = -theta(1); + paramVec(0) = exp_lambda; + paramVec(1) = 0; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "exponential", paramVec, + "aic"); + double bic = informationCriterion(interArrival, "exponential", paramVec, + "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::exponentialMeFitting(const vec& interArrival, + vec& paramVec, vec& infoCriterion) +{ + paramVec(0) = 1.0 / mean(interArrival); + paramVec(1) = 0; + + //information criterion + double aic = informationCriterion(interArrival, "exponential", paramVec, + "aic"); + double bic = informationCriterion(interArrival, "exponential", paramVec, + "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::paretoLrFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //init + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + //linearization + vec y = log(1.00 + diferential - interArrivalCdf); + //vec y = log(1.00 - interArrivalCdf); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double pareto_alpha = -theta(1); + double pareto_xm = interArrival.min(); + paramVec(0) = pareto_alpha; + paramVec(1) = pareto_xm; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "pareto", paramVec, "aic"); + double bic = informationCriterion(interArrival, "pareto", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::paretoMlhFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + double pareto_xm = interArrival.min(); + int m = interArrival.size(); + //vec logDiff = log(interArrival) - log(ones(m) * pareto_xm); + vec logDiff = log(interArrival) - log(pareto_xm); + double pareto_alpha = double(m) / (sum(logDiff)); + paramVec(0) = pareto_alpha; + paramVec(1) = pareto_xm; + + //information criterion + double aic = informationCriterion(interArrival, "pareto", paramVec, "aic"); + double bic = informationCriterion(interArrival, "pareto", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::cauchyFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //initialization + int iterations = 1500; + double learning_rate = 0.01; + int m = interArrival.size(); + double minInterArrival = interArrival.min(); + double y_max = 1.0 / minInterArrival; + vec y = tan(datum::pi * (interArrivalCdf - 0.5)); + for (int i = 0; i < m; i++) + { + //avoid too high numbers when tan() tends to infinity + if (y(i) > y_max) + y(i) = y_max; + } + + //linearization + vec J_history = zeros(iterations); + vec theta = zeros(2); + mat* X = featureMatrix(interArrival); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double cauchy_gamma = double(1.0) / theta(1); + double cauchy_x0 = -theta(0) / theta(1); + paramVec(0) = cauchy_gamma; + paramVec(1) = cauchy_x0; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "cauchy", paramVec, "aic"); + double bic = informationCriterion(interArrival, "cauchy", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; + +} + +void DataProcessor::constantFitting(const vec& interArrival, vec& paramVec, + vec& informationCriterion) +{ + paramVec(0) = mean(interArrival); + paramVec(1) = 0; + informationCriterion(0) = datum::inf; + informationCriterion(1) = datum::inf; +} + +template bool DataProcessor::isEqual(const T* vet1, const T* vet2, + const int size) +{ + for (int i = 0; i < size; i++) + { + if (vet1[i] != vet2[i]) + { + return (false); + } + } + + return (true); +} + +template void DataProcessor::vectorC_to_list(list* theList, + T* vet, int size) +{ + for (int i = 0; i < size; i++) + { + theList->push_back(vet[i]); + } +} + +template +void DataProcessor::quickSort(T* vet, int left, int right) +{ + int p = left; + int i = 0; + T ch = 0; + int j = 0; + + for (i = left + 1; i <= right; i++) + { + j = i; + if (vet[j] < vet[p]) + { + ch = vet[j]; + while (j > p) + { + vet[j] = vet[j - 1]; + j--; + } + vet[j] = ch; + p++; + } + } + if (p - 1 >= left) + quickSort(vet, left, p - 1); + if (p + 1 <= right) + quickSort(vet, p + 1, right); +} + +template +T DataProcessor::mode(list* theList) +{ + T* vet; + int listSize = theList->size(); + int i = 0; + T candidate = 0; + T prev = 0; + int counter = 0; + int largerCounter = 0; + T mode = 0; + vet = new T[listSize]; + + if (listSize == 0) + { + return (0); + } + + i = 0; + + for (typename list::iterator it = theList->begin(); it != theList->end(); + it++) + { + vet[i] = *it; + i++; + } + + quickSort(vet, 0, listSize - 1); + + prev = vet[0]; + largerCounter = 0; + for (i = 0; i < listSize; i++) + { + candidate = vet[i]; + if (candidate == prev) + { + counter++; + if (counter > largerCounter) + { + largerCounter = counter; + mode = vet[i]; + } + } + else + counter = 1; + + prev = vet[i]; + } + + delete[] vet; + + return (mode); +} + +template +inline T* DataProcessor::list_to_cvector(list* theList) +{ + int listSize = theList->size(); + T* vet; + int i = 0; + + vet = new T[listSize]; + if (listSize == 0) + { + return (0); + } + + i = 0; + for (typename list::iterator it = theList->begin(); it != theList->end(); + it++) + { + vet[i] = *it; + i++; + } + + return (vet); +} +template +inline void DataProcessor::delete_cvector(T* c_vet) +{ + delete[] c_vet; +} + +inline vec* DataProcessor::empiricalCdf(list& empiricalData) +{ + double* cvet_empiricalData = list_to_cvector(&empiricalData); + int data_size = empiricalData.size(); + quickSort(cvet_empiricalData, 0, data_size - 1); + double x = cvet_empiricalData[0]; // anchor - fist element; + int i1 = 0; // fist index + int i2 = 0; + double prob = 0; + vec* interArrivalCdf = new vec(zeros(data_size)); + + for (int i = 0; i < data_size; i++) + { + if (cvet_empiricalData[i] > x) + { + i2 = i - 1; + prob = double(i) / data_size; + for (int j = i1; j <= i2; j++) + { + (*interArrivalCdf)(j) = prob; + } + i1 = i; + x = cvet_empiricalData[i]; + } + } + //last position == 1 + (*interArrivalCdf)(data_size - 1) = 1; + + delete_cvector(cvet_empiricalData); + return (interArrivalCdf); +} + +inline mat* DataProcessor::featureMatrix(list& empiricalData) +{ + int data_size = empiricalData.size(); + mat* featureMatrix = new mat(ones(data_size, 2)); + + int i = 0; + for (list::iterator it = empiricalData.begin(); + it != empiricalData.end(); it++) + { + (*featureMatrix)(i, 1) = *it; + i++; + } + + return (featureMatrix); + +} + +inline mat* DataProcessor::featureMatrix(const vec& empiricalData) +{ + int data_size = empiricalData.size(); + mat* featureMatrix = new mat(ones(data_size, 2)); + for (int i = 0; i < data_size; i++) + { + (*featureMatrix)(i, 1) = empiricalData(i); + } + + return (featureMatrix); +} + +inline double DataProcessor::computeCost(const mat& X, const vec& y, + const vec& theta) +{ + double J = .0; + double jtemp = .0; + int m = y.size(); + + for (int i = 0; i < m; i++) + { + jtemp = jtemp + pow(double(theta(0) + theta(1) * X(i, 1) - y(i)), 2); + + } + J = (1.0 / double(2 * m)) * jtemp; + + return (J); +} + +inline void DataProcessor::gradientDescendent(const mat& X, const vec& y, + const double learning_rate, const int num_iters, vec& theta, + vec& J_history) +{ + + int m = y.n_rows; //number of training examples + double temp1 = .0; + double temp2 = .0; + double delta1 = .0; + double delta2 = .0; + vec x = X.col(1); + + for (int i = 0; i < num_iters; i++) + { + temp1 = .0; + temp2 = .0; + delta1 = .0; + delta2 = .0; + + //slope + delta1 = sum(theta(0) + theta(1) * x - y) / double(m); + delta2 = sum((theta(0) + theta(1) * x - y) % x) / double(m); + + //linear regression + temp1 = theta(0) - learning_rate * delta1; + temp2 = theta(1) - learning_rate * delta2; + + theta(0) = temp1; + theta(1) = temp2; + + //Save the cost J in every iteration + J_history(i) = computeCost(X, y, theta); + + } + +} + +inline double DataProcessor::informationCriterion(const vec& data, + const string& functionName, const vec& paramVet, + const string& criterion) +{ + double criterionVal = .0; + double nEstimatedParameters = double(paramVet.size()); + double likehoodLogVal = logLikehood(data, functionName, paramVet); + double logDataLen = log(double(data.size())); + + if (criterion == "aic") + { + criterionVal = 2 * nEstimatedParameters - 2 * likehoodLogVal; + } + else if (criterion == "bic") + { + criterionVal = nEstimatedParameters * logDataLen - 2 * likehoodLogVal; + } + else + { + cout << "\nInvalid functionName or no functionName selected: " + << functionName << endl; + printf("Selecting default criterion: AIC\n"); + criterionVal = 2 * nEstimatedParameters - 2 * likehoodLogVal; + } + + return (criterionVal); + +} + +inline double DataProcessor::logLikehood(const vec& data, + const string& functionName, const vec& paramVet) +{ + double param1 = paramVet(0); + double param2 = paramVet(1); + double m = data.size(); + double L = .0; + int i = 0; + vec data_prob = zeros(size(data)); + + if (functionName == "weibull") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_weibull(data(i), param1, param2); + } + else if (functionName == "normal") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_normal(data(i), param1, param2); + } + else if (functionName == "uniform") + { + data_prob = ones(size(data)) * pdf_uniform(param1, param2); + } + else if (functionName == "exponential") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_exponential(data(i), param1); + } + else if (functionName == "pareto") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_pareto(data(i), param1, param2); + } + else if (functionName == "cauchy") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_cauchy(data(i), param1, param2); + } + else + { + cout << "Warning, no valid stochastic function selected: " + << functionName << endl; + printf("Likehood logarithm seted to -Inf (worst as possible)\n"); + return (datum::inf); + } + + L = sum(log(data_prob)); + return (L); + +} + +inline double DataProcessor::pdf_weibull(double x, double alpha, double betha) +{ + if (x >= 0) + return ((alpha / pow(betha, alpha)) * pow(x, alpha - 1.0) + * exp(-(pow(x / betha, alpha)))); + else + return (.0); +} + +inline double DataProcessor::cdf_weibull(double x, double alpha, double betha) +{ + if (x >= 0) + return (1.0 - exp(-pow(x / betha, alpha))); + else + return (.0); +} + +inline double DataProcessor::pdf_exponential(double x, double lambda) +{ + if (x >= 0) + return (lambda * exp(-lambda * x)); + else + return (.0); + +} + +inline double DataProcessor::cdf_exponential(double x, double lambda) +{ + if (x >= 0) + return (1.0 - exp(-lambda * x)); + else + return (.0); +} + +inline double DataProcessor::pdf_pareto(double x, double alpha, double xm) +{ + if (x >= xm) + return (alpha * pow(xm, alpha) / (pow(x, alpha + 1.0))); + else + return (.0); +} + +inline double DataProcessor::cdf_pareto(double x, double alpha, double xm) +{ + if (x >= xm) + return (1.0 - pow(xm / x, alpha)); + else + return (.0); +} + +inline double DataProcessor::pdf_cauchy(double x, double gamma, double x0) +{ + return (1 / (datum::pi * gamma) + * (pow(gamma, 2) / (pow(x - x0, 2) + pow(gamma, 2)))); +} + +inline double DataProcessor::cdf_cauchy(double x, double gamma, double x0) +{ + return ((1 / datum::pi) * atan((x - x0) / (gamma)) + 0.5); +} + +inline double DataProcessor::pdf_normal(double x, double mu, double sigma) +{ + return (1 / (sqrt(2 * datum::pi) * sigma) + * exp(-0.5 * pow((x - mu) / sigma, 2))); +} + +inline double DataProcessor::cdf_normal(double x, double mu, double sigma) +{ + return (0.5 * (1 + erf((x - mu) / (sigma * sqrt(2))))); +} + +inline double DataProcessor::pdf_uniform(double x_min, double x_max) +{ + return (1.0 / (x_max - x_min)); +} + +inline double DataProcessor::cdf_uniform(double x, double x_min, double x_max) +{ + if (x < x_min) + return (0); + else if (x > x_max) + return (1); + else + return ((x - x_min) / (x_max - x_min)); +} + +#ifdef TEST_FUNCTIONS + +void DataProcessor::printTestResult(string testName, bool result) +{ + string outRes; + if (result == true) + outRes = "ok"; + else + outRes = "failed"; + + cout << testName << ":\t\t" << outRes << endl; +} + +bool DataProcessor::compareDouble(double val1, double val2) +{ + double error = 0; + + error = fabs(double(val1) - double(val2)); + if (error > double(1e-5)) + return (false); + else + return (true); + +} + +bool DataProcessor::compareDouble(double val1, double val2, double acErr) +{ + double error = 0; + + error = fabs(double(val1) - double(val2)); + if (error > double(acErr)) + return (false); + else + return (true); + +} + +bool DataProcessor::compareMat(mat& mat1, mat& mat2) +{ + int mat1_nc = mat1.n_cols; + int mat1_nr = mat1.n_rows; + int mat2_nc = mat2.n_cols; + int mat2_nr = mat2.n_rows; + + if ((mat1_nc != mat2_nc) || (mat1_nr != mat2_nr)) + { + cout << "mat1.n_cols and mat2.n_cols dont match. " << mat1_nc << ":" + << mat2_nc << " " << mat1_nr << ":" << mat2_nr << endl; + return (false); + } + for (int i = 0; i < mat1_nr; i++) + { + for (int j = 0; j < mat1_nc; j++) + { + if (compareDouble(mat1(i, j), mat2(i, j), 1e-5)) + { + //cout << " mat1(" << i << ", " << j << " ) = " << mat1(i,j); + //cout << " mat2(" << i << ", " << j << " ) = " << mat2(i,j); + return (false); + } + } + } + + return (true); +} + +void DataProcessor::save_data_on_file(const string& fileName, const mat& vet1, + const mat& vet2) +{ + string file_out = fileName + ".txt"; + int m = vet1.size(); + + ofstream writeOnFile(file_out, ios::out); + if (!writeOnFile) + { + cerr << "file could not be oppeded" << endl; + exit(1); + } + + for (int i = 0; i < m; i++) + { + writeOnFile << vet1(i) << " " << vet2(i) << endl; + } + +} + +void DataProcessor::save_data_on_file(const string& fileName, + list& theList) +{ + string file_out = fileName + ".txt"; + //int m = theList.size(); + + ofstream writeOnFile(file_out, ios::out); + if (!writeOnFile) + { + cerr << "file could not be oppeded" << endl; + exit(1); + } + + for (list::iterator it = theList.begin(); it != theList.end(); it++) + { + //list::iterator it = randInt_list1.begin(); + writeOnFile << *it << " \n"; + } +} + +bool DataProcessor::test_Mode() +{ + + int randint1[] = + { 1, 8, 1, 13, 9, 2, 1, 15, 4, 3, 10, 4, 13, 2, 14, 7, 7 }; + int randint1_mode = 1; + list l_randint1; + vectorC_to_list(&l_randint1, randint1, 17); + + int randint2[] = + { 5, 3, 6, 8, 14, 9, 11, 9, 11, 15, 8, 7, 12, 13, 14 }; + int randint2_mode = 8; + list l_randint2; + vectorC_to_list(&l_randint2, randint2, 15); + + int randint3[] = + { 9, 10, 6, 3, 13, 13, 14, 7, 7, 1, 5, 1, 8, 5, 9, 2, 3, 4, 5, 6, 6, 6 }; + int randint3_mode = 6; + list l_randint3; + vectorC_to_list(&l_randint3, randint3, 22); + + int randint4[] = + { 2, 1 }; + int randint4_mode = 1; + list l_randint4; + vectorC_to_list(&l_randint4, randint4, 2); + + int randint5[] = + { 1, 1, 1, 1, 1, 2, 2, 2, 2, 2 }; + int randint5_mode = 1; + list l_randint5; + vectorC_to_list(&l_randint5, randint5, 10); + + if (mode(&l_randint1) != randint1_mode) + return (false); + if (mode(&l_randint2) != randint2_mode) + return (false); + if (mode(&l_randint3) != randint3_mode) + return (false); + if (mode(&l_randint4) != randint4_mode) + return (false); + if (mode(&l_randint5) != randint5_mode) + return (false); + + return (true); +} + +bool DataProcessor::test_QuickSort() +{ + int randIntA[] = + { 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; + int randIntA_size = 18; + int randIntA_sorted[] = + { 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9 }; + int randIntB[] = + { 9, 2, 3, 3, 12, 15, 8, 14, 2, 7, 4, 6, 10, 2, 12 }; + int randIntB_size = 15; + int randIntB_sorted[] = + { 2, 2, 2, 3, 3, 4, 6, 7, 8, 9, 10, 12, 12, 14, 15 }; + double randDoubleA[] = + { 0.20872, 12.25501, 5.88210, 2.77962, 8.74916, 2.97454, 4.39641, 12.19733, + 4.66014, 4.52477, 5.19375, 12.11314, 13.35458, 11.56941, 6.59435 }; + int randDoubleA_size = 15; + double randDoubleA_sorted[] = + { 0.20872, 2.77962, 2.97454, 4.39641, 4.52477, 4.66014, 5.19375, 5.88210, + 6.59435, 8.74916, 11.56941, 12.11314, 12.19733, 12.25501, 13.35458 }; + + quickSort(randIntA, 0, randIntA_size - 1); + + if (isEqual(randIntA, randIntA_sorted, randIntA_size) == false) + { + return (false); + } + + quickSort(randIntB, 0, randIntB_size - 1); + if (isEqual(randIntB, randIntB_sorted, randIntB_size) == false) + { + return (false); + } + + quickSort(randDoubleA, 0, randDoubleA_size - 1); + if (isEqual(randDoubleA, randDoubleA_sorted, randDoubleA_size) == false) + { + return (false); + } + + return (true); + +} + +bool DataProcessor::test_list_tocvector() +{ + list randInt_list1 = + { 9, 2, 3, 3, 12, 15, 8, 14, 2, 7, 4, 6, 10, 2, 12 }; + list randInt_list2 = + { 2.2, 2.111, 3.16, 6.66, 13, 2.61 }; + list randInt_list3 = + { 1, 2, 3, 4, 5, 6, 6, 5, 4, 3, 2, 1 }; + + int* cvet1 = NULL; + double* cvet2 = NULL; + int* cvet3 = NULL; + + cvet1 = list_to_cvector(&randInt_list1); + cvet2 = list_to_cvector(&randInt_list2); + cvet3 = list_to_cvector(&randInt_list3); + + int i = 0; + for (list::iterator it = randInt_list1.begin(); + it != randInt_list1.end(); it++) + { + if (cvet1[i] != *it) + { + return (false); + } + //cout << *it << " "; + i++; + } + i = 0; + for (list::iterator it = randInt_list2.begin(); + it != randInt_list2.end(); it++) + { + if (cvet2[i] != *it) + { + return (false); + } + //cout << *it << " "; + i++; + } + i = 0; + for (list::iterator it = randInt_list3.begin(); + it != randInt_list3.end(); it++) + { + if (cvet3[i] != *it) + { + return (false); + } + //cout << *it << " "; + i++; + } + + delete_cvector(cvet1); + delete_cvector(cvet2); + delete_cvector(cvet3); + + return (true); +} + +bool DataProcessor::test_empiricalCdf() +{ + list interArrival_sample = + { 5.0000e-07, 1.5000e-06, 1.5000e-06, 2.5000e-06, 2.5000e-06, 3.5000e-06, + 4.5000e-06, 7.5000e-06, 1.2500e-05, 1.9500e-05, 3.1500e-05, + 4.3500e-05, 6.0500e-05, 7.6500e-05, 1.1050e-04, 1.4050e-04, + 1.8150e-04, 2.1150e-04, 2.3350e-04, 2.4350e-04, 2.5650e-04, + 3.0350e-04, 4.1250e-04, 1.3655e-03, 1.1593e-02, 3.2483e-02, + 8.1235e-02, 2.0939e-01, 5.0755e-01, 1.7351e+00 }; + vec emCdf_octave = + { 0.033333, 0.100000, 0.100000, 0.166667, 0.166667, 0.200000, 0.233333, + 0.266667, 0.300000, 0.333333, 0.366667, 0.400000, 0.433333, + 0.466667, 0.500000, 0.533333, 0.566667, 0.600000, 0.633333, + 0.666667, 0.700000, 0.733333, 0.766667, 0.800000, 0.833333, + 0.866667, 0.900000, 0.933333, 0.966667, 1.000000 }; + //emCdf_octave = emCdf_octave.t(); + + vec* emCdf_cpp = empiricalCdf(interArrival_sample); + + int list_size = interArrival_sample.size(); + for (int i = 0; i < list_size; i++) + { + if (!compareDouble(emCdf_octave(i), (*emCdf_cpp)(i), 1e-6)) + { + cout << "cdf error @ " << "i:" << i << " res:" << (*emCdf_cpp)(i, 0) + << " expected:" << emCdf_octave(i, 0) << endl; + return (false); + } + } + + delete emCdf_cpp; + return (true); +} + +bool DataProcessor::test_computeCost() +{ + list interArrival_sample = + { 5.0000e-07, 1.5000e-06, 1.5000e-06, 2.5000e-06, 2.5000e-06, 3.5000e-06, + 4.5000e-06, 7.5000e-06, 1.2500e-05, 1.9500e-05, 3.1500e-05, + 4.3500e-05, 6.0500e-05, 7.6500e-05, 1.1050e-04, 1.4050e-04, + 1.8150e-04, 2.1150e-04, 2.3350e-04, 2.4350e-04, 2.5650e-04, + 3.0350e-04, 4.1250e-04, 1.3655e-03, 1.1593e-02, 3.2483e-02, + 8.1235e-02, 2.0939e-01, 5.0755e-01, 1.7351e+00 }; + mat* X = featureMatrix(interArrival_sample); + vec emCdf_octave = + { 0.033333, 0.100000, 0.100000, 0.166667, 0.166667, 0.200000, 0.233333, + 0.266667, 0.300000, 0.333333, 0.366667, 0.400000, 0.433333, + 0.466667, 0.500000, 0.533333, 0.566667, 0.600000, 0.633333, + 0.666667, 0.700000, 0.733333, 0.766667, 0.800000, 0.833333, + 0.866667, 0.900000, 0.933333, 0.966667, 1.000000 }; + //emCdf_octave = emCdf_octave.t(); + double J_expected1 = 0.17535; + double J_expected2 = 1.5341; + double J_expected3 = 9.0244; + + vec theta = zeros(2); + + double J = computeCost(*X, emCdf_octave, theta); + if (!compareDouble(J, J_expected1, 0.001)) + { + //cout << "J1 = " << J << "\nJ_expected1 = "<< J_expected1 << endl; + return (false); + } + theta(0) = 2; + theta(1) = 2; + J = computeCost(*X, emCdf_octave, theta); + if (!compareDouble(J, J_expected2, 0.001)) + { + //cout << "J2 = " << J << "\nJ_expected2 = "<< J_expected2 << endl; + return (false); + } + theta(0) = 1.5; + theta(1) = 12; + J = computeCost(*X, emCdf_octave, theta); + if (!compareDouble(J, J_expected3, 0.001)) + { + //cout << "J3 = " << J << "\nJ_expected3 = "<< J_expected3 << endl; + return (false); + } + + delete X; + return (true); +} + +bool DataProcessor::test_informationCriterion() +{ + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + + int m = interArrival.size(); + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + //gradient descendent + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + vec y = log(-log(1.0 + diferential - *interArrivalCdf)); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + double weibull_alpha = theta(1); + double weibull_betha = exp(-theta(0) / theta(1)); + vec paramVec = + { weibull_alpha, weibull_betha }; + double weibull_bic = informationCriterion(interArrival, "weibull", paramVec, + "bic"); + double weibull_aic = informationCriterion(interArrival, "weibull", paramVec, + "aic"); + + if (!compareDouble(weibull_bic, -33712.7042, 0.001)) + return (false); + else if (!compareDouble(weibull_aic, -33724.6567, 0.001)) + return (false); + + return (true); +} + +bool DataProcessor::test_pdf_weibull() +{ + double alpha = 1.5000; + double betha = 0.3; + vec data = + { 0.010000, 2.300000, 0.500000 }; + vec dataprob_eval1 = + { 9.0733e-01, 8.3571e-09, 7.5066e-01 }; + vec dataprob_test = zeros(3); + + dataprob_test(0) = pdf_weibull(data(0), alpha, betha); + dataprob_test(1) = pdf_weibull(data(1), alpha, betha); + dataprob_test(2) = pdf_weibull(data(2), alpha, betha); + + if (compareDouble(dataprob_test(0), dataprob_eval1(0)) + && compareDouble(dataprob_test(1), dataprob_eval1(1)) + && compareDouble(dataprob_test(2), dataprob_eval1(2))) + { + return (true); + } + + return (false); +} + +bool DataProcessor::test_cdf_weibull() +{ + double alpha = 0.5; + double betha = 1.5; + vec data = + { 0.010000, 2.300000, 0.500000 }; + vec dataprob_eval1 = + { 0.078405, 0.710117, 0.438616 }; + vec dataprob_test = zeros(3); + + dataprob_test(0) = cdf_weibull(data(0), alpha, betha); + dataprob_test(1) = cdf_weibull(data(1), alpha, betha); + dataprob_test(2) = cdf_weibull(data(2), alpha, betha); + //cout << dataprob_test(0) << " : " << dataprob_test(1) << " : " << dataprob_test(2) << endl; + + if (compareDouble(dataprob_test(0), dataprob_eval1(0)) + && compareDouble(dataprob_test(1), dataprob_eval1(1)) + && compareDouble(dataprob_test(2), dataprob_eval1(2))) + { + return (true); + } + + return (false); +} + +bool DataProcessor::test_gradientDescendent() +{ + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + + int m = interArrival.size(); + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + //gradient descendent + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + vec y = log(-log(1.0 + diferential - *interArrivalCdf)); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //expected values + double Jlast = 0.083359; + double theta0 = 1.660453; + double theta1 = 0.248811; + + if (!compareDouble(J_history(iterations - 1), Jlast)) + + { + return (false); + } + else if (!compareDouble(theta(0), theta0)) + { + return (false); + } + else if (!compareDouble(theta(1), theta1)) + { + return (false); + } + + delete interArrivalCdf; + delete X; + return (true); + +} + +bool DataProcessor::test_pdf_exponential() +{ + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double lambda1 = 0.50000; + vec val1 = + { 0.49751, 0.15832, 0.38940 }; + vec res1 = zeros(3); + + double lambda2 = 3.0; + vec val2 = + { 2.9113366, 0.0030234, 0.6693905 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = pdf_exponential(data(i), lambda1); + res2(i) = pdf_exponential(data(i), lambda2); + + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + + } + + return (true); +} + +bool DataProcessor::test_cdf_exponential() +{ + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double lambda1 = 0.50000; + vec val1 = + { 0.0049875, 0.6833632, 0.2211992 }; + vec res1 = zeros(3); + + double lambda2 = 3.0; + vec val2 = + { 0.029554, 0.998992, 0.776870 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = cdf_exponential(data(i), lambda1); + res2(i) = cdf_exponential(data(i), lambda2); + + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + + return (true); +} + +bool DataProcessor::test_pdf_pareto() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double alpha1 = 0.50000; + double xm1 = 1.0; + vec val1 = + { 0, 0.14334, 0 }; + vec res1 = zeros(3); + double xm2 = 0.00001; + double alpha2 = 3.0; + vec val2 = + { 3.0000e-07, 1.0720e-16, 4.8000e-14 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = pdf_pareto(data(i), alpha1, xm1); + res2(i) = pdf_pareto(data(i), alpha2, xm2); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + + return (true); +} + +bool DataProcessor::test_cdf_pareto() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double alpha1 = 0.50000; + double xm1 = 0.001; + vec val1 = + { 0.68377, 0.97915, 0.95528 }; + vec res1 = zeros(3); + double xm2 = 0.2; + double alpha2 = 1; + vec val2 = + { 0, 0.91304, 0.60000 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = cdf_pareto(data(i), alpha1, xm1); + res2(i) = cdf_pareto(data(i), alpha2, xm2); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + return (true); +} + +bool DataProcessor::test_pdf_cauchy() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + double gamma1 = 0.50000; + double x01 = 0.001; + + vec val1 = + { 0.636414, 0.028752, 0.318947 }; + vec res1 = zeros(3); + double x02 = 2; + double gamma2 = 2; + + vec val2 = + { 0.079976, 0.155653, 0.101859 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = pdf_cauchy(data(i), gamma1, x01); + res2(i) = pdf_cauchy(data(i), gamma2, x02); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + return (true); +} + +bool DataProcessor::test_cdf_cauchy() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + double gamma1 = 0.50000; + double x01 = 0.001; + + vec val1 = + { 0.50573, 0.93183, 0.74968 }; + vec res1 = zeros(3); + double x02 = 2; + double gamma2 = 2; + + vec val2 = + { 0.25080, 0.54739, 0.29517 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = cdf_cauchy(data(i), gamma1, x01); + res2(i) = cdf_cauchy(data(i), gamma2, x02); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + return (true); +} + +bool DataProcessor::test_fitModels() +{ + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + + int m = interArrival.size(); + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + //list of expected values + double weibull_alpha = 0.24881; + double weibull_betha = 0.0012639; + double normal_mu = 0.054792; + double normal_sigma = 0.205602; + double exponentialMe_lambda = 18.250783; + double exponentialLr_lambda = 2.023115; + double paretoLr_alpha = 0.225451; + double paretoLr_xm = 0.000000; + double paretoMlh_alpha = 0.171674; + double paretoMlh_xm = 0.000000; + double cauchy_gamma = 0.000067; + double cauchy_x0 = 0.005750; + double acErr = 0.001; + + vec paramVec = zeros(2); + vec infoCriterion = zeros(2); + + weibullFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), weibull_alpha, acErr)) + { + cout << "weibullFitting alpha" << endl; + return (false); + } + if (!compareDouble(paramVec(1), weibull_betha, acErr)) + { + cout << "weibullFitting betha" << endl; + return (false); + } + + normalFitting(interArrival, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), normal_mu, acErr)) + { + cout << "normalFitting mu" << endl; + return (false); + } + if (!compareDouble(paramVec(1), normal_sigma, acErr)) + { + cout << "normalFitting sigma" << endl; + return (false); + } + + exponentialMeFitting(interArrival, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), exponentialMe_lambda, acErr)) + { + cout << "exponentialLrFitting lambda" << endl; + return (false); + } + + exponentialLrFitting(interArrival, *interArrivalCdf, paramVec, + infoCriterion); + if (!compareDouble(paramVec(0), exponentialLr_lambda, acErr)) + { + cout << exponentialLr_lambda << ":" << paramVec(0) << endl; + cout << "exponentialLrFitting lambda" << endl; + return (false); + } + + paretoLrFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), paretoLr_alpha, acErr)) + { + cout << "paretoLrFitting alpha" << endl; + return (false); + } + if (!compareDouble(paramVec(1), paretoLr_xm, acErr)) + { + cout << "paretoLrFitting xm" << endl; + return (false); + } + + paretoMlhFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), paretoMlh_alpha, acErr)) + { + cout << "paretoMlhFitting alpha" << endl; + return (false); + } + if (!compareDouble(paramVec(1), paretoMlh_xm, acErr)) + { + cout << "paretoMlhFitting xm" << endl; + return (false); + } + + cauchyFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), cauchy_gamma, acErr)) + { + cout << "cauchyFitting" << endl; + return (false); + } + if (!compareDouble(paramVec(1), cauchy_x0, acErr)) + { + return (false); + } + + delete interArrivalCdf; + + return (true); +} + +bool DataProcessor::test_modelSelection() +{ + + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + int m = interArrival.size(); + + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + StochasticModelFit* modelVet = NULL; + modelVet = fitModels(list_interArrival, "aic"); + + //int numberOfModels = modelVet[0].size; + //for (int i = 0; i < numberOfModels; i++) + // cout << modelVet[i].modelName << " " << "modelVet[" << i << "] = " + // << modelVet[i].aic << endl; + + delete interArrivalCdf; + delete[] modelVet; + return (true); +} + +#endif //TEST_FUNCTIONS diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/e8/b05455a8c8b500161808a5c64fd2084a b/.metadata/.plugins/org.eclipse.core.resources/.history/e8/b05455a8c8b500161808a5c64fd2084a new file mode 100644 index 0000000..01427ad --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/e8/b05455a8c8b500161808a5c64fd2084a @@ -0,0 +1,92 @@ +/* + * ConstantsDeinition.h + * + * Created on: 4 de jul de 2016 + * Author: apaschoalon + */ + +#ifndef DEFINES_H_ +#define DEFINES_H_ + +/******************************************************************************* + * Defines + ******************************************************************************/ +//Math +#define MEGA_POWER 1000000 + +//Stochastic Models +#define WEIBULL "weibull" +#define NORMAL "normal" +#define EXPONENTIAL_MEAN "exponential-mean" +#define EXPONENTIAL_LINEAR_REGRESSION "exponential-linear-regression" +#define PARETO_LINEAR_REGRESSION "pareto-linear-regression" +#define PARETO_MAXIMUM_LIKEHOOD "pareto-maximum-likehood" +#define CAUCHY "cauchy" +#define CONSTANT "constant" +#define NO_MODEL "no-model-selected" + +// Debug defines +//#define DEBUG 1 // basic debug +//#define DEBUG_DataProcessor_calculate_loop 1 +//#define DEBUG_DataProcessor_calculate 1 +//#define DEBUG_NetworkFlow 1 +//#define DEBUG_flowThread 1 +//#define DEBUG_DatabaseInterface 1 +//#define DEBUG_NetworkTrace_exec 1 +#define DEBUG_DataProcessor_interArrival 1 + +//Misc +#define TEST_FUNCTIONS 1 //execute regression testes +#define HLINE "----------" +#define TAB "::" + +/******************************************************************************* + * Types + ******************************************************************************/ +typedef unsigned short int protocol; +typedef unsigned short int protocol_code; +typedef unsigned short int stochastic_model; +typedef unsigned int port_number; + +/******************************************************************************* + * Constants + ******************************************************************************/ +//packet analysis features +const double FILE_CUT_TIME = 0.1; +const double SESSION_CUT_TIME = 30; +const int PACKET_SIZE_MODE_CUT_VALUE = 500; + +//protocols +const protocol PROTOCOL__NULL = 0; +const protocol PROTOCOL__ETHERNET = 1; +const protocol PROTOCOL__IPV4 = 2; +const protocol PROTOCOL__IPV6 = 3; +const protocol PROTOCOL__ARP = 4; +const protocol PROTOCOL__ICMP = 5; +const protocol PROTOCOL__ICMPV6 = 6; +const protocol PROTOCOL__TCP = 7; +const protocol PROTOCOL__UDP = 8; +const protocol PROTOCOL__DCCP = 9; +const protocol PROTOCOL__GRE = 10; +const protocol PROTOCOL__SCTP = 11; +const protocol PROTOCOL__HTTP = 12; +const protocol PROTOCOL__HTML = 13; +const protocol PROTOCOL__SMTP = 14; + +//Protocol code +const protocol_code IPV4_CODE = 2048; +const protocol_code ARP_CODE = 2054; +const protocol_code ARP_CODE_REV = 2056; +const protocol_code IPV6_CODE = 34525; +const protocol_code ICMP_CODE = 1; +const protocol_code TCP_CODE = 6; +const protocol_code UDP_CODE = 17; +const protocol_code DCCP_CODE = 33; +const protocol_code GRE_CODE = 47; +const protocol_code ICMPV6_CODE = 58; +const protocol_code SCTP_CODE = 132; + +//Port number +const port_number MAX_TRANSPORT_PORT_NUMBER = 65535; + +#endif /* DEFINES_H_ */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/eb/903e156dacb500161808a5c64fd2084a b/.metadata/.plugins/org.eclipse.core.resources/.history/eb/903e156dacb500161808a5c64fd2084a new file mode 100644 index 0000000..f314cd4 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/eb/903e156dacb500161808a5c64fd2084a @@ -0,0 +1,1946 @@ +/* + * DataProcessor.cpp + * + * Created on: 14 de jun de 2016 + * Author: apaschoalon + */ + +#include "DataProcessor.h" + +DataProcessor::DataProcessor() +{ + //nothing to do at all +} + +DataProcessor::~DataProcessor() +{ + //nothing to do at all +} + +string DataProcessor::toString(void) +{ + string dataProcessor; + + dataProcessor = + "Used to calculate parameters of network flows; has no state."; + + return (dataProcessor); +} + +int DataProcessor::calculate(const string& experimentName, + DatabaseInterface* databaseInterface, NetworkTrace* netTrace) +{ + + //iterator variables + long int fcounter = 0; + long int nflows = 0; + databaseInterface->getNumberOfFlows(experimentName, &nflows); + +#ifdef DEBUG_DataProcessor_calculate + cout << "DataProcessor::calculate() -> Number of flows = " << nflows << endl; +#endif // DEBUG_DataProcessor_calculate + + //protocol variables + string flowStrData = ""; + long int flowIntData = 0; + double startDalay = 0; //time of the fist packet of the flow + double flowDuration = 0; //duration of the flow + list ttlList; + int ttl = 0; + + //flow-level variables + list relativeTime; //time relative to the 1st packet list + long int nKbytes = 0; //Number of kbytes (bytes/1024) of the + + //packetSize variables + list pslist; //packet-size list + long int ps_mostFrequent = 0; + double mean_packetRate = 0; + + //inter-deperture time variables + StochasticModelFit* modelVet = NULL; + list interArrival_list; // list of inter arrival times of a flow + list interArrival_fileStack; + list interArrival_interFileStack; + list interArrival_interSessionStack; + double lastTime = 0; + double idt = 0; + + for (fcounter = 0; fcounter < nflows; fcounter++) + { + + //new network flow + NetworkFlow* netFlow = NetworkFlow::make_flow("dummy"); + + //TODO checar valor retornado de databaseInterface + + //reset temp vars + flowStrData = ""; + flowIntData = 0; + relativeTime.clear(); + pslist.clear(); + interArrival_list.clear(); + interArrival_fileStack.clear(); + interArrival_interFileStack.clear(); + interArrival_interSessionStack.clear(); + + //load packet-size data + databaseInterface->getFlowData(experimentName, fcounter, "frame__len", + pslist); + + //laod time-relative data + databaseInterface->getFlowData(experimentName, fcounter, + "frame__time_relative", relativeTime); + + //evaluate inter-arrival data + //time relative to the begin of the measurement + lastTime = 0; + for (list::iterator it = relativeTime.begin(); + it != relativeTime.end(); it++) + { + idt = *it - lastTime; + interArrival_list.push_back(idt); + lastTime = *it; + } + + //###################################################################### + //Flow-level Options + //###################################################################### + startDalay = relativeTime.front(); + netFlow->setFlowStartDelay(startDalay); + + flowDuration = relativeTime.back() - relativeTime.front(); + netFlow->setFlowDuration(flowDuration); + + //TODO DS byte configuration -- now it is just set to zero + netFlow->setFlowDsByte(0); + + //flow kbytes + for (list::iterator it = pslist.begin(); it != pslist.end(); + it++) + { + nKbytes = nKbytes + *it; + } + nKbytes = nKbytes / 1024; + + netFlow->setNumberOfKbytes(nKbytes); + netFlow->setNumberOfPackets(relativeTime.size()); + + //###################################################################### + //Protocol Options + //###################################################################### + + // + //L3 protocols + //reference http://www.iana.org/assignments/ieee-802-numbers/ieee-802-numbers.xhtml + // + + databaseInterface->getFlowData(experimentName, fcounter, "eth__type", + &flowIntData); + if (flowIntData == IPV4_CODE) + { //IPv4 + netFlow->setNetworkProtocol(PROTOCOL__IPV4); + databaseInterface->getFlowData(experimentName, fcounter, "ip__src", + &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, "ip__dst", + &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + else if (flowIntData == (ARP_CODE || ARP_CODE_REV)) + { //ARP, Frame Relay ARP + netFlow->setNetworkProtocol(PROTOCOL__ARP); + databaseInterface->getFlowData(experimentName, fcounter, "ip__src", + &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, "ip__dst", + &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + else if (flowIntData == IPV6_CODE) + { //IPv6 + netFlow->setNetworkProtocol(PROTOCOL__ICMPV6); + databaseInterface->getFlowData(experimentName, fcounter, + "ipv6__addr", &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, + "ipv6__dst", &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + else + { //default IPv4 + netFlow->setNetworkProtocol(PROTOCOL__IPV4); + databaseInterface->getFlowData(experimentName, fcounter, "ip__src", + &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, "ip__dst", + &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + + //set ttl as the most frequent + databaseInterface->getFlowData(experimentName, fcounter, "ip__ttl", + ttlList); + //ttl = (int) mode(ttlList); + ttl = (int) mode(&ttlList); + netFlow->setNetworkTtl(ttl); + + // + //L4 Protocols + //reference https://en.wikipedia.org/wiki/List_of_IP_protocol_numbers + // + databaseInterface->getFlowData(experimentName, fcounter, "ip__proto", + &flowIntData); + if (flowIntData == ICMP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__ICMP); + } + else if (flowIntData == TCP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__TCP); + databaseInterface->getFlowData(experimentName, fcounter, + "tcp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "tcp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else if (flowIntData == UDP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__UDP); + databaseInterface->getFlowData(experimentName, fcounter, + "udp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "udp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else if (flowIntData == DCCP_CODE) + { + netFlow->setTransportDstPort(PROTOCOL__DCCP); + databaseInterface->getFlowData(experimentName, fcounter, + "dccp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "dccp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else if (flowIntData == GRE_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__GRE); + //TODO não suportado pelo D-ITG + } + else if (flowIntData == ICMPV6_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__ICMPV6); + } + else if (flowIntData == SCTP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__SCTP); + databaseInterface->getFlowData(experimentName, fcounter, + "sctp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "sctp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else + { //default: UDP + netFlow->setTransportProtocol(PROTOCOL__NULL); + //databaseInterface->getFlowData(experimentName, fcounter, "udp__dstport", &flowIntData); + //netFlow->setL4SrcPort(flowIntData); + //databaseInterface->getFlowData(experimentName, fcounter, "udp__srcport", &flowIntData); + //netFlow->setL4DstPort(flowIntData); + } + + //###################################################################### + //Packet Size Model + //###################################################################### + + // + // Constant model: Just set the packet size as the most frequent value + // + //ps_mostFrequent = mode(pslist); + //ps_mostFrequent = mode(&pslist); + //mean_packetRate = ((double) pslist.size() / flowDuration); + //netFlow->setPsConstant(ps_mostFrequent); + //netFlow->setIdtConstant(mean_packetRate); + + // + // Algorithm to choose the priority order of the models + // 1st version: just the constant model + // + //TODO implement a best algorithm + //netFlow->setPsModel1(MODEL__CONSTANT); + + //###################################################################### + //Inter-arrival-time Model + //###################################################################### + + for (list::iterator it = interArrival_list.begin(); + it != interArrival_list.end(); it++) + { + if(*it < FILE_CUT_TIME) + { + interArrival_fileStack.push_back(*it); + } + else if(*it < SESSION_CUT_TIME) + { + interArrival_interFileStack.push_back(*it); + } + else + { + interArrival_interSessionStack.push_back(*it); + } + } + +#ifdef DEBUG_DataProcessor_interArrival + if(fcounter == 0) + { + string file1 = "fileStack"; + string file2 = "interFileStack"; + string file3 = "interSessionStack"; + save_data_on_file(file1, interArrival_fileStack); + save_data_on_file(file2, interArrival_interFileStack); + save_data_on_file(file3, interArrival_interSessionStack); + } +#endif + + + netFlow->setInterDepertureTimeModels( + fitModels(interArrival_list, "aic")); + + //TODO set the right model + + //netFlow->setIdtModel1(MODEL__CONSTANT); + + //TODO + + //TODO + + //###################################################################### + //Push-back the flow to Trace Flow-list + //###################################################################### + + netTrace->pushback_Netflow(netFlow); + +#ifdef DEBUG_DataProcessor_calculate_loop + cout << fcounter << ": ps_mostFrequent=" << ps_mostFrequent << endl; + cout << fcounter << ": startDalay=" << startDalay << endl; + cout << fcounter << ": mean_packetRate=" << mean_packetRate << endl; + cout << fcounter << ": idt_constant=" << netFlow->getIdtConstant() << endl; +#endif //DEBUG_DataProcessor_calculate_loop +#ifdef DEBUG_DataProcessor_calculate_loop + cout << fcounter << ": netFlow->getTransportProtocol() = " << netFlow->getTransportProtocol() << endl; + cout << fcounter << ": netFlow->getNetworkProtocol() = " << netFlow->getNetworkProtocol() << endl; + cout << fcounter << ": netFlow->getTransportDstPort() = " << netFlow->getTransportDstPort() << endl; + cout << fcounter << ": netFlow->getFlowDsByte() = " << netFlow->getFlowDsByte() << endl; + cout << fcounter << ": netFlow->getNetworkDstAddr() = " << netFlow->getNetworkDstAddr() << endl << endl; + +#endif //DEBUG_DataProcessor_calculate_loop + + } + +#ifdef DEBUG_DataProcessor_calculate + cout << "netTrace->networkFlow.size() = " << netTrace->networkFlow.size() << endl; + cout << "netTrace->getNumberOfFlows() = " << netTrace->getNumberOfFlows() << endl; +#endif //DEBUG_DataProcessor_calculate + + return (0); +} + +StochasticModelFit* DataProcessor::fitModels(list& empiricalData, + const string& criterion) +{ + //constants + const int numberOfModels = 8; + const int m = empiricalData.size(); //empirical data-size + //vars + int counter = 0; + StochasticModelFit* modelVet = NULL; + vec paramVec = zeros(2); + vec infoCriterion = zeros(2); + + modelVet = new StochasticModelFit[numberOfModels]; + + //Inter-arrival vec + vec interArrival = zeros(m); + counter = 0; + for (list::iterator it = empiricalData.begin(); + it != empiricalData.end(); it++) + { + interArrival(counter) = *it + min_time; + counter++; + } + //Empirical CDF of interArrival + vec* interArrivalCdf = empiricalCdf(empiricalData); + + //Weibull + weibullFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[0].aic = infoCriterion(0); + modelVet[0].bic = infoCriterion(1); + modelVet[0].modelName = WEIBULL; + modelVet[0].param1 = paramVec(0); + modelVet[0].param2 = paramVec(1); + modelVet[0].size = numberOfModels; + + //normal + normalFitting(interArrival, paramVec, infoCriterion); + modelVet[1].aic = infoCriterion(0); + modelVet[1].bic = infoCriterion(1); + modelVet[1].modelName = NORMAL; + modelVet[1].param1 = paramVec(0); + modelVet[1].param2 = paramVec(1); + modelVet[1].size = numberOfModels; + + //exponential mean + exponentialMeFitting(interArrival, paramVec, infoCriterion); + modelVet[2].aic = infoCriterion(0); + modelVet[2].bic = infoCriterion(1); + modelVet[2].modelName = EXPONENTIAL_MEAN; + modelVet[2].param1 = paramVec(0); + modelVet[2].param2 = paramVec(1); + modelVet[2].size = numberOfModels; + + //exponential Linear Regression (LR) + exponentialLrFitting(interArrival, *interArrivalCdf, paramVec, + infoCriterion); + modelVet[3].aic = infoCriterion(0); + modelVet[3].bic = infoCriterion(1); + modelVet[3].modelName = EXPONENTIAL_LINEAR_REGRESSION; + modelVet[3].param1 = paramVec(0); + modelVet[3].param2 = paramVec(1); + modelVet[3].size = numberOfModels; + + //pareto linear regression + paretoLrFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[4].aic = infoCriterion(0); + modelVet[4].bic = infoCriterion(1); + modelVet[4].modelName = PARETO_LINEAR_REGRESSION; + modelVet[4].param1 = paramVec(0); + modelVet[4].param2 = paramVec(1); + modelVet[4].size = numberOfModels; + + //pareto maximum likehood + paretoMlhFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[5].aic = infoCriterion(0); + modelVet[5].bic = infoCriterion(1); + modelVet[5].modelName = PARETO_MAXIMUM_LIKEHOOD; + modelVet[5].param1 = paramVec(0); + modelVet[5].param2 = paramVec(1); + modelVet[5].size = numberOfModels; + + //Cauchy + cauchyFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[6].aic = infoCriterion(0); + modelVet[6].bic = infoCriterion(1); + modelVet[6].modelName = CAUCHY; + modelVet[6].param1 = paramVec(0); + modelVet[6].param2 = paramVec(1); + modelVet[6].size = numberOfModels; + + //Constant + constantFitting(interArrival, paramVec, infoCriterion); + modelVet[7].aic = infoCriterion(0); + modelVet[7].bic = infoCriterion(1); + modelVet[7].modelName = CONSTANT; + modelVet[7].param1 = paramVec(0); + modelVet[7].param2 = paramVec(1); + modelVet[7].size = numberOfModels; + + if (criterion == "bic") + { + qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), compareBic); + } + else if (criterion == "aic") + { + qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), compareAic); + } + else + { + cout + << "Error @ DataProcessor::fitModels -> Invalid criterion argument: " + << criterion << endl; + cout << "AIC set as default" << endl; + qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), compareAic); + + } + +#ifdef DEBUG_StochasticModelFit + //if (modelVet[0].modelName == WEIBULL) + //{ + // cout << modelVet[0].modelName << "aic:bic->" << modelVet[0].aic << ":" << modelVet[0].bic + // << " " << "alpha:betha->" << modelVet[0].param1 + // << modelVet[0].param2 << endl; + // string fileName = "weibulldata_" + std::to_string(abs(modelVet[0].aic)); + // save_data_on_file(fileName, interArrival, *interArrivalCdf); + //} +#endif //DEBUG_StochasticModelFit + + delete interArrivalCdf; + + return (modelVet); +} + +inline void DataProcessor::weibullFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //init + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + //linearization + vec y = log(-log(1.0 + diferential - interArrivalCdf)); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double weibull_alpha = theta(1); + double weibull_betha = exp(-theta(0) / theta(1)); + paramVec(0) = weibull_alpha; + paramVec(1) = weibull_betha; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "weibull", paramVec, "aic"); + double bic = informationCriterion(interArrival, "weibull", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; + +} + +inline void DataProcessor::normalFitting(const vec& interArrival, vec& paramVec, + vec& infoCriterion) +{ + double sigma = stddev(interArrival); + double mu = mean(interArrival); + paramVec(0) = mu; + paramVec(1) = sigma; + + //information criterion + double aic = informationCriterion(interArrival, "normal", paramVec, "aic"); + double bic = informationCriterion(interArrival, "normal", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::exponentialLrFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //init + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + //linearization + vec y = log(1.00 + diferential - interArrivalCdf); + //vec y = log(1.00 - interArrivalCdf); + vec x = interArrival; + mat* X = featureMatrix(x); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double exp_lambda = -theta(1); + paramVec(0) = exp_lambda; + paramVec(1) = 0; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "exponential", paramVec, + "aic"); + double bic = informationCriterion(interArrival, "exponential", paramVec, + "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::exponentialMeFitting(const vec& interArrival, + vec& paramVec, vec& infoCriterion) +{ + paramVec(0) = 1.0 / mean(interArrival); + paramVec(1) = 0; + + //information criterion + double aic = informationCriterion(interArrival, "exponential", paramVec, + "aic"); + double bic = informationCriterion(interArrival, "exponential", paramVec, + "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::paretoLrFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //init + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + //linearization + vec y = log(1.00 + diferential - interArrivalCdf); + //vec y = log(1.00 - interArrivalCdf); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double pareto_alpha = -theta(1); + double pareto_xm = interArrival.min(); + paramVec(0) = pareto_alpha; + paramVec(1) = pareto_xm; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "pareto", paramVec, "aic"); + double bic = informationCriterion(interArrival, "pareto", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::paretoMlhFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + double pareto_xm = interArrival.min(); + int m = interArrival.size(); + //vec logDiff = log(interArrival) - log(ones(m) * pareto_xm); + vec logDiff = log(interArrival) - log(pareto_xm); + double pareto_alpha = double(m) / (sum(logDiff)); + paramVec(0) = pareto_alpha; + paramVec(1) = pareto_xm; + + //information criterion + double aic = informationCriterion(interArrival, "pareto", paramVec, "aic"); + double bic = informationCriterion(interArrival, "pareto", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::cauchyFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //initialization + int iterations = 1500; + double learning_rate = 0.01; + int m = interArrival.size(); + double minInterArrival = interArrival.min(); + double y_max = 1.0 / minInterArrival; + vec y = tan(datum::pi * (interArrivalCdf - 0.5)); + for (int i = 0; i < m; i++) + { + //avoid too high numbers when tan() tends to infinity + if (y(i) > y_max) + y(i) = y_max; + } + + //linearization + vec J_history = zeros(iterations); + vec theta = zeros(2); + mat* X = featureMatrix(interArrival); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double cauchy_gamma = double(1.0) / theta(1); + double cauchy_x0 = -theta(0) / theta(1); + paramVec(0) = cauchy_gamma; + paramVec(1) = cauchy_x0; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "cauchy", paramVec, "aic"); + double bic = informationCriterion(interArrival, "cauchy", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; + +} + +void DataProcessor::constantFitting(const vec& interArrival, vec& paramVec, + vec& informationCriterion) +{ + paramVec(0) = mean(interArrival); + paramVec(1) = 0; + informationCriterion(0) = datum::inf; + informationCriterion(1) = datum::inf; +} + +template bool DataProcessor::isEqual(const T* vet1, const T* vet2, + const int size) +{ + for (int i = 0; i < size; i++) + { + if (vet1[i] != vet2[i]) + { + return (false); + } + } + + return (true); +} + +template void DataProcessor::vectorC_to_list(list* theList, + T* vet, int size) +{ + for (int i = 0; i < size; i++) + { + theList->push_back(vet[i]); + } +} + +template +void DataProcessor::quickSort(T* vet, int left, int right) +{ + int p = left; + int i = 0; + T ch = 0; + int j = 0; + + for (i = left + 1; i <= right; i++) + { + j = i; + if (vet[j] < vet[p]) + { + ch = vet[j]; + while (j > p) + { + vet[j] = vet[j - 1]; + j--; + } + vet[j] = ch; + p++; + } + } + if (p - 1 >= left) + quickSort(vet, left, p - 1); + if (p + 1 <= right) + quickSort(vet, p + 1, right); +} + +template +T DataProcessor::mode(list* theList) +{ + T* vet; + int listSize = theList->size(); + int i = 0; + T candidate = 0; + T prev = 0; + int counter = 0; + int largerCounter = 0; + T mode = 0; + vet = new T[listSize]; + + if (listSize == 0) + { + return (0); + } + + i = 0; + + for (typename list::iterator it = theList->begin(); it != theList->end(); + it++) + { + vet[i] = *it; + i++; + } + + quickSort(vet, 0, listSize - 1); + + prev = vet[0]; + largerCounter = 0; + for (i = 0; i < listSize; i++) + { + candidate = vet[i]; + if (candidate == prev) + { + counter++; + if (counter > largerCounter) + { + largerCounter = counter; + mode = vet[i]; + } + } + else + counter = 1; + + prev = vet[i]; + } + + delete[] vet; + + return (mode); +} + +template +inline T* DataProcessor::list_to_cvector(list* theList) +{ + int listSize = theList->size(); + T* vet; + int i = 0; + + vet = new T[listSize]; + if (listSize == 0) + { + return (0); + } + + i = 0; + for (typename list::iterator it = theList->begin(); it != theList->end(); + it++) + { + vet[i] = *it; + i++; + } + + return (vet); +} +template +inline void DataProcessor::delete_cvector(T* c_vet) +{ + delete[] c_vet; +} + +inline vec* DataProcessor::empiricalCdf(list& empiricalData) +{ + double* cvet_empiricalData = list_to_cvector(&empiricalData); + int data_size = empiricalData.size(); + quickSort(cvet_empiricalData, 0, data_size - 1); + double x = cvet_empiricalData[0]; // anchor - fist element; + int i1 = 0; // fist index + int i2 = 0; + double prob = 0; + vec* interArrivalCdf = new vec(zeros(data_size)); + + for (int i = 0; i < data_size; i++) + { + if (cvet_empiricalData[i] > x) + { + i2 = i - 1; + prob = double(i) / data_size; + for (int j = i1; j <= i2; j++) + { + (*interArrivalCdf)(j) = prob; + } + i1 = i; + x = cvet_empiricalData[i]; + } + } + //last position == 1 + (*interArrivalCdf)(data_size - 1) = 1; + + delete_cvector(cvet_empiricalData); + return (interArrivalCdf); +} + +inline mat* DataProcessor::featureMatrix(list& empiricalData) +{ + int data_size = empiricalData.size(); + mat* featureMatrix = new mat(ones(data_size, 2)); + + int i = 0; + for (list::iterator it = empiricalData.begin(); + it != empiricalData.end(); it++) + { + (*featureMatrix)(i, 1) = *it; + i++; + } + + return (featureMatrix); + +} + +inline mat* DataProcessor::featureMatrix(const vec& empiricalData) +{ + int data_size = empiricalData.size(); + mat* featureMatrix = new mat(ones(data_size, 2)); + for (int i = 0; i < data_size; i++) + { + (*featureMatrix)(i, 1) = empiricalData(i); + } + + return (featureMatrix); +} + +inline double DataProcessor::computeCost(const mat& X, const vec& y, + const vec& theta) +{ + double J = .0; + double jtemp = .0; + int m = y.size(); + + for (int i = 0; i < m; i++) + { + jtemp = jtemp + pow(double(theta(0) + theta(1) * X(i, 1) - y(i)), 2); + + } + J = (1.0 / double(2 * m)) * jtemp; + + return (J); +} + +inline void DataProcessor::gradientDescendent(const mat& X, const vec& y, + const double learning_rate, const int num_iters, vec& theta, + vec& J_history) +{ + + int m = y.n_rows; //number of training examples + double temp1 = .0; + double temp2 = .0; + double delta1 = .0; + double delta2 = .0; + vec x = X.col(1); + + for (int i = 0; i < num_iters; i++) + { + temp1 = .0; + temp2 = .0; + delta1 = .0; + delta2 = .0; + + //slope + delta1 = sum(theta(0) + theta(1) * x - y) / double(m); + delta2 = sum((theta(0) + theta(1) * x - y) % x) / double(m); + + //linear regression + temp1 = theta(0) - learning_rate * delta1; + temp2 = theta(1) - learning_rate * delta2; + + theta(0) = temp1; + theta(1) = temp2; + + //Save the cost J in every iteration + J_history(i) = computeCost(X, y, theta); + + } + +} + +inline double DataProcessor::informationCriterion(const vec& data, + const string& functionName, const vec& paramVet, + const string& criterion) +{ + double criterionVal = .0; + double nEstimatedParameters = double(paramVet.size()); + double likehoodLogVal = logLikehood(data, functionName, paramVet); + double logDataLen = log(double(data.size())); + + if (criterion == "aic") + { + criterionVal = 2 * nEstimatedParameters - 2 * likehoodLogVal; + } + else if (criterion == "bic") + { + criterionVal = nEstimatedParameters * logDataLen - 2 * likehoodLogVal; + } + else + { + cout << "\nInvalid functionName or no functionName selected: " + << functionName << endl; + printf("Selecting default criterion: AIC\n"); + criterionVal = 2 * nEstimatedParameters - 2 * likehoodLogVal; + } + + return (criterionVal); + +} + +inline double DataProcessor::logLikehood(const vec& data, + const string& functionName, const vec& paramVet) +{ + double param1 = paramVet(0); + double param2 = paramVet(1); + double m = data.size(); + double L = .0; + int i = 0; + vec data_prob = zeros(size(data)); + + if (functionName == "weibull") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_weibull(data(i), param1, param2); + } + else if (functionName == "normal") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_normal(data(i), param1, param2); + } + else if (functionName == "uniform") + { + data_prob = ones(size(data)) * pdf_uniform(param1, param2); + } + else if (functionName == "exponential") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_exponential(data(i), param1); + } + else if (functionName == "pareto") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_pareto(data(i), param1, param2); + } + else if (functionName == "cauchy") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_cauchy(data(i), param1, param2); + } + else + { + cout << "Warning, no valid stochastic function selected: " + << functionName << endl; + printf("Likehood logarithm seted to -Inf (worst as possible)\n"); + return (datum::inf); + } + + L = sum(log(data_prob)); + return (L); + +} + +inline double DataProcessor::pdf_weibull(double x, double alpha, double betha) +{ + if (x >= 0) + return ((alpha / pow(betha, alpha)) * pow(x, alpha - 1.0) + * exp(-(pow(x / betha, alpha)))); + else + return (.0); +} + +inline double DataProcessor::cdf_weibull(double x, double alpha, double betha) +{ + if (x >= 0) + return (1.0 - exp(-pow(x / betha, alpha))); + else + return (.0); +} + +inline double DataProcessor::pdf_exponential(double x, double lambda) +{ + if (x >= 0) + return (lambda * exp(-lambda * x)); + else + return (.0); + +} + +inline double DataProcessor::cdf_exponential(double x, double lambda) +{ + if (x >= 0) + return (1.0 - exp(-lambda * x)); + else + return (.0); +} + +inline double DataProcessor::pdf_pareto(double x, double alpha, double xm) +{ + if (x >= xm) + return (alpha * pow(xm, alpha) / (pow(x, alpha + 1.0))); + else + return (.0); +} + +inline double DataProcessor::cdf_pareto(double x, double alpha, double xm) +{ + if (x >= xm) + return (1.0 - pow(xm / x, alpha)); + else + return (.0); +} + +inline double DataProcessor::pdf_cauchy(double x, double gamma, double x0) +{ + return (1 / (datum::pi * gamma) + * (pow(gamma, 2) / (pow(x - x0, 2) + pow(gamma, 2)))); +} + +inline double DataProcessor::cdf_cauchy(double x, double gamma, double x0) +{ + return ((1 / datum::pi) * atan((x - x0) / (gamma)) + 0.5); +} + +inline double DataProcessor::pdf_normal(double x, double mu, double sigma) +{ + return (1 / (sqrt(2 * datum::pi) * sigma) + * exp(-0.5 * pow((x - mu) / sigma, 2))); +} + +inline double DataProcessor::cdf_normal(double x, double mu, double sigma) +{ + return (0.5 * (1 + erf((x - mu) / (sigma * sqrt(2))))); +} + +inline double DataProcessor::pdf_uniform(double x_min, double x_max) +{ + return (1.0 / (x_max - x_min)); +} + +inline double DataProcessor::cdf_uniform(double x, double x_min, double x_max) +{ + if (x < x_min) + return (0); + else if (x > x_max) + return (1); + else + return ((x - x_min) / (x_max - x_min)); +} + +#ifdef TEST_FUNCTIONS + +void DataProcessor::printTestResult(string testName, bool result) +{ + string outRes; + if (result == true) + outRes = "ok"; + else + outRes = "failed"; + + cout << testName << ":\t\t" << outRes << endl; +} + +bool DataProcessor::compareDouble(double val1, double val2) +{ + double error = 0; + + error = fabs(double(val1) - double(val2)); + if (error > double(1e-5)) + return (false); + else + return (true); + +} + +bool DataProcessor::compareDouble(double val1, double val2, double acErr) +{ + double error = 0; + + error = fabs(double(val1) - double(val2)); + if (error > double(acErr)) + return (false); + else + return (true); + +} + +bool DataProcessor::compareMat(mat& mat1, mat& mat2) +{ + int mat1_nc = mat1.n_cols; + int mat1_nr = mat1.n_rows; + int mat2_nc = mat2.n_cols; + int mat2_nr = mat2.n_rows; + + if ((mat1_nc != mat2_nc) || (mat1_nr != mat2_nr)) + { + cout << "mat1.n_cols and mat2.n_cols dont match. " << mat1_nc << ":" + << mat2_nc << " " << mat1_nr << ":" << mat2_nr << endl; + return (false); + } + for (int i = 0; i < mat1_nr; i++) + { + for (int j = 0; j < mat1_nc; j++) + { + if (compareDouble(mat1(i, j), mat2(i, j), 1e-5)) + { + //cout << " mat1(" << i << ", " << j << " ) = " << mat1(i,j); + //cout << " mat2(" << i << ", " << j << " ) = " << mat2(i,j); + return (false); + } + } + } + + return (true); +} + +void DataProcessor::save_data_on_file(const string& fileName, const mat& vet1, + const mat& vet2) +{ + string file_out = fileName + ".txt"; + int m = vet1.size(); + + ofstream writeOnFile(file_out, ios::out); + if (!writeOnFile) + { + cerr << "file could not be oppeded" << endl; + exit(1); + } + + for (int i = 0; i < m; i++) + { + writeOnFile << vet1(i) << " " << vet2(i) << endl; + } + +} + +template +void DataProcessor::save_data_on_file(const string& fileName, list theList) +{ + string file_out = fileName + ".txt"; + int m = theList.size(); + + ofstream writeOnFile(file_out, ios::out); + if (!writeOnFile) + { + cerr << "file could not be oppeded" << endl; + exit(1); + } + + for (list::iterator it = theList.begin(); it != theList.end(); it++) + { + //list::iterator it = randInt_list1.begin(); + writeOnFile << *it << " \n"; + } +} + +bool DataProcessor::test_Mode() +{ + + int randint1[] = + { 1, 8, 1, 13, 9, 2, 1, 15, 4, 3, 10, 4, 13, 2, 14, 7, 7 }; + int randint1_mode = 1; + list l_randint1; + vectorC_to_list(&l_randint1, randint1, 17); + + int randint2[] = + { 5, 3, 6, 8, 14, 9, 11, 9, 11, 15, 8, 7, 12, 13, 14 }; + int randint2_mode = 8; + list l_randint2; + vectorC_to_list(&l_randint2, randint2, 15); + + int randint3[] = + { 9, 10, 6, 3, 13, 13, 14, 7, 7, 1, 5, 1, 8, 5, 9, 2, 3, 4, 5, 6, 6, 6 }; + int randint3_mode = 6; + list l_randint3; + vectorC_to_list(&l_randint3, randint3, 22); + + int randint4[] = + { 2, 1 }; + int randint4_mode = 1; + list l_randint4; + vectorC_to_list(&l_randint4, randint4, 2); + + int randint5[] = + { 1, 1, 1, 1, 1, 2, 2, 2, 2, 2 }; + int randint5_mode = 1; + list l_randint5; + vectorC_to_list(&l_randint5, randint5, 10); + + if (mode(&l_randint1) != randint1_mode) + return (false); + if (mode(&l_randint2) != randint2_mode) + return (false); + if (mode(&l_randint3) != randint3_mode) + return (false); + if (mode(&l_randint4) != randint4_mode) + return (false); + if (mode(&l_randint5) != randint5_mode) + return (false); + + return (true); +} + +bool DataProcessor::test_QuickSort() +{ + int randIntA[] = + { 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; + int randIntA_size = 18; + int randIntA_sorted[] = + { 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9 }; + int randIntB[] = + { 9, 2, 3, 3, 12, 15, 8, 14, 2, 7, 4, 6, 10, 2, 12 }; + int randIntB_size = 15; + int randIntB_sorted[] = + { 2, 2, 2, 3, 3, 4, 6, 7, 8, 9, 10, 12, 12, 14, 15 }; + double randDoubleA[] = + { 0.20872, 12.25501, 5.88210, 2.77962, 8.74916, 2.97454, 4.39641, 12.19733, + 4.66014, 4.52477, 5.19375, 12.11314, 13.35458, 11.56941, 6.59435 }; + int randDoubleA_size = 15; + double randDoubleA_sorted[] = + { 0.20872, 2.77962, 2.97454, 4.39641, 4.52477, 4.66014, 5.19375, 5.88210, + 6.59435, 8.74916, 11.56941, 12.11314, 12.19733, 12.25501, 13.35458 }; + + quickSort(randIntA, 0, randIntA_size - 1); + + if (isEqual(randIntA, randIntA_sorted, randIntA_size) == false) + { + return (false); + } + + quickSort(randIntB, 0, randIntB_size - 1); + if (isEqual(randIntB, randIntB_sorted, randIntB_size) == false) + { + return (false); + } + + quickSort(randDoubleA, 0, randDoubleA_size - 1); + if (isEqual(randDoubleA, randDoubleA_sorted, randDoubleA_size) == false) + { + return (false); + } + + return (true); + +} + +bool DataProcessor::test_list_tocvector() +{ + list randInt_list1 = + { 9, 2, 3, 3, 12, 15, 8, 14, 2, 7, 4, 6, 10, 2, 12 }; + list randInt_list2 = + { 2.2, 2.111, 3.16, 6.66, 13, 2.61 }; + list randInt_list3 = + { 1, 2, 3, 4, 5, 6, 6, 5, 4, 3, 2, 1 }; + + int* cvet1 = NULL; + double* cvet2 = NULL; + int* cvet3 = NULL; + + cvet1 = list_to_cvector(&randInt_list1); + cvet2 = list_to_cvector(&randInt_list2); + cvet3 = list_to_cvector(&randInt_list3); + + int i = 0; + for (list::iterator it = randInt_list1.begin(); + it != randInt_list1.end(); it++) + { + if (cvet1[i] != *it) + { + return (false); + } + //cout << *it << " "; + i++; + } + i = 0; + for (list::iterator it = randInt_list2.begin(); + it != randInt_list2.end(); it++) + { + if (cvet2[i] != *it) + { + return (false); + } + //cout << *it << " "; + i++; + } + i = 0; + for (list::iterator it = randInt_list3.begin(); + it != randInt_list3.end(); it++) + { + if (cvet3[i] != *it) + { + return (false); + } + //cout << *it << " "; + i++; + } + + delete_cvector(cvet1); + delete_cvector(cvet2); + delete_cvector(cvet3); + + return (true); +} + +bool DataProcessor::test_empiricalCdf() +{ + list interArrival_sample = + { 5.0000e-07, 1.5000e-06, 1.5000e-06, 2.5000e-06, 2.5000e-06, 3.5000e-06, + 4.5000e-06, 7.5000e-06, 1.2500e-05, 1.9500e-05, 3.1500e-05, + 4.3500e-05, 6.0500e-05, 7.6500e-05, 1.1050e-04, 1.4050e-04, + 1.8150e-04, 2.1150e-04, 2.3350e-04, 2.4350e-04, 2.5650e-04, + 3.0350e-04, 4.1250e-04, 1.3655e-03, 1.1593e-02, 3.2483e-02, + 8.1235e-02, 2.0939e-01, 5.0755e-01, 1.7351e+00 }; + vec emCdf_octave = + { 0.033333, 0.100000, 0.100000, 0.166667, 0.166667, 0.200000, 0.233333, + 0.266667, 0.300000, 0.333333, 0.366667, 0.400000, 0.433333, + 0.466667, 0.500000, 0.533333, 0.566667, 0.600000, 0.633333, + 0.666667, 0.700000, 0.733333, 0.766667, 0.800000, 0.833333, + 0.866667, 0.900000, 0.933333, 0.966667, 1.000000 }; + //emCdf_octave = emCdf_octave.t(); + + vec* emCdf_cpp = empiricalCdf(interArrival_sample); + + int list_size = interArrival_sample.size(); + for (int i = 0; i < list_size; i++) + { + if (!compareDouble(emCdf_octave(i), (*emCdf_cpp)(i), 1e-6)) + { + cout << "cdf error @ " << "i:" << i << " res:" << (*emCdf_cpp)(i, 0) + << " expected:" << emCdf_octave(i, 0) << endl; + return (false); + } + } + + delete emCdf_cpp; + return (true); +} + +bool DataProcessor::test_computeCost() +{ + list interArrival_sample = + { 5.0000e-07, 1.5000e-06, 1.5000e-06, 2.5000e-06, 2.5000e-06, 3.5000e-06, + 4.5000e-06, 7.5000e-06, 1.2500e-05, 1.9500e-05, 3.1500e-05, + 4.3500e-05, 6.0500e-05, 7.6500e-05, 1.1050e-04, 1.4050e-04, + 1.8150e-04, 2.1150e-04, 2.3350e-04, 2.4350e-04, 2.5650e-04, + 3.0350e-04, 4.1250e-04, 1.3655e-03, 1.1593e-02, 3.2483e-02, + 8.1235e-02, 2.0939e-01, 5.0755e-01, 1.7351e+00 }; + mat* X = featureMatrix(interArrival_sample); + vec emCdf_octave = + { 0.033333, 0.100000, 0.100000, 0.166667, 0.166667, 0.200000, 0.233333, + 0.266667, 0.300000, 0.333333, 0.366667, 0.400000, 0.433333, + 0.466667, 0.500000, 0.533333, 0.566667, 0.600000, 0.633333, + 0.666667, 0.700000, 0.733333, 0.766667, 0.800000, 0.833333, + 0.866667, 0.900000, 0.933333, 0.966667, 1.000000 }; + //emCdf_octave = emCdf_octave.t(); + double J_expected1 = 0.17535; + double J_expected2 = 1.5341; + double J_expected3 = 9.0244; + + vec theta = zeros(2); + + double J = computeCost(*X, emCdf_octave, theta); + if (!compareDouble(J, J_expected1, 0.001)) + { + //cout << "J1 = " << J << "\nJ_expected1 = "<< J_expected1 << endl; + return (false); + } + theta(0) = 2; + theta(1) = 2; + J = computeCost(*X, emCdf_octave, theta); + if (!compareDouble(J, J_expected2, 0.001)) + { + //cout << "J2 = " << J << "\nJ_expected2 = "<< J_expected2 << endl; + return (false); + } + theta(0) = 1.5; + theta(1) = 12; + J = computeCost(*X, emCdf_octave, theta); + if (!compareDouble(J, J_expected3, 0.001)) + { + //cout << "J3 = " << J << "\nJ_expected3 = "<< J_expected3 << endl; + return (false); + } + + delete X; + return (true); +} + +bool DataProcessor::test_informationCriterion() +{ + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + + int m = interArrival.size(); + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + //gradient descendent + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + vec y = log(-log(1.0 + diferential - *interArrivalCdf)); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + double weibull_alpha = theta(1); + double weibull_betha = exp(-theta(0) / theta(1)); + vec paramVec = + { weibull_alpha, weibull_betha }; + double weibull_bic = informationCriterion(interArrival, "weibull", paramVec, + "bic"); + double weibull_aic = informationCriterion(interArrival, "weibull", paramVec, + "aic"); + + if (!compareDouble(weibull_bic, -33712.7042, 0.001)) + return (false); + else if (!compareDouble(weibull_aic, -33724.6567, 0.001)) + return (false); + + return (true); +} + +bool DataProcessor::test_pdf_weibull() +{ + double alpha = 1.5000; + double betha = 0.3; + vec data = + { 0.010000, 2.300000, 0.500000 }; + vec dataprob_eval1 = + { 9.0733e-01, 8.3571e-09, 7.5066e-01 }; + vec dataprob_test = zeros(3); + + dataprob_test(0) = pdf_weibull(data(0), alpha, betha); + dataprob_test(1) = pdf_weibull(data(1), alpha, betha); + dataprob_test(2) = pdf_weibull(data(2), alpha, betha); + + if (compareDouble(dataprob_test(0), dataprob_eval1(0)) + && compareDouble(dataprob_test(1), dataprob_eval1(1)) + && compareDouble(dataprob_test(2), dataprob_eval1(2))) + { + return (true); + } + + return (false); +} + +bool DataProcessor::test_cdf_weibull() +{ + double alpha = 0.5; + double betha = 1.5; + vec data = + { 0.010000, 2.300000, 0.500000 }; + vec dataprob_eval1 = + { 0.078405, 0.710117, 0.438616 }; + vec dataprob_test = zeros(3); + + dataprob_test(0) = cdf_weibull(data(0), alpha, betha); + dataprob_test(1) = cdf_weibull(data(1), alpha, betha); + dataprob_test(2) = cdf_weibull(data(2), alpha, betha); + //cout << dataprob_test(0) << " : " << dataprob_test(1) << " : " << dataprob_test(2) << endl; + + if (compareDouble(dataprob_test(0), dataprob_eval1(0)) + && compareDouble(dataprob_test(1), dataprob_eval1(1)) + && compareDouble(dataprob_test(2), dataprob_eval1(2))) + { + return (true); + } + + return (false); +} + +bool DataProcessor::test_gradientDescendent() +{ + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + + int m = interArrival.size(); + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + //gradient descendent + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + vec y = log(-log(1.0 + diferential - *interArrivalCdf)); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //expected values + double Jlast = 0.083359; + double theta0 = 1.660453; + double theta1 = 0.248811; + + if (!compareDouble(J_history(iterations - 1), Jlast)) + + { + return (false); + } + else if (!compareDouble(theta(0), theta0)) + { + return (false); + } + else if (!compareDouble(theta(1), theta1)) + { + return (false); + } + + delete interArrivalCdf; + delete X; + return (true); + +} + +bool DataProcessor::test_pdf_exponential() +{ + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double lambda1 = 0.50000; + vec val1 = + { 0.49751, 0.15832, 0.38940 }; + vec res1 = zeros(3); + + double lambda2 = 3.0; + vec val2 = + { 2.9113366, 0.0030234, 0.6693905 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = pdf_exponential(data(i), lambda1); + res2(i) = pdf_exponential(data(i), lambda2); + + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + + } + + return (true); +} + +bool DataProcessor::test_cdf_exponential() +{ + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double lambda1 = 0.50000; + vec val1 = + { 0.0049875, 0.6833632, 0.2211992 }; + vec res1 = zeros(3); + + double lambda2 = 3.0; + vec val2 = + { 0.029554, 0.998992, 0.776870 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = cdf_exponential(data(i), lambda1); + res2(i) = cdf_exponential(data(i), lambda2); + + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + + return (true); +} + +bool DataProcessor::test_pdf_pareto() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double alpha1 = 0.50000; + double xm1 = 1.0; + vec val1 = + { 0, 0.14334, 0 }; + vec res1 = zeros(3); + double xm2 = 0.00001; + double alpha2 = 3.0; + vec val2 = + { 3.0000e-07, 1.0720e-16, 4.8000e-14 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = pdf_pareto(data(i), alpha1, xm1); + res2(i) = pdf_pareto(data(i), alpha2, xm2); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + + return (true); +} + +bool DataProcessor::test_cdf_pareto() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double alpha1 = 0.50000; + double xm1 = 0.001; + vec val1 = + { 0.68377, 0.97915, 0.95528 }; + vec res1 = zeros(3); + double xm2 = 0.2; + double alpha2 = 1; + vec val2 = + { 0, 0.91304, 0.60000 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = cdf_pareto(data(i), alpha1, xm1); + res2(i) = cdf_pareto(data(i), alpha2, xm2); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + return (true); +} + +bool DataProcessor::test_pdf_cauchy() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + double gamma1 = 0.50000; + double x01 = 0.001; + + vec val1 = + { 0.636414, 0.028752, 0.318947 }; + vec res1 = zeros(3); + double x02 = 2; + double gamma2 = 2; + + vec val2 = + { 0.079976, 0.155653, 0.101859 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = pdf_cauchy(data(i), gamma1, x01); + res2(i) = pdf_cauchy(data(i), gamma2, x02); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + return (true); +} + +bool DataProcessor::test_cdf_cauchy() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + double gamma1 = 0.50000; + double x01 = 0.001; + + vec val1 = + { 0.50573, 0.93183, 0.74968 }; + vec res1 = zeros(3); + double x02 = 2; + double gamma2 = 2; + + vec val2 = + { 0.25080, 0.54739, 0.29517 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = cdf_cauchy(data(i), gamma1, x01); + res2(i) = cdf_cauchy(data(i), gamma2, x02); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + return (true); +} + +bool DataProcessor::test_fitModels() +{ + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + + int m = interArrival.size(); + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + //list of expected values + double weibull_alpha = 0.24881; + double weibull_betha = 0.0012639; + double normal_mu = 0.054792; + double normal_sigma = 0.205602; + double exponentialMe_lambda = 18.250783; + double exponentialLr_lambda = 2.023115; + double paretoLr_alpha = 0.225451; + double paretoLr_xm = 0.000000; + double paretoMlh_alpha = 0.171674; + double paretoMlh_xm = 0.000000; + double cauchy_gamma = 0.000067; + double cauchy_x0 = 0.005750; + double acErr = 0.001; + + vec paramVec = zeros(2); + vec infoCriterion = zeros(2); + + weibullFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), weibull_alpha, acErr)) + { + cout << "weibullFitting alpha" << endl; + return (false); + } + if (!compareDouble(paramVec(1), weibull_betha, acErr)) + { + cout << "weibullFitting betha" << endl; + return (false); + } + + normalFitting(interArrival, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), normal_mu, acErr)) + { + cout << "normalFitting mu" << endl; + return (false); + } + if (!compareDouble(paramVec(1), normal_sigma, acErr)) + { + cout << "normalFitting sigma" << endl; + return (false); + } + + exponentialMeFitting(interArrival, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), exponentialMe_lambda, acErr)) + { + cout << "exponentialLrFitting lambda" << endl; + return (false); + } + + exponentialLrFitting(interArrival, *interArrivalCdf, paramVec, + infoCriterion); + if (!compareDouble(paramVec(0), exponentialLr_lambda, acErr)) + { + cout << exponentialLr_lambda << ":" << paramVec(0) << endl; + cout << "exponentialLrFitting lambda" << endl; + return (false); + } + + paretoLrFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), paretoLr_alpha, acErr)) + { + cout << "paretoLrFitting alpha" << endl; + return (false); + } + if (!compareDouble(paramVec(1), paretoLr_xm, acErr)) + { + cout << "paretoLrFitting xm" << endl; + return (false); + } + + paretoMlhFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), paretoMlh_alpha, acErr)) + { + cout << "paretoMlhFitting alpha" << endl; + return (false); + } + if (!compareDouble(paramVec(1), paretoMlh_xm, acErr)) + { + cout << "paretoMlhFitting xm" << endl; + return (false); + } + + cauchyFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), cauchy_gamma, acErr)) + { + cout << "cauchyFitting" << endl; + return (false); + } + if (!compareDouble(paramVec(1), cauchy_x0, acErr)) + { + return (false); + } + + delete interArrivalCdf; + + return (true); +} + +bool DataProcessor::test_modelSelection() +{ + + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + int m = interArrival.size(); + + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + StochasticModelFit* modelVet = NULL; + modelVet = fitModels(list_interArrival, "aic"); + + //int numberOfModels = modelVet[0].size; + //for (int i = 0; i < numberOfModels; i++) + // cout << modelVet[i].modelName << " " << "modelVet[" << i << "] = " + // << modelVet[i].aic << endl; + + delete interArrivalCdf; + delete[] modelVet; + return (true); +} + +#endif //TEST_FUNCTIONS diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/ef/10ccebe9c8b500161808a5c64fd2084a b/.metadata/.plugins/org.eclipse.core.resources/.history/ef/10ccebe9c8b500161808a5c64fd2084a new file mode 100644 index 0000000..9ff6ea9 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/ef/10ccebe9c8b500161808a5c64fd2084a @@ -0,0 +1,1967 @@ +/* + * DataProcessor.cpp + * + * Created on: 14 de jun de 2016 + * Author: apaschoalon + */ + +#include "DataProcessor.h" + +DataProcessor::DataProcessor() +{ + //nothing to do at all +} + +DataProcessor::~DataProcessor() +{ + //nothing to do at all +} + +string DataProcessor::toString(void) +{ + string dataProcessor; + + dataProcessor = + "Used to calculate parameters of network flows; has no state."; + + return (dataProcessor); +} + +int DataProcessor::calculate(const string& experimentName, + DatabaseInterface* databaseInterface, NetworkTrace* netTrace) +{ + + //iterator variables + long int fcounter = 0; + long int nflows = 0; + databaseInterface->getNumberOfFlows(experimentName, &nflows); + +#ifdef DEBUG_DataProcessor_calculate + cout << "DataProcessor::calculate() -> Number of flows = " << nflows << endl; +#endif // DEBUG_DataProcessor_calculate + + //protocol variables + string flowStrData = ""; + long int flowIntData = 0; + double startDalay = 0; //time of the fist packet of the flow + double flowDuration = 0; //duration of the flow + list ttlList; + int ttl = 0; + + //flow-level variables + list relativeTime; //time relative to the 1st packet list + long int nKbytes = 0; //Number of kbytes (bytes/1024) of the + + //packetSize variables + list pslist; //packet-size list + long int ps_mostFrequent = 0; + double mean_packetRate = 0; + + //inter-deperture time variables + StochasticModelFit* modelVet = NULL; + list interArrival_list; // list of inter arrival times of a flow + list interArrival_fileStack; + list interArrival_interFileStack; + list interArrival_interSessionStack; + double lastTime = 0; + double idt = 0; + + for (fcounter = 0; fcounter < nflows; fcounter++) + { + + //new network flow + NetworkFlow* netFlow = NetworkFlow::make_flow("dummy"); + + //TODO checar valor retornado de databaseInterface + + //reset temp vars + flowStrData = ""; + flowIntData = 0; + relativeTime.clear(); + pslist.clear(); + interArrival_list.clear(); + interArrival_fileStack.clear(); + interArrival_interFileStack.clear(); + interArrival_interSessionStack.clear(); + + //load packet-size data + databaseInterface->getFlowData(experimentName, fcounter, "frame__len", + pslist); + + //laod time-relative data + databaseInterface->getFlowData(experimentName, fcounter, + "frame__time_relative", relativeTime); + + //evaluate inter-arrival data + //time relative to the begin of the measurement + lastTime = 0; + for (list::iterator it = relativeTime.begin(); + it != relativeTime.end(); it++) + { + idt = *it - lastTime; + interArrival_list.push_back(idt); + lastTime = *it; + } + + //###################################################################### + //Flow-level Options + //###################################################################### + startDalay = relativeTime.front(); + netFlow->setFlowStartDelay(startDalay); + + flowDuration = relativeTime.back() - relativeTime.front(); + netFlow->setFlowDuration(flowDuration); + + //TODO DS byte configuration -- now it is just set to zero + netFlow->setFlowDsByte(0); + + //flow kbytes + for (list::iterator it = pslist.begin(); it != pslist.end(); + it++) + { + nKbytes = nKbytes + *it; + } + nKbytes = nKbytes / 1024; + + netFlow->setNumberOfKbytes(nKbytes); + netFlow->setNumberOfPackets(relativeTime.size()); + + //###################################################################### + //Protocol Options + //###################################################################### + + // + //L3 protocols + //reference http://www.iana.org/assignments/ieee-802-numbers/ieee-802-numbers.xhtml + // + + databaseInterface->getFlowData(experimentName, fcounter, "eth__type", + &flowIntData); + if (flowIntData == IPV4_CODE) + { //IPv4 + netFlow->setNetworkProtocol(PROTOCOL__IPV4); + databaseInterface->getFlowData(experimentName, fcounter, "ip__src", + &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, "ip__dst", + &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + else if (flowIntData == (ARP_CODE || ARP_CODE_REV)) + { //ARP, Frame Relay ARP + netFlow->setNetworkProtocol(PROTOCOL__ARP); + databaseInterface->getFlowData(experimentName, fcounter, "ip__src", + &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, "ip__dst", + &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + else if (flowIntData == IPV6_CODE) + { //IPv6 + netFlow->setNetworkProtocol(PROTOCOL__ICMPV6); + databaseInterface->getFlowData(experimentName, fcounter, + "ipv6__addr", &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, + "ipv6__dst", &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + else + { //default IPv4 + netFlow->setNetworkProtocol(PROTOCOL__IPV4); + databaseInterface->getFlowData(experimentName, fcounter, "ip__src", + &flowStrData); + netFlow->setNetworkSrcAddr(flowStrData); + databaseInterface->getFlowData(experimentName, fcounter, "ip__dst", + &flowStrData); + netFlow->setNetworkDstAddr(flowStrData); + } + + //set ttl as the most frequent + databaseInterface->getFlowData(experimentName, fcounter, "ip__ttl", + ttlList); + //ttl = (int) mode(ttlList); + ttl = (int) mode(&ttlList); + netFlow->setNetworkTtl(ttl); + + // + //L4 Protocols + //reference https://en.wikipedia.org/wiki/List_of_IP_protocol_numbers + // + databaseInterface->getFlowData(experimentName, fcounter, "ip__proto", + &flowIntData); + if (flowIntData == ICMP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__ICMP); + } + else if (flowIntData == TCP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__TCP); + databaseInterface->getFlowData(experimentName, fcounter, + "tcp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "tcp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else if (flowIntData == UDP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__UDP); + databaseInterface->getFlowData(experimentName, fcounter, + "udp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "udp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else if (flowIntData == DCCP_CODE) + { + netFlow->setTransportDstPort(PROTOCOL__DCCP); + databaseInterface->getFlowData(experimentName, fcounter, + "dccp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "dccp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else if (flowIntData == GRE_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__GRE); + //TODO não suportado pelo D-ITG + } + else if (flowIntData == ICMPV6_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__ICMPV6); + } + else if (flowIntData == SCTP_CODE) + { + netFlow->setTransportProtocol(PROTOCOL__SCTP); + databaseInterface->getFlowData(experimentName, fcounter, + "sctp__dstport", &flowIntData); + netFlow->setTransportSrcPort(flowIntData); + databaseInterface->getFlowData(experimentName, fcounter, + "sctp__srcport", &flowIntData); + netFlow->setTransportDstPort(flowIntData); + } + else + { //default: UDP + netFlow->setTransportProtocol(PROTOCOL__NULL); + //databaseInterface->getFlowData(experimentName, fcounter, "udp__dstport", &flowIntData); + //netFlow->setL4SrcPort(flowIntData); + //databaseInterface->getFlowData(experimentName, fcounter, "udp__srcport", &flowIntData); + //netFlow->setL4DstPort(flowIntData); + } + + //###################################################################### + //Packet Size Model + //###################################################################### + + // + // Constant model: Just set the packet size as the most frequent value + // + //ps_mostFrequent = mode(pslist); + //ps_mostFrequent = mode(&pslist); + //mean_packetRate = ((double) pslist.size() / flowDuration); + //netFlow->setPsConstant(ps_mostFrequent); + //netFlow->setIdtConstant(mean_packetRate); + + // + // Algorithm to choose the priority order of the models + // 1st version: just the constant model + // + //TODO implement a best algorithm + //netFlow->setPsModel1(MODEL__CONSTANT); + + //###################################################################### + //Inter-arrival-time Model + //###################################################################### + + for (list::iterator it = interArrival_list.begin(); + it != interArrival_list.end(); it++) + { + if (*it < FILE_CUT_TIME) + { + interArrival_fileStack.push_back(*it); + } + else if (*it < SESSION_CUT_TIME) + { + interArrival_interFileStack.push_back(*it); + } + else + { + interArrival_interSessionStack.push_back(*it); + } + } + +#ifdef DEBUG_DataProcessor_interArrival + if (fcounter == 0) + { + string file1 = "fileStack"; + string file2 = "interFileStack"; + string file3 = "interSessionStack"; + save_data_on_file(file1, interArrival_fileStack); + save_data_on_file(file2, interArrival_interFileStack); + save_data_on_file(file3, interArrival_interSessionStack); + } +#endif + + netFlow->setInterDepertureTimeModels( + fitModels(interArrival_list, "aic")); + + //TODO set the right model + + //netFlow->setIdtModel1(MODEL__CONSTANT); + + //TODO + + //TODO + + //###################################################################### + //Push-back the flow to Trace Flow-list + //###################################################################### + + netTrace->pushback_Netflow(netFlow); + +#ifdef DEBUG_DataProcessor_calculate_loop + cout << fcounter << ": ps_mostFrequent=" << ps_mostFrequent << endl; + cout << fcounter << ": startDalay=" << startDalay << endl; + cout << fcounter << ": mean_packetRate=" << mean_packetRate << endl; + cout << fcounter << ": idt_constant=" << netFlow->getIdtConstant() << endl; +#endif //DEBUG_DataProcessor_calculate_loop +#ifdef DEBUG_DataProcessor_calculate_loop + cout << fcounter << ": netFlow->getTransportProtocol() = " << netFlow->getTransportProtocol() << endl; + cout << fcounter << ": netFlow->getNetworkProtocol() = " << netFlow->getNetworkProtocol() << endl; + cout << fcounter << ": netFlow->getTransportDstPort() = " << netFlow->getTransportDstPort() << endl; + cout << fcounter << ": netFlow->getFlowDsByte() = " << netFlow->getFlowDsByte() << endl; + cout << fcounter << ": netFlow->getNetworkDstAddr() = " << netFlow->getNetworkDstAddr() << endl << endl; + +#endif //DEBUG_DataProcessor_calculate_loop + + } + +#ifdef DEBUG_DataProcessor_calculate + cout << "netTrace->networkFlow.size() = " << netTrace->networkFlow.size() << endl; + cout << "netTrace->getNumberOfFlows() = " << netTrace->getNumberOfFlows() << endl; +#endif //DEBUG_DataProcessor_calculate + + return (0); +} + +StochasticModelFit* DataProcessor::fitModels(list& empiricalData, + const string& criterion) +{ + //constants + const int numberOfModels = 8; + const int m = empiricalData.size(); //empirical data-size + //vars + int counter = 0; + StochasticModelFit* modelVet = NULL; + vec paramVec = zeros(2); + vec infoCriterion = zeros(2); + + if (m == 1) + { + modelVet = new StochasticModelFit[1]; + + //Constant + modelVet[0].aic = datum::inf; + modelVet[0].bic = datum::inf; + modelVet[0].modelName = CONSTANT; + modelVet[0].param1 = *empiricalData.begin(); + modelVet[0].param2 = 0; + modelVet[0].size = 1; + + } + else + { + + modelVet = new StochasticModelFit[numberOfModels]; + + //Inter-arrival vec + vec interArrival = zeros(m); + counter = 0; + for (list::iterator it = empiricalData.begin(); + it != empiricalData.end(); it++) + { + interArrival(counter) = *it + min_time; + counter++; + } + //Empirical CDF of interArrival + vec* interArrivalCdf = empiricalCdf(empiricalData); + + //Weibull + weibullFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[0].aic = infoCriterion(0); + modelVet[0].bic = infoCriterion(1); + modelVet[0].modelName = WEIBULL; + modelVet[0].param1 = paramVec(0); + modelVet[0].param2 = paramVec(1); + modelVet[0].size = numberOfModels; + + //normal + normalFitting(interArrival, paramVec, infoCriterion); + modelVet[1].aic = infoCriterion(0); + modelVet[1].bic = infoCriterion(1); + modelVet[1].modelName = NORMAL; + modelVet[1].param1 = paramVec(0); + modelVet[1].param2 = paramVec(1); + modelVet[1].size = numberOfModels; + + //exponential mean + exponentialMeFitting(interArrival, paramVec, infoCriterion); + modelVet[2].aic = infoCriterion(0); + modelVet[2].bic = infoCriterion(1); + modelVet[2].modelName = EXPONENTIAL_MEAN; + modelVet[2].param1 = paramVec(0); + modelVet[2].param2 = paramVec(1); + modelVet[2].size = numberOfModels; + + //exponential Linear Regression (LR) + exponentialLrFitting(interArrival, *interArrivalCdf, paramVec, + infoCriterion); + modelVet[3].aic = infoCriterion(0); + modelVet[3].bic = infoCriterion(1); + modelVet[3].modelName = EXPONENTIAL_LINEAR_REGRESSION; + modelVet[3].param1 = paramVec(0); + modelVet[3].param2 = paramVec(1); + modelVet[3].size = numberOfModels; + + //pareto linear regression + paretoLrFitting(interArrival, *interArrivalCdf, paramVec, + infoCriterion); + modelVet[4].aic = infoCriterion(0); + modelVet[4].bic = infoCriterion(1); + modelVet[4].modelName = PARETO_LINEAR_REGRESSION; + modelVet[4].param1 = paramVec(0); + modelVet[4].param2 = paramVec(1); + modelVet[4].size = numberOfModels; + + //pareto maximum likehood + paretoMlhFitting(interArrival, *interArrivalCdf, paramVec, + infoCriterion); + modelVet[5].aic = infoCriterion(0); + modelVet[5].bic = infoCriterion(1); + modelVet[5].modelName = PARETO_MAXIMUM_LIKEHOOD; + modelVet[5].param1 = paramVec(0); + modelVet[5].param2 = paramVec(1); + modelVet[5].size = numberOfModels; + + //Cauchy + cauchyFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[6].aic = infoCriterion(0); + modelVet[6].bic = infoCriterion(1); + modelVet[6].modelName = CAUCHY; + modelVet[6].param1 = paramVec(0); + modelVet[6].param2 = paramVec(1); + modelVet[6].size = numberOfModels; + + //Constant + constantFitting(interArrival, paramVec, infoCriterion); + modelVet[7].aic = infoCriterion(0); + modelVet[7].bic = infoCriterion(1); + modelVet[7].modelName = CONSTANT; + modelVet[7].param1 = paramVec(0); + modelVet[7].param2 = paramVec(1); + modelVet[7].size = numberOfModels; + + if (criterion == "bic") + { + qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), + compareBic); + } + else if (criterion == "aic") + { + qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), + compareAic); + } + else + { + cout + << "Error @ DataProcessor::fitModels -> Invalid criterion argument: " + << criterion << endl; + cout << "AIC set as default" << endl; + qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), + compareAic); + + } + +#ifdef DEBUG_StochasticModelFit + //if (modelVet[0].modelName == WEIBULL) + //{ + // cout << modelVet[0].modelName << "aic:bic->" << modelVet[0].aic << ":" << modelVet[0].bic + // << " " << "alpha:betha->" << modelVet[0].param1 + // << modelVet[0].param2 << endl; + // string fileName = "weibulldata_" + std::to_string(abs(modelVet[0].aic)); + // save_data_on_file(fileName, interArrival, *interArrivalCdf); + //} +#endif //DEBUG_StochasticModelFit + + delete interArrivalCdf; + } + + return (modelVet); +} + +inline void DataProcessor::weibullFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //init + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + //linearization + vec y = log(-log(1.0 + diferential - interArrivalCdf)); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double weibull_alpha = theta(1); + double weibull_betha = exp(-theta(0) / theta(1)); + paramVec(0) = weibull_alpha; + paramVec(1) = weibull_betha; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "weibull", paramVec, "aic"); + double bic = informationCriterion(interArrival, "weibull", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; + +} + +inline void DataProcessor::normalFitting(const vec& interArrival, vec& paramVec, + vec& infoCriterion) +{ + double sigma = stddev(interArrival); + double mu = mean(interArrival); + paramVec(0) = mu; + paramVec(1) = sigma; + + //information criterion + double aic = informationCriterion(interArrival, "normal", paramVec, "aic"); + double bic = informationCriterion(interArrival, "normal", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::exponentialLrFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //init + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + //linearization + vec y = log(1.00 + diferential - interArrivalCdf); + //vec y = log(1.00 - interArrivalCdf); + vec x = interArrival; + mat* X = featureMatrix(x); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double exp_lambda = -theta(1); + paramVec(0) = exp_lambda; + paramVec(1) = 0; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "exponential", paramVec, + "aic"); + double bic = informationCriterion(interArrival, "exponential", paramVec, + "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::exponentialMeFitting(const vec& interArrival, + vec& paramVec, vec& infoCriterion) +{ + paramVec(0) = 1.0 / mean(interArrival); + paramVec(1) = 0; + + //information criterion + double aic = informationCriterion(interArrival, "exponential", paramVec, + "aic"); + double bic = informationCriterion(interArrival, "exponential", paramVec, + "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::paretoLrFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //init + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + //linearization + vec y = log(1.00 + diferential - interArrivalCdf); + //vec y = log(1.00 - interArrivalCdf); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double pareto_alpha = -theta(1); + double pareto_xm = interArrival.min(); + paramVec(0) = pareto_alpha; + paramVec(1) = pareto_xm; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "pareto", paramVec, "aic"); + double bic = informationCriterion(interArrival, "pareto", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::paretoMlhFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + double pareto_xm = interArrival.min(); + int m = interArrival.size(); + //vec logDiff = log(interArrival) - log(ones(m) * pareto_xm); + vec logDiff = log(interArrival) - log(pareto_xm); + double pareto_alpha = double(m) / (sum(logDiff)); + paramVec(0) = pareto_alpha; + paramVec(1) = pareto_xm; + + //information criterion + double aic = informationCriterion(interArrival, "pareto", paramVec, "aic"); + double bic = informationCriterion(interArrival, "pareto", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; +} + +inline void DataProcessor::cauchyFitting(const vec& interArrival, + const vec& interArrivalCdf, vec& paramVec, vec& infoCriterion) +{ + //initialization + int iterations = 1500; + double learning_rate = 0.01; + int m = interArrival.size(); + double minInterArrival = interArrival.min(); + double y_max = 1.0 / minInterArrival; + vec y = tan(datum::pi * (interArrivalCdf - 0.5)); + for (int i = 0; i < m; i++) + { + //avoid too high numbers when tan() tends to infinity + if (y(i) > y_max) + y(i) = y_max; + } + + //linearization + vec J_history = zeros(iterations); + vec theta = zeros(2); + mat* X = featureMatrix(interArrival); + + //gradient descendent + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //parameter evaluation + double cauchy_gamma = double(1.0) / theta(1); + double cauchy_x0 = -theta(0) / theta(1); + paramVec(0) = cauchy_gamma; + paramVec(1) = cauchy_x0; + + delete X; + + //information criterion + double aic = informationCriterion(interArrival, "cauchy", paramVec, "aic"); + double bic = informationCriterion(interArrival, "cauchy", paramVec, "bic"); + infoCriterion(0) = aic; + infoCriterion(1) = bic; + +} + +void DataProcessor::constantFitting(const vec& interArrival, vec& paramVec, + vec& informationCriterion) +{ + paramVec(0) = mean(interArrival); + paramVec(1) = 0; + informationCriterion(0) = datum::inf; + informationCriterion(1) = datum::inf; +} + +template bool DataProcessor::isEqual(const T* vet1, const T* vet2, + const int size) +{ + for (int i = 0; i < size; i++) + { + if (vet1[i] != vet2[i]) + { + return (false); + } + } + + return (true); +} + +template void DataProcessor::vectorC_to_list(list* theList, + T* vet, int size) +{ + for (int i = 0; i < size; i++) + { + theList->push_back(vet[i]); + } +} + +template +void DataProcessor::quickSort(T* vet, int left, int right) +{ + int p = left; + int i = 0; + T ch = 0; + int j = 0; + + for (i = left + 1; i <= right; i++) + { + j = i; + if (vet[j] < vet[p]) + { + ch = vet[j]; + while (j > p) + { + vet[j] = vet[j - 1]; + j--; + } + vet[j] = ch; + p++; + } + } + if (p - 1 >= left) + quickSort(vet, left, p - 1); + if (p + 1 <= right) + quickSort(vet, p + 1, right); +} + +template +T DataProcessor::mode(list* theList) +{ + T* vet; + int listSize = theList->size(); + int i = 0; + T candidate = 0; + T prev = 0; + int counter = 0; + int largerCounter = 0; + T mode = 0; + vet = new T[listSize]; + + if (listSize == 0) + { + return (0); + } + + i = 0; + + for (typename list::iterator it = theList->begin(); it != theList->end(); + it++) + { + vet[i] = *it; + i++; + } + + quickSort(vet, 0, listSize - 1); + + prev = vet[0]; + largerCounter = 0; + for (i = 0; i < listSize; i++) + { + candidate = vet[i]; + if (candidate == prev) + { + counter++; + if (counter > largerCounter) + { + largerCounter = counter; + mode = vet[i]; + } + } + else + counter = 1; + + prev = vet[i]; + } + + delete[] vet; + + return (mode); +} + +template +inline T* DataProcessor::list_to_cvector(list* theList) +{ + int listSize = theList->size(); + T* vet; + int i = 0; + + vet = new T[listSize]; + if (listSize == 0) + { + return (0); + } + + i = 0; + for (typename list::iterator it = theList->begin(); it != theList->end(); + it++) + { + vet[i] = *it; + i++; + } + + return (vet); +} +template +inline void DataProcessor::delete_cvector(T* c_vet) +{ + delete[] c_vet; +} + +inline vec* DataProcessor::empiricalCdf(list& empiricalData) +{ + double* cvet_empiricalData = list_to_cvector(&empiricalData); + int data_size = empiricalData.size(); + quickSort(cvet_empiricalData, 0, data_size - 1); + double x = cvet_empiricalData[0]; // anchor - fist element; + int i1 = 0; // fist index + int i2 = 0; + double prob = 0; + vec* interArrivalCdf = new vec(zeros(data_size)); + + for (int i = 0; i < data_size; i++) + { + if (cvet_empiricalData[i] > x) + { + i2 = i - 1; + prob = double(i) / data_size; + for (int j = i1; j <= i2; j++) + { + (*interArrivalCdf)(j) = prob; + } + i1 = i; + x = cvet_empiricalData[i]; + } + } + //last position == 1 + (*interArrivalCdf)(data_size - 1) = 1; + + delete_cvector(cvet_empiricalData); + return (interArrivalCdf); +} + +inline mat* DataProcessor::featureMatrix(list& empiricalData) +{ + int data_size = empiricalData.size(); + mat* featureMatrix = new mat(ones(data_size, 2)); + + int i = 0; + for (list::iterator it = empiricalData.begin(); + it != empiricalData.end(); it++) + { + (*featureMatrix)(i, 1) = *it; + i++; + } + + return (featureMatrix); + +} + +inline mat* DataProcessor::featureMatrix(const vec& empiricalData) +{ + int data_size = empiricalData.size(); + mat* featureMatrix = new mat(ones(data_size, 2)); + for (int i = 0; i < data_size; i++) + { + (*featureMatrix)(i, 1) = empiricalData(i); + } + + return (featureMatrix); +} + +inline double DataProcessor::computeCost(const mat& X, const vec& y, + const vec& theta) +{ + double J = .0; + double jtemp = .0; + int m = y.size(); + + for (int i = 0; i < m; i++) + { + jtemp = jtemp + pow(double(theta(0) + theta(1) * X(i, 1) - y(i)), 2); + + } + J = (1.0 / double(2 * m)) * jtemp; + + return (J); +} + +inline void DataProcessor::gradientDescendent(const mat& X, const vec& y, + const double learning_rate, const int num_iters, vec& theta, + vec& J_history) +{ + + int m = y.n_rows; //number of training examples + double temp1 = .0; + double temp2 = .0; + double delta1 = .0; + double delta2 = .0; + vec x = X.col(1); + + for (int i = 0; i < num_iters; i++) + { + temp1 = .0; + temp2 = .0; + delta1 = .0; + delta2 = .0; + + //slope + delta1 = sum(theta(0) + theta(1) * x - y) / double(m); + delta2 = sum((theta(0) + theta(1) * x - y) % x) / double(m); + + //linear regression + temp1 = theta(0) - learning_rate * delta1; + temp2 = theta(1) - learning_rate * delta2; + + theta(0) = temp1; + theta(1) = temp2; + + //Save the cost J in every iteration + J_history(i) = computeCost(X, y, theta); + + } + +} + +inline double DataProcessor::informationCriterion(const vec& data, + const string& functionName, const vec& paramVet, + const string& criterion) +{ + double criterionVal = .0; + double nEstimatedParameters = double(paramVet.size()); + double likehoodLogVal = logLikehood(data, functionName, paramVet); + double logDataLen = log(double(data.size())); + + if (criterion == "aic") + { + criterionVal = 2 * nEstimatedParameters - 2 * likehoodLogVal; + } + else if (criterion == "bic") + { + criterionVal = nEstimatedParameters * logDataLen - 2 * likehoodLogVal; + } + else + { + cout << "\nInvalid functionName or no functionName selected: " + << functionName << endl; + printf("Selecting default criterion: AIC\n"); + criterionVal = 2 * nEstimatedParameters - 2 * likehoodLogVal; + } + + return (criterionVal); + +} + +inline double DataProcessor::logLikehood(const vec& data, + const string& functionName, const vec& paramVet) +{ + double param1 = paramVet(0); + double param2 = paramVet(1); + double m = data.size(); + double L = .0; + int i = 0; + vec data_prob = zeros(size(data)); + + if (functionName == "weibull") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_weibull(data(i), param1, param2); + } + else if (functionName == "normal") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_normal(data(i), param1, param2); + } + else if (functionName == "uniform") + { + data_prob = ones(size(data)) * pdf_uniform(param1, param2); + } + else if (functionName == "exponential") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_exponential(data(i), param1); + } + else if (functionName == "pareto") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_pareto(data(i), param1, param2); + } + else if (functionName == "cauchy") + { + for (i = 0; i < m; i++) + data_prob(i) = pdf_cauchy(data(i), param1, param2); + } + else + { + cout << "Warning, no valid stochastic function selected: " + << functionName << endl; + printf("Likehood logarithm seted to -Inf (worst as possible)\n"); + return (datum::inf); + } + + L = sum(log(data_prob)); + return (L); + +} + +inline double DataProcessor::pdf_weibull(double x, double alpha, double betha) +{ + if (x >= 0) + return ((alpha / pow(betha, alpha)) * pow(x, alpha - 1.0) + * exp(-(pow(x / betha, alpha)))); + else + return (.0); +} + +inline double DataProcessor::cdf_weibull(double x, double alpha, double betha) +{ + if (x >= 0) + return (1.0 - exp(-pow(x / betha, alpha))); + else + return (.0); +} + +inline double DataProcessor::pdf_exponential(double x, double lambda) +{ + if (x >= 0) + return (lambda * exp(-lambda * x)); + else + return (.0); + +} + +inline double DataProcessor::cdf_exponential(double x, double lambda) +{ + if (x >= 0) + return (1.0 - exp(-lambda * x)); + else + return (.0); +} + +inline double DataProcessor::pdf_pareto(double x, double alpha, double xm) +{ + if (x >= xm) + return (alpha * pow(xm, alpha) / (pow(x, alpha + 1.0))); + else + return (.0); +} + +inline double DataProcessor::cdf_pareto(double x, double alpha, double xm) +{ + if (x >= xm) + return (1.0 - pow(xm / x, alpha)); + else + return (.0); +} + +inline double DataProcessor::pdf_cauchy(double x, double gamma, double x0) +{ + return (1 / (datum::pi * gamma) + * (pow(gamma, 2) / (pow(x - x0, 2) + pow(gamma, 2)))); +} + +inline double DataProcessor::cdf_cauchy(double x, double gamma, double x0) +{ + return ((1 / datum::pi) * atan((x - x0) / (gamma)) + 0.5); +} + +inline double DataProcessor::pdf_normal(double x, double mu, double sigma) +{ + return (1 / (sqrt(2 * datum::pi) * sigma) + * exp(-0.5 * pow((x - mu) / sigma, 2))); +} + +inline double DataProcessor::cdf_normal(double x, double mu, double sigma) +{ + return (0.5 * (1 + erf((x - mu) / (sigma * sqrt(2))))); +} + +inline double DataProcessor::pdf_uniform(double x_min, double x_max) +{ + return (1.0 / (x_max - x_min)); +} + +inline double DataProcessor::cdf_uniform(double x, double x_min, double x_max) +{ + if (x < x_min) + return (0); + else if (x > x_max) + return (1); + else + return ((x - x_min) / (x_max - x_min)); +} + +#ifdef TEST_FUNCTIONS + +void DataProcessor::printTestResult(string testName, bool result) +{ + string outRes; + if (result == true) + outRes = "ok"; + else + outRes = "failed"; + + cout << testName << ":\t\t" << outRes << endl; +} + +bool DataProcessor::compareDouble(double val1, double val2) +{ + double error = 0; + + error = fabs(double(val1) - double(val2)); + if (error > double(1e-5)) + return (false); + else + return (true); + +} + +bool DataProcessor::compareDouble(double val1, double val2, double acErr) +{ + double error = 0; + + error = fabs(double(val1) - double(val2)); + if (error > double(acErr)) + return (false); + else + return (true); + +} + +bool DataProcessor::compareMat(mat& mat1, mat& mat2) +{ + int mat1_nc = mat1.n_cols; + int mat1_nr = mat1.n_rows; + int mat2_nc = mat2.n_cols; + int mat2_nr = mat2.n_rows; + + if ((mat1_nc != mat2_nc) || (mat1_nr != mat2_nr)) + { + cout << "mat1.n_cols and mat2.n_cols dont match. " << mat1_nc << ":" + << mat2_nc << " " << mat1_nr << ":" << mat2_nr << endl; + return (false); + } + for (int i = 0; i < mat1_nr; i++) + { + for (int j = 0; j < mat1_nc; j++) + { + if (compareDouble(mat1(i, j), mat2(i, j), 1e-5)) + { + //cout << " mat1(" << i << ", " << j << " ) = " << mat1(i,j); + //cout << " mat2(" << i << ", " << j << " ) = " << mat2(i,j); + return (false); + } + } + } + + return (true); +} + +void DataProcessor::save_data_on_file(const string& fileName, const mat& vet1, + const mat& vet2) +{ + string file_out = fileName + ".txt"; + int m = vet1.size(); + + ofstream writeOnFile(file_out, ios::out); + if (!writeOnFile) + { + cerr << "file could not be oppeded" << endl; + exit(1); + } + + for (int i = 0; i < m; i++) + { + writeOnFile << vet1(i) << " " << vet2(i) << endl; + } + +} + +void DataProcessor::save_data_on_file(const string& fileName, + list& theList) +{ + string file_out = fileName + ".txt"; + //int m = theList.size(); + + ofstream writeOnFile(file_out, ios::out); + if (!writeOnFile) + { + cerr << "file could not be oppeded" << endl; + exit(1); + } + + for (list::iterator it = theList.begin(); it != theList.end(); it++) + { + //list::iterator it = randInt_list1.begin(); + writeOnFile << *it << " \n"; + } +} + +bool DataProcessor::test_Mode() +{ + + int randint1[] = + { 1, 8, 1, 13, 9, 2, 1, 15, 4, 3, 10, 4, 13, 2, 14, 7, 7 }; + int randint1_mode = 1; + list l_randint1; + vectorC_to_list(&l_randint1, randint1, 17); + + int randint2[] = + { 5, 3, 6, 8, 14, 9, 11, 9, 11, 15, 8, 7, 12, 13, 14 }; + int randint2_mode = 8; + list l_randint2; + vectorC_to_list(&l_randint2, randint2, 15); + + int randint3[] = + { 9, 10, 6, 3, 13, 13, 14, 7, 7, 1, 5, 1, 8, 5, 9, 2, 3, 4, 5, 6, 6, 6 }; + int randint3_mode = 6; + list l_randint3; + vectorC_to_list(&l_randint3, randint3, 22); + + int randint4[] = + { 2, 1 }; + int randint4_mode = 1; + list l_randint4; + vectorC_to_list(&l_randint4, randint4, 2); + + int randint5[] = + { 1, 1, 1, 1, 1, 2, 2, 2, 2, 2 }; + int randint5_mode = 1; + list l_randint5; + vectorC_to_list(&l_randint5, randint5, 10); + + if (mode(&l_randint1) != randint1_mode) + return (false); + if (mode(&l_randint2) != randint2_mode) + return (false); + if (mode(&l_randint3) != randint3_mode) + return (false); + if (mode(&l_randint4) != randint4_mode) + return (false); + if (mode(&l_randint5) != randint5_mode) + return (false); + + return (true); +} + +bool DataProcessor::test_QuickSort() +{ + int randIntA[] = + { 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; + int randIntA_size = 18; + int randIntA_sorted[] = + { 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9 }; + int randIntB[] = + { 9, 2, 3, 3, 12, 15, 8, 14, 2, 7, 4, 6, 10, 2, 12 }; + int randIntB_size = 15; + int randIntB_sorted[] = + { 2, 2, 2, 3, 3, 4, 6, 7, 8, 9, 10, 12, 12, 14, 15 }; + double randDoubleA[] = + { 0.20872, 12.25501, 5.88210, 2.77962, 8.74916, 2.97454, 4.39641, 12.19733, + 4.66014, 4.52477, 5.19375, 12.11314, 13.35458, 11.56941, 6.59435 }; + int randDoubleA_size = 15; + double randDoubleA_sorted[] = + { 0.20872, 2.77962, 2.97454, 4.39641, 4.52477, 4.66014, 5.19375, 5.88210, + 6.59435, 8.74916, 11.56941, 12.11314, 12.19733, 12.25501, 13.35458 }; + + quickSort(randIntA, 0, randIntA_size - 1); + + if (isEqual(randIntA, randIntA_sorted, randIntA_size) == false) + { + return (false); + } + + quickSort(randIntB, 0, randIntB_size - 1); + if (isEqual(randIntB, randIntB_sorted, randIntB_size) == false) + { + return (false); + } + + quickSort(randDoubleA, 0, randDoubleA_size - 1); + if (isEqual(randDoubleA, randDoubleA_sorted, randDoubleA_size) == false) + { + return (false); + } + + return (true); + +} + +bool DataProcessor::test_list_tocvector() +{ + list randInt_list1 = + { 9, 2, 3, 3, 12, 15, 8, 14, 2, 7, 4, 6, 10, 2, 12 }; + list randInt_list2 = + { 2.2, 2.111, 3.16, 6.66, 13, 2.61 }; + list randInt_list3 = + { 1, 2, 3, 4, 5, 6, 6, 5, 4, 3, 2, 1 }; + + int* cvet1 = NULL; + double* cvet2 = NULL; + int* cvet3 = NULL; + + cvet1 = list_to_cvector(&randInt_list1); + cvet2 = list_to_cvector(&randInt_list2); + cvet3 = list_to_cvector(&randInt_list3); + + int i = 0; + for (list::iterator it = randInt_list1.begin(); + it != randInt_list1.end(); it++) + { + if (cvet1[i] != *it) + { + return (false); + } + //cout << *it << " "; + i++; + } + i = 0; + for (list::iterator it = randInt_list2.begin(); + it != randInt_list2.end(); it++) + { + if (cvet2[i] != *it) + { + return (false); + } + //cout << *it << " "; + i++; + } + i = 0; + for (list::iterator it = randInt_list3.begin(); + it != randInt_list3.end(); it++) + { + if (cvet3[i] != *it) + { + return (false); + } + //cout << *it << " "; + i++; + } + + delete_cvector(cvet1); + delete_cvector(cvet2); + delete_cvector(cvet3); + + return (true); +} + +bool DataProcessor::test_empiricalCdf() +{ + list interArrival_sample = + { 5.0000e-07, 1.5000e-06, 1.5000e-06, 2.5000e-06, 2.5000e-06, 3.5000e-06, + 4.5000e-06, 7.5000e-06, 1.2500e-05, 1.9500e-05, 3.1500e-05, + 4.3500e-05, 6.0500e-05, 7.6500e-05, 1.1050e-04, 1.4050e-04, + 1.8150e-04, 2.1150e-04, 2.3350e-04, 2.4350e-04, 2.5650e-04, + 3.0350e-04, 4.1250e-04, 1.3655e-03, 1.1593e-02, 3.2483e-02, + 8.1235e-02, 2.0939e-01, 5.0755e-01, 1.7351e+00 }; + vec emCdf_octave = + { 0.033333, 0.100000, 0.100000, 0.166667, 0.166667, 0.200000, 0.233333, + 0.266667, 0.300000, 0.333333, 0.366667, 0.400000, 0.433333, + 0.466667, 0.500000, 0.533333, 0.566667, 0.600000, 0.633333, + 0.666667, 0.700000, 0.733333, 0.766667, 0.800000, 0.833333, + 0.866667, 0.900000, 0.933333, 0.966667, 1.000000 }; + //emCdf_octave = emCdf_octave.t(); + + vec* emCdf_cpp = empiricalCdf(interArrival_sample); + + int list_size = interArrival_sample.size(); + for (int i = 0; i < list_size; i++) + { + if (!compareDouble(emCdf_octave(i), (*emCdf_cpp)(i), 1e-6)) + { + cout << "cdf error @ " << "i:" << i << " res:" << (*emCdf_cpp)(i, 0) + << " expected:" << emCdf_octave(i, 0) << endl; + return (false); + } + } + + delete emCdf_cpp; + return (true); +} + +bool DataProcessor::test_computeCost() +{ + list interArrival_sample = + { 5.0000e-07, 1.5000e-06, 1.5000e-06, 2.5000e-06, 2.5000e-06, 3.5000e-06, + 4.5000e-06, 7.5000e-06, 1.2500e-05, 1.9500e-05, 3.1500e-05, + 4.3500e-05, 6.0500e-05, 7.6500e-05, 1.1050e-04, 1.4050e-04, + 1.8150e-04, 2.1150e-04, 2.3350e-04, 2.4350e-04, 2.5650e-04, + 3.0350e-04, 4.1250e-04, 1.3655e-03, 1.1593e-02, 3.2483e-02, + 8.1235e-02, 2.0939e-01, 5.0755e-01, 1.7351e+00 }; + mat* X = featureMatrix(interArrival_sample); + vec emCdf_octave = + { 0.033333, 0.100000, 0.100000, 0.166667, 0.166667, 0.200000, 0.233333, + 0.266667, 0.300000, 0.333333, 0.366667, 0.400000, 0.433333, + 0.466667, 0.500000, 0.533333, 0.566667, 0.600000, 0.633333, + 0.666667, 0.700000, 0.733333, 0.766667, 0.800000, 0.833333, + 0.866667, 0.900000, 0.933333, 0.966667, 1.000000 }; + //emCdf_octave = emCdf_octave.t(); + double J_expected1 = 0.17535; + double J_expected2 = 1.5341; + double J_expected3 = 9.0244; + + vec theta = zeros(2); + + double J = computeCost(*X, emCdf_octave, theta); + if (!compareDouble(J, J_expected1, 0.001)) + { + //cout << "J1 = " << J << "\nJ_expected1 = "<< J_expected1 << endl; + return (false); + } + theta(0) = 2; + theta(1) = 2; + J = computeCost(*X, emCdf_octave, theta); + if (!compareDouble(J, J_expected2, 0.001)) + { + //cout << "J2 = " << J << "\nJ_expected2 = "<< J_expected2 << endl; + return (false); + } + theta(0) = 1.5; + theta(1) = 12; + J = computeCost(*X, emCdf_octave, theta); + if (!compareDouble(J, J_expected3, 0.001)) + { + //cout << "J3 = " << J << "\nJ_expected3 = "<< J_expected3 << endl; + return (false); + } + + delete X; + return (true); +} + +bool DataProcessor::test_informationCriterion() +{ + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + + int m = interArrival.size(); + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + //gradient descendent + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + vec y = log(-log(1.0 + diferential - *interArrivalCdf)); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + double weibull_alpha = theta(1); + double weibull_betha = exp(-theta(0) / theta(1)); + vec paramVec = + { weibull_alpha, weibull_betha }; + double weibull_bic = informationCriterion(interArrival, "weibull", paramVec, + "bic"); + double weibull_aic = informationCriterion(interArrival, "weibull", paramVec, + "aic"); + + if (!compareDouble(weibull_bic, -33712.7042, 0.001)) + return (false); + else if (!compareDouble(weibull_aic, -33724.6567, 0.001)) + return (false); + + return (true); +} + +bool DataProcessor::test_pdf_weibull() +{ + double alpha = 1.5000; + double betha = 0.3; + vec data = + { 0.010000, 2.300000, 0.500000 }; + vec dataprob_eval1 = + { 9.0733e-01, 8.3571e-09, 7.5066e-01 }; + vec dataprob_test = zeros(3); + + dataprob_test(0) = pdf_weibull(data(0), alpha, betha); + dataprob_test(1) = pdf_weibull(data(1), alpha, betha); + dataprob_test(2) = pdf_weibull(data(2), alpha, betha); + + if (compareDouble(dataprob_test(0), dataprob_eval1(0)) + && compareDouble(dataprob_test(1), dataprob_eval1(1)) + && compareDouble(dataprob_test(2), dataprob_eval1(2))) + { + return (true); + } + + return (false); +} + +bool DataProcessor::test_cdf_weibull() +{ + double alpha = 0.5; + double betha = 1.5; + vec data = + { 0.010000, 2.300000, 0.500000 }; + vec dataprob_eval1 = + { 0.078405, 0.710117, 0.438616 }; + vec dataprob_test = zeros(3); + + dataprob_test(0) = cdf_weibull(data(0), alpha, betha); + dataprob_test(1) = cdf_weibull(data(1), alpha, betha); + dataprob_test(2) = cdf_weibull(data(2), alpha, betha); + //cout << dataprob_test(0) << " : " << dataprob_test(1) << " : " << dataprob_test(2) << endl; + + if (compareDouble(dataprob_test(0), dataprob_eval1(0)) + && compareDouble(dataprob_test(1), dataprob_eval1(1)) + && compareDouble(dataprob_test(2), dataprob_eval1(2))) + { + return (true); + } + + return (false); +} + +bool DataProcessor::test_gradientDescendent() +{ + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + + int m = interArrival.size(); + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + //gradient descendent + int iterations = 1500; + double learning_rate = 0.01; + vec theta = zeros(2); + vec J_history = zeros(iterations); + + vec y = log(-log(1.0 + diferential - *interArrivalCdf)); + vec x = log(interArrival); + mat* X = featureMatrix(x); + + gradientDescendent(*X, y, learning_rate, iterations, theta, J_history); + + //expected values + double Jlast = 0.083359; + double theta0 = 1.660453; + double theta1 = 0.248811; + + if (!compareDouble(J_history(iterations - 1), Jlast)) + + { + return (false); + } + else if (!compareDouble(theta(0), theta0)) + { + return (false); + } + else if (!compareDouble(theta(1), theta1)) + { + return (false); + } + + delete interArrivalCdf; + delete X; + return (true); + +} + +bool DataProcessor::test_pdf_exponential() +{ + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double lambda1 = 0.50000; + vec val1 = + { 0.49751, 0.15832, 0.38940 }; + vec res1 = zeros(3); + + double lambda2 = 3.0; + vec val2 = + { 2.9113366, 0.0030234, 0.6693905 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = pdf_exponential(data(i), lambda1); + res2(i) = pdf_exponential(data(i), lambda2); + + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + + } + + return (true); +} + +bool DataProcessor::test_cdf_exponential() +{ + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double lambda1 = 0.50000; + vec val1 = + { 0.0049875, 0.6833632, 0.2211992 }; + vec res1 = zeros(3); + + double lambda2 = 3.0; + vec val2 = + { 0.029554, 0.998992, 0.776870 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = cdf_exponential(data(i), lambda1); + res2(i) = cdf_exponential(data(i), lambda2); + + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + + return (true); +} + +bool DataProcessor::test_pdf_pareto() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double alpha1 = 0.50000; + double xm1 = 1.0; + vec val1 = + { 0, 0.14334, 0 }; + vec res1 = zeros(3); + double xm2 = 0.00001; + double alpha2 = 3.0; + vec val2 = + { 3.0000e-07, 1.0720e-16, 4.8000e-14 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = pdf_pareto(data(i), alpha1, xm1); + res2(i) = pdf_pareto(data(i), alpha2, xm2); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + + return (true); +} + +bool DataProcessor::test_cdf_pareto() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + + double alpha1 = 0.50000; + double xm1 = 0.001; + vec val1 = + { 0.68377, 0.97915, 0.95528 }; + vec res1 = zeros(3); + double xm2 = 0.2; + double alpha2 = 1; + vec val2 = + { 0, 0.91304, 0.60000 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = cdf_pareto(data(i), alpha1, xm1); + res2(i) = cdf_pareto(data(i), alpha2, xm2); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + return (true); +} + +bool DataProcessor::test_pdf_cauchy() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + double gamma1 = 0.50000; + double x01 = 0.001; + + vec val1 = + { 0.636414, 0.028752, 0.318947 }; + vec res1 = zeros(3); + double x02 = 2; + double gamma2 = 2; + + vec val2 = + { 0.079976, 0.155653, 0.101859 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = pdf_cauchy(data(i), gamma1, x01); + res2(i) = pdf_cauchy(data(i), gamma2, x02); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + return (true); +} + +bool DataProcessor::test_cdf_cauchy() +{ + + vec data = + { 0.010000, 2.300000, 0.500000 }; + double gamma1 = 0.50000; + double x01 = 0.001; + + vec val1 = + { 0.50573, 0.93183, 0.74968 }; + vec res1 = zeros(3); + double x02 = 2; + double gamma2 = 2; + + vec val2 = + { 0.25080, 0.54739, 0.29517 }; + vec res2 = zeros(3); + + for (int i = 0; i < 3; i++) + { + //exponential + res1(i) = cdf_cauchy(data(i), gamma1, x01); + res2(i) = cdf_cauchy(data(i), gamma2, x02); + + //cout << "res1(i) " << res1(i) << ", res2(i) " << res2(i) << endl; + if (!compareDouble(res1(i), val1(i))) + { + return (false); + } + if (!compareDouble(res2(i), val2(i))) + { + return (false); + } + } + return (true); +} + +bool DataProcessor::test_fitModels() +{ + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + + int m = interArrival.size(); + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + //list of expected values + double weibull_alpha = 0.24881; + double weibull_betha = 0.0012639; + double normal_mu = 0.054792; + double normal_sigma = 0.205602; + double exponentialMe_lambda = 18.250783; + double exponentialLr_lambda = 2.023115; + double paretoLr_alpha = 0.225451; + double paretoLr_xm = 0.000000; + double paretoMlh_alpha = 0.171674; + double paretoMlh_xm = 0.000000; + double cauchy_gamma = 0.000067; + double cauchy_x0 = 0.005750; + double acErr = 0.001; + + vec paramVec = zeros(2); + vec infoCriterion = zeros(2); + + weibullFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), weibull_alpha, acErr)) + { + cout << "weibullFitting alpha" << endl; + return (false); + } + if (!compareDouble(paramVec(1), weibull_betha, acErr)) + { + cout << "weibullFitting betha" << endl; + return (false); + } + + normalFitting(interArrival, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), normal_mu, acErr)) + { + cout << "normalFitting mu" << endl; + return (false); + } + if (!compareDouble(paramVec(1), normal_sigma, acErr)) + { + cout << "normalFitting sigma" << endl; + return (false); + } + + exponentialMeFitting(interArrival, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), exponentialMe_lambda, acErr)) + { + cout << "exponentialLrFitting lambda" << endl; + return (false); + } + + exponentialLrFitting(interArrival, *interArrivalCdf, paramVec, + infoCriterion); + if (!compareDouble(paramVec(0), exponentialLr_lambda, acErr)) + { + cout << exponentialLr_lambda << ":" << paramVec(0) << endl; + cout << "exponentialLrFitting lambda" << endl; + return (false); + } + + paretoLrFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), paretoLr_alpha, acErr)) + { + cout << "paretoLrFitting alpha" << endl; + return (false); + } + if (!compareDouble(paramVec(1), paretoLr_xm, acErr)) + { + cout << "paretoLrFitting xm" << endl; + return (false); + } + + paretoMlhFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), paretoMlh_alpha, acErr)) + { + cout << "paretoMlhFitting alpha" << endl; + return (false); + } + if (!compareDouble(paramVec(1), paretoMlh_xm, acErr)) + { + cout << "paretoMlhFitting xm" << endl; + return (false); + } + + cauchyFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + if (!compareDouble(paramVec(0), cauchy_gamma, acErr)) + { + cout << "cauchyFitting" << endl; + return (false); + } + if (!compareDouble(paramVec(1), cauchy_x0, acErr)) + { + return (false); + } + + delete interArrivalCdf; + + return (true); +} + +bool DataProcessor::test_modelSelection() +{ + + //mat M; + //M.load("CppAlgorithms/data_sample.txt"); + //vec interArrival = sort(M.col(3)) + min_time; + vec interArrival = sort(interArrivalSample) + min_time; + int m = interArrival.size(); + + list list_interArrival; + vec* interArrivalCdf; + for (int i = 0; i < m; i++) + { + list_interArrival.push_back(interArrival(i)); + } + interArrivalCdf = empiricalCdf(list_interArrival); + + StochasticModelFit* modelVet = NULL; + modelVet = fitModels(list_interArrival, "aic"); + + //int numberOfModels = modelVet[0].size; + //for (int i = 0; i < numberOfModels; i++) + // cout << modelVet[i].modelName << " " << "modelVet[" << i << "] = " + // << modelVet[i].aic << endl; + + delete interArrivalCdf; + delete[] modelVet; + return (true); +} + +#endif //TEST_FUNCTIONS diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/f8/107344d9a2b500161808a5c64fd2084a b/.metadata/.plugins/org.eclipse.core.resources/.history/f8/107344d9a2b500161808a5c64fd2084a new file mode 100644 index 0000000..2ba103a --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/f8/107344d9a2b500161808a5c64fd2084a @@ -0,0 +1,102 @@ +/* + * ConstantsDeinition.h + * + * Created on: 4 de jul de 2016 + * Author: apaschoalon + */ + +#ifndef DEFINES_H_ +#define DEFINES_H_ + +/******************************************************************************* + * Defines + ******************************************************************************/ + + +/******************************************************************************* + * Constants + ******************************************************************************/ +//packet analysis features +const double FILE_CUT_TIME = 0.1; +const double SESSION_CUT_TIME = 30; +const int PACKET_SIZE_MODE_CUT_VALUE = 500; + +const unsigned short int PROTOCOL__NULL = 0; +const unsigned short int PROTOCOL__ETHERNET = 1; +const unsigned short int PROTOCOL__IPV4 = 2; +const unsigned short int PROTOCOL__IPV6 = 3; +const unsigned short int PROTOCOL__ARP = 4; +const unsigned short int PROTOCOL__ICMP = 5; +const unsigned short int PROTOCOL__ICMPV6 = 6; +const unsigned short int PROTOCOL__TCP = 7; +const unsigned short int PROTOCOL__UDP = 8; +const unsigned short int PROTOCOL__DCCP = 9; +const unsigned short int PROTOCOL__GRE = 10; +const unsigned short int PROTOCOL__SCTP = 11; +const unsigned short int PROTOCOL__HTTP = 12; +const unsigned short int PROTOCOL__HTML = 13; +const unsigned short int PROTOCOL__SMTP = 14; + + +/******************************************************************************* + * Types + ******************************************************************************/ + +// Debug defines +//#define DEBUG 1 // basic debug +//#define DEBUG_DataProcessor_calculate_loop 1 +//#define DEBUG_DataProcessor_calculate 1 +//#define DEBUG_NetworkFlow 1 +//#define DEBUG_flowThread 1 +//#define DEBUG_DatabaseInterface 1 +//#define DEBUG_NetworkTrace_exec 1 + +#define DEBUG_ + +//Math +#define MEGA_POWER 1000000 + +//Protocol code +typedef unsigned short int protocol_code; +#define IPV4_CODE 2048 +#define ARP_CODE 2054 +#define ARP_CODE_REV 2056 +#define IPV6_CODE 34525 +#define ICMP_CODE 1 +#define TCP_CODE 6 +#define UDP_CODE 17 +#define DCCP_CODE 33 +#define GRE_CODE 47 +#define ICMPV6_CODE 58 +#define SCTP_CODE 132 + +//Protocols +typedef unsigned short int protocol; + + +//Stochastic models +typedef unsigned short int stochastic_model; +#define WEIBULL "weibull" +#define NORMAL "normal" +#define EXPONENTIAL_MEAN "exponential-mean" +#define EXPONENTIAL_LINEAR_REGRESSION "exponential-linear-regression" +#define PARETO_LINEAR_REGRESSION "pareto-linear-regression" +#define PARETO_MAXIMUM_LIKEHOOD "pareto-maximum-likehood" +#define CAUCHY "cauchy" +#define CONSTANT "constant" +#define NO_MODEL "no-model-selected" + + + + + +//Miscellaneous +//typedef string ip_addr; +typedef int port_number; +#define TEST_FUNCTIONS 1 //execute regression testes +#define HLINE "----------" +#define TAB "::" +const int MAX_TRANSPORT_PORT_NUMBER = 65535; + + +#endif /* DEFINES_H_ */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/CompactTraceDescriptor/.indexes/e4/properties.index b/.metadata/.plugins/org.eclipse.core.resources/.projects/CompactTraceDescriptor/.indexes/e4/properties.index index 9e3942938902fdecf7c32ed82cf33c804ca3cf92..5be46b3108d2a0c28e230a2391d9a35ce683a40d 100644 GIT binary patch delta 46 zcmX@Zy^x2Mk%56hcq3~GtAwO}aZ$2*RB+!2l>31cd+q diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/CompactTraceDescriptor/.markers.snap b/.metadata/.plugins/org.eclipse.core.resources/.projects/CompactTraceDescriptor/.markers.snap index d69a10203ddce61216659f3dd045af383bd1a68e..1b4c5b290ec13711a38b2cf2a0bd59287f3f7430 100644 GIT binary patch literal 27527 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 delta 8 PcmZp_&Ui|F!zp0^5^MwB diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/CompactTraceDescriptor/.syncinfo.snap b/.metadata/.plugins/org.eclipse.core.resources/.projects/CompactTraceDescriptor/.syncinfo.snap index a7ddbe1e8f8cbc85b7bfedce1e161c54dc9a4ec5..764f093c6e9564a48fee424860af30e803ba1cbc 100644 GIT binary patch delta 14 ScmXRoz%-#?qCf%|2><{o=mh2f delta 5 McmX@WR4}0c00ylBGXMYp diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/Prototypes/.markers.snap b/.metadata/.plugins/org.eclipse.core.resources/.projects/Prototypes/.markers.snap index 1253ec8ad8c6db053a75de6169f668d2efcd4ee5..b9a8e2c2889f97b7dd9400f28ede725b6c70cf06 100644 GIT binary patch delta 26 ScmXqLV47esQ9uC$2><|J&IYOg delta 5 McmZo*GMHch00eCTa{vGU diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/Prototypes/.syncinfo.snap b/.metadata/.plugins/org.eclipse.core.resources/.projects/Prototypes/.syncinfo.snap index 1253ec8ad8c6db053a75de6169f668d2efcd4ee5..b9a8e2c2889f97b7dd9400f28ede725b6c70cf06 100644 GIT binary patch delta 26 ScmXqLV47esQ9uC$2><|J&IYOg delta 5 McmZo*GMHch00eCTa{vGU diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/RemoteSystemsTempFiles/.markers.snap b/.metadata/.plugins/org.eclipse.core.resources/.projects/RemoteSystemsTempFiles/.markers.snap index a7ddbe1e8f8cbc85b7bfedce1e161c54dc9a4ec5..764f093c6e9564a48fee424860af30e803ba1cbc 100644 GIT binary patch delta 14 ScmXRoz%-#?qCf%|2><{o=mh2f delta 5 McmX@WR4}0c00ylBGXMYp diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/RemoteSystemsTempFiles/.syncinfo.snap b/.metadata/.plugins/org.eclipse.core.resources/.projects/RemoteSystemsTempFiles/.syncinfo.snap index a7ddbe1e8f8cbc85b7bfedce1e161c54dc9a4ec5..764f093c6e9564a48fee424860af30e803ba1cbc 100644 GIT binary patch delta 14 ScmXRoz%-#?qCf%|2><{o=mh2f delta 5 McmX@WR4}0c00ylBGXMYp diff --git a/.metadata/.plugins/org.eclipse.core.resources/.root/.markers.snap b/.metadata/.plugins/org.eclipse.core.resources/.root/.markers.snap index a7ddbe1e8f8cbc85b7bfedce1e161c54dc9a4ec5..764f093c6e9564a48fee424860af30e803ba1cbc 100644 GIT binary patch delta 14 ScmXRoz%-#?qCf%|2><{o=mh2f delta 5 McmX@WR4}0c00ylBGXMYp diff --git a/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources b/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources index a09852e785b20387cceeb9032b849527b9f16b1b..76922d7fe5c90624be8158ad623de065801c9985 100644 GIT binary patch delta 377 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 - - + + ModelMigrationProcessor.001 activeSchemeId:org.eclipse.ui.defaultAcceleratorConfiguration - + @@ -12,9 +12,9 @@ topLevel shellMaximized - - - + + + persp.actionSet:org.eclipse.mylyn.doc.actionSet persp.actionSet:org.eclipse.mylyn.tasks.ui.navigation @@ -50,33 +50,33 @@ persp.newWizSC:org.eclipse.ui.editors.wizards.UntitledTextFileWizard persp.showIn:org.eclipse.ui.navigator.ProjectExplorer persp.viewSC:org.eclipse.pde.runtime.LogView - - - + + + org.eclipse.e4.primaryNavigationStack noFocus - - - + + + - + org.eclipse.e4.secondaryNavigationStack - - + + - - - + + + org.eclipse.e4.secondaryDataStack General - - + + - + persp.actionSet:org.eclipse.mylyn.doc.actionSet persp.actionSet:org.eclipse.mylyn.tasks.ui.navigation @@ -133,3134 +133,3212 @@ persp.actionSet:org.eclipse.debug.ui.profileActionSet persp.viewSC:org.eclipse.mylyn.tasks.ui.views.tasks persp.newWizSC:org.eclipse.mylyn.tasks.ui.wizards.new.repository.task - - - active - noFocus - - - - + + + + + + - - - - - - - + + + + + + + - - - - - - + + + + + + - - - - + + + + - + View categoryTag:Help - + View categoryTag:General - + ViewMenu menuContribution:menu - + - + View categoryTag:Help - - + + org.eclipse.e4.primaryDataStack EditorStack - - + active + noFocus + + Editor org.eclipse.cdt.ui.editor.CEditor removeOnHide + active + + menuContribution:popup + popup:#CEditorContext + popup:org.eclipse.cdt.ui.editor.CEditor.EditorContext + popup:#AbstractTextEditorContext + + + menuContribution:popup + popup:#CEditorRulerContext + popup:org.eclipse.cdt.ui.editor.CEditor.RulerContext + popup:#AbstractTextEditorRulerContext + + + menuContribution:popup + popup:#OverviewRulerContext + - - + + Editor org.eclipse.cdt.ui.editor.CEditor removeOnHide - + menuContribution:popup popup:#CEditorContext popup:org.eclipse.cdt.ui.editor.CEditor.EditorContext popup:#AbstractTextEditorContext - + menuContribution:popup popup:#CEditorRulerContext popup:org.eclipse.cdt.ui.editor.CEditor.RulerContext popup:#AbstractTextEditorRulerContext - + menuContribution:popup popup:#OverviewRulerContext - - + + Editor org.eclipse.cdt.ui.editor.CEditor removeOnHide + + menuContribution:popup + popup:#CEditorContext + popup:org.eclipse.cdt.ui.editor.CEditor.EditorContext + popup:#AbstractTextEditorContext + + + menuContribution:popup + popup:#CEditorRulerContext + popup:org.eclipse.cdt.ui.editor.CEditor.RulerContext + popup:#AbstractTextEditorRulerContext + + + menuContribution:popup + popup:#OverviewRulerContext + - - + + Editor org.eclipse.cdt.ui.editor.CEditor removeOnHide + + menuContribution:popup + popup:#CEditorContext + popup:org.eclipse.cdt.ui.editor.CEditor.EditorContext + popup:#AbstractTextEditorContext + + + menuContribution:popup + popup:#CEditorRulerContext + popup:org.eclipse.cdt.ui.editor.CEditor.RulerContext + popup:#AbstractTextEditorRulerContext + + + menuContribution:popup + popup:#OverviewRulerContext + - - + + Editor org.eclipse.cdt.ui.editor.CEditor removeOnHide - + menuContribution:popup popup:#CEditorContext popup:org.eclipse.cdt.ui.editor.CEditor.EditorContext popup:#AbstractTextEditorContext - + menuContribution:popup popup:#CEditorRulerContext popup:org.eclipse.cdt.ui.editor.CEditor.RulerContext popup:#AbstractTextEditorRulerContext - + menuContribution:popup popup:#OverviewRulerContext - + + + + Editor + org.eclipse.cdt.ui.editor.CEditor + removeOnHide + menuContribution:popup popup:#CEditorContext popup:org.eclipse.cdt.ui.editor.CEditor.EditorContext popup:#AbstractTextEditorContext - + menuContribution:popup popup:#CEditorRulerContext popup:org.eclipse.cdt.ui.editor.CEditor.RulerContext popup:#AbstractTextEditorRulerContext - + menuContribution:popup popup:#OverviewRulerContext - + View categoryTag:General - active - + ViewMenu menuContribution:menu - + menuContribution:popup popup:org.eclipse.ui.navigator.ProjectExplorer#PopupMenu - + menuContribution:popup popup:org.eclipse.ui.navigator.ProjectExplorer#PopupMenu - + menuContribution:popup popup:org.eclipse.ui.navigator.ProjectExplorer#PopupMenu - + menuContribution:popup popup:org.eclipse.ui.navigator.ProjectExplorer#PopupMenu - + menuContribution:popup popup:org.eclipse.ui.navigator.ProjectExplorer#PopupMenu - + - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + ViewMenu menuContribution:menu - + + menuContribution:popup + popup:#TranslationUnitOutlinerContext + + menuContribution:popup popup:#TranslationUnitOutlinerContext - + menuContribution:popup popup:#TranslationUnitOutlinerContext - + menuContribution:popup popup:#TranslationUnitOutlinerContext - + menuContribution:popup popup:#TranslationUnitOutlinerContext - + menuContribution:popup popup:#TranslationUnitOutlinerContext - + menuContribution:popup popup:#TranslationUnitOutlinerContext - + menuContribution:popup popup:#TranslationUnitOutlinerContext - + menuContribution:popup popup:#TranslationUnitOutlinerContext - + menuContribution:popup popup:#TranslationUnitOutlinerContext - + menuContribution:popup popup:#TranslationUnitOutlinerContext - + menuContribution:popup popup:#TranslationUnitOutlinerContext - + menuContribution:popup popup:#TranslationUnitOutlinerContext - + menuContribution:popup popup:#TranslationUnitOutlinerContext - + menuContribution:popup popup:#TranslationUnitOutlinerContext - + menuContribution:popup popup:#TranslationUnitOutlinerContext - + menuContribution:popup popup:#TranslationUnitOutlinerContext - + menuContribution:popup popup:#TranslationUnitOutlinerContext - + menuContribution:popup popup:#TranslationUnitOutlinerContext - + menuContribution:popup popup:#TranslationUnitOutlinerContext - + menuContribution:popup popup:#TranslationUnitOutlinerContext - + menuContribution:popup popup:#TranslationUnitOutlinerContext - + menuContribution:popup popup:#TranslationUnitOutlinerContext - + menuContribution:popup popup:#TranslationUnitOutlinerContext - + menuContribution:popup popup:#TranslationUnitOutlinerContext - + menuContribution:popup popup:#TranslationUnitOutlinerContext - + menuContribution:popup popup:#TranslationUnitOutlinerContext - + menuContribution:popup popup:#TranslationUnitOutlinerContext - + menuContribution:popup popup:#TranslationUnitOutlinerContext - + + menuContribution:popup + popup:#TranslationUnitOutlinerContext + + + menuContribution:popup + popup:#TranslationUnitOutlinerContext + + + menuContribution:popup + popup:#TranslationUnitOutlinerContext + + + menuContribution:popup + popup:#TranslationUnitOutlinerContext + + - + View categoryTag:General - + ViewMenu menuContribution:menu - + menuContribution:popup popup:org.eclipse.ui.views.TaskList popup:org.eclipse.ui.ide.MarkersView - + - + View categoryTag:Mylyn - + View categoryTag:General - + ViewMenu menuContribution:menu - + menuContribution:popup popup:org.eclipse.cdt.ui.CDTGlobalBuildConsole - + menuContribution:popup popup:org.eclipse.cdt.ui.CDTBuildConsole - + menuContribution:popup popup:org.eclipse.debug.ui.ProcessConsoleType.#ContextMenu - + menuContribution:popup popup:org.eclipse.cdt.ui.CDTGlobalBuildConsole - + menuContribution:popup popup:org.eclipse.cdt.ui.CDTBuildConsole - + menuContribution:popup popup:org.eclipse.debug.ui.ProcessConsoleType.#ContextMenu - + menuContribution:popup popup:org.eclipse.cdt.ui.CDTGlobalBuildConsole - + menuContribution:popup popup:org.eclipse.cdt.ui.CDTBuildConsole - + menuContribution:popup popup:org.eclipse.debug.ui.ProcessConsoleType.#ContextMenu - + menuContribution:popup popup:org.eclipse.cdt.ui.CDTGlobalBuildConsole - + menuContribution:popup popup:org.eclipse.cdt.ui.CDTBuildConsole - + menuContribution:popup popup:org.eclipse.cdt.ui.CDTGlobalBuildConsole - + menuContribution:popup popup:org.eclipse.cdt.ui.CDTBuildConsole - + + menuContribution:popup + popup:org.eclipse.debug.ui.ProcessConsoleType.#ContextMenu + + - + View categoryTag:C/C++ - - + + View categoryTag:General - + ViewMenu menuContribution:menu - + menuContribution:popup popup:org.eclipse.ui.views.ProblemView popup:org.eclipse.ui.ide.MarkersView - + menuContribution:popup popup:org.eclipse.ui.views.ProblemView popup:org.eclipse.ui.ide.MarkersView - + menuContribution:popup popup:org.eclipse.ui.views.ProblemView popup:org.eclipse.ui.ide.MarkersView - + menuContribution:popup popup:org.eclipse.ui.views.ProblemView popup:org.eclipse.ui.ide.MarkersView - + menuContribution:popup popup:org.eclipse.ui.views.ProblemView popup:org.eclipse.ui.ide.MarkersView - + - + View categoryTag:General - + View categoryTag:Make - + View categoryTag:C/C++ - - + + toolbarSeparator - + - + Draggable - + Opaque - + Opaque - + Opaque - + Opaque - + - + - + Opaque - + Opaque - + Opaque - - + + Opaque - + Opaque - + Opaque - + Opaque - + Opaque - + Opaque - + Opaque - + toolbarSeparator - + - + Draggable - + Opaque - + Opaque - + Opaque - + Opaque - + Opaque - + Opaque - + Opaque - + Opaque - + Opaque - + Opaque - + Draggable - + Opaque - + Opaque - + Opaque - + Opaque - + Opaque - + Opaque - + Opaque - + Opaque - + Opaque - + Opaque - + Draggable - + Opaque - + Opaque - + Opaque - + Opaque - + Draggable - + Opaque - + Opaque - + Opaque - + Opaque - + Opaque - + Opaque - + Opaque - + Opaque - + Draggable - + Opaque - + Opaque - + Opaque - + Opaque - + Opaque - + Opaque - + Opaque - + Opaque - + Opaque - + Opaque - + Opaque - + Opaque - + toolbarSeparator - + - + Draggable - + Opaque - + Opaque - + Opaque - + Opaque - + Opaque - - + + Opaque - + Opaque - + Opaque - + Draggable - + toolbarSeparator - + - + toolbarSeparator - + - + Draggable - + Opaque - + Opaque - + stretch SHOW_RESTORE_MENU - + Draggable HIDEABLE SHOW_RESTORE_MENU - - + + stretch - + Draggable - + Draggable - - + + TrimStack - - + + TrimStack - + TrimStack - + TrimStack - - - - - - - - - - - - + + + + + + + + + + + + platform:gtk - - - - + + + + platform:gtk - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + platform:gtk - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - - - + + + + + + - - + + - - + + - - + + - - + + - - - - + + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - + + - - + + - - - + + + type:user - + type:user - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + platform:gtk - - - - + + + + - - - - + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - + + - - - - - - - - - - + + + + + + + + + + - - - + + + - - - - + + + + - - - + + + - - - - - - - - + + + + + + + + - - - - - - - - + + + + + + + + - - + + - - - - - - + + + + + + - - - - + + + + - - - + + + - - + + - - - + + + - - + + - - - - - - + + + + + + - - + + - - + + - - + + - - + + - - - + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + - - - - + + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Editor - + View categoryTag:C/C++ - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Make - + View categoryTag:C/C++ - + View categoryTag:C/C++ - + View categoryTag:C/C++ - + View categoryTag:C/C++ - + View categoryTag:C/C++ - + View categoryTag:General - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Git - + View categoryTag:Git - + View categoryTag:Git - + View categoryTag:Git - + View categoryTag:Git - + View categoryTag:Help - + View categoryTag:Charts - + View categoryTag:Profiling - + View categoryTag:Profiling - + View categoryTag:Profiling - + View categoryTag:Profiling - + View categoryTag:Profiling - + View categoryTag:Profiling - + View categoryTag:Profiling - + View categoryTag:Profiling - + View categoryTag:Profiling - + View categoryTag:SystemTap - + View categoryTag:SystemTap - + View categoryTag:SystemTap - + View categoryTag:SystemTap - + View categoryTag:Profiling - + View categoryTag:Mylyn - + View categoryTag:Mylyn - + View categoryTag:Mylyn - + View categoryTag:Oomph - + View categoryTag:Connections - + View categoryTag:Remote Systems - + View categoryTag:Remote Systems - + View categoryTag:Remote Systems - + View categoryTag:Remote Systems - + View categoryTag:Remote Systems - + View categoryTag:Remote Systems - + View categoryTag:Remote Systems - + View categoryTag:General - + View categoryTag:General - + View categoryTag:Team - + View categoryTag:Team - + View categoryTag:LTTng - + View categoryTag:LTTng - + View categoryTag:LTTng - + View categoryTag:LTTng - + View categoryTag:LTTng - + View categoryTag:LTTng - + View categoryTag:LTTng - + View categoryTag:Tracing - + View categoryTag:Tracing - + View categoryTag:Tracing - + View categoryTag:Tracing - + View categoryTag:Tracing - + View categoryTag:Tracing - + View categoryTag:Tracing - + View categoryTag:Tracing - + View categoryTag:Tracing - + View categoryTag:General - + View categoryTag:General - + View categoryTag:Help - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:Dynamic Languages - + View categoryTag:Dynamic Languages - + View categoryTag:Ruby - + View categoryTag:Ruby - + View categoryTag:Ruby - + View categoryTag:Ruby - + View categoryTag:Tcl - + View categoryTag:Tcl - + View categoryTag:Tcl - + View categoryTag:Tcl - + View categoryTag:Tcl - + View categoryTag:Tcl - + View categoryTag:Tcl - + View categoryTag:Dynamic Languages - + View categoryTag:Dynamic Languages - + View categoryTag:Dynamic Languages - + View categoryTag:Dynamic Languages - + View categoryTag:Debug - + View categoryTag:Java - + View categoryTag:Java - + View categoryTag:Java Browsing - + View categoryTag:Java Browsing - + View categoryTag:Java Browsing - + View categoryTag:Java Browsing - + View categoryTag:Java - + View categoryTag:Java - + View categoryTag:Java - + View categoryTag:C/C++ - + View categoryTag:C/C++ - + View categoryTag:Man pages - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + - - - + + + - - - - - - - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + - - - - - - - - - + + + + + + + + + - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - - - - - + + + + + + - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CompactTraceDescriptor/Debug/src/DataProcessor.o b/CompactTraceDescriptor/Debug/src/DataProcessor.o index b7e8ab4c1dd300807f7294b13131fd337fb0cfd8..59787c11aa881d8b16b2095c1c021d11119e7491 100644 GIT binary patch literal 2898288 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

4nWq7v@pt=4M$G+KBUBVEib2mPMN%l;v#m8 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�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⋙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

QrW-NoWbk%ucIDnx8tVRqu2RX;=h=8nJ4( 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

>bXl(u_ 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 z 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

k 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 diff --git a/CompactTraceDescriptor/Debug/src/DummyFlow.o b/CompactTraceDescriptor/Debug/src/DummyFlow.o index d78978053cd9580245f664af20d82a26a7f27655..282d004899afbd2a75c9d2af4630ee9203849db4 100644 GIT binary patch delta 234838 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

eQk%=mWz5ux<9Y=hIsU1AXAl$mMFhWriwA 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 U?ltmvQEDyMdMzltCgslm159U)g8%>k delta 234200 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

qHK!Jf$X6aSr21^g z4)Mc8{e)ZI;o^l?RmE;i)KO)Mf0wUZW!>6L{x*{wVTF`%v&ubOy#8n_d-W2Ly-*sr zhw$VTS8o9$M84K4VnriN7DePM{W*K}gJVZhMQE|x$jJY|#^HKs&+Rw0Rhi{=XNX&L z6+(%k$7X_W4_ldU4E*04dx&b3P z>2x&iWy>lii=@6bJ)oZ*6DY#d>JL|!QK5E-VfNysBBIS$UFvyW<@n$wspUH2U&*)H z(?DhI`Ljv93RjFNiC7OEqlU&F_4xNOo@?hb z#?MbN#@Y?OWAxVeiR(d)Z*9%?SP|WngEW3hLDn7j9c1p)3G&KvkvXhY2cPwLNn?+C z`0bMFc5h6Q$kcq0xai@{=K~nYTIKONfoh=qphJ4s7+?2A+pO$$?T8i7t+uSj9u-jQ zcs|c5&imE!j-zjHpL=`zr+q*LslQTw1;?yTJ_}q|V~+yMlX~RijtS@j?S6(TL?XHC*-{Ir7n<|{~+ zu%{Da|0i<1(q43W&1XeQYV1*w=uiDLTj!bkz#ZStKJj*@Qs4OTI-h=)!}Ci1A~&f6 zgSukz_35vM#va92Ey`!Fa~A*m)ZNgT?!sSrJNqXsM>S7Zj77dUBEC zT6rqX-W{uF)04+g2SlG1yJ05CwrbP(q#v~&UoQTww~goc89C78Q=Df@()fR&i*LJPZ41Q`ua@r zD;j%LWMtCgU#88-fG*ShM5=y1gY57Q@(=2vS8dICB_eE*?+`6C_Nd1{2w_@_o)ATZ z73=S_7MGu5h+V!zyrJjN2JCcLDXQdg7=jh=cQx$5-mT@<4^BI;DP2ULfj+DBqQ)Lo`Ugi}cSjXO=dFvl;ycJz z?;t8~e#alNo8)!-jX^#OTwY_Z0zc;HN&hB~=je&nedLnC`YeNeMQpy`E27(xQOi?m z`v*tHz00Ui;;!-;He)A^y(;v`{jl<2 z{qlMBd&)D1@NX(_9bvgVEjKuzpJkuiBF5T7w~ACLvJA4Uy7t7aBD>=^Y3sI3seZcE zRY2#@eD{;}zbNLxs^Bb>6|vy`p~4z6LLG|_jm|-@Pc;P2=srwXhxD^tj_sn6ZhW(6 zi%i*LB=_@-*Z7&I9z-+@Fb!2Mf$~MzIxI4~HD6VdRE_0t`Z_hE&8r`DR=*WxT-wLQ z*_plXXHFP5T*dv8J1aqeAHA+rli6OdJ^B#YZpAb=+ zlCO@5(e@G{GKIXYZI{h_ct58YVdwrww%*`zPFk2?Kd{GMJ zv9(uim%np(Q$9EzV9Q`h@-I%6@qt5F-PDU^I@u2vTh=Q1>#?1z;IXTvPKFI*EbEd8 z9&0TXUsjgJ$0dAD+Gyiq)htW?2(O&!NZNCDIj5V|Z}Csx238DeSD1d0Hqmm(cglF9 z2#gI1lP{uPkpJXw`hF%u_O=461%0l(Ss6~si&cj5^50T%NIr}l@TyeXB>(azH12JM z$x3*JS7P_@Kg*UJrNTzll0MY0;U-#vZ38wrq@IkO81R;S5w%VJld;28#J~;#Eo<@5 z2?ur#SW(CMrc1ylQZYDmic)tg+7@v|-;q}4mL;F*)0Y+R9Wpvvwbk3@Qt^Fp zMJs7Pmh50d>~&v>aK{pPT(%2!z}0qKgf7u9^gmq;`6_taO6f-az9!2KioJ_nYU)++ z#2RB&XZlt0WN}UYKP+a;|L$Axj%2Y-GHP+hL^b)^t}NHy(~gm^l0{$n|Cs!ILE=vN zqvR191?m4c7b)>2`Tv+u&C-1H#;I%%ZZi7H=4^&{tR%Qxr62lD?8@!htuXKo|^SNkWkqsWi>Cq!=7j# z*exJglvyOlk=l5{`!9h`G2!$F8>>w!{X3F z&p;*bCyQKKIjjDkN}E{5M8=l~b_&>}7@RD=mMmFp(EnG-|2xFD3tXPlnU{eNMZ_EG z0Q{_k$3!~t6c{M0Szp5KqJj}6ix~Opm>8}sRD9la?KVleU92*plEq^A>aZwm-aA!g zrTS>iM5ksmt(gKeRaJ6o%}hpeP|S6mu%ooc;9kdMCAN#@EZ8Yd$#Z>ph2UPv;*Nyd z#Z@EvN_;z+OX2#~@8UCplf^GmuwDFY#9xU8w)`@^$e2$xUg^Z`%`4?4$hgWFCJ*db ztvGb@%(&Q0_RqUSXq|A`QjdxLvPrma@|>A0CQFzs-jM%~iIMBv#qyl-l}!3P3FXsa zMs!SG&0=G5HJ4^(AodlVF~ECxuvU35!r#9xUEGwjQ|MV8P&Ex0|yPWz3>S}&uU`9YCN zUS!<2;E9dp*>$_fX82)o%8Y1Ot7vO^>n3I*%F@JvUy3 z!)y7k&QhD4%_UGF=QJ+y)j z_2Hx$4aRr2=g?#60=_hFB&4-xA;Q7~+=5r$;g}_H7ZCNV+5CHu#Rn zZr(n8_|S1nh)z;6_wR%xfK(4#aQ#YO8702Y+lFS5`UVPj@zQ3ES1_ujvR4U z6gO`kN?+zg_m0h;m8#xC!ov^si7vORMEF z@5C+9!1c0?>*a6tNj>zwP(!r*>RmoLII}D@HH%WYwI1j+J09wt0xvj4q(4qUHEkq) z*$L#<;7UM6xofVl{?|snl0(w_z19B?@=b=9`dF4xzNeMdBvUIh4hd8~)Pyt2p`0+k zuGK$ss*em%AysMjD5hRSB}ng4`jRQnAaYCJO!-n1&?xmHYME>xt*kj(*09KR$%8|c zAXffa`9`Y$%1`)YY4Bz$E7Gz?=_uN`vU0A&d~WAIB(i7DYo$(IA$4Fn*?S_az;tC& zmrWfXp48%yIF`;)F{)gYYOTejAU?ceR5AVjFZsTDc=pt)X{uMM;i`RrjC4!C>X}YS zZ}aQ4mUV|;2V2%%el0Ix_xN>)W!)E#>xJQOh6URxx%MfARb{euDm*QTr)lsa(Vz*Rw^feV8|JIOa^hBlXikCO@% z4c-=1eZ%n3a#HrcplMRHdFUT*uWRbpq0w5xfE)((lVA2baPwjYiONs)B1Y4EjR`|WDM*^`d74o)YM{%R9^ zIZe_Z-GbK#*z0=+f1SY8u+g19>*)cR_Qv3eFS5v2p zuUw~o(-H}l>s6^5UA&ataAfc=X{tA@N}yOt%ih-@B&&VwgW$AD38R9C2Bb+y=-IJj zhlHv<68m>aI`T$v-*CI(Bw5|gc5uHGNtYG`?+yraD?lApfMQ7-76ng9pEj;xeR5o+ zaPeYEmDdD^r%jriIb^o5?|d12KcmZxN)=tgzOgyDP*Tj6;1y9Rt2U}1U%zT}k<#{0 zKL&qf&p8sjFsb5C!Cg|gg{#q6g)5Tu{)ymgp&q=BOl48~!uXJaNn3vl9xsv-F9g4x z(muC2yfQAovrvq^rV57f(ul5S&HWi5)^BlP*6D4whZ9e$!%H{bHpy1cun5 z_WIQF*gpJIwt>^BLr#bG>(Z-l|8@g9CHM*RZiXZ1P{-CUq)RZ5Ummc=4jelfp-Z>O?eC~xiA`%CFz|lA(aABH>twMv!orjJ-BmHwf}{r zO_4I8aeSSs2{mN%Y@Zx5*X`^h^`lEA-ANAVoFb{$w;{XoxTRS&(dZ&cC9j3-3QZ}m zA(mAoU51)TDer`gj}uWz)60g|OBr3Vbn%#Wr8|@=U8-nI(ZZ!;ig)bTseMe54uy+$ zEL|+7Q~M27Lr=C9ckNT}g=UHRLtf?8mRbLotC(^hEB`*R!`=_AS3u46)yDX!y2i;( zE@QbUE)ZA)d{`mU-=Vp~mB)s1VOMRt z^nVxsUEVrSn|XNFnfGH0iJ#O`m;TNK0vCbLoJkw0gEHeV9Y0Q}by z1Wd-A`UlLX8uNqx_5S3iIPiKy%-TpL5HvC^svhtNbI@M}ezXGxcnx?qQzLngOmEy) zO64IS*F$Jv%!2;YNiYozF)=AHJSKv z;PGaG<9Ff?XT}}F$lw+jYz`uxLXSpWP2(%WGXmdZcrM@v4S&gl%Qo|q5tQ~2$o1=T z6u27jljh{m82IU(q~8ws3^UK^2fWgDsju4X2oP+lOpYc34=|^fIlw!aRDTS7zL}V9 z172hk`QI(MitjuGt;wNa|!v0aB+tfD}7uv z=a=VP0?mugB7;J}2N_-#cwTc_s092Sb7HIu{K`dLf6HnKf;%Rqoq#vnM>Spxe9{am z=tkg2R})VLKGg899cDR>Q*?g=1vm)&{6^v@fVcme`0v13KZTq*sg3zz2|`M`ipp3#Z~*`LolHf3F5$D zT6y9vfY&tFs085cr&57N0WYaP9Aa5-xp7CV^qtGJ>e+4r#rHNQNArP~3?cpn@OgEl zk=*_VJjM(wz5{;fBAtJ%BOn;koE)76-p*XRE&yK{OZr*O3KwT|k6HG69=Hswx0q1V z|Ji^8mji>drV&*FzU)(S)ED@{hs1{fFIbl{H=4PMA1nW|H6+1o78pL~1^Gg59|CVP zkN8I51M?IAAMhE8_!4VKd*Cd0pz_<4${R_ZvnXzeTN|JL%)0k^PKHw85 zLk_Dv2+}8$gDSvld_p`Cc;4ky&@RBg>__@Tfv+k+`lB_M`R9^mFG+$$U~o7)IeH)X z`MSin1E11^{Oksvr7G$F>dw{i=agP{7f9YkKAfty)T)GXL-^a}92X1)>!yu6@H)CHc;j00K%=S+7Z?i&Ads{4Y$`_WYL5x{rAmXzS3z*r z%#QB@uVN<2!RaXwAIl=c=zSXC$Es3|GXt+CZw#p|o8&6Kvo+>6gUBLakhd^7Dg}Iu znG@CnUON}*HvwKCfp`}er}2Ng*Hkg&?A;~M-7@+o;-i2sA5VNd@b}YGfJMO1nTg7K zz<ovaP0fq;-JcBQwa%2fWdr z9Re)zbLi)9U|6+#i?F@I0|0`!EN3VgwrAXrAfiFp-08@bXH)F>4fV2K8 zPwue7`cQzcJq1?DwrcGP|9+Q*&2ZfP8J_ISMsrRz|rv||qv&8cp z@VJ)bpaAe4=Bii@__lhaUm5r?b0|9~uKFLBXlDm1X*Vz!G=&^Z2L4Md>CXcGvKcpg z3jF6|?tFOs7l-2|~x_kmeAJOTWCN7BCqeA`0`@DTVOQ=rIMqdQl}Kl4c{`H$`biP+!-@IGeo=pJy^4>XOHE7s1u zj|Q&vb^Ct-1bxR)fvNz1aFlp0nuN zbfr`$13y-t0-ONO`oB22tbeT39bAqK9ykTWGrmMTg}Lr?N;4S!9KcyWFYq3@$WJ-o z(;Q_K4s1^4+O23l3+3L)F$v}z{3ht z;4Q%CR44ueaGtIoC+-^mSIb9%Z-BvZvoLud_@7HCK;|s8=R?!|F1^nVd@DT`W0mpX z^7yksoQJ@&zLp=gQd>*lADDH)MBw|)yng`jTc$S+1KwVKkC1Nvvp{englaG!`0x_M zKLP&dFT^(jFJ-QZdx3X1W6Z;n>;BKF`{reGbQuiNr6K+o@PcN7kuj3w?1%NEfG;rf zi*hbb)z#R;C zj{n)98yJ+iO#vnVPc{Xe3Vdu0(q9Ff^*{FHa{bRVil00M78{%b{^u~NL10$MkSS0q z;B8ls-V4CVzdZhhK(OXBGN=!n3)Bqw;QplFANWu+QW^^U3J=>Am+_rfKVAo%4+hJh zrvRS;XZ^P&WpNF}MA1nXfzebAnSYS9CGzGrRJi##>IO~rAzQ>FM-UsergVi7? z7fPu+1f2Dc0&iH7DsUfoglQ{5IY`c#Nb#fHO>kAU9+HA6F3KG0Q`r}XT@bdCQMQVEk_%~)!J0G~d5h>$a?}Ff>IpORA z&UY^N0Z(Oy<$nNY{oBAp<8?W$Y|p{?pADXq0=03fPi><2Re-mXClIyO0)A~Q>GuH6 z`u$y;#{av_Q*-lO0xMSfV1svoA2E$?2XNN^26%BZ4!8t-b7_@-xm^cAA2Y{`$U}0@ z#OBiUJ_qpVb;PRxXZ>2h2YpZaJscolgZ{vquP1{!z%$XKpVmU)Gmen{7T~PE({Shb zf2?WMm;4x92fn8&1&GK?d(IFC$N~I*G19B($sJapS&OaaDX@ZmB!e!%S-%(Xf@Wqj z2RQ351YSztbCSn@3kcX?C-8M&P=S5}Ue%mpuK=IdmwHE7KF-T!z^nVWgu~`{x$ITqsh-9&1L>M)qmC`!AUUSCn7EaKWHwyw}A752|@YEAN#+Yg5KwG=j!;g zptQR{a$Z`k2>gd&a?}hsFVD9Ip7MRt9}4`Cyg{krTknG))lxE82Rvv2rSwbSz05Ft zJMd_W^mhS2-jDq6%@5=MJ7xy+Js9M;Nd`xO_bNsF6!2xODe!N=H<`O*SDakdKUVq( zHn-nyI0eLSU!?%|fe$m2(Vzk(=VQFjELf%np4rR`G6K);Fa}vcFwaazp97x4Tx1FW zUuFta7`z(078_1-)A5gQG*ON1Fz7W_zvJdzDxXD;8A8_@-Xn|bEJP(auwfs z25jdQN?cy~4@AfhoRCNicTXrMf33z%l zNgWM*s2N~P174~!9s54) z=-BrFzN)<9^7u~#L3o&$rC=E`3YI2W`w@cL$XsS)rs zxu^nzJ-8f#o_dXr_IMA0%#XeQL}(Vr9y3Y&1H_5u$)a?H$eb&lyAi$53Y;JO&j*~J z`!5W9@m}r6VU+;Er6>x}33x7Z=b|rg4m=z<2c7_Ys=0?VMRVCoxn_}LD1+O;pmuxW zzXQ)~GWQp7F@!1*_zLaW|G5(M{$+Qr&XVk?jJrT`c2pI3m3`!>J8RX z)1l&9Z-L;|aTMTf;0OL7{x0y+W;D72_}A}I<~9I-tt0XOy+ZMwhkyk~!62+A1^yK{ z2e=7*K`+wJZ_ZqN2!0JAUf#)N{bMD2Xdd3I;uH{n#|(Me11~v(YS0~cs;d-W4Dj>A zNPiRX-41gb`)d&VY36E2fES3T0B3+#dW8a90nUCxV#tm&!Q7D*1QoiFqtd{wugO70 z;JxRQely^m%!s5t@Egs@PcP!G6C|f@EEq6f?1yjk!w&;LwUGi}^WgIM^TS;?Jp`6@ z!c28CnI%z99qVTW9#?<@lmyPp>E(fEQWFl<|C)lJiCG+a6?mow6rexw81o6FA;52% zW%DV(%bFVwvn1F3pKG?kr07F1_@EO7{s?%!hs1XRpJPtpdw{q3ll0HJIE_++%mn^| zOQ5^u>^Wp`9eCYI#P0wfZncU76-via{{U3hj;YD9l*KQ zj0OJUB#OHj4c?tVCH)c%)($1UANYyQ#Log}{ae7(o4eaVX3^L=N@atzM!=~{QJ(_j z1peJ(s= z|5&#`z>V%DGi2fn&G?2KRR&)EIPto`7n@b7mcYB4?||r3g5o<5L8=I9)x*Fb%MA*! z062fzID`3vxS=6&jtQc-T4q4}l_g#oW# zl`57GxMR;?(~m*$@o92g5%{u7#H#_n{R{Cn!1+_|9e|fCq~kiQ!64|?j~tBv&JT;u z06y28Kjs48Y|f;sfOGd-uer=Wr>>h>soV_)+$PQf=kvq`;ET;5Goln#g#FtuP^P2Z zxjOz=%(?w#cY)-W=8}Ul!1?2F)q#)5KmpqL;X{C{3h4Gf3IyBDOz0ippP2QwFMxC4 z!+!W5z&UfbOHq91A?P)kY8+9T_MEy~N9lbI;2)X=g&5!;naOJ@;3F20pZZQN>mMuG zPmz?mW=;X|k6Mz!K;Rv}BR&N5f;CBy`{%YWv9Z@9s1O)XbQ-SsXzY$CN2Z0-P z>v!Nh`1}L-F0&@=NL_{;a;o`Qz66|4L`8vrWX6W|fZvEFzioj}Do=a{ao6}i9!CaOfcI-e z`j#1Dv7hbjh^GWTG6(sIaB&*{^Pn-0OQ5@DWKnWd82Au#5h@A%Wivyn37qvC08bcf zMl3x+(5M&%9tu2@Ig^bC{^cI3*)-tcW@De_ntHGXg%ADO*!Xa|3_J+-)iXylOD%R|THbhtOVX_7&%G;p53gN?D4~Y z@x!eO(x2*ooN9KIRSA6X(!gt*t7S#tADCm@5IE~McjJy&8EEJ`Dx76?a}&hM_nT)a zDo;?r!_4?#3UE&KT;QoA$j=hsKfZ3R|LZ{TrI{Y@1|E`|TJQJ3xn@U!ztWKcUk1+l z*DL7rpX(5GGY@%$R3t+_G!J@H;IzQc^&uV&ob{gvUiwY)TY1cl92 zt~>BI+bC`MYiPjv@;w#!vOz-YF96OHo8@t)|8os^X0rhdcu@MSAATMSVDsPzn3ot#=6+>@@e= zHv?z=uYm7cPZc-~oGTDe)tLzz{~t2f=Zr3a6)SZ(rP+XUN-F~AnNxS*5eF$?AK-mg zn(_Z|5X>1($9@9vQv=A+OyJc`_j?C8e<#y&;Ek4$|BoFYxSBu#wgTr&-V184o>p4?%@^`?L|JOvg% z9NHK-r@Ae0zTe*+IDetoXrElR|AipnZxs6ic##s6>Yc#3P3#BG1^pQ~w~1dBSN)Gu z&5hz37&Lv3GISp}PewCVCpr6BnVAZj6F3*BfE(B2f386>H$klQIdCR9Dg*r0`4q4Y z@I2j#H}}KadviNaK+4RH(m`Z67!eZ>hZv&sYkoYp-r)ZtfVXXnd zVv1{R0?vVV0nZmn1_yw1fsO*_0-e)bHUd6&rbO0NFlhV(1-K8K3lv_18xZl6=96_5VF>zJY1TfkX= zCh$RZsA6l0y9S}JPNBd_V9;qN@qNJgD^z{}e)4D1zW{t#0tLS2!R7Jq)S3)}YSNyM zW!gLRJ_J0nYl}fxi$S{j2^r83fY{lcUwZc}SK7d_y)W=x*TL{SE`? zi_vMxb^lK#?PKL1pFl2y0bj?1YEdB8XPyf<2V&;3UJn60enm)(qBj1)d)*mCBbem;AcaA1wQj8>0bwa-Q4d_XI5A_ zV`Y9P{lXqx9t6IdUD87!e=c-288imYce7goFII^32Lb1q)(GG`)frJWf~6qfg@P5p zE4@nrwgDGra(MtaxBff8xiLr9fks$z5e3LA1#08e@#VHO@RTX3tyBfht-L;P9&xpD zaheJ7kSoz8(2eoy->4w{f%A~d;fGK3!)F689i%&jQ5VXP$&= z4}$sosDy)o^BHXk@XG^9e*R{nAMCNLNx(y%qX5%@*N7lL3xIP$*ST|b{J;K? z48Cv|NM68i;>UrnDMlR>M76yJFW3Y+VFH!xsFV}aK)&w4KdzS<08w*!Cc70UE!Czth) zm6e_L5eY;isyWxVeH-E#fS37(^rC_14Iy3_IA^Fd@T-o-6d)c1f11bey8zFbNCDmg zo@)Z}`M{5-CcYB*g%2pM;|mb{Xr@w!fFDmmj?Mt*&*|R+{-vM*=^K+BXO#K##9ib6 zOXo?k1Q>AYDgx&=Q3E)is#^nR|2;goJpLSDpoc(yjlMZF4&WSM7I3cFO5hxLBXAv8 z^}ih;;K1Jk=fJ0dbKu*+V{=eOQ#SED1YF^alI#A@$A$xE0|O3R7xcUIY2yc z_TSLOY5dOtI=ckATb4H;6C4LTzZrbK2Rwth&Tj`k(tK~nDc~phHrpK#aDf7wdZvyC z6ghz>oFl!Gz*)Zz@CRm%skH+H{DFi{z}Zn>;IEyaz;6NPhfih$zj1-|ml*CG|1UPv z=8a&$4;1VN&aL_sa6a}Ifb+5c(~~=#ce_HHd8V2JL;~jkxq)+lg24GuRs^0)Uj5`( zO<7hw5O9Fzz&St{;MI;$!H3vkSyN_lj0ACHGn*twedPO_nW%LbL+5UTip!^#YU-#T@Z&#`pPRtbCeiuF%F>1uxW-j>(fdNc8?>cEQxAB{ zZp3>5@A@+FslZo$PyW}m(dR$cA=tf;43fcMzPb7x2R{8na&*=YzXyEWx1=AKK>JiG zeysdsK{gf`9&esw%I$}j2A-y;G*q^Jcyr*6Y^FOUfPnch;4$Ww(>uT;&8q#!z(4O# z8QlWhtoS;tZ$Q9n%|8I|vw~`N1~@;daRqqJ0;GQzcv@58u(nF>a2!KThANi5=jsREdqAI?10tBnfq&hfJNnM$UGlSubz`saKdO3ifHM92oz;~N7V9`X= z|GD4iHqW9~0E4>06u<%e)!{-5Y~V3BNq-semF5|_^-eD9A1ihFR?ilvfH*g>8V6N~-j-EmnH5>%bn={&r!1+L^ZAnd}9Xk-vD^X*QD=w z4Fqh^8~6${aF`6dYZeMH3;4!-#8&}l{f~*e#{c*7lEFSO;9t}D0r=}7q<>Uf5v}j;6HVhhd}ke zF(7C;m`XYccxJQ0vlKW#lC}!?VDs_84ZwHgq+`Eba^3&AHFEdZ4+h*jjsxf3@jGzt z9k+mU??~T)3LxXs_@4zYx&&6N)ZquIivYjchaA)d&b^}n@NC6M|25znGnnyzZxHO? zKn4?lbMKf6yw<0rzY4gswF6&m=7irkK)?nEfJYgFE5NyT+yMSue=1P8xjn&$n0rT7 z!=2;*>1F}6Bp7h-r~v%FnG?1G&b^}@@VjqPqjq?5hsE7voTtG0STA_U#|?mU?^pr6 zY+kDI|A2Gv_y#!j4%z;{2SN03a&!v#{vO0H0_UsQP2kaHHXUHb4}1ucE|H(KimU#| z0=~*+0fP_jl0hEeT%bb0xj?0XbAfn3qvASZGO{@4g_4F>A<-_^MQY8<_r8CIGj-)n5+kV9+-UDiQ+pC0hjb^FyMj7LEv1V zW5Acyr9*ZeI2Y(Ta}{450xr=*78uS2O4V5cxpB?7K$(GafpP&47(n(f0(WqUN`Qb1 z6bGCOR2w)Ks2OlBP$KXxG%a^nJwU((8VsBZ^agM)&=lZYpn1T#Kua~3`R9~2+Da)} z0|w)tr!&{5z+0M|Z5x57Do^^`fmdrn{*SnGb^K>6C&4*)fkgaJ%vIogdA$pqXGp=k z?k9c3%0IqLhXGeJB;EeAgMep3F@AV0;Cw>q2%Kj;-GDbNLm3+1h2lF80UJyPgLCi8 zYRGLlaGoKp0lwdy!uJ8^8PZ`Vm-Ua8j!O)q68-5E5a&lnZUg^#Dd}f;O%==4hWN?O z{J{BsNOj=T9cDT`0tCCwfMOzWZWFVCbDLNUoZG}o;M^u08$iI*=54^aO&s>auL9>b zk*cd_hWHR?AnqFf|6ZR``jQ`mBES!%A^p0*xlJ?%9`XkjWPk^k$DbR;P!ECpF52#7 zFc&ztiFbh4+CuuD0_UfFz6Gw^gzA4cK)_G+j7 zAfHUnMh2^ZPkMuR67WsyiT@9H4U_P1f!|b*U8!F4BM7>iCU6G%^AzAR@FHeHbQ`#B znqH7u$>l>+=RNY1UUH9K`=VJQ&I$%!WTgz{1Af6gg;W^$59VRQvcSu&qrlZ%oO z+9YV;66jvL-AtZe1wK!uPHvrn4>gUkFYvXg$^UTRDX#1KTh;^+>^9F+%mzNioR1a& z|GKwnL%^G6qQI+x=SoBTa|Z~1FyoW2fEP41*bltH0djN<_~atQ&jT+xjSBjg;m%q6 zLNm=5y~vOo%LcRblNNZ20Md&BzU&V1e87j8MjhkH9achHGAQpUusWL)Q9SVeX8ocG z@Z7V=Pa^QSrnUC~{*68#$m9Py2#T5hIu>{lb4O=7@SpZl;Dx|Xyg;d54m`Ol>3^!Y zYJZ&SNtH>k4Gcc}jrd;R<&F@)0K8*v3Vathe|RXkH`%GUde*+qoZG|P1hG=M#*AgN z1D`ye0^|pNB^B{vz~{^+ULAN8e-^JP2rB$UB}@SRM`v=>4fwG`q(2CFz#ign0N-AX z_|)E}|MMX@SBeDl!60Z91^xi|HFHY-82GIJ%bly^U!oHQ9Oy1^;}d~rE=u}~fq!Cn67bW8e+T@kY@{l_ zm8l;&dBUqS z@cyGoFTsP$_FvbG=SO-7pb2WPrc$pJq9|yeh0phKIN6sYPLvr2!Iq;{Zm5v32s`KfXtpxsl3UZVL ze54sqd<*H28;KK$|CMEzc+?38g)@%?oYD5O_ z0xz+G_!{8lnh@Uvd~FyNXczF^ONbvHX8J#;dc8@}888?TMFv-a&*X~}@b5N}ekybO zfc+2cM?4F26+c$~y)cn#ke3C9fBv?7A-5RdVb2k-0DReO;h+hSM<}>0qfM+u6gApT0 z&WB(|D80|2xy(Nc0!=R{4hF-`b-Nt!k>(h`3jC%S;j{<-QCiCA7$f@&7##oNrDBfzUgCE@>JmaQ@na7lCI# zPJU`5pF@5cIZXfOLvYlLO8bLB;{xPpDDW$@h%W%XVk_~bz+0J>(j87NU&Kn?QlF5) zH%Ah?G z-|!s@keUR}Zh7@S8N3Ai(-Xvt0$=$G`DqNiuHmgbxWlpz93@A?JOq|?#C-1P4d5$o zlKwK_uYFH^CGd*2(1Ja{CvKEj#8UJr` z2{h0DDFxULd~-H(bk>fmFYjUf4&uL>k~oc-*>Nvi_ddA`2ktPJkYd1Fq$B;Zz_XiW zhgXTa+He-rWZHv4wg@WF7~snmQUJcC#08CuBfbjs-)>3#V-GHm;SsaCe#k>0KjIfc zfsX?JDw-VK176t-Hv-L~8W$+p9J#!}Q!kPJRU3K{1Yu<;KyBdT(o=yN0q=ZcC9@Q{q7EzLReQ7tHb}RMHv2nbo z>AX04{~hp^KN7zM{7NA4pb4ISw#n`h|$Mbe5S7%7MX!OysBuaCVdkoc#>9 z_cxMt|4{E@)`M2-a^!Uj@D^qj?>jrDv9!LZt)p&$7F$Q#)0I{ky^F8%re_Lb%mQ3z z;5V|6UO(UmauJ_LUO(2m#LJ-dzec2W7kIMa@e@5uG2R@o?!W`h3HD2SRFjlh;*&uf zX6`(l0nVQvy##!5D+>FZeM-6$b@eW)`6SQ6+&@9@N04{|h&f{`$jL6!ItW@{7NukN z2Z`_b5$CX%G)V>yFi@?^^NL=5KxDSbk`Vqga#WBnLi2F_U49Z{pKHT2cOlD`b z-bE#WR_Ur_b)2+9?A*byqcetyK0$;mp}{Y<;tWD_{mw@Y~_ zW&Eg@{D^CixS=0$9}*7*@gQ@VS*OL~8`@o`T^@UX3t8g^v>QOXU3wRFaGGZ+xvl&~ zTIub?mMOEuL{0b9D&3me%Jab4x(1nb0x=)2UceVEA@>8w%mLz0O^-hSoWFGbv^I+> zFvGKu{5vGC*rQs>D|~4XkC;St=nR~{o@4@WetKp)aPGSEftQJ=;(STm9^WcuSX447 zaXUMu%P8*ZT}&pk-jqsuh?RdE%~`)aaQ+#e9`=$~YTv&fkhM3^)g#0GtD__TX|v zF~}@feBmLmtYL;90AB5Ls=?2|D}G1?{SEj)v)C45CfS_Ppr555HKHjDf~@AMUIsV^ zs1BS135auwe>aO9eG1p}_xWZ+z& zkAZUq4glwZ9(8fLk;5fD>k{abAeZzqa4zUw;9StixtXTE{fH-#c(xz$Ct55{((WPc3fiMofr`!d ztiz#lGZ69AGDQl0&De@Axj-BH(;2U#`uf0vGu{(X!+5tFwUEznH0M6g%bY6!M zQT8brExzay&uFYw4md}v1f0ixUG2CovLW@?Ud0lbbqINBA%RlNe_pOUF9wH?<@nq_&9-f~B;s8*ol_M+iz zR-e?Y>e?)-If&aDaeoqz1g|}lNxq20AAy+fQ>?f5%Q8hB1?MA;^P6NHXqFwh$a~F# z@N>54F0Erg%r_~D+lflt#)!FMi;eRkWIYb7o0=uax9x4xT5Ql-BH6yC-ks6!60d;G zvP8;Zx(~=V7nBc44&ZzfBDdjOw0)*%HSJM7WXU^$8M_-~uajcOOh4j9z~3-)vCY8Q z-M7H`4#R%Kxpd~nrFDn6L%&xoECbcviullX^`8U2)uby9I2WisaOWKf!>K^2Ei2jt zmg{moWxnQt9s65hi(az-?err)0DP&r$@PmzIQfXFi6*aY(p^;ea;hzr#pZl0fAZpZbJ75hqSiNkgu^-hjk zq|2BGV6*8ZDqzNyo*C7rFNq4-`=xbMMG$9DZBK5kNZi?oQ%Mvn|7`Q9(Kr&%1~ISr z&$AQzO6UIr=Y@^)<79mStVgYt5#*NA-lnW0SJ7LJ&CC7S?Q2S0)rdKV^^NmHvhD%a z70g}SQFeoVGHVO9R?KqHipxVs;!EH=QWM{1uT$24k#*2&&l2))6oeYCY*Leo{-56t z>n}@Q1jJ?zZ`C7l3qRt%b{}Ou%#U~$iI;#l#Khlf?^o8l{fN(y_)kCLjCRZbX&w0y zdE<&@FwW&wL5Uj}F&{BLSG2IFOR;FLwZu?+n|e2j-r2O zZ1dosm0}Hr=Wv;SruQigSEWo(NdGTjuNx>!`3i_r7?oP~DJAX&c8n6Y0qey^EU(B?96uVYM;Y-1Hy$g!u6sfLliN%;uA=QT`m*1sXdC>9x7ycK zw4FxGRatJV{{X($@O0~RQ0G{ca~@$gcwI)z4&v0Klwj`rkc-J^@LE=7s#11=Vs4UuiH*u_V z#5G-NCo1u3BUVLIt6!PqpW42%rz`O{AdVub^_#s-i9~(6_(H^CCy$FscC~uQ0xX?Z&cTw-TIZ}D-ZA!V$ z4jV4T8{Nd}=*$cz`8GRFiN68yXGVO;?xVzixQSz>Atx}My+nx%enQUpe8l1+_I@dj z=f`=JSQTv_X}PY=xsDrGWvye{N;5lVgpAf7#OIB8gcgfA_BN>{7L)Q8P%f5| zg74B=QHPC~k4|~hMULCoq?7n7U_HxNKLoS(#w^RHlF`p&H*m-@RkPQrU3+_! z+V!wcshu2utKBq$Z)+H}*f`>HePaTAZikJOooNq<&l&LrKRk^cC(T4LyN}#O)!E=# z$}Xz7a%*NUQR3D{%&`MaUmK*I#E%7WY9n6k<~3G&>sCzpw5(-r`dJC-|2yoMQ8L?TJ|<&oywlBcCss~T~31e2^J<;-fl2j%BtJz z)UKXAO75awO`?MGah#rp-gnYkQ9a$nDr&Up)AFXVvYy~3R_*tNv}8TS4tqn!_|Wd7 zcI)jpwcA8cb~N?wxQ2-rj0bfHRL)|_f%S)*XBD`u3H-o~tBBv5h@qd6A=l%M;d04y zj4Ws*h;x}+pZV+UMUuh>}_h-)t;_){Rs{u_$I-51eXx}M8l{rj9ac; zXH&U@c7w4p>P0_MZ;&|s=blwsXbKf&k5bk#e#8~+Q&MbyJvL>Uv?_B~P3D@}VdJD( zBABI5Pfx`Y=Wx^CK23j?^lkFf};qc*%2`OSyQQ1a{P?<`WR9^g0vWzuU{^#6tp4Xl8|J?a} zyvK9CXM3Kz%$>VD_kXNBWh2d)jQhBXd=Q+B-7WS7H)(C8?rxUuS`bC-t!P_$ zYd|&`H*pwKtVJc+`9VmMF|LDCP&@%%5`!T^Vl*pbtej^ntz{C3Mv+FP8OQOgf*AT( zU#L8NGMRq`3Bo%a*xuq~Z?^|hhy#aJ@W&+he-5`MsQXr;7J{s)SZD@>NmPM23H<3y zq7f_cOM+T>#-2nkRz_Jl5`5FJs9EbdjpA8U;Z-UU(e{@Deewy_tF&C$x6 z50YeDY6HhMdywZ!ar<`gPDiUs5FybN0wf-W7>N$7e1?_7Svek3#O6Q(g|$e9t#vbp zeb2VCHY(gvFs_3$&^t%r5rU6HnDAA>W_ZkYQxdWehZ=3X(WPeiUvsq5Tkdl4 zMDEG$0y&gzgagx}o-4(S2j5KW@Fa+mm;*r)i&*(SD?f!KDL30nYr7-ReHf^Y918Ad zt0V0CkKM8gZ9)tDP#C{Hz0$_fYX32L2fKb~uKLt05kEE<~+ZoxnJ`2}K#$K`Cc zTlUXEd$~xelMX$(4JgNU7nS~7(O(z6SvxGLqF{pkOjkBb{4%VEDzD>>HGYQ?CA*LI zn)s;#;n#6gf)FRs8nQ@qX63W29LdU;AqSZ?PX#J`8wXkfzBkbI1KY}rzd*2M?GR%x z+RzI9pp<+9qJ+;nV$sN)HOGmNO|goA_e~TfAxW*8T%bFdTjj$4N8* z-yF>Sh!~sw$xjlbI|LDXd)rociYQ9PV^!om5_vvk6Mokb%U+by&5t2Tu{PRP-e0)& zKW_bJx2z&t(`!B_kxN2kE=ImXu&HvTpUta5jBsrSro=-EF>VA2!p$9+#`kaq#%&=* zxU&P3_d@Z00{m|w9_+y6-Jv3TKL=sN-kA_5F&DB(EN0~wti;pWq)b8%iohQ#P@zg3 z=)BU`6#W(3&3h9B=V2LTzhY~%ROiTcat}la-zV5?3%jKgZ6O=6x2tW1J3hNLmRn%A zti>vFUWxnx1mfHSDp2Vv92n1nlIuIR zmG@)ty@SRZ#Mq4e_5y7DGXx2rRk%lfDH5WDD{bSZ@h&UgjUk(GTfx+&X87;H-elfpv63f|ml``HSk?}TevXPWGhxR^?{)3-_5Lki(;M>Jb(o)5%YjV3BcnMc@V5fH-_HOLJ zPVZ)rAn)#ise7~r$j;KI#{Ny?7(C5Jf z9cB5HggAx7g^a=qf6IL`eXLN6+mC{88RCdwvk-JWt_2WMJ|3LBdIeZxQc5 z>=LZY3Xc-p0Fvk(YWLlZ(wgCa&CHQqmEPPl8BzKo4S2;H0D<=~-181h%i~Zj4xi=F zQyOzG<5Y*9?C+}0_Ol^I;g%{qO7IGYp2B5ZVz>25|K0}He+?-NXYCeDCDRg=lU|;E z;9ri}PB^@&nA_^G_c^71N%a3H{T9&|fGiAWWqi->I$K$Y6Rs-QtQ00&T?iAtS78(U z0rqa=61)@Ri1IeU2XOG`6gI)1XYUCv!KX7`sJu<^_c{2-3Y*}cL*N7KSki%Mi|$jD zhbadlh(jkGm=?m}0ON~F-?%R8uQ~M2aQPuY*>2j+W@eOkiJJu}#9lvStw0d~KZzy~ zC-ESJNj$ccBzMW+pSkI&4%vk7QTUYL`yffUtza`CmG5ER6}%r}ryqj|iD3{xVZEq~ zKM~_sZ7b`2m8vzBgrDsYBk!cbvZU~?lmy{QKd`l_Bu{;A-vuecT?LzNc9Y=Gfqxa^ zaSrch=x81t#FL4L$L&abmEQDwrqY{!&td(I2QN&=7byqR z@l{H1I=)fqO`-o&dQ;HpG(B$VrlP;ofX8EQvcKgg9xz&6n&Cflq*Nawaaf~PutuzukC6!Bn3Dq1tlMe<1yBs@>yj+7HWiy=yQjS61-QN|k}oA5Rl@9!Z=_>hbD zpX_~Bd5@OdMIf*iz02?8TxO*;_%D73CjlZ|8Ec5<4lj`(P#`t@Xf}FBL1}-{+*bB8dTNT*P(s-NT z8IVJ{tGVEMjN7zYl-pe3NIPT*81qc7i1%J=M_o(3gq_hhVu>1WBmtrd4P6L1+ zKls*T?tox3EFVbaO(014K^O0~5GCBp#rrAS+dBvX8*qi41W7c;lY(|@DR@z7eWqMj zPUX73w5_b24s5RrvNR7u1ieGY9JmQOo}R(pDbbtW7La5AA_tk9Zccog+qXf2in-H) z?RDoS#`i#q@cj-<+4?VJ9AfXV1Cw_%@qV1W2Rg9R8)x;{h{2}`rjpCxzYZMRvxsp* zdH=JB`A!>$PAJ@62I8F37hlS5|2neK?z@5vP-zHm!evwqyqi%3Ac`$3_$xb^QM>C? zZnuVPG7j5TcrRX(jGs`(*`KrVU^}EW(t&A^R?8qw;#jje@dw=cgj?U)tEaa z;)G+$+bphmkVAN>@_t@&Zvx*I#NR0IlpOr*fgs}0IfYBfA;dpQ-&phoe&^CnS9*y) z1F|VwHHB9St_M-V_bF_$wPYMt*aXL$6~9F95rWM!GNX()rx0H3@TRq;Sq7JiQ>zf( z;J~!xGjkY!2?@mBoIkFj@Q@NdQ7l@D>#42!{a7>8VNXUHP& z#~hfFu9l?FK%DS!2d3Q5rSK1a#y}3?R}R@N`$rt%je_wOxvvn<5o|_ncR4m+2tmTD z1)IvdpJV(vLdmI^u%Qh~A66raj{d z+4e3w>}i3{^5Gx+w?Udt8de{VD~o2r&v??+ACn49LskeV=V*^>D%c7{BO(Cxd?n29G(gy-Ank zWbZ(j@OutSn@=o*JN6-D5niY80m1mJC*fU!&B8b<{rd@W5QmN`@8^6R{It@q68!}g z?mr1v0)jhnxXMB{i3$)U(U_GjSlJ%DyHNQQB#~J|kEW046q(^^lx=0rP*ALBCrORvOuSA-M=ui?P7blPXKc|-7ji}(Qtrlm7h zp7MPd!h}00yiIUV$RgZduvt2zZsp*3ew6T7<^6bhUOJN?2eEes1iwS^9{5On1W^*} zS@{zyf3ua=pDItrot!5RWTTH&Ouj74>OIoWdGHn+!c`UiL~sDS-($u{AVLDa1W{N| zD&u`(9JQ^i87>%~Vbk|e<}Qw z;7dyXt>`_+d6dl3SuINkZ|uZyR$0Mj)biHmQL6xP#CS)NFNxv-$e~sn2vVyHD+jT1 z6f0kWY+~~vio#l|!j`SWVOQ8z))s}k2;K=v^bY-@YR)I8MN$qo8oAvva^4f%N7ISX z60Rr&e!ya?y5PEuTf5+{5F_v24opciZsueIAwhVA1JmMqP^Q7dM_UO`RCtEqS>XQ> z@mqq;(m5eZXAy)6f26#t-N(bY9BIQF*p~#~ zPq=7rhbW2q5JX`$Q^rl@1rHC|R#s1iUl9BRWTQ6}`nFgGWb7$i2yanOQn-1_eu3C8 z0q-8_sSDm^+c?_2;QtwM8|D3>cz1y?VsB4~lNbS6B*sGyi7BkaU!K%j!OC?I+>5Q< z;6q^@P+`B6OEQOStALq=q6pSPtEpEe=DMzmeME}A4U!c6PROR<_nb^0kV@ixzinmp zbiw@@k8{COA+QgFzvjTSFm{*bWD6le_V6!l~ zN&kL^6yne^<^7v@pH=#@at-Q|3fEu4;r;RZaky@QIEhM-MdDso;{EZ|>Hxk2DDZ9| zY+1wqN*~ell3$_sY1F81J{OtV=G~14;6>vzktY;HNPJ2)A%xS~@lRaiOgsLb#K{BLw$?7~!V`o265=oE;nQ z(nt^Yf?H;&7!+?Z;PmHMr!+m!f;kuIV)gR`gs#L-0cuYjE8)- zXazZB+(Q|cp2)`iY%43v1y5!Ct_xlb(IXgqoderT!QwId3bF}*@4(dWV)8i49!L`Y zUE$7x{{Zh%9JTX;&BAMc2M53AaHFJ~C23JPXJLlrtc1H6A{fq#KdDLF12Gc!Ly82R zZYF{AbCDRp%8?NMAGT(KAB8nnh0QOstSqpttWOkfE_fqkk@rEtrW1W+5g&y(;?M=< z-Cw-_b8#zofycn~(b(S!Ih3ub3vLC$V~9IAFpXRt`T5)%qJ*DzU|L-DrtqpV7_teE zR`>bit;llVow>Y<9;HFHzoQrgHFA5I{^nsY!ef5i;Jdj1Pe z;jIe4C-@NLAP)Sgaxb32rJZ$gD+bwr*c}U^uxI|?Qx?Y(BPwFeK| zDG1(RPXgzZA>%hytZuV8)0-&5ZINbW7*`wQ_t7mUaKh(qU9@RKWfoc?uj%l|iz z6Ac7y-1ZZwC`v;%Wh?K%v~hpGmc!M6B;ghc-@lbH-ePtNac>8<_Z;$jbua`7k9J@R zUj2La9tRP`_za3IK7be*f1!+v|HQ^$*;dwJ7yK9F{8unOe$4VV-nbVyjlnGkra~7= zp_L&_xQ+u;p?wc=?)s2LxS7H$1h;}X;ZB0dhgQWt3fRa1KzV(SLv%KE_fp21upmlNKx=L4opjD{B2y>X7HyF?{HvR zIvHoUf4d<}_<+LQ1s{bh#G%uI&C;18OXrfqjgp>~qy?^Vax*L!Bplw=f#JM(`Su)& zI^ZMG7@{OvuoCa|r&fPf4uvGOra(3d>va{jaEd$emThINR=B0$&%k>gz4r<>o#;@4 zi~Jn|h(l+T_cP*s#l@}kKk0om_T?c$*&4av2O&YYtpn4@^|_s+^?(%Neh%CO$&zc_ z(`Uec0r7B!PYWIkVZxIHo1Tupg@fblB!m|#@5%pg@b@8(*t;5h7g6kh95Vh%8F%`Z zjd7}2vbtnjc|8!M7JjXgs02|IR;_~)j<>#!#$8k| zVFfujUh_eWb05V>tc3^}CzNs1LTtQ~t&Z4Mfm1G4S5zhbDt0$KK1fmUa`uDdH@@N~ zNpL^-uOe=s@YjNyL6~qa!KRz_<*tzDA&c-tg&PZA3~|EC749Y&pIbv5+OO~+!52ku zR-xL3c|1H`D&xl70Yk<9RtR3hY!wuqCHMh|67JxF@ggl^JRukO2gPtmlJQs<<9Upi z2sRaF6z2-@_Xh^CK2hGwrII}mK^!{ig3mjm(h8eVo_dQD!sp?Bn{2~NaJCFcP`0uT zY_I3#Z7&c0h9O+ffoVM-;A8Km;QtqKSB2Ny${3#~B|OxDDfkcx{t{#np60+5yi9ra zev`f5abWUZDBi2s`!ff2dgJXh|6%a`f~ogq@Sph=a)xmUxo~ZU(1=RwffZiZ~ccrGSMqNy#chaATC)*!=+zdiC`tcU~CDmPF{z}-5f8s@Mq`| zK!m(!I52sCa-UfbVuU|Z_&%BPaXlmmZxu|vA-@Tw@DG0efE3}B!`t3iBzGS0=S5ts z0Que6k8(55y7|IueKWP}Q{wU!@eh9XLl|-Bhy#=Nd!yLwtjQ|ScM|9| z$R^jhwiVtypCsdTVr)j}raQRUpTS$G2+q{*h($GzmzvKw^wjrGW4PEWwj2I(3ZS=D zzA$&m1fL|s--z*p3Y)iYw}k|G_YiFMAj4ne9Q`0g_!$SL(me7Lc{unBBOdF(RAI(M z_MQY`!m}Khyz7WJ9`O=>-+{?{ym+sMIN==%|0Ni2YC?yZ`yE=XUZ#>!J9UGIC9 zOT&p1i(v3d3fC803!;ee-aoSPwt{Rj?kL7)i1*6M7KJ3?(T-Tu%|6o2$>1%DL0+@1 z@TZjB`kY%o+AZsM6?vsByyFl<*U$w=WE!F2Q@9iVDSgG+tj|~UMyIKgLsCfzNMSgu ztOHZHq_|Z8e=)?>9hkh${X>l*Ot^&ulXvhnPKtBWBKG!!91?g_6Nyo*oW;twSh*B@ z#WB!E73i`A+73a)-tTNHoWmeW#;3&CjQs)``=XFdII~!KkIk=*ijbsOHEk%%w7@Hly7ZMAvI%c5NQ??Zz?FF%Ay{aNVDUp{zl<-PNEb3MH%J>IA_>2_A+Gbnf zg0)*XIUOkrg4c(xnI(8Rnwo!?g;5RygsTcRRmKv$e+35qlrE zt-Ry7HJMwB?3VSRiu|`M41C!|DUAH3BQg!hzLi|>w-6xwqXSdo@sjvgh#(FfcVP1V z{1f(0sifO)Lx`U%4tol>TEZ2E1ZB(2;6XBLM)glQ96rU4*jo?6H>1Fp@sMcA%HFJe znw5AF0+}^k1v(^w0OI8Owr%BI136^8UX0D^dRdA+0KU?QFRNJn*K$!_2of$T_t_fn z{64#<9z0iu81GOZE8I@A$+(@vm<~WUvn^e5BCD4mPzJ>`@RE3wmH2C$T6nUP#3qQK z2<=yaevv?D9eOG=DAoKedb0u@x-sw=&dQYgZ_U7W-^P8s4N`>fbYNO+<*RZ!oKK)E z;wBDkuLV2V8)wNzjHi6#B=FG`G9IUlOMT16li3QV%_d`yKwEL<#38@4Y$feVp;X3jZTGFC@wP&YP(ReD;8X*Rosq zKn>%Lf=xeW9p>OTIX!s~R`?Ua&q3ri#NZPAJ;tjY-n5p@s>aC^kRb1!4oq7{fuo!o zPmv)GopZteDE&rpD^QwyYPu3S!r_WR_;$>8mtZoYfskwDo(CAWa(Gj%o2AyrAdcSN zCv7X7tT%^ZjdvJR<){9~sc?DUf%pwaDgrN+#6S4?5Q2mg3O_6O8;BA zpmLY|le@AA5`@1{c=Acc-$9D-&kjsI8ZSLM4t_rlM9P6_AuRigy)QfTPB(Aa^nvJi zitX`+H4H~LtdY14;wY?I%GdUGSrfhr8e`2v$JvcNETdnk#vaal!@fv~lRD z3r>mNEXn`LlDy)ur|~!|!-(^aR>WdTS?R;_rxbHLB&pWQ4ou$VYv3RJG+^(b1Jgn< z-fbX8!Jkn0(i!gQU`P;tUa%>-d|5lTXAYzYFH+upW#)4{^sI#VQx|W1M4#|}7w;n+ z{FDp6%)$Rv!D~xtw?YmD58lF~W-31+gB=3jorrq~Hv6J0Qh7fJBE}01Q4%w3VZG@v zwpUmg;$@IcR&h4Q2W_dfk6S6bW&NwlxH*#tFh2w;V;LpOr7znC=Xvp1JknYbAi2aUNyoGJ1}|I5$|r0BK)`mllN}%ehU0mupfBwfW$NilX#Pr z_zW1e*0FLc#Ia=^RDmX5YC2r)g?LgHy|4dd1{yJgK$k!#6N<1J3rF!D-AWa@6OOI+nz2oT=jz?ArqB;E!Q z!bt}v@BNqA8|PL=96I8_C=24``l@Y3$D?GtRE*6w(Yrj==)vO{Uk${&9I>bq&7>2* zLJ%=N5KLA$cYBnKOWdBm9Gl2!S7BUF;g*7%K$5&47Hl@Zy;pc#I)L{s#N8a2D%mWR zJPrZE109$~wc0iI9sv=;V;z{h&x-d9h!LLSz~ntwyx)NYVqCZVHBoGV6t#A-@+d1$ z+seRIiD1U@Pb%3xnVkW)y1yx0Z7YZ!<$?eWxOuw+{Ra*@(v-aYUy6SNWH#Jf-xDM1S6) zr%Dz|CI33~6z8Pa7c9?fh8czS|8aaD>!CsIB0kG<7*WvO60{mbYGW7bIWWcEEHN5E z3^BePBt_yeNRW7vmE%}BnU!yVzYYdksRE6-&c&>SFk*b5ldQZyLKce9K`}Oq?gB0rZ}za0O3Z90)u{hbUsaj*}$u8Dx|3 zm&*907=O!F$84*>Sr@BIqBs41OZtcN{ny3dRVr{d4SrWJK6XyHoeO@F@i2wI5bs%# zAn!L7{$B8hkV1@aWenFt@h$jKSig#~S+)A*;W5E?GawF~abQ}hn$@;P%yZ45r?qL9 zxaF^y-myO)m;|)*%oiJi>vg*3DAuc!(07 z;=ok${Cw>FI%E@`@4)1JR=ih0lJKVvOy0%vv-f)N-h=pOg+~cK1Odd}KW!`g!j6z} zu}VBhrXO#Maao8FuA}f4!Hpq7v6|Ud_!w%6jC+f*S(66eipAjv&tKL@Jkb%0dR4xT zO+ENJ2gLL`2NL+y5Q**F%CTFaQz~*%xomq;h3q3C^W2%s}$ZR-Z+ar;?Q9id|mWrRsFgc zk4OG0+!a%+30Dq+jWL^F;XF6vLcvdSh!XDPf_p+XVmy-+Xo6xSB*{3-#rPe@?+G>) zcDRWv#QW?qh_z06my=5NK?HH=vmzPB zwI|{F4os`*(G0FN2>yE!_fU9sNyg7YnDBEBOu=VK@QIK`c$NcG@ZFj0{T6#Ka$xe_ zEZ%F_dxHZzy}tzCeHi>#!PI*?lO!kLJm(pgtd>43(@Sw~+_=fRk-`b-cXP-l+)l7r znI4g4^duw^d&fYmDTPQvGrstyqGpJ9xOo2nLBdB|yic+B-^%+v$?bz|@-9~+ebIL)$3t8N zl7w3*{G8x+;0+?~rtl`gkF)pl3YWN*gHK@ZnF^cWa~UsI*aTk=3CtbZF4!zkGpMJO z{x#|FMMpS$3zD^^0Qeuku4LSmJ`h!I<67}XCB%61yDc7oEHdt>j2DUVW44tw#s$B^ z_-z-A(=0c~;Bg1GSL=GbT5p6P;q4AgoBE%(bD`fsl<+=<>)pW^A0|Z{`b)4GwT5y% z^@78Vk}i~_`D&&Q%Xbp41bAEEu#|!biCPdK(GX%J9$;k;R`z2h&S^*tFN>hCW~;DA z%5#-?8jbLW3j6(x*Mk2+#CrsrPJAni_*V!c4xLusEyVk87q^>hrT5X;-vL>at)UCX zm#h8F%yI!lT}Y5chRpT3j0<1vI#Fx z-oq+#@a2$1jJG%iTB7&{yeO<6m2uNbZ2T)*U1Y24E>=Y$L9uW;CW=+FcKVP_l34X@ zD=Vb%*Mjjq78GO%gdavR3j8Rn$;$W-F@DXqvR1obeBl9k|LB5$hdAQUaR;WQb5@ql z1&5v%%aeEVVEm`_4JxxfANWF;twf#levcQ7ckdFeAlNLfS+cmQLzHl1)RXOZ;wpHM$!h-~#QpIkP zVvB;mH3rXw6a}voNbhk>yldH3R%;jBneiYOJO;8bhxL*J)6&^}5B|XqzQ2j^TnDCw z)T!fyzk1TpenD%kX@Y-xMM zJUB@q;cs2=pNucK;Np-XZ>t`cW`b9e;P`Tfc8Kp4Yz|cN-NltZ3|WNRJ1{NHA@#Ym z2*eTNqvd3UbM)ts@hc8vTDEN^7S2id2;$cr*xqg>);ka+{GJ1o_cihUh%5Qrfyujk z1FmETWRv$#4ouzyYH~jgKoW82g2GD#|EKgjL|^Fc^ijKCMy)&q+GB^SgO>zO_>RJA zC&p$B&q$DN5F@KzwiVt>kRan1RpdSr`7KBhUZY}Fkx|&d_-7Y<1j1qT_T0l|n@W1t z;!!99S%fnLn{{EV%VD0t#7q+i|NKxA3jE|jLjNVx&cS-4=Dj;*xbl|W{A?xphr_}K_a^a<@zc%k5w%0ICo57afK|48(BS+_fufG;p6 zQ57O6tXhq^k0$rW5**)XOjf-iMFQu*Couv1Jy6VKCEmhI%8zWNwN3@PAc1~>F#1@3 zDBMu4i06ka3V9Rckgy<5qAn}%wUyQbP0~wjBd++^^P?Dfn8Muz&w?P~w*;Goc)T%> z5>B5=_;ZIhRV+;pemx-$9arAVny`0D>ET}1Uv`9}i#gMz7`$JmCuZ~Co8Fbz1viBN z;TA5q2Sf<>QFxW$edJ1}J%FWDME zfN;=(Dcgt^?2Yf;CEU@0$$PbUA#_sqo7(5EqnwtGHcvWTVyk9vPsrkktp5Q4I)2P}GAswyYNSr;pmOmYlmCYeML`ZpkbDoM_xpf&mw*U*TQywpJ&fDAV7y_OydQU9 zN?M-k!_Qzy5gzTpL@GRDRv&+V#FG^sAQ(^E5Pn;*8MXa#hx!u8BK(Q+F3_HXZ-O}C zuax(3@%|lh5QqLy-bwL3@8VXpdHOJ}5c``U_#`d_KV*|=1W^=Lb7fpE%%z2FE33D{ z-38;c+7x6W1fD`M1H34#1^%Zm+!eigyplLhS7W zIV8qFoWv{Odj`b}RxV{F&SyeOoD`A7PY^_5{ieeH)rpHbYFk-X6|UZyabC!#Ab#); zKv4~n6sz%r>HTjj#w~0sE8>C&Fn+}a&w>c%u;w_hy#>qIFM$~0RSrxWQ}Zrd=qHdM zyh-6{g1>B#Et%O|kYUKk9~WEzyn_(m(K5Xf<6Q#+gzGslEuGEw=7BfFK!k8B2d1U-On2@_dx#P4q3{~P z{UAYjkYKZPqB5K#AVqkh@^06IgX1jPgR%Q>LKcbD5GL_C#7W>YY9tP_@|dl(&Z#`T zH7Xrgs=GD!{ z&ER>Am$-OuWV}P+5)%9fc%yjo^^{<9q{6 zR(5~{wyc369whophp_Kbm+b|JIrvGeVdXAX;;g)+JP27RtV=4;XB@{< z9O7hE4Sd5;)Po#q-N#Ctd!CfIFC=Au2x7|`-zvSL_aqQNl#JIvk_0}cNdh0!Byot9 zf7;5xSw{pq=)6nr(ks$BJ@QJ4?1#W`41$xMk!T4K5@A+8!^+{T90Lht*6S*e+&S*S zDa{CP7i^Z+TfKN`{Q&;waK+o_@TT$x`MHjB4m~Z3E?liAPn#QMll=&>$IEdT&Z;KZ zWSbP>Y_%ayIOOoAs2@qx?vO)xg!1n7ID5aqc(%eX3!VeP5$OH73T_@v!si?apHSXq z`f~8ojPteST1@5l3N8Xk^1e$j8BygXIKBaw@PiI-+I#hBihuCa1p*@x_i$`TYSp(?p(C-Qjq+BopLBNkOMODZ|%&{GMS{kepHY&X15 zIy?%4-`p;J6po1%E?&ab1(OjieX9cg!B2CD6YipLKEb^phwxw(-2XI}FdBTL5x?x> zJr#n4=ev00v+;yiDDUc$`)kNX96IQNuc@dXJ;OESe}o6Z^wfl_0Nyc}?JmJ)Z5cd( z-SCG#;r0q28_2jXL=fXC>I8`wAV$U$m2tj7Y&^}jvfflUA$TFAD9HO963@9kkFmZ~ z#wHd{eM+g0x!|*m3%5^S`o_C7#3^_^g(HKxP~3qM?&5;`FdprKCqnQA^j@rR%OMz0SS^&X*+g(c zbh7Hk#(f|`#!(mJ=WSzaqF}R@&6bsR0r7Xy(8f&LJnoC(c#7*(T=5kGura;XAJnpVZR@;t-O7?g%7Nv5B}aF zX3Z8?)6MrK@>`Hic$p(I?V4U6Zn~Kyyw-s!@$P2$2R{k$jz_%HfysNrbL_nb0*E8O zIxu;Ag7gQUv2^Ik?Yy{MR{EMFINZOYH+|SFzp%R!mUVpN}IU2Lbc%c}ZbUBi4Bg6@R?TAIasw2JH3po@d$F}nR zXSb|Eoj9?HwN{27-v{~<#;U3CmxAwsDB%YLn_XRUBo9a%$R^yufvJ+!Qb|up67KK7 z)al1Zv-c42zKnR31C#e5@ty<$!m}NiynhhyIS@gN7a9^I)?ABs#t+!j&b`|-cjQws1PQb{&IwDh*eV*qk@mX!ep;Hb_iDyaT z%MLxcwS9rzymAz0I{lI8i$apJWjZj0+brQKf_Ea~nhs1+E4;{2>p=jqw=Kj-bcG0s z2rEak5?_x^%9)TrVJ%aE_DP^Pq{wQmZAA}Jyo!DNS&Yrthhza>Q2IY)m~`zePvomgm( z|L8N0@qFd|r+BYm{EZ9#k?~(H_!8rr9^+C?X(l*c0-S}*wFcynz)OH6T7fTyq7y6e zRb-@m%2rxKB@l(9E$=tEn{NyR(Z`yq^30jc1Na6+2`^CIe~LFg?oN1}@{UenZ``pG zPAc#7;=LcdvvDVKOnHAU-e;Bmoais9a6vgzz}sFhoK?D4`jEAm%EjCYF~ao)n}O&r z-kl*qc&PFoEZ(Cag&3cnCM$eO!~Yr@Z&Jpy#Tf5kLL55gf>Wx5lx#>vdZ$;uPQsOf zIAtp@*i`OgdcLjc**y5#80{435;hcT%U$op57`=aDN0{%AoB*j+byd|-}J%V zBatgYiXzt(Y-;X2i)*e2{<#>dJ&S=5rq&2<;gwiyS?{RG7bNmph!akz$fqRoHprn^ zM_G8l_ZAu#>6cz*5t;a-3gfy8X9~vK(#X5BVAF}7G44bJvJvCVS&?}t@Kw`fJj-EB zU+udew6{o4Hh9s>`oMwdFkz>}ibH_#x2lqRq>^KH4(pu49R=S6G4i&aNbjb>cz{DV zsBmxb#+O16?kCuEv+->1<`D4DM?78O#{>i8k6rL4$Rh833coDghapb*gkZCRz9yyR zhaAEc`g6xjX&1%&F2*4j+zEnjqxZ84mwSynHWH$QUleR|e{C(|omBi_XzK)9q}llxD}T^k~V+bHilU+2oZFdpWD$3lXNHyFSDz2Y%U+z>67VJVF_FeuH~8 zp7Gl*7$pBL|)5JenH3N|C!P3C_&?V>OGbb7~5NjRMEoU+w*!S{hT8*vwf zGvDN{^nn23fr3pjqotTh5FtF<1+QZKxxy2~`$tHS_pd5c(Qn( zR{DLSzaV_LlE`?q8Lg}hD)KUk{3UpoVUR<%2>he0 zc8FDhLFr}Bkl+;|fZkRuh2Ij~5@LkIf=#dPpU1uG3JJ=Mx1y4m1t}75aciyJvbLzm z>m~9p5Ppvy=~9vRO5~Hu?FVtgDVxy^Un3nSQJY(B?3UGaaC#qq6Q3dATaKL=BiMA} zq50eiyb?utvBFOaUdece3*H0S=p8z(@J#XkTj@U$eZC>-wU&}A%XoLx`&dj37yK~e zjtZN3mj*(FyhjK&J#G6o_Y|)@5}vEPn@H|YAwhVv3*HAQ!iQb(b;d=a=^bk+!7D=e z1N5#b*pycE9WJdNWDyQ4@2ABZXGteK$_2l{c%j12iT7vVTY=tRs@#hu_cstk>^;UJ zFGR_>_|WuzOqE#p*eKz96b8ZVAW68JVAIVe3%HxTz`GLh^U8apc+Y_V;YBWZ6XP8U z?+|Z%4JmpDPO02KO78Q@?U1--Kmy%x>h~0h2Hfgox2)d7(nsMh@fii-53$gf1ev32`% z>BG}OQZ;}W;hyf;CZ@K=J(D7+!1 z9fmBz*Om8I;$0Zxge#9oAAW-akVCkY!Y9SM6Zk&DG3)_B5+iM4y{?QOTg;-x>w-)c75FzjWg3a;^ zzRQ&lgcxFcFvS*2AVDoWokL=m-3skhk)M^wXI02467s6j?-#uX!XINLw~b2g$5si~ z7_tbraKRDA0~Iz?Jxzcd@}4Q!bThhyyZHwAKEWP+#NvAhQfoiAF4-;1J376tb5hqW zkd4MxCBY_g;iVk8IwT3VRNkdz0-b)~{S@&a7d(~mn+lf~Z~TEl-k+)5*^+w`#1Mz} zDerFz^Qnw;4n3WiH}}=$ACulwGwVB^3!-c-6gCsc^#=c1#A6gTleoPBVZ^=<6n+9C zsD@cGb9DedXpI+BjkRaEy=xWtg>@7LV{UG?(VTkq$mzKLsdqWU$ z=vjq>)j8uN(bGb0hW{GW;tHlY?EP$N|Ha2lDch$C)2^95ct)P^9!FF-zT^(q$qep z+X_z<`!}F*SBEk6Bcmn$!A}Iji1Eo>3K^K0gf6@Ix6yFEDWM!%b3A``Bi(wlI-Ah{9mcbcj2a5>jDU+L?})11qd z{tS<F}#`|k-m&A77;H`){~$*^B?=xKzT$p~L}=$oOwfEpLrbZ+Rr7KO{EcsxSz=B*sIE z1Wp=2VyWG-;^InyXlP`2==lu7n{g%E`%~OR`$VR@+>xeqgHuZ1uOQ>wfGK zeeew6ml&%OWRYk9VG=D_iH{vq>v2}%{+U{1Scy}JQwtBSNxaKSykUh}_#SW+*7lcg z3=ys5eIB+mdiL2?))B#Gqy{kccp-Z$dKZ0#y)~}R_-+^6k?~_L_yxwZ1m~_YQrbd@ ze1*B+bHNG5-?-p|kU($z{;`9ccCos~R{6pIH5%irHRN*(gsD}Dl{i@=DI2m9r?^07 z4ViFbIB8$9ZUygy@Od=Cb6oHu#tDT>uVn9SHm>%o!ea!V6unsrFG6@*kxcvBZL^FS zKBuA*4Ge6Vg058{Um`-Kn_{q z;T{Q`7t172YEJ$u`KW*X=-hNB#Lq0Dc2Vz z@+qaiOF~{#`iDecati;4c0tYXUpD;*Kcz)aw34miKXq9TPkx6ptv7Z!+gn8|Hp1Hu zzoRjC#K`A}fiD0-JTA)x&vry@hHgK|F8Lj$?{X)X{=U**kslY^T;k`jeq8QRNqITk z`AY@LPH@qemHv@9>kCXxAG_15Szk)&uROqZcckgZc|6<8GpLaUJf6mjIZy+oZ+?mO z4=8_JXeMTjZylIQ#jBxrT?%5>p|(?mI?5dDE)`B z7OqA;<36@)_Is6n&os0x z&s&5?;=0nuzG3^DrZG3$jprS1->mdMiM^%t^KX`wuBrlGHs=Jjl>WmFtZ%CHyF@=g z>BlZ(`%!lxD z*z(qyXRNzrQtn_1g?0g`PqM_TVZ&Ox@T9M3|eU1rNX{|mtT?J{fO!%X|z zW!APf#yDolJS@#{UIhOmn6mZ^R##H^3WN!JWCDbS3ge;mBUn)a*e%-+`b zH*rPdmGJ-wwnyU?5N(g+Zv6vO+GBk$!DsC=TjJN5H;iyE1j3mut@%Z{9C@8d?g-#x zB4JEa2bPC3mwEq&a0m1m0$C{X99;q*b;zt`joi+@qxh>l*LO8s>5w_ndmW-3F~oS7 z+!53IA=wd?6(Q6qb6K8)ufw@cSd$O@oe?gDr#mCWd1yOhnrFb*1&87<>D_es?lJ?3 zkK_}sHy`fY2U!1=(!UK!3^&e9^mRbtMmyN;e@fr? zSJt0V`iJGL@!v|{xh>o0&Ck+w_9FjaD~a!UNC%I?=&m?&jUmw$$Fpt*Jkt%gEgaXw zDDmm)?%i<(>HY?enN)%q_3Tb+2fF z^t^kgLxo3i$$bdnM{z0C>A)H0E3;ydg*dQDz9&9XxS$;We4+Fm;hRUXhOH3niNSwP zaP9&H(`z^YQNmgDiyJ@X6|M!@gm*+4H&A#FBnj_+g>f5&Pk{F^9GfX%J%;1E4kFb0 z1V%rG+xB0#a&PAGXYTdB2!TG>8V;d8xE=wF?vpt(P<$Y}%Bq*UcPJniJ7mX`t6vKK2zFrcR<1-& z)aT+I5JntYDSOw7Y?X^^u3|+srO%XIqyA2s25|~k@hscRcWG|8{Pm>YD%^Zo-CHU> zzLEEF4EOI*)^}9+!b}d=UFnNdVtsF=$JzBLT&7%39iZ^NvTu_WJh$o^kFw!NW#1o? z6mIc&*1xQ9U%78~veF+v#EO|pk8fb^i@U_ha`tha!ug)!PGu|o>N{AmOzDfuA=*l% zH&4K?QF^&c0Jinb^jT%)Zk0{Ss12mBMyo7s9{AbGB6p;UfWIH&XWn4_UWM_&H^Rr| zob?ffzlJQtp(Ep2e@5Z^WvQCU2FxZ3@{M&(*{2|fvb`eHlNRLR%dK?>_?|%g@4M_K zC(3j2BM>A!We~gFp}bE)lyJwY>|I0QZIJy0ZnOBn7Fj(l%b>Zk8VKJ0*x~>AILIRk z-`biLot1vj$84_;&SDUuaF?W}CzV^fFq$iT^geJVyD(jHexdLmkVE)gIXK*=@Hp^2g}Cbh4*sLUGa*R0`60%?D|{8Agg2aHd{W_l zkWKhN1=e3ycpoGYht9}0l2;vy*6q*sg_VA8h_l_K^tV9ZY0P%0IOB2(SB41TL8BR0 zQFt}P5Qlciid9eH=eMw1Bc=az5bN((dc2@P*%rzktF^*W@IQmNh%B_O3O@*8!bN5O z*jM41kVW`~M>zLjg%xH*E6+fQ7_vhRlmG|-2*i9z<%5{54_P)K9eP4)TIP0f*>^4AQyn;gbv24a86|N0Q z!XLG4G( zLvTb2%HjJFg*QMJ;W3rDm@^9Rg*f42UQT*V;j55CxM@E2E-2Eh{rK=%6!EUkj58IU z3qitv58&W;C~QHL@Vyn-yN1FWA)D}3`F3fb@DfN8UNoPBH&+@P3FP9@nZ5<6#O{JI(shO20*Z(Tr32p1aw8g3|AmYkVa1IqGXfYJkmhhcZt%id+N!iyk_@Dpa`4LvM>?|Gze?Zf zZnoFwOmHH_=P+Bc8RMJO$q#%LCgI%?j#^IP9S|YBQdajW3gi3%gclWM?|KU3ZTy56 z{KmQOR~WB`5k4%xxLPaxJorZ-o-fyoyDE&+@)JJFsXcua#u-)!kCel}!3wv6IN=p? ze)xHXUxggPFUhyhs|xo3-$=xLW^>10Q}|^F5+3#h*S0`myaG&kY8&?cK;a~0BMz;T z(<^Hgo+RhkHz@rlqW@Cq?*i{A%=YMd&i1{+w?P1LsO!^=e^EGZ2iE5({TcZ^a$MT;0 zv#dogs|2n1Y_dnT@m%`}wYZ>}%6>BzMEN~$C~!;`qWreW4OICpHq2J`RTr~Deo5up z*Y3f3Iq#6GKPu}Yp8K)$=YlQ2u!9UpuDokdBT9elE>`@Z^pgs4963JB?Lgi-_cFMs9Hz<; z>0QEh2t1D)^^9R`uXhQxAVPT2490rnJqR(vAz5?vwuIcSM1BSTtFj%IaQS#(a_#Sf6lHrHzUC)_~J2g`|%Ts#VL2)`-EuiaGT z|A22iVl#}gjpTac#V*2T80DOQEwOksEFic(WW`S)sz!f&k%Bvci0>FwWdV*o^Xag+matgUhz_v%+;DLAc~d)|8%Raf;eF_ z5Y-i)1384v8;$?})qLN}h`-3@8Xr>L(;ko5+ah7P^#?Qf}Ft2mT&?(iz<*Gd;BVuKZE4}eHh{7Pf1IIac5!e%0+A#5h>q)~>iCd>~)LgdY@+lxIdE%>%6hF+wuO|%IM~GQ zP1;cF;IC}|j)j_RcO7w*Oj9~aDblWPLU_LU9NHeEQ0EF?c;R|yIn z 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 diff --git a/CompactTraceDescriptor/Debug/src/Main.o b/CompactTraceDescriptor/Debug/src/Main.o index 4ea0900d205b932eb6a93fc2f15fb9dd8af10535..84ff2270b1d841dfec877c85c5c724774265730a 100644 GIT binary patch delta 125545 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 Hn%?HWTU{h! diff --git a/CompactTraceDescriptor/Debug/src/NetworkFlow.o b/CompactTraceDescriptor/Debug/src/NetworkFlow.o index adbbac8434095d4e253d06cb5e078ac8476c949a..dae5563786205fdb7b03f0491ced7edbf2f8caaf 100644 GIT binary patch literal 274728 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

RkO$;{fP$$XCF1rokD?U>hke?jJ} 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 literal 284568 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

Wte7&B0GNhF_4^g4GhyUe*RzE^Kt^SZ=OvG0I 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 delta 107049 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 C2@f~` diff --git a/CompactTraceDescriptor/Debug/src/StochasticModelFit.o b/CompactTraceDescriptor/Debug/src/StochasticModelFit.o index e304a4f554b305a1c6712a2af6d090a0c0feeaf9..f0b10202524d6ed8c70596e188de879a1abaa769 100644 GIT binary patch delta 101 zcmZ4RfP29M?hSvOJOmHhGcW`sW+pReh&?`EGTv(V(*F?TZ|{sB$ilk)e$?^SWvM9 zH5w%`)+9=z#;!z@XquAvGu8Ni-*@^LL+T_h#SEJMX;j?9A@$>@MtjyYX*x z8!xP++kZbdwp4xHknwx!*Pr;Z<@zo~A#c5`D4DPZ-hn;ycd${a!KxTr4Fo9(W$8`0 zW$ODtc+{#MX#qJ`xn@cV#T8!;m)=VIQ{(QT_{<4>n#_S0oJ`{|XzetNHDKd-#c ze)?QyKdHa5pS}U>6vYp1csK8ss3;vV>Eqqb$V44#0abXqW35Fq{9+n_z>FIuh-q}i z?eDD>r37RSM0GRYsEuZr<5_mD_zEi40;Q%7ib^udz5C*}10(9}87U-Hy)h#yA{EQ2 zgh-d^g+B{*it;mPncJ;}O{y9>vqp(`K&ebclOaRxJu{>pg}u_164tYyW{25N^Gocf z#V_oqWr_8u@^UQuY1M@Nv`$fX&Ad$}sf*u?CUevSZwsYR@NLH#>-;Quw3D(T(R5B|V1fjFS$riN%+xDCl z9=Qde(ir22v3TGQ>DgXU2ErOB@?|mI{cQW?tSTiBLJq zBl-@CQVP~Ul$r}|Xfg>0aSTIh_u2i(PWAoS)dF^+xdhByw()U*7g6EvqB&*BT{U7( z82L$U%(lJRcFLT|x)K}I|C`fQXWF2)n;UQP-vIgh4;VN~sp3ogH>eBe)+~)O<@E9f z{cPe3bE|VzJDJ}*DIs@ufNB^P??!P;5<4kM3ao*X)EVzYLF?Z9&Lc8eT|F<3%vI0L zD+}8P^AccNV}4Y~+-;DhHs-53kKj-36h&zWYv5dU%>2JeraF2-`5=l~!}}>QtKCp% zN*6^L2Wucza~9MltJFISBHUJij(NT6xiGi^CY45MO3a5=b>abSx)iK|TNwmf$8E4Y zfXWQ2sSCr&R(0CKV9nraCOFKt*B167yVSaw<;i<$pUgnmPROiH4yier5s`1VgYH{w zyK&KQvRU<2{mq-VLrFQXQL1ARA(M%r2jtnTHdbGIc`wRqpxnDPSqk!OWGFQsw4rt+ z7sQ9GC?8Qx%=IyosZZ37rYRuQMfX&cSXcv3s(ls*w>XK05GV~%+dGXNw9i05`h(U` zrfI_i8ODOi8-QjZzMvjj98NB%R~LtyFQ96DW@!u|Ujn|4DkoLnB?0wVS7nSE`&YO%acRS&H=7d z3Jnbgg|SRY&8B6&m`fOr`M!FF29vMUZ)lXxD@XNO76v;p%ffLdk?joTJ8v%wW0434 zs_W5#KcSY%oIY^ohBeR&N)osp!yZrq*#c-MVk}hPX13fX0evRrPGa~cH2y819|aEA zvUjm@w^XPNSfOw=Au9~s?#q8H{AV@)Im~~qWtn5G!Sj=q`$rfFxdKMMLqk>!brZfk z9IB(ya#kI$EXTTejqj{j9>kCFef8k-V0V_uH%Gm?Jg7H|voRX=HW--gi+vTP5LRv* zTM0ikc$eV(5ipXbabK)Poe10GIV5zYf*`z$Lz`lDIaLaf8L zAnQ_|{pgB{KFn99E?U5^D=;wsl~J%wSmmd-Tj>+Yl(2mXPXgE|fwbtSC~aU3{7Rj+ zGPsM)6l-_f>H1uCCa5iDst~W4m1k$K4OiL%3LiKsJyw5QS=QTT*^r}}SB2XJ{TQ5# zc2r1T6{Q`G<*S12j(~e>0wE}5X@5BX!OD+-owHB4AMXLnw{kl_E3s<>xd`kU@Ss92Rrnlj!ZgyHMW;ItHUcW|9Sn|4)-i(Ot*LdoH<~HO8jhf3}pCib=hEBg^yq! z{|XAaflMiGO*K+WOVmYg*N)JCDI8IM;06Tb602xe(Qb1n7I znowPMj(TNHNW*Yc3ubCrxNQzUMAy!e~%_1mG`(<{UL{ZAdhhW5&Unu!0dX z#ae^lO+t}v9dij23J&{VTy+mGK|?%)0X(DsT)d! z+Ev4B<`8KE8XcLII&;I#u!Cr$0j!EQTx=7DD@qcqfhaZ~Ri|$ZAqUl!8$&Ei@C5Ri zPcVepOdDXI``uYbwm`nU*1Vsg0%xf@@-fKIS=j{}gX?S|$cwD(9T-rVkD@{-tl~O* zEeFPrqy%(2KUleQtN?x*fB9bD>z0b+RQ`j zIB-e=wQR0>Zc|jB+vpd!r)ORK3{(KQ3<@`yk_~$^dKND_R2Q)H4wn9urGH>suXj-=mTeQ+b_mY-d11U63&jY2=F9x@dJ#Y&1h&cu<{6ar@G28 z83^Jrh?rGu8lnPkasDQ-g;svg#vgIM5!g13E9&hn0dCxq`eaKmPu^3@ZVd)6>u(K< zXAEnVwL;-(Z*~=BhoaROMd=1BcZVt7Q|E5QAh&L<=wr*yTe4cXH4M;`tx>Rz+7`_V zyr#C>7R;K3h$Ys@>M=20QF_2?XZ(UXZ(DG6n^|mMB9pjys*vGbIn$Th%JRd&JiMlo z?e_Z@)XLkV9eB^}(UH7btoGgGd3PQ-7VfoRg@e0hyQr}X>Jcq@O})7tEANl(4iWX@ z7r94}(QTX-k*JgUIl+mnFx(fzuWYOUU42k(>7Xv~Zw&VUG}Hl`PpGSMu=xEsG4+{E zJW8U1a<~sCA;%ZiT&x12vp}mW1mO=1s3AM>;@Wmc(=HFN0>ssG@OU^I!y1S}Hsv8M zbqg_nAduOxE7lfN&-OiwTYe#6foeI0A{smcX0saP69;m@PL!($Z z@+B4Z%DxI0Mp!|w$IejQ1H7UJs`Gc2a7U|V{SI~Y&Im2N=i{A$ByJwwh!Y;^{t1fm z5v+l$L1^B9gk5qCCh`S{Z!n~m%q>e+t5tHtVVjg&5w_#mc4cm5NT1AIU1ohA9G^*I zQtM(XuvK}_(Ll6+xa^EdUL2{zsWX(p1|>d_q678wX4htR?>d)c?)IKdhS8GGi3RbUyNVq>cPKy8RnU6mh3 zJTW-+Tz)Am;a0w%57RmY8s~+U;lpwjuvqgbaL^$rrs_KjE@`l0*-0OkLo;JO^z-pS zzj}Z?6P@J$_f*ly9zXNm+aQ(Y3 zH2EQ9nvXz>%w;}Q|Jd1P5VJW1y=@FyEl_j3I_cx#Va+ilYvlO=K0%0LbK;`o;iQXN z_IP+i7gV#4ycgPvdIx6QU=3`pzH&UgJj>)1Inx{jS|hmTS}@uik8Vv1lti|GbT1Mt z!aNp44)wrte+v8(&+UF9s=Tbp>w#(d&r_5LSiz$XE;M;PB%<%HfL4Fh?6QZRXha5D zZzDXK;+!F?FpmVhqu|MA`H)Ni?-Y*?=jOviBCLTYK_-OBUxVO*CNzI$BVC_>)N=u< ztMyJr!sJdbwtXG8C)G8l%E9)-Qx!md?^IfCoIc_uHl1!wCcI@$Hk$`Y;m6Bx=1qb% zaIrf5v|q?#Am-(;5xncGz@~G)^K>N1Rtwnn7uYUV{m+zxZQU~!K%ROg%#G!qqP}rv zQ1u!)RvXF3G8N@4tbr&r*R_$ZH$Zxi5!L)jBx$17XWQPet)Wi)q#SIsKdAunlb^&5 z>;xG_SlzA3gg(|}vw@HlVg27Cm_>m#a0JM->h)A%atl@_G>^5BuF)W^#)#VI(@2<1 zo&ITL)MQXFUj-xlGUU-8Qp!Qtp97l9x%RP7%aIZ4x1UykJf%JhbHn1yoz%F`>cmak z2}#zJr(s5Y!klF=Z@UtY%Bbl>(`cM-|8g z*9=8z4ReW#vIKJD0}L}JSc&F9JmZf;*qWjX_+Z0~<7u{0;Q9z;C0RLDQSf00caurW zweH2l`0&Gwoaf-SmZRPG)gxEUv90f*4K#@lM!0PjY$ay9CeiS3D!EoBw)GQjAD^5! zskgVP*HRl_3u~Vkb_^_+PAt2s8U94{OT?eZsqo|D;aLKAqUJJL^iK9u{xkMd0UvX) zYHJgE1*)AV)h*XT8{k6?b3d#h-0;e&bpq3$Bf$;WPI+BJM-lyq=*LCZ1JdyEhdB`_ zue@3wtd`266gQByJp7n26RWFQ_t7FgCgGe5e?ei2B>Xf`2gg&Lcs&fBm@K(o({CSI z!h<}WuwxBB`_yaKdsc4Sr^_~oJ;{sJN0Rr$WZWyI?}R@ltQR(}CP{a?scARLSdzSm z|0cLjfhmO~c@vQ+sU=Ej36qxa(GtF-GSB5lPHYhO_ep*v57LKW4Ma!yqqqUEt5}sE z+9_M^z|ME5-OH*y(m^|Nqs_E0qyuqHvno$;P;PIh+!)d=PCfQBQP5#W8)@&12KTJ+;%8hO=eq0LxGgD(#1T6XjEdh6;lFKt{?7u#+KV6TE2&8 z<)vEqo>eUM(5nEZQ*AiNC!oCx5Q!OUPFcc?dd8swW}AcfD&j(nRxz~zfdNwDbyL+~~fm%P=Yqj@$S2ERJ50b!#_DUV9$x0n6q0%4r zN*z;VrH<`TNx=)aVu13|_2kL2R`OWXa${O}N>e;rvZ~_gmoZIvx)r8%Jlz`82A)pD zv+i*rGSH|6mG8+UIZfMpT#TO-ofy%Q8(JoL0)uJz*g`N zO>6!|nLrX4Yi~8WfvglAk4n|;mCE;ZP=fmRD&GUOYTIj7c+)`(lqyU^rH1xO6}QSt z71yIuGp58&I-U60sk1lSM#E|L8$9t41+GPKiDM@LOG`LB>@a$nZ$f5v5one^9@to6S{&w_9E5lh?-h#SXgJ|4bs zNdRZ#XW~w`xooE+;*cpQ3E&ukk4N3v439>9X);PeI7Tpw;3*cTJEj0o;ddGFz{8pW zNgs~|P{mNrnu&^%Wg*RcVVHFgz{jvIXI&9fis_3rz{w26mqBpH5&L*-!Tcl;+Kc{o zUpA2jzS;IxY;~tcX#(g|y!p>TPqw*Cb0_sJNBlc{jsjrUXdM&*$9G&s; z;Hvde^;;WG*rDFMSHa@7%bKCRouT&V1;p{859A64oj6!|7?@fI;if6NA8SKeG2Mj9 zG#z6O6}p3d3P{(3#yBOwjr7I|vK3?pRH%NEHEZOm>CMrMI`cbovw0xi04ukTDIS6w z?b8D7W40CKBwDxx$tECUuU2hfK^sf!E~z)ZD{pxKY!<`H;QXS02?TYl z7*mP~2fA6LD&n>v=xW87QcO6s%_6-J4+FugyWxV$twRzx4ra5+EabC6uoza3F{PMr z_?ks>p!)Rhf?$soV@fgMz$J@(j`#!!KDS~_DJC4TWRYJHe*=OdhN1p>QZeCRC5wc@ zNl$Ow14kBCUO1){6An|dNCM($5LB~bOerQDpk$Fjh?|3;y%l3hG2zH0iwwXc)DHwB zHEdx?#e`SxEHWE;2C#QD&QgjAui05-2jaDWwplTz6cb*pvxpwfx%wj@IBmt4QcQT+ z%_5Z$-vGfqE55e}<2T_IH;c4G{ur3YUM+G=DJHzsW|6UoLqSl{iZP{_@FJTIep`Ek5H&p>O$b*lKvj|Rl>*s;ic59yP>b9SP zEI0+8MJ7VWBPRfT2Wz<$Hi+g23L=*r!E{DaEu6 zPDxqB%^PqS2r5}IrWDf$%b?9>kqMZ+AxM&~+-3;N1f4o)qc8ARtvWVqLIt_OA zVb#HU!BgcV#rvIF>zJjBuYlH8(AbAs7Ip^1q+-IC0kTN<@xV`k;1+U*vCbqbM@N9x zebD&Bs)Z@VgbziaTVhD1-cyutSh*1l$&9;-DVJ4CD28OI0g^F1#13-APWk3 zS)0j)GN6@3diuc6ZIJ(DRmKYsnE4tN9)r{)PYVuHis>>dWwbxwP!PmBV17N))zIOr z5L``)CW6|lpwa~HK|>#vt##fL_xL46cfoTC>?o#3Yhm*Pvs(@A&Ic(z72$R2k*DSq zg_Ju30r6K@jAol z$}I9*cTlVeO0BJmwiH*~%oHnUg5p3>nhI;V)GlKbADDl$nOK(w z^>aaYt<|tC#SP6BH`mg0)|9>%*w83H5KVfve(_Ry+oOIf%s&XZ=5 zD_FYk0qB#kGH<_vVz{^H1~x);7PUeBd#tWHpxPN$yO_AvNH4%<1va3HZ!7Bif!Y+S zDyG&G3tIH;vHre6c0xOq~&fHs`0TmyQ zy|C5Je(tSN2FoUbZ&`XbA^L~CKvLqM=Dsb(s|8=tgo6U5>cc>(hE>rP22;!;IJc`$ z0RDR9zYM8^F1Wf04BDE*=-TI>oJuGYcBrh8veO2TS8Y~aL+?m$98TG2|dSpyjZ^`);3(gZ8P zx&qR+7m$u1?PVocIY5s01Y#Km;#Xz#%_2ZELAt<7uzf+MENs`SLAu3Cuw4V`3H6}g z57LjU1SDaK9gD}yY8pB?DOg2rr{mb&m!VEtvVzuqcimyIm45wAPDL3-FqFa<*i zI8rOfdMv(3Eqvrpiqu~pg;|V;p}E4!ix);_4g#&RAgygBXhd9gj-V9AyzI~i4F}aW zAn0OMW!Ii8f{(`a13)_3N-zbdQI-*3TG7w2fMmXvi=3lg1+)sJd#wa>YQ>{eG3nuI zzlq?peeWYge+Fc?tlGBgAZvS@$h`qv?PpMN|G+LnlkcLW}?61;W7C5J?d z)DD6-VcHTV61qnNKz}Fs8<-`B{47*{JVW542nc z!B18pj>b4?4Ok@E(qRXv`=QSsria>=(m|v-vQ9B0(VENATWmKN&}ptC2F57D8bM$a={wV=dim z$Z?Py0^qri>^?%{CJ{eRw?o7T@*MI3EviDyB#x3O;^);yl$S%As*V2)vEQeK^@+c3 zR6YgmisTH9Xg~tok1!i|X=W`_q5Lj~FwMem!-^ahChq2t!>ZR`RV{Mml@_{WWecdd z=?;~5mk6gmlqCUpQ(dZsQ4)>VF|!@SOBh2prV~pt>1We%NrJBt}A0)ct>j zn@#|_a!OG?WLCaYzy7OA!(7<^nC%9i$`W`-&VmP2p=hs$w-^`I@9zOJS&hhzzm zLoh~MSd)QY_3OtKEI9nLUksbFj-gkBg?u0B38^Cl=Wnz{YlFJWo^zNoPT=5joScS} zkG5FVE`S?2eT2(#vdvyao%6RhIY{SqAVK9_wERsEn0;*dxImMj(<_o{HEJr#4r1@R z7P4W}`j1_@Pb2G*0N-~Qv~yRT{>0BD`3Ewy?%)nuG=`L+w>l8_IM#xoXFBz;O~EI$ z9+ty;73}agiHbO8$K?n)O(VKOUCmhsHC7XFH|S z%nBr|cV-7P>DaX*Py~x%LnL(P9P&?HD}rf*qf*yWFFvjoQybteVqd}0Lfx>*xq{0K zXC-PC3_SztbL3JInCx7iT9@S)SU9Jp=y)`?6J7|M*3N)M?S%Kf^$=7WPk+*r5Yrz( z+nk1%pZQ6Qnhhk)Gz)Gxt@Mh#B6S}ty zIm1Ks@lYUjnn?v~t+BlX2jljOdxyQCokMU?j!O=i04WP54-p*Q+b`a|NDjdvJuW$< zn>E!|q--JMIo@#(yXEgVaJ5_9+wLQHca=jzaD)uYe)1XU^yWK!>oGNl;LRE?`yCE0 zO1y{J4(tJkvma7jl&<$DXkRg9acc{TpquG0#ROb#0wVc9Oa&R@)z z=jb{#-JSTgtp=5>ye6 zoICM1`+tVR8l2d)8`kV1uh4XFI9vI65JSjB9Aj)FICX5NgS~h^+VBfX8PAO1^rxMI zW~8iVyMqL65SKQ-%#HZCG}0N2K;;LSJDkICaOT#* z$ZR||er5d*l6AaRaiZQ%1CPvDVIybv5q#GYX`a5C9W1MebOeMEB` z5Q_^NKM5O^V?W1OaKhP@jq=e3sk< zzKRU!rx=1upQqzWk^$r#y;PFav<$wW%>@}cqXj-MWJqCm^9tO{!+SBH5{ijLb_&Ls za#9miTf-XI8BRZDEQD`*;Ms^PPrxipxi2V=aa2wfdT>!meA}ux3zXJ5Dxv`=)2~@` z90cw2Ps^bd0%c@abNm3>ZV(ao+`?S96@o9C3jdc`vxI|sU27I82mAD{Eb1n%w&qBB znl^i-pI7VfFQFuMQSIIfGwPN=z0QJ+^D*;4YejZvwa(}!AloJSiZ$;sAg3kT$4b8f za#y0M?4r(0D;J?!V6`u}pEYwhkZ6hax6+0{nn^UxN_zt7E786hwU9}Grb&2!hRISO zD>N6edey$&yhYXHGRrCGK{4bLTUm_-I{ui zyungyK{lVI9)N5)OHGHon^sQitxWNQ_pU4wqfoiLHxsF-~`U0lTkgcYKa>DwUr)r!oR^*zWWkrd95;qMv%7 zMak$Z2$LzBky-He8fx4?Mf{L-?PEI&-6p3-3LJHh=&2_llpBnB!$l(|+ z-c)YQv$dfTA_+ITh0Ko+G@e*041dCsHk;zF0vE@VEuh-hD9 z4ipn@b*Atf(Z<-%i(yYQL^Svcqjj3n<8xv!G59a$#EO}xi&(^rXgy8L)5TY`pUN(c zzQAIL_|cVewb&$=C)|j>cbvQBKToffhFrF;DNV1%`&#$14f+513KRmlp4zqOPY9o}Ybo~~u0YAG09)5` zaRn-W^?}P~_9e^uLYmo!%!8*kvw#rBpQDvIcdGL3es&pcViAg8NVM_HgQrI8A9|1Z z@*Lqhcd7~xSz%AWfHw?F{knbb-7MblyV6#@B>f$|v*axz_T{=HIUQR z5TrYj5C)&IDa`!cp($KoHlEhdD>wQB%hy8GrpsbGxV+|7Ui+sO=f7>}Jt2oJK8J>W zkrn-n(KY$gA-aXkJd3VUMVGJHRQZ#s{BQFhaU&mN7*73V=wB#)A^jzVc~DG$DZvz; zqrW&`GUIOk?K0e}tcVv9?s4WpG2y<(6rLko=Syadx1M0QPq}1HWbl8xWY)OOjA-2q zXF^MS3!{4b>SF{4b znqv=OcTKZt)0XhWX$hnFodqt(NiW*BEirrHwyY-;gTN8iFVG~hylVk97AD11(z89LfP%$))2CW=YY){-lKD6t= zf!3^JS=QTv<&cXa#owu=^C}WAIyI4)qT22idEiHTciqq+hYS$%9MY5SNF*UOhT9Zf zydlsu!dL6n|Mu4DiVsGo^=5}#r>+b=V_!bvE9n{>rU@-cnbOS`Fe!ea zgv)Vqo%dn6atsf z%whO3F)q1;|H9jVBC(qsp_zS2NX;*V$}WQ6IctkiB-}gfBlux6d{iLlaZ-ui>`Tm@ z@YCoV(oTrs9XFA(4e9W^0kOE~?^VVIV;J_gyX;GuQ7k&Uw)p?;9hn}?fnvIQDW>oo z-M#WO7PpJ2L+^yRjQSQU>P19-hB;77)YF;5e;Rd2*D#k+cM3)Ei-@`rbD)^0e`c;c zN7Ndi5;yMbSHsboIiuHoo(>*V*L8aka>49UX`CxX6Rq8%Y5%CWv2X_GWD5HCO^H% zkcDMkhS`RRox^(%8THs+2)K?fYZ)kk~KQjRbc zti?(wv3wQOffxvy$Xzz{Vt%2l9cYA~@wpcJdN$}=5In)wQ}mxr#4 z_}E1e1*=J5Bj+NX>VEmRqg}e+jEVne_p|$e`-bu^i@4yThzEU0VBk~Sr(n#lbn|7d zt#x8zM~Bgx#o3zkQP=aEq#eZd`0{sV`}xL~J&GA%TF*muOIE}x!oOmH3yv>&3b&dT z8^PKSID5mO(8YjL)Bm3boL!%3!0C7`ixB=BnrE}n><69LwMzG5V*BHTpGB1E@vl$p z)?;RWX18|BdhwN9HoE&x#qMI=^108k6|_L>op4>^8%%5;=q|dd-!q>G3j0A%Y7yfy zD1Rn)ETVeK@0^v^B(! z#L%(>NoCT7w#A?EbmBk~ZVWjOf2f8oA4sa`3M$i#jU9}S%_=l^ z5Q(5|29r{xGwm^$gm|V`;pOSZQQsj@9DZ%MoYKMYIOu(PbTA3keN%--3?(r-Lsi;# zC|JTz4C_~=BZrbG+I|S}CA}#bO2Tw+SLJ#eg&uxkcva}#N4>{P5AH|H4kfYVW!eUE z8S$&asdU6pQcJh88Viq{pdWyO?(1sYbNq@hxH@|7M< zaB!JT%bji<235a<9vns@D%pRRv=Y$+S$ZCJrrH;b~S?%lAK(AywPx&CLeP&J9 z6E08xLa8m}aGY={<_o10%$Z_8+o1&$U45oiy(TR+iImqL(Z1cuVCC|e814PD4uwo8 z1#A6Kt3zD8To7 zD$sOYOv`lJT-RkStz*_+NG;7{9u!kc&6vWo*HW}ze8K7O`ztdcb&u%S)-K;#>)x}z z>rU|W*E9VfhhrzO{>`g}^$w~c%ur>%yhw~gjCc%C|X)Ih4ER;&zGNBnOU zd5BpD@f~lkolHRsRy;wpo+W!dal)?8lD+yg)~ey(KAQ`L9JcTsp3N<5^gO|n#u$9X zVElWi_6z*=wf3wm>zUF1VJd1GdhKHhS~Y0L+^q!;>$cFdlVFVK(*&K8RBA|%X01N>c67s-2gQW@IrHT|2{&!)%Pzy+$b5JqM|UCfpqOx5GKK#n+#>o_SDAxciwe|4Fz57ACq3cP{hcg&f@p%!6XWt;`hulW+&>+qw+*Z&t($3HM$b z^q`ngxi~WP)xYKOyNHXcj&!#F2lXUig+R6o@E{s6Yfl= z@SlV`tak^O;dX0};ujKbGv+}t;r_~e`A@!e_y9{?1^WlXY-4)D(V#4jn6#kQNM^)>F(CX)+5fW0h1gmgAFo^A>>1?$ipwa! zaZx0p|MYUj@I|hz^=D$o0RH(^jbWxfE`7W8tk&S!w_oXz@3^-13KKi}h7Z4=`Wgwd zHljqTOW&?Mm$lJvxwh7giJ!qY_KM3WeP5Tpop)ia*rUKA?Kj=EwPYrK2H%*qw8u`? z3e!kn>E|*wa7voXK-)6$v${6mSJ&1~KC3m~l`s!IzMo6iS~9VtYkgP#Q)}y64j+2!|BE2ub-zl~6T4ZMxecpyz%NBl_&?YoBfN2L!G zFIQODi@Q2__4u$gBYV?gAb+o6`x;`>9cPwe-SA(r`~+YlDOYhhd}e7HB&)3-9 zWs?A1{9v02=1A|s^!2r*oDu)x@kFk(ez48NnZeuy{>kHSI4(UzGEsjBH-UfmxC`yO z4vNVbVl%O22seR$`1lyd4`dVOq0EFE{`upYLwU5RLv1$R9?ERE;U7R=C-`SWB|jbs zBlu^KeTVS_)rk6TB$ZjD1BdZ4@b4f`7kIl3pBEVa5b}MFbs@uTMX(BQP7^jlh2x(? z?lYX1Fo#Zu5*Xc0cOiWQ^ix6qp!YYDml%zr5u4yI_~KtfZajkL9Zvgh5_B=mM2de6 zd8eS)XaP{>yKyAdZwAx&=a3^tvdsFVk%ShGC&BcmO`WS0s7# zqs=5zdnaRY$SCZC+A}ok_lnitB}V5bV~fX+c78I3e-r5GFQ8O~9JZ%o_)M{w7f`k` zXPn-=h_n0mOYm3UamlrItXfEAWd*bFLs*ZjzR2L5^&Eb_L||2o7icN zJMLnq1@3r=otC&$LhQVZJDy^v74CS6oz}SHEp`%dr=-|vgFB@#Eck@3RlDo3r+Ao3 zLntED_9$}m5PKbP&%@&)Xn}f1+`B$+ny{6OyIRzpSUy2I2s^Jcn z-xc@j3)BsFW{QG)PDm&4?>J0h;Mtd~bo|fRm&pFDigKBphiwV%Gg#QaBkezw_6^${ z_5EPqVs9W?QizxKTR7}rA(P*Q`nW>ggdcK+WWtZ`3Rwj|hAU(X{CHd;`{2jtGRcP@ z`;rQ@ef|mKWm2dKSev^{illwA#nFJT!~P}m?nbPagKYZ=+umT?2W+d`gnr&$01jRv z_a|ZH`NNkY;1Mq$^G1N+5~%^(t7HLwxq{18@~udcYh>pPE}Ra_r0e9M*nRTkiRCI; zGmFCtH%OsK#*-T)YBm?QD07vppU2ZpuadJOX|Y@*Zu2#>({2!7vGW8#Yb(GKVX@pK zoiz@nV!=1a(l$K%7~NHpkj&HMI%zMG%IW0|u9A5jt>9~sL~xy0W;p1nnt`k2V_Wib zEqR0N?!*n%B^59cJQKHgmNBz`7=Md3Qk3DpqT#YaCi{wQ@t-SnMly35{3{2@5-OB@ zJn$b*_;}zyRPgb@e>maeF*xsw?PP_wrM_1Kuf#H;p4dC%;okv^eIuTD?DoCj|JK^? z!zuGiwx3w0Nl<)HL-=sx6707sgNGk~b!Kc8m`AbCXxbSrMcC+hRE^igTOARD}% zS+O_&{XzE%Pb|{+VF?4@8vlYS1HGC0RJ~_kE;AV1s-V!I&()_H%d#XV`ie$lIo#J* z=tq5*>w`&u`qFZJm5Kudj~U1lY^$&7W52hT45HJQ>!W%M<~H>ehKOA2NEu@UGh2Qr z7a8>H$uLp0L0>7r7{zeK;l_F_(J&sa!>}0ijYb$Fd8+Y9`qy%Oi03F_zT9XUxk6tq zY>crX%ac%Bv)#O&u@MtBOQ(HT=xf&;%ZR>217jeQhd9;|9408rV9>{m6OL3GPfxAT zhgx3cCY`tX*a`aBiNaiPBO|m0s5J+>`pJ`cKDVQ+@f!3MCv!idrx@)l>Knc$vWE({ zM1WCK>425`_>k9muEnGWPee^KLJNW70xfjUN`16$I-!?V>dSg&5U$Yu4N6w&1FFs- zLebwLUVX?+V)SDcf(0<>L;KM5m3lwgW0l@F{7s_O!&^i&h?o%LODs#(x9O}^`fAa$ z2tTG!ZPjNJaoi4h%n?Zt*PKhQuF{8-cjzCh^f4jxxOWD9?0k{p-X7E~pp94S&21JE zV*o26Jd@}H99@oF8m_rBnpI6%y7E z?O?4HDN&9=Un|_mPI6Eas#~_GQEX+E*J+h{$Zb7+X|2AIWdgLl4Fqa(qh`fem$~q* z*Cr6}^4qM*4f?Bk7^U)F3&!pkqWH0bbfqnt;h){M+7)PO#iBOoeG-i&m|0)=M^?O} zM`72d_txs8No!gvTc1z{{!@G_R5BRZ9GXGz+nx5y)+drSbbGe`5ot@;uhUN?OY=h3 z>+k4DpQW4hT}cM*wn;xTGRdItuj)i;13HMrz;*`xpv5|aesFvG*Cu^~G93;2v8!Q! z;u_dYNjB(TOUY}qS>H=fI?+vA_1#G4yuY{V*FY5r!>db{Uy(pD$+{-Fka z@DHLx=|j8Zo!PDLR*#ryoqPHQB$__Bs1L~V{ZXG?$E(G_K|@Ck99MOSqR-nEZ7AcG zcP`ctlu)8`^OTOM%{#PcnP(Vbm==?_Xo;b|A@4?(;R`)oblMn{_uVQ(NnKdSP90J@ zH1CjbjOh3?J;KT=<%cbj~RLPR=NRLXQYCPQSM6JMjUIYCTj*lmyavYBp?2lB>eMpt zd^h7qy1dOjjZH)B)LW;tOUnD^RpVA;38?+r%qI1nW++4VEphY7+x?nxpS`E8Q=rNQ zy>1-oPVdY#KFquKrg6D3Z^>L^=`tQ#_2+F`Z9M8`S4QV{kZIsX<0o!;Ew&pw5D##N zJHIH$xY->Gj_3Pz_ZiLZd8vnt+w^(Z)Z*>z19`w@k^4zhiu)k7&`dS(jF+Ez-uPbsRgo|G;tMMvqM$I%@pDu?b_x z4xNxTg68MD`QHpXt#t=pUy2icTVikKDBw5l+={Ob}ea@`NpukElu6Vcm#J$Xx_GE zN^0lCo-I?`L7!ksT@#YJw9GRnx{a(xzZ-4{$(uRJt+c@d+A5E3$yB$Q0eLa1Tcp0E z))Z6wj~*~EFL9~c_arZIncI7&Jl}WSzS8B9ZEjZ#USmd&9iKYt)sg)Mj?KHW)2)gw z&u_QeHGQ7$J-3%ilzcfci5HCC-HZspkG|Qn(?*c zYuD~KAih@3L2(0X*R0(yuU&cf_q)bjEW%S5%z^M9_8+71`c=09JAW(wl6(`bH`P5g z@hD93;G*4L!=O>YYy_tIaB0f6@Nbde7v;akaCwp>|Bx0=bq@?WTY{H1K*Hmx@9Thb z3D3=5g$5PPYCKIq{6lG;d$E+;ou(tMP@dx*5`I9l5ihL3jh~dT7cD^CE1k=~k}!Pe zGz~Djy9M-@gnQ69z`DTCX`5;8RfFDqoflG_|5zhfPczZV@?ktXyj;Z=Ex-*lAMv6? zTnuxS4!9>YZop{?JiuuZ9zr86fJY0wOu`drGU7Ah)@iqdZ_*6JKZJAR+9apu8cft7 zZZ(r7dc=c3XAD5kQKH}_;IR0J2-DpvUdo@y>M!o@Br^9&JmEk4{7p;trG#T+L z>$s8b5`Kkd*yH(5I2UnZ3^%${!u4n&;6x37F5%AAxli{c`O5m-oTs?W*LpOxP(1u2IAA*Io>4UNScfI^4mP_k0tyqEd-o6 zqda%*o`k;_Qy70q@+0Dy>OFWqttp(O32#AZx5WeLiV_Z`>43>0I{Pj6YSxHGOIpil z0UC*7x3BPz-6iZn$=iTOz@u4Qc1!p!jRQ=|(Zsi*eXQ-ltL34j)jEjF|CHpj;<0uKwrA2@fSG4BU(Llo5v1=yDzgorh(&uR%%t@)jU&D8$k;Ye*mA~@E#7jHT#L7=Bwt9$JTR9e8u!Z*_E^BHyOSh;;{ccUk>nR>8kh@O zxPm)BLBdaH<~+ET=g@rA@|n$zY?riF&?3Z1;`7%JCESNb&W9Ef$|ug00tr75f2{IL zNp7jlOZ!QZ|8$u9`cRUWGV`wJ<>PpCgO0O(nl~R>$jqr6MoUVUXd(C*)TBHwvyp@| zsqX^7&Ba0NC1DsKApXje=bj|t`80h2)Z%=ajar6#Ti{i4yjdKfG6uYJ}TiYG#PP&t{mTx@Ov}^@u{->=>8_*-82_)Vx7f2cZB#< zQj6PolFKVf^48z-P!c8iS?aq8N~`(-&z3IXhcp3kb}G-kSi%7`9q~nKg~w` zSuW3gUcxhJ0pi!i$?KtnTT!9{F1L;6_G7cgw)1c+8i%+bmDf|e6HY_iMRc|lC!C3R zOeD`eUcw*He8idG@v>D3zebA?*An+pha|j=MlJ^YwYUYkDB(Ud8S(fXyw1Oo@OYZR za0tgiY_8iD_jsCXk9#@cLVLX33HvU=vW4+qoNxkQi-xQF^Z2#a6(#QNk|eoyq##=(Z zBwt1|z+8}qZ%Md2%|(1WisybJ;VHBbaq>fs!^PlSJJj{5?=rw`Ci74lNq8AeK%7*Y zs2+r;r}5^hDa5oHJ%mo#E&$ETGhherB;Yl+QhyB1qsVm_sG#~M)k9qEH68?i0A>Q7e`#Mp= zAvAJ1;72F8@kJ8$qRGqQLK;ak@Mkp51?9v5F{}*<;+eD~R{j6D3w0&=F&&pTk>p#b z?+Pee!+j)tiY6d#BW@&Lm#~SZ+vAlIK1Z_wCl0T{%YI+NUv}cYUy|gS{!K}qP0334 zz%&i(#qFpTdaSqzL`ZT?zoI19o#(~3kmO&}$t&SL_G>Y9Ia*`kthVET}+B3OZW&) zx5pL<-=o>~I8VZ7Xn{TcPQss4vd*q-GkZpCYybUdoIP$U;osnmO1s>XCHxZ2w8z^e zyprbI<0}$AM~m!n$q2`GP=`jYw=27;gyU&4VA7oqT@Oc6tJ_VIRs))AZ{)Is;YCrv zmbf>0(e9D_S3A&AVy?c1Bwzm{Zvgcq`R$23{{Tte{THr3T#}FEw;Ocg1{j!C5O9H{ zbcJSbfOLaM!J`#Spj*gj~F3C0hwe5i|j@_MG8$2`{GU z_BdO@O=-40J}coQT40ae#Vn5IxjQA>?8>ez;bSk*bos zD3CE{7?sGho0C5C&NuiTxp-Abb=Ovk7OY&u^rC(+U)PwlGb^eyd477 zW;Y*8Sfv?=)yv%R8kKliS~V@Bxrn_~F77DdY+49qlRv0$4rsZZ6wydpel!8GHW_@} z38y300=O^X@-!Rqv5nlrQZbGm!ear%+N5s<316pV2jGQbTA{IolV}`bZH~9Agx{cP zh%c1pWsj2ZLYfJfJfT~5Kp)K!L!ph5mNv(`OOmfpcxQWGk|)u~ols~W@mT*830I)W zh_yN1s}deTGZ1T2y1z+y0L?`#W^fgM(J-~+ok9x%CtkY51FkCJc4fHB36eas9X}|o zB>7u3VHcR2E#^oEO1PYOdtj<0pP$any&=heq1j+AXug4lzp1 zO8g*c{Y>L>!ANIOy(V*3CGf0#Jj~i3Hp~D zD`GV*M66BsR+jJv>bnQ<*}J^#6bVPu1i*<8hjTnt!cE2f?=ndq5YL@hBgx;V*;rct z#=QL8qlM!p@jzS6N&G&lXSEVx7RmuRX5kgbVHQ94GAio}KXmC!Ao9%ZLDNWv3(7=6^d%IFV)}u0D`^ zJl+WxAkM$Y57ja!O!5F{SvWrAgyRrzXw8k^a>8kdzj(xR8>(|P>%UiTK)bE{<}- z`G`M%nK#`;35U`m#AH9uJzc^VXyksxlQ>@Egp(0})t?*xK*A$w2I95Lc<$>?I2Uo3 z104S);oGzjvHN~H^lteBuQ%-%|^Wc zM{b)+7*6Skw>05pyeHvPlpF+HvJ(&gf`pgSIK&-KaN~bC;WWgzTX7s*!!f=Bnu*vf zp8eO7a2U-;y!u=2T8e~E(IUiC9&w}NCA^(RzV99w_v1K@7f4u}u3ak0jdbYyP^n+j zEcgkk*_Y@3OVYYX3&D8M4l{SHVNI^49k^rE_YmOSV#c_a6HY*UUp&8d`Yjd)_B>DbJyp&0jT+_Em@@O$}vQm-@eT%YQ0{yP? z0!~YEt$+ea-c*cpev#yw{vVS33o+6QWDkLc+pfu4hHwUK@&XgDp{9~t({Clo8;hCb z0g`+>jXMg*quxdy-+U*WhPaIv$9tS`CgO~Ij;}f4{G-r`VTuQ}D&FK;jq31Ut*yfu zA|G(3IC%|n!pVrYbmk3eu@lZf+oiOwW)pB4l>YD*X<^AW!~gySI+hU1EO&^T`N9SK*U*@)eG^2*yK;X||l@td6ZSm`_=~bUcaDVH(*(pDJb2j`op3th$s)Hw#ILp6_B0!DV=*04#R(T6-nE67 z-BrTdDLDl=>@lwnixZAR9CTH9?u642uNQxa;i41HWcY7x{E398(0s%p;-i&HO&kx& z6k3G%W(zLv>VzXt18%aLyJm61$%qft;`m(&ucsM^2hQZi3!HE+;#}=;ng$&@yma5JVnBnX*%N9#dvYG6V67w&6}6~i4!hB{P!o^ zxFLc6YOUomC7%EuEaqD(IpH|O2WxQSU7c_m;`6sSo-g6UG!wBl{km4dZ_<3k^i%HA zP6@w7ix4-P%JIh%UPvQ9g>#6WCVz@9z@JOQ<^LqDB$|O(n_!J-#*Jy=t27s}_8Ln= z2~VPhh_!c#dP+Et`hEtuMSWiOY6)l11jMVv>lp_me3GUkt}EW2JR{+KG#l|HZyj^_ zO9}U;1&B9`SA1_vcsV6!0S}7exgSXQFpWd33*puAw}fxdG{nb_bL`#RvDV-nD#Txg z^0XILZQ_h>re*TgfO9TN7V*@)k5 z%8ehDa1<>7Y!~8_TAB*eH1xcPOdfW|3eqtFf<_Af>rxLgSngTlX%41UXpKqmHUz^$y?DPFcxpAE`EZsINN&m=84@QC|}2PcDG=0$3rd`!s&z{kWR zt5+p_fW{$i{5e0Yt0jDlrXijrT6De>&O}^G;5!mNO!Ei7*+`4}2^39Jrk%B}8`@L8IMc$FWw`l*Cx(@ezG*YSh- zt%T3fe8jbX<;FclWLiYWX%S#Dk(Rg&9ioePypkYk)uzdp!N@Jq6S_+n{-z$_#2I6G z8AB!9PfTTvmEU#ySpTKz%Zb=gmw-@-LgvZi!#JjHX z>iR>%18Fwm$+Ng?Q`?AYgCCs1-$Dxz-)qB<1(mQu$yLBpuk&1cB>a%Z0Z#npB*&jh z*z_0o>82!KBrd~0Nb;&Q6Ur3(* zd>~FMUV|&oU~w%-k(4IWP!<5YcDf=F5&Am9kKS^;6n+opxKDE z?*?N#I0mqv7BJ(YEjN?!|D)?n;AX13I6l|DGxni)#=bLIBE%@mL>RJF$|w~HQwfEq zN7j-ej`i%4ZGm8c9AS};WjF|vd#LqbaLIdjgRJI8zH^YL8w_dVPH+-2^)bLUPQ zuoCE9F~rNFhr)PA4B%jeAt8~177QbmNgqxRQyj9_45FE88Qzm>(cP*u1rO zR2VP&oj_dRD3A07g^z)suz7Qyr!ekZ2yc=DgWU=jh6v$1zU1JS6dna}#F=f&@VM*r zOt0L$jW$&J@v&^zQR&9Mo6_H($?2a~dcONod26|{6(}zSEmitp$Ucd~=_C(x_*!8+ zO(AR+L_*;oAW7IPh?2e1N4pQarx34R&GOv}AA=xavmhQ(_)*9r{OB(BUZikgh!XBE z&rR5%aDGT2zGu}u_P(gFY3x5rU;Z51my}OX%$~M|7ux)RPiwdn!hc}a6LN{-X=RoH z5yBni>cXoEPk}h$PR)7gZBh6Quuda32Rc_2z6L(Ro8+yzavv_$l=wS@2p=xYt6o=y zXG1pOMLzZl--Kg?XU}51_$Hi09C)rZM?ho3Q&V;$LN5o}%z_@Du(?zTokm z!WSS+*!3n?yjkH|5FuP^6XU;c!g0c92Qt3xf%I{g2kRW-t8x*tlfq5GN7(-Zdks@~ z0)!9;Hceu@PGNJnv_Q5t~Ee$_fvL zAmPF#*{i+6g(1t1$KQmbcKqE6`lgo_0QY&!y+9trQTrzBC;aPq_UdvI4kON7 zRDf5$XB0NKTs*Jz?(%8G9Hkrkg-Ty5)qSdT`Q8oWy?_T2uV-_OyOmJ{d>3#CMF#Np z^Vdx{M7UQ558;-F()*JI*@P#_drWtQcR?(Lz3lz;O*lz-m3)4Zt?*Oe{S$GhJ$tXX z2?q(6&dVijSNJ!`BD`GAVb3TWgec+tg*bTOhtmgk4E*kAH&kdkW8nIAQA##+z@#)?bKA%KOkM zg}(wHVgGh%KtGw{qz?YW%h-hP?ay+}emph1-+LgNut($$H{lrJ=n@|H;|ga(lJM%Y z9CXr6*n0`_HW}Cwh4(^`@W1QWd!xdyLl)t0k8|$BH{mGaz@~ESog>6kGca?DPJX3N zmG^>Mm5#rGaT&86nPH{kw7m)Y30IfTX@=Z{!-QAKO@D9`jt~xZ;f?ewh4CRCgxhqr zQn`=cgsm%xa|~cyOctdX=@jr0?o@b?v4t-4B3QN$n~0GH{lrJYb&_B zvu?u4D|pcdPZ|D3tEbL#2`6r{3KH&BjDwVwE0tydFGCjL(`|C3czcEM8#;&sWj<$b zbDh(8pZT8kA&#cXx|;93{og#Cy!yZyx88x<}f*Os;_{Wm#>IH2@j zWS4M6>3ig(tjkKzlB68g8Ld~J9LKe zy9%GH!L=_}`k}_GZ&Lb?5XNwxdU3{w6s`{u!i{CU`}ZasC%p1U_OAFCPt6)J2CV-O zzb|{*7B^uZ;h};bQaBDF!oy`E&fZucY)4gfX1QJYlA#!k7R!Yx+{@W^4Lh>C?fN8^f88D~>5_&iF1U-8>o4^<;W4azZwSyMC@;PGNjr zC}DFZ*zG2qwBxxqVQ(Ircl;(CM11}Ey_XffDu)lH2B(*79)Wd>(#Js59zcyjAc#0%9=LVuko11!mIr_|R=PPGY@zf@5T$J9&c+86c0+=& zc>>q-3gh8L0mSBsT5}XW0De3EMBxq)CTt!&wO`@B5V7N{3gcdcuz4<3xuNNe_z0|m zHr!0%p5P;#o#fT3x58~8WXB^FE(h6!_wMDKa}<6CVuZ~znpP?N6(sHWCxx4Ww-9=p zlfMfJ*MT77fO!y7;bH0H&gbC~)mOT)Z=&=&AWGQ`e)uMwu;WPzcL#T2^fu2OTCMPI z@Z0eoh08;juz3=U6;2<@&k!MOo|)!VH~?|NFSq9bw@|n=SVe3&q%dBbwBv~ikAV>4 zfC;`r;i|uL(w~%W?0-@EUWnPV<$pSTq!CCGp7RdNO%)yv-lB-jSz>R6S3;2Rq6J*j zGYa>BEIXd5@SPAPY)%SSDLe)egv~kNHiZ|1yBK0Q<#U}-xF7ftXZpr-X+@q%ANTnJ zJYQYuZHuv9SLsEH@Udq*rMGUy_MMdOx|Y&wxdth)BNsb_mHsGLZXC{kk8{0mC|nzS zh^I;|t&m07oCwZV_%(6RP>T~fN_g-a##xv#G% zh2^ZytY#)zS*4p~m6Toyf~9O@YNoIm)7?rpX}T!gr0JvdGUa)!1C(yYbi9;pOfM)S zlWd~WO|t1q{|fx2aWOvk0xzfcZ^B{1UsYp#P~jIKLO6K`uOqofu$gHv{-`hE%koim zO@)VoRR;TMa8Th}rf?rdD!sPc2>y=J`)6;cN;b6>xO`@Aw5 z2QjSi`YkdAN2ZU^+#*v_>E^_)hSEdeEsI00E63#R6fQ8Ehul-?=Cx@Ox+-k)?1>VHbo6fBPvn zHs7f92DgO>V(TSX>%sSvla+Z~?Ua=tta2Enej#@5qcDC+hp;K(1%-cs5aPfd`GjJU z!iC##()mh1COhl3O0Nnr%Jxcx-Hs{T7m|dBl;m2gKc7C}_rY5papq?Ben{bs5G1^} z5_?ToI4@)oo_sfN3L6zJ4N=5_$EtGhe6rP>?X{NNsoPNLdn8R3W0SiPHqR^tvIl~ zav3qHjLT2t0T&#To}-NOy@*j?DBL?}11~9Kwoi zys&C2{4K-@7rw;!359Ebm4P^KHV0jx@F4IJzU@Qy-mmaK5F$KH4i1aIm|hw_@|tk# z(d=Dc;nol%d{7>k-C5y-kR<%XyBu_|!ub1VUc{ftr;)EH{22rZcbdfB%M`{hY!U`} zUe5`IYe1CnclWV(fh?Kggbu-TLV~b4rm3XxZg5vZY>qbWP#7<35Z=o7{<2>ews`i%bE#uW-TgfL>O2281n zCC-%3%=Rm*nGmNSP2{S7ySmo`o7kd5K4 zpNB;ijzEmCIS<>Ra1@e+&3V{ah1Y_&x(yeR>%OMx%^*nFoQK_}@G;1;5UrlC zzAwK#LvDt`=F#hOl|BL7H8APlHMqN<*IrQ;or7&Tzl zh^-2nQ}P{3@7R2YR%YKD>L7a*?wVQE2h0U@asPuz!PsKAze+qnca2;3-fjYSF7~GtrE>c$6 zkWE%IVJTXn@m{;};hT)Tb#VYQ<@r6A6m9`Q#292?U0cQ~Q_{PT4NY=Iz*Y7b@Th3z{l-Prd~`cwQc1c3VaYFh0ehP8OiUTnUy zoeN3AX3dT%jNgH7fL%9xv7-u?>&TVmcqM&=X1A7K>3+zfaAq%7SK(7~^4V7DW>xR3 z^n;MVaJW%lX<*x}y{N3rD)Xw+%_=ib>9Zm1!y?U^^Mk@>x3*L1A9%P2e<&UA8^Ca$ z@hcb?oSNRM`e5CLc*DKCN2+xb_7M&V?yN9gaQq|odQ@Sv z$e&WW*}IKU`W|pM!fXvMaJXp-*8qPb+@H;aFj<*>&01wO0wVSxI~1+~aSmcNwgtJW ztX=>gVN*%*Y3XgL0injJO0w-iS}Lnz5VHrlPvIJnQ zN0e@ks+TL>Y)79c-5gbKRJu8;KHemCRDGohu7c*U+5K92SMa0v+i@fYH&nPAgm1^D zO@|0he8s-vHEyo5G6&TQm5x8a*OY?G6`#1mUxJTtFFAibpzt6F5pFME3B0KA6OfJg zdXo!HPal|Rav7zYCRb9rX>whqn%+};d%621UHM2E&slt;Xir&_{ zkf2E>xbML2)AY2IoSzrK;nl%^1@7c!P)F%Mzs=)+Na^@|Rt$H&O~Vy7ZF*7ZrcJLX z-Lz@8(oLHpN;hrF+dS1KPxE~B?=dUeIb~bC1;42knvuRJjeT*Y7f8a4=6HmHzrBKC ztpFsO+Zs1kS(k6m(ce~jF&}4Jp>%xiQwv;Zra|8*yc@Czn||z9_y9x+%kW+QD7+OC zEwJQO;BJXlKg#oMyUkPs2R~x#8R*jzjW5F#oOrhP;BkDRjJHCZVwwA+_bJ>FtUD1` zmLEB8{(5?<7r{rk>ui<>E4&Rtgv<6}JWb&{Ae->*^5v*C3gfR{A+`p=-aGTPw|aoL z6&kmerJXS=y%PLwL&CvMJj`r`@fR)#kIl=Q!4ic(fGFZXp86d0bA_wQU7TB#{`pq6 z|4Hdbz}*_NecYRiIiYY(@DnZ~+5S^_GK3Ka-uj$tEhWu0n{u1h95qAf_qAmE+DiWd z;*<>@;#&O*e*%^tvwc5_y?ZH~Tb@$UU+D|q;c!nW{XB#y-245w$d?rMp64{vl-^F# z&sBODVia!8Vs`sT;oIa(>Ypk7$}L>oW~DC%ZyW5z$?rMbPYUBVF5BQHgBvMXC1nBR z1P*2vzygR8e)Bn&%PYJK5`_PGgmW}h7=QilF2rL8vv)^@TY;Z&OfE1#qHqrgBhCzM z;@~eRT;^TYCn^0*9?mvX>4l20{X(U`Dr@fhN?+PE6$kR(jUSr&&vMXB%IM5W*0(FY z+&WISPw6j1=x!Xc?+13fpm2T2MqIAMzl_Vz;i*{~$(gY6Zrq*YO|lf_MfpO+y~=DN zc-tcGJ%GI*QFuNC3HOz6mA#@ceys*^puQZEZ~G0W@2qq@ilcD*r1(h+=MuNKm44|_PV<4%@e#ZM>_wsOjK5L%0|*n&E4#nF z3gcJr5L+W*Z2;eR9|7wgH2!e|$Lcqqr)H!Rz(@F-{Vczt@E;H&ygADFV}DYw!QBaQ{=YfsOofYpAF=g2^y!3GN_ID9 ztCtp~myjIB^K+FxNj|$KMlmHr5CdYP`q{~x%zDgD9ctyCq0mA>;qE^wUE56jjwU+LxmYkf-3yzyN4!>u^b zM&)4iUz9#hE`cW;^ealwx86!6_|L9mewP7d7IOin)r~jtd<6%6oYHfZVf$B=zT*HV zo~!ijc)&{eU2iL}Ha7?QLg_i=v(~*zUoHm@e=7aB?Dq=1#qrF*k~w+4_FJ6aWk55z zA-c74DB6!5dMLfu2p-ubrSH$h_ScmDi^R_@C%OeFKb;ZZFK0UCuLITxW^tf4O3!tL z6L(g6c{!r(qx3rUbEE~_i4`h45il= zJ@X9(ZtKAb-cx$J5bIwkJ?Cgnutn*Q9Ax`lN;h#%v7UK-*_%KYl|!X!94LpJW0-Zt z1S+d^6Q`2WpX|+X>Zj?r{7s;?X#hW_myvZ*`WjgT4=UZnd0Ocv&S<6A-+=|u_BTZV z6UdxZnGu^n%anbm5xfZ2D}B{z9`QD%pO8yO7B^aM?6&N4~afT z>9uQTvct;?d?>fe%vQQ7XqnQxkKsaBD7{Wo*0(DC)y6#F?U@QJmBW+cN=W$(!CuyaZu^c zo#gm^)AdZ3aTu8nT;>yvu}c3f4<~q2>5rD=1Rpu*F{MXRPwc?a?fk#M?!;lGd*$BV^Ga_d z$GAC`asj5JZ^)NYiYtA#=#`hs+HD+eE6pQop&X3fUFnI(IN@Us`becWkSmg}7@hJ{ zs|}cMfarbYp9P}1SUo4N* z?DGHhOjk&Og70%7&pPN6m40#+7c|#Fe_!cOj%WLoDINP?Kw8~izA>{_IV?ZN1%0FR z&HVT{*Y`^Aw4CjCDgD1+SwCvmY5CtPE73(eK)rout~9rFqyTEPuAG%Ol~PKtGyoyK zsw#cJV2;yR=@;;PA+`RuRiILFc9{Jk2Q-Nn@;RGpz0%iw#CH1}^s5efo|UDX^}BJ;@EY-x^ehH>BfGa(r;hO3I0^N ziQ`(q+zhNprX;>a0n>@s9Q3(LHy3x-DBawb|E1F3mXBF7-Eu9)RAdsDS9)A74YpCb zu^;N7k5c-@@3{l>Sif=nZvwro9G)%8i{@*k8~g1_H}>b0ZtRQ71!*2IE`I~+rGXpz zy$8;9k}!RX&P=t&2?*vJ2W z#EsJR%aK&4Ne!G%m$x*5PcrJD|YY|~T6|K=-myKR8p70n0^ zDcy|Vq|!~Hg+ArN%)m@RrIn5a@%GnP0prk0>1G6vE8WY#(tO`MNEmF-_wy1~IA zp>&h@l+sOt5^_AC<2N%p<)>DgK#v-r^yv=zG6#K)(#;dUVoJ{(Qkj?4E(OdU@GqsC zLS3J+pBb4MaYdyY`(pg*SdOgT}Qpn>QM9rPa@^xaA~Yx|!{HyzEqrhswC|3&(U4|d`soRUi4 zKa%Y-ls>^+Nm05<+?(~%*Eheh?Kseb1R#1#(Gu3H;2wydi+*4WQJsxae?I{~Vk?%i zvW`F)=Q7WTF;$xv|IreoSAj2OiW3TQl4o5dl`dx+u8N|YI3>mYc4aSL5pwxihrEOE z+m`Jeocn@r5Z3sZ!qp^prY*Mp{dcm`&DuIc>E``+wbD(`_p#pYde03wsvOKp@TbyS z4d9jFGU<@4P_%@v>;^8L`b>S5n_^s*L?;KjrpAsgS1kxWiOaNw4d+K}UiU&4;fFV{ zKwfq{obedJl(Z)PYk>dgHJ5Q@LuxKHOgqL~B?n{hbqe=mYu8@zBX%bgo(|E$`AWd( z!TAbhUKVCXHB(#*#`r%*Zzy^R(M_S^?#i&~)HS)v=c=XjMtnKa)qr)#`xLHS?Ud0V zG3pAwr*L>Z1zQ-G$T0jzuVD~Ej9>PQ(PTMflkrMr+=Xpjv6Pi(m%?2IpN1rPUlME< zzAGp5f5AHhZ(u39k!PtAT8agE)>Tb(a-;P;A}6}FZ1z<7BK$|MdmszLdAcgRl&NbF zL|Co{9 zx}199a+MUF=5pY_eI(+m0mLcW9S*n;Si^AHJ(9ArhJuggUV&_y%z_Y27P9y$iyK+o z0x@Ksge@#Bk5Z|eF4twouCI9BtgIPatE(6U!|0tM*wlPYyjwDE?|}O;9^`;uN?~g% zBrpe7PZQ4)Rf#;-*@eGl`!wR14b#^1Qywm5Gx!M~vZbP7R+K{jVqE-do;NFP{=7V2 z2_od($^i!$_jka98BcJ))4=x(j&CVs(W$|cA^qiGIrrXVBVO)YF z`ULWQlRk*mGKk_zcgYpfTSPbE+Do`95PTK~-B`K3DsIgoi*RS;i^!q3Q1@VmGa{4HDV>X@?% z6@jl0Ach!k^!JXy$yP{`@lVRwCp*^zDJ#!W8?K2lHpn5;>NAkGv@$cmQx?t0x6@@wLJctoqrM&yd^1vSjLY#R>VYAx(V~a}fl;%Ax-?to{ zvXO4CKNh#?v|N9ZD$3e)vNzWyE3pofp2u6bYlxBAR!k9hDCc)taHH?G>69!`1pnZx zDz<+e4pC< zD4rS4Mw?FYsujgQ_}T{X7jOxlv|;;j&Vw}?M|;_ZYogaVS-{qJsUX*jF&APAE8Sd& zDPz;Aia(@^$~K+iH^|9xYqDPJdIEFdrlHM&0%a9rhn5h-dOdAznBonScz72rV(VeZ z8iSL8Y#eql9-A`uOtxW4HO|ecW~736<_M;>rV#!!2gmP1lyczjS&zlZMo7@yPVm#* zuPh#8@jQ$Fq(o1y?>T${oKWeDr1WACM^|4t!6sc(wsuugZimFJVamlLmfCci)!ao~glF0hU5 zs0wP`6XI6hrc<`MqBny$W$WO82Qq$MVY8mi0pB?EUgChaFy5=MS)VRJHhJgS&b3g< zRGPunAx5~V!kwk^o{%IwzyVKW3<~!V?==v73BA8^z(*PXrSPNTT@n)HU3mx3o5~Ho zn{f|?hl=+z;2w|O;~X&lOd;Xb3O_I2crb`KkZ`~`;x}rd6`+Q=m9Xj5Fa=T4^H?sg`?vA0R$%^UhjYpFg~ep5%K;9qUfEO_a~k=YlPWqJvN<|$}n+jCOYkk zXy;%KdhSwsU->n|eoFuQ7Y;O-^&7VsxaBVFk;>sjD|Q&K^kT9;Ojo+O-~COc-!HeZ zzL%zFx?ES}#`)E0z~%Ckpq{u~zbV~};BTehA=lsX?Bs$?hZ@Vbph_sc34K!+^Sf?Q zpd!7E;H#3-_vU6jp!6B?ZM`l^KP9K7VWl6w%5g@ZPWi7NoviWmh~IK>SgQ16ceDL2 zrJDr%v`+6`_{zJBr`RFB#lScez5!Az*X0VFpqbK*eJiE^oRbgio>2Nn@^zE2(i_c9 zjo;-Op}^7iDEBuk^qAa-fDv zAM^q1&6Hk7Za)p$^d7VipDZg^FB>3zftv$`m0q+l7dTvWvZCHB;s&{9f%{c@kF~kc zmVeU2ZcD*WIBLVGGX;8^!598)G2tI=n7nhAPf^z%h#AAW67~1MUmn z*AS0#z*&rEDqK^7zX4g~y<9M@Nz}u=6}Z&(5GDMT4bu`hByTYIy?Da=RPc$kPT=bd zxToWh!(Ym~SRTeXUjvu!)Q_eNS zxjV$MM(b(tW#i;EuyEp;rHuPZx86=!c|LW(J0V2ghZGKr_j$-BoKHR`FvBpo3d9IE zPj&l z&)RTmJC)^(C;T(p&R8d2Ul~HN>qGL=am~ zg7rF1CPSQzrzztNGVb{)D^Jt`{{TJ=;@PY4PVqhkA;LKhaKUB(1{Z)B;c5=J9^=*u z?~~viAW7bR1e>nSt;)#;f_E0;i3&Ha#yA^-gy-5YEt1xG8NUlzgjd)wZT64RAAEfb zQNrIVd{r?1U?AcBg3Y)umt*h0z&#sVUkbuBxefd{@ihIFp)sx~JMs1@E6)Q8cNC1z z10(M&2fPU4gqI06P4d*@WFLbCh`+F5>cTMT!Zz?Bw)Ui~tcyJNUuw=*_8^BaAv?%r zg({+(al9gh)`1wMYNp&8)#EUCL6UI5hN+TsQb~94&OzMQhN;&Z>a+Lb5F|X*hRHi4 zALC5OB0R;0$-6-V#xo&G_#=hi6ucG^i18Y|e=bh;gBvHFW6HRok7NCjvhw9P#IvS5 z0l@`DH{BUik?rugZ4|r#L@0P`ZQZmu5zlXj7~#E#c-D-sii|G-Ny16NrY(cT`zmF>4W%CHh`)rY}Es6KDy%X4dBER5Mvq= z<>@DR`hbt{BQ{Lk-qn<24}=imakfb&Q~D_qry1)|W-35-MS65?dMPNixlsqmfiEyRaxv1k}wWfxHH5EKOoq2enwmN9so(gPueh5vO_At zUq5>rai$GZU&pj(?%lV^_AiPd_Zx`=P z;C>JBPUW5G%-+9%pYUnry+^z+LKtx%#|gGJi~hMTJYPuZE4#8@Ty)cu>9U8#V=Bsa zn{w+NWH-FmWhvrr%6pA?hrvg9n(}@@ykCb9V(YDxmGvcLlksMoaZSuJj6R~k*KUZB zaUx}fYdFn$@||R8%5IW}=e^)vhPbZ6Z3H)lAmKKGO_O?cXK(z?4#M4Rm?}9Zl{^Sh z!jIW-b;R|1u=g-X5FTm6-DFWjs=hFQ%+~1y8YW0h~~(HG)fuZkl(l0^9i@v>bys10PO20p-0%yt}8YJi{FD z^NeRY;Dr#Q;7e?nnlxRSv>K9xzp!Ddd}kl7@GJ0sfOwn2x8Bcq4+IGx7Hr0MQO0)? zvJeOUR^C&@JJ%l^#k6aa=tV>~;d08+ZY@YqwnoaW+XEb?6}Ue{+)LpRg7KF?5L=I@ ztnd-%VKSbmQdN{xZ$X5x`Q>@4kh<2OD5qKnafmYO@ya|I#v5xSN-&8B7$ zPskQgFNN_3oU+jh_w+RJbQ5Efr=R5M4>7`nZJ3sh^)SbN8j^%xv8Bq7#2i@TZ-^59 zTzM}QZ+zVN3dBFyyy?(*u@s6w@EMgfq@?DQ1|)y9VP%g3TiSImG67f;)=d z?QEF(yF*{L6&T)>XW_>;AWq%} zBCBx-om32SUHS=#6MkBGpBC>iV68zsOX1>Aa&Y_z0kQQ?%F4pWW|Hw&D%CzI7vD+= zpRmQEW_ERRtSb;BoHNO@X0Q$O@_Yt(KSo^30pG>Ai^8qMyB7q>`%%GWE%|*g2Ok1i zgrBuxDs6|G@mPowo@~Rk+%^nhJOdJh=h-lMyNWYj2JTM~ueM?GZZMSb7vLxSi^B5+ z|_RTM6BFO&p(Xq%7|{dc_xGPy2`$t*f#;|Q_O~MwlsMFd^qtu zsf-7T@e3&{&m0H5nDIIX{59iW9q@5TQVD;jCZQY`Zj76H+pjp!7q{uu)T}V;wb0QJH`GukfRG{$^2!Ef6@CucG z`7@j!?;R%mmGYi0-rqxn@B!uBY&d)W264iFDet-BeGRO2c%V`6PqsGe$T;yXrSu`s zv0Zu5O-~xg-WZR|Fr25ka@!(qe#j>Lfb#Ak-p@mfFevX+;yoXdh^^%*D{D(?&T~W= z7a747o`c|ejFsae&r+eXPe}_=B>wtSfg1jGAc!hWm1NY~M zU$o_>Nl{Fe-WIWzxOfBwO zl8s-7BpEMAS>gLYYVK>E`!zM^IjPEMlaF1`L)Mr09{QgxGBq%3G~@i2cxuXvjN$pB zHk~TjA(eP+I>k9D_LY^MF_z=hWgW_F!1vI`HX{mZzJ}Bm{2OreU2K?QPnQ^dAWV3; z!hZ|Sga~5mWw2s6SqyP9UapJ>W^z4v+=W)2EegLYI1WC-X9SyN+C`fA7laT8@?7R% zrfFNnySV7aEhKJL9rU^oqiiizxHA&2JtPU=tGu6+sE>hnBMx{pWYJ_i1Zgr4qBMD% zMf@oln!{f!#ffL53N%FmeG3V~`&1c4$MGnSf_oFbQ{+&MV55%}Uc)!M2bp_M#E8@QzZ0*A1DZ(9X z-qe_3rI|m@c&G!;f-Lf$qVNjw#+88ZGFxuiryiCTuY?5QO*U`Z+*(fN+*`r@4dVUE z`;>Se0YBlS^8Qi0uR<7cz`Dx8%wk_8EiNOv*>py~%ywR-FA}{v#3`F!h5K5<^#f}& z;xWp5lX$-bKE&3HlokF&PKf3v>fuQ7uAFl7w06MvFn+`V4}~mD>KS3flytfz9S>2$(`=Y>7k!OudL0sk7bx6Y z@O$9iig=}9vw%k5%HE%WpYXTJ`z!I@31Py&D({!Y`)`OK4&?fmgHgMvv{$F|d{NO& z(yq)SNsuy@8~8aTVxvMFEbdsuJP0izrpJ~pU0+CB`c(oVm6)Pj1v2D zO8-doDy+jN-{G5T9h(saJtRR}Kmu#@w6kG~U2zuv!B7DQ+= z7s6!xmNLF9#!FLHo-Y+{JeyN(fj9*@3ceq3f=5+2@%*cddy8>l2obLJAN!gX8r+ES zy$-k+<6#bX6vU{6sXW1>DoXXXGM)&W`a|$;L%dqBS!Y+sI`9Jo5nI1OlqRPj3n%zY zVKU>pE~(p1=cZ=y`|qrqAR8n|37b7FykW9mt7y~hacZhKngeNQSJ>oqb;)Lfb?{CF>30ON2f1te0csGHM z@DIv+&V0`O6NC^4PAl(O(yc;PdUwxAO*KU~E73X$S07@O?M?@``yolVzsb z7xOfDt<(NX@;)bL&%co-HbJd#V6mJ0Oa#o&&bXv~=4pOi>r!6G!;84O8MB zlK2w1f26n89O>)WpNrVLpy*~D`{h>FOW5owoU1(Rl_8AbJauiDig`4`_;!d8?ym4Q z!F?f)7|&mPKjGv>uyEpeSsAxn%(3u$F@)b$_<6w}L5PBU4>6kTglsZCqKxN@@tKrW zpkU7QE*M-&bkl|Vr1kY2?C${YPR!QEhN(%zq)A;MNVty;Q_Rc%ZhF`oeARRRrb52m^;Dx8MC#sxltR7-NNB|f)BCPA3`)4o|<^Z zDC5>*{3>KqEU;nfd0;8Wnh!C;AKNO)kEA(M*Y}X596KSn8z(2hOOroY{3j&_^5y11 zo55vD^6W-O6)r<~26Mzul;tqoBO?rChpROs1dTuLiQ5N>b7q^vyS95B9jllMCg zI11ih5U;gi>iKl(+BXm+yu*g6Ydu$R?w=ux@F9g43O)%@!hZ@j!|X2$^dCqd4iw6p zzIGLia`4hhZ!3C+=qB7S3D*Mr`!HKO<+fAYf)FM=P~j_rpMeNsytqnMc#nFVjOVCS zQzg|Ju=XSV+!l+v)}R7cj<+-;#uHz%!fh!vhgU;!&Q~U1`e?_lWS`2Sn^E0ekoDRS zqf||m+r?Fk@s4%E9c(zY#YrXIz`pBCd&DXV}b&rCO4O07>gRRPgWclyeL zsIK&&bge!_C|fHP?p_Jk5#m(SLp*s5tb=I$oHBk|jPb`h2~Sk1MoFrL5JGINff!Bj zhq-9-6C`PJfW@OMCR1YORTXH81j_p2BSBnI9qNqDI8F0hVMj{o8{PAlR&N%OqSk z#!oun;f$v_;5Q(fg1=?Mv`D*V@JLrd3^A=NH2H<+j_};SskuP@Lg~Y)UWi@YqEo#T za(V{q6>K`KCB?sFy#{3chLzN_VRGA%!MG_z3AeFf@_u>)<4%wue4h=Ix68};QE(qY zJj8~{`|t+FBf(Gjb%i^{7%zY@Vtmq5oF*}dknwlQc%2yIXAgvrD|}h-Ik1jm5Ih^k ziLX>)E0w}DsezX>R<-F=X!(t-*H5{5IyvB;jE6el7a)d7JulfXHEEb6oeoLD^K6)M z7x{{FF9Po|#LE=!C3rOi34bA&#+3vAZIB({H;_g6XXU*~ybnPXapp5ErWF6Wc$6d}{4$k;-#c>=$e}zvl6_2F-+}cz;-kv@`OVDFf)8<^pghac^kKE&GNPODX39ob%Rz4k z*_5rT3g_O!*?K|@G5$bgYJ%$p8P8M3y~TJ@%F6Sx!Y>Nm1i=&N{hbZdN>{8Br#ha( znP(laRg8vobySQe(*efL$S9)CZYLHFY+6XqQ*)<8*iSYmjJe2Wd2RsYBe_-(WHcV^6 zIazf0U<$<6Cn+mB&7-+rc@7_JgL8qL@+&50ICTqilM0G%)`kX^SubnTX>FMF1M8K* zeHtsNVZ&6(Fmc0gsS$2r!{q(xHui1@VZxnln7kK>_d^gN{DcjYca81rjrUy>o~G~& z!E?YmgX4Y+LNr+iKAd>IR>sy2j`dy2%9Bv|PQfQ3n}XznBu;$A0S6fma=_0)@GMq7)`qD`#j0@SuRs>zSvE|$qjAP>K$P%13jZzmBS;Wl zE7+_KkIU%*K0f#y;<)mD>_-m15B!KTk1Frs;%&)eAI!>M;3sw~sPy`xmloYr(b>!P z^_2a6V&9Z?*nJLnId?iZ-v?F_htOByY^m{i@DZM^QtXu!cn1;T)i&?^SkzfA%=Haq z6F#K8KiJ9qB*X~kkzeLAeK;<-GqpGVbYs@vF(?J<0)(gDk}O*-dH^g(w-X zQ^sv~aiK9tknwLkxeD$JxR1zPnij;3EA>;wxS;4}F-2tG;Z^pl#l9YdF`TD~4buv| zLRR2zjPG~AgCS1d&nkRQyeEM5C*oOxO-<{hrupC_{GrX8wvORH)4*J=)es`QS$TgY z-rFIY@P6g}g?Jx>7~;%7l(+fJDo2_0{*B(vNed}`k?6%mH)HrzKBlUp^j)HNWF2~4 z#MS=^6?BsX#rp~`;*uQ$L7HTz<~$!L<6~m{3F93O_-Ancg+b2qqzHs@&QrE5kJ42A zhxE?JxVZzqkMaEuco@Vf_;U)oif{|3f^`Y;Y=v_QUJX9NUpU|c5JGGnPg&uoZP_%J z2a-7P74h6yXtb72ugV!K*mPQhM(kz1M#|08)&X~6{DcF37J`?t(9t$bNq0!nDUd~Y zrVUf>M}Ohmb0JFjErmZ2jL&u^{E1+*fSSsl?@MrBLA+ggd*nD8ANWo9H|5<#&f@<<~+w##y8Papnh(F@vi zs^pwhQp%=NoUg^cqSCL5UXyj0bQL#opUsGZW>5rt`5}50N8izgi9Gphin@A0f^b;j z-GcGUuK!?H@M1Yl7Jwfop7)e-yMr9-!<3chD}~1k{sAHslw_a*WE9D;;5EANHk{TpNvKCQerCb+cA5Jem)c58aqjtefQbo0IO z4AD)kL%bZW3Aq2mY^@YtC&fGne!?SF)Ta)!_c+E29q=-UkoP8qr;9g!XN&M&mAh&U z4t{Z#l^>tB>_BgkXOEeKrk^Efbq)fMvqJgHc6h%4yvGsB`7}gk#LTRRLhMs>%QV$0iuL!IN-L7yDI#c zcn^dGc|RlAwBh+9JRrR8ngj7{#b?!C!-o?ufo1AL9bv^hJ0~yzwTrTf}rr^zsxq}Kfmv9e25U~}4ESii-O+0gzah4dr z#dw1Q{tgn9>WIQ`i#I;PD<9&&1)BkQYxBTLLzr+zmGq@)a7)G=6s{}YA&8LolY-6C zZ16h=$LGBuwqE7QQn2#l+$x^ik(%@DQ<3kH$bUizjXl>?V4j6AiL7aI};WFY~q(=G*HCK|BRr-3-D~L{BIq+W%iF1d8-jj7WUO2zo)6clND|xu_NFwg7|&Gra#qAaRZ_dCj5i)o+92SAc8n>!2uVmnce{N4fXP(n}N=f zaE-t!irMZ|Zm&r(_kfS^V+yYnJdE+H4tNe^lXq0%UE;kCVuWLYO=+8@G<-}D;=mQ< zUH%X5Q_fmEQscH$+%iNreKq#AAy^Ev-L0@+!gYo$#Mb=~r3rq2j*OS799Ja=?z0KU z6)selOT*_ixv}#96mFJ_v8VQp%JZYto@G~Un@%g^gJRzn!WhoeOW`L4KL-)Q?z)!er{TsO{?dnu$`fax` z;SM%TO|4jv`B;b$UZC&=!Jj~!@K%NM6=Lt>V3k6AOM@G^Dfkt^_?#%h?G-K}m+A&U zi10jx@0V*JDSfZsReSAvTte z0ZNNblxp28;c9@t3}(C20pq7%g!?<-L5xQ$d`NS^3zrX`N1tG)%t8sciy8p?zpwdT(?iStjsjysT!dn_K z96n{mdkan;ha}~GN*Pa*agS!J>5xUnb0CNl&wDE4=aO+{%F46d0qwzj)SrH}c$g(@I(6r%zgWLj>GS?(y)yW3#ains{F~t0AxzjW*feQzCHBU%aKe3* z_t>k9@rMlwKc&1^i1!q*Dj=Szyxaf7-V4A-_+y0!3*G=B#MU<{D|}jMHqK=pRjJ~V zD(CIoE;E2jvfv7ePHSpvHLK0J%iDBnV^WeO#YbErq>45QR8HDdrxT|>I2T{V03N}p|QVa{g*I-Bx9%J*S1-h;v*YXm$ zDY9+n`bMK{CW zCd02_v!?-cm6~eVbSlQgX#@!>riBfY+jMce7u?kl_p;&C`caIl!Y7y!9%#ely+gd8 zhcMw61)EyUo61ax5Pm~>yXs*Ge7y&8!YgfT~g&{%SH65^z@m&fxl;9n~T@$?@6l_+qmZdq_VDJ-u)`n^EZjc2u z0m6h|QNbUm#a+Xn=p_8E@;)ctc%hZ>=Qd1>_rtQBdlOi-5bss^h~VGAhd6LT<$g&P zZ_Yc@+Z7SLlF}cRM%03A%GO-4X+&)ghw(#>I;4~_6Bn>RJ$MQH?n2ZHc?2aGqv6JBKtPNlsq zLs>q_m&GNBEHPULoGULx}JdPi)--gM%n2#&}078U6 zv0?K5LA+y-P56Mqx65TjymW^cZ`|(&Pmb?n@-uDl#4C3z-oxu z8mVxdBwSbU5x!q}Hx!-wJLGQS!c5uvz6c$ayUJYNhSC!*~W;&HcTCDCdZmDfS>S7HcZ|-#Cs-$3D37-@?I+5OCUmclfotB5DRZ| zL5#n4;%kBv{8AE5LVqjcaboOho8FyAWD_YZx*7MEVqa0&7p{th;j1OYC|g^|#)+qg z@;)ry52vg=qaE->#tR+r`{2DDgRin->RRiDsR~>hAV~OI8>X&h%C2PxWD)*F;VpuX zK$P$q!Dg57uB>@~K>~3gPdjdxY0D$B1r}5Ke9_B^Zo;jWa81D96tlHfZgphE?g(MR zk0=}z{1ikGThFAd@cxE48P8Cuc1fxgU^PShsVx?D?T~a0f8Z9e^<&BkAE}v|!yk1( z(O0~E`e=Wa{1rquqcTqwtOhYk)lj*;COvHlNy2y8Fjdm85idV{Grj|HFB_)icR9dC zgdj+GpbeAvbnzYqS%hD*Ve)?B9`=3}qJ)%3D1|KO`K#3^`fh*0q6VrAB(h+1$T!iVti^TS>aPl z6J$J6<<2de$ZT-miFko67IkfrbnQd%BgQB4k(ITJ=MM7R<Ru0ZRAW1`bNa6gllf!fDyAY4J zrJ(NiyB+`F>vaes#+#+c3cmuEn){mPeof7JPO8Z3Wm7s23G~VQ&lZ^$%)v*v3Hk3$ zZ_c5|c)qAjr%Dbb6tq}V{DZHy5V;#i-^GS0 z_BDyo2jYZ>EBwS0oH`S%w%C=IAw-kK;KPY$xia1@#w$}+o-GQO9LTZakWE3(LXswz zAV#tBc4lZ+pxedR4c>N$>p5V&OObHU0pnRR;Q=;GJ$X@j@-$=-9&N+alc`T}E#n|c zc&fs?1kZ*9;YEVUhc>7JvPs~B5!)mFRCx~@!ofF!pYZp}yR3Ns4q?LQm3OnD?2R`a zBMy}6!n3Ap4+*ZQ^p`}hD!QrlC)wB9#D#1_dt>&AGJlMB~T&EB4ep{p}9+cR>h~dOF%LHL3L-_y=FTA)9c28>S{T7{y(90%C-pR(Obz)!fVEh@F~khHNMgb`bVQdZU^p3COBWvMyO$0~Bc z($s&K>kF_tW908_k!cC^7|r9@1wO+2Y?u=FYfio{*HH)&K5N6|eSR!^d$f43hHS!LDDSt&bMCDWBb-optKd_RM2tVUMpnMOJ=n=~r_KbPFDAOF ze7@wa2f=O_yot??y0%EV)()}|<1ej|mGu-F--TS?RFT)na(Wxw-4RD^k*VR0 zCvrjSz)v`4!<0CqCH}$JcMvAL%ZACj_+<7z2ob`^ZJ4~fiuWamBMw+S+1fN?oOl-$ z-8AEnmr~+wfXe=i*!#eD9}d3-WYgq62;s!@kTUK&g_Av+vhqBy@Ed|(f*1vffVT%u zmO_$ZtyRWfh%w%Vj#i#S4j6AkM;yr6D}9*8yQt`9m<7u4Fw5BNscRdgYgHgh+3MLa z_5Af$I6Qs^P54fQ4+!o6?w*LdsiX_Mob-P16CR|zM^5G7_;Zwm$13mT;yn){g#X9b zo50Oje)0d$NS5+E8cPgGBPtS&5=t_aWrR$r$U3$xk&(Uh7)3}J(LuIBDQOv%t->ft zqNZf2RF5TV%T$U={myyLx$p1v`SJVzyA1J_og?U%vVZqC?uoUQb7PTbB1izhyMSIdT)!s}= z!P~R2XkT;-|A+tWqXNN)v#@BNHth^~J92}QYs&-9GuCsu8m|EIi6*Z`30C7%Qc?c# z-43BXvrw%HL;1P`E*)3n{U|L)o}|G2{4F;%cKiz(ZNanAahy{mD81-cwX7i0!b!F z)tqa!q$!0vaR#&l8_j2EZrx8Y!M#BHMbjQjNx_pr+xv`a&!PgsuK>Qm@M`jQ<}!G< zFce=Z805cvUxTan&DCj&G7gpRq^6xrd&g{5HMx_%RW{6Pe2(xfC@tQ)1OC>`^(Rjk z#>2ttcV=}41q9DK2VSfAeZVJ7dmqI``!M*PKU0(T1EmCC&{_Xx? z2X3Rd1K^8IJ4)fMto?{#CmT!6QfK@r3Be0MJ7C&;rd;s*=fHeYfpO>r;G0eR{4VOm zae9|IEe-OKCa+AzY1*eLDca|C`)|UoBK^BGd3!Lv8t@&4>npzN9JmVwMSD2l zsA-R-sNgAvorE2;sJ%!D!7I;!KT-T8;NMOASMu~^?K9xJ*lbN$Ns0)r(fz;au4$Ox zHx%6Z9QZzp3my!(wQ2MFhJq&;b`n-s8hQS=m@G8h;H}@C)a_e6_CN z9e~G}_F+m0&VcV#=KBn#1@pcAg_-CiY_DP74(Y?V={fKn6cF4C@ZYA*Z;c5aZP-cJ zHjCP`6c@bc9GEXg75pLK-KJeY8NtWF_td$Xl0V4*05`H_ZFSm7SkiD6lRI%bVODQE zNBCwGV{^W)fOnd?zLXR^6s(r1RhX+e)2Tr4+;ia7iZ=ni)U^3dwZ5!<2z>W>PE(qp zDC1CWFa6U==_JDyOzx!gI^Yng<2Z7a|W_2)Z^8Ei^E7FPD8)GR4``FUY*3-M29y7mWAmbTXShUS~&hr!yygdtxc7w9~AO6Q@5gCU(wxuF2MSH0E zE|(=2wO*#y803>pejla8+u$rL=Ej-1$0;ND z*_Msi6zywmcdS0e1h>t?qHXO%PK1(zCuL#Le%!Q|Qi0%iv#@BtYBB$myn{HOPGw=y z-euZl`)fESPQRPHc9vYsy>I4jp(va4J&=XPTuoauA4dtn&t+lJ-f7yeQd;n?EG*jj zrkx?rLmbx&2K+BhqJ7Y`t7OSV%~_~#2J+9$Tz87FIp3%(EarYPb5kfT_{}UVR%_T2 z*(a0|d^8J-_MfKxH)RCZc<_I5746Zc%?-q0#`kAo(LP_o@V|i+7W`}$7V?Q{^V)#m zZCO~fFEZ_KC@HwO?XyV?gjBbQTs0~Xd{Y({?MqC%EqSAihi73SLrr@M1qCkw{JBl7 z)>2e(8t|v4{R1T!hfV`NX!ycG|I03kQ*DcrKT9qmCwxuv3}J80&Vkz~?gsd{d3%5& zqCL{E)4hFWeZoYF3w|E(1@kqIuTx6!nk-zCqt?AC|A+r=ri|cEvapPFN18U@_Vh60 z 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

KuiA^z4u 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 diff --git a/CompactTraceDescriptor/fileStack.txt b/CompactTraceDescriptor/fileStack.txt new file mode 100644 index 0000000..3cf28da --- /dev/null +++ b/CompactTraceDescriptor/fileStack.txt @@ -0,0 +1,1373 @@ +0 +0.000213 +0.000283 +3.1e-05 +2.2e-05 +0.000327 +7.4e-05 +0.000186 +0.000337 +6.4e-05 +0.000376 +0.000257 +4e-06 +4.6e-05 +0.04736 +0.000356 +4e-06 +6e-05 +0.041441 +4.3e-05 +3.8e-05 +0.000604 +0.000168 +0.040812 +0.017009 +0.000438 +0.000424 +0.00045 +0.000443 +0.039885 +6e-06 +6.4e-05 +0.000789 +0.000416 +0.000297 +4.5e-05 +0.000511 +0.00057 +0.000249 +0.000208 +0.000304 +0.000203 +0.000574 +0.000258 +0.000243 +9.6e-05 +0.000535 +0.000193 +0.039351 +6e-06 +2e-06 +2e-06 +2e-06 +2e-06 +3.5e-05 +0.001338 +0.00036 +5e-05 +0.000455 +0.000221 +0.000237 +0.000242 +0.00026 +0.000593 +0.00024 +0.000239 +0.00025 +0.000261 +0.000144 +4.6e-05 +0.000302 +0.00028 +0.000268 +0.000242 +0.000475 +0.000263 +0.000282 +8e-06 +4.5e-05 +0.042231 +0.00033 +4e-06 +4.2e-05 +0.024777 +0.033406 +3.4e-05 +0.041757 +5.7e-05 +0.016922 +0.0003 +0.000256 +0.000236 +0.000198 +0.037472 +1.5e-05 +1.8e-05 +3.9e-05 +7e-06 +6e-06 +5.9e-05 +8e-06 +4e-06 +4.7e-05 +0.000534 +7e-06 +4e-06 +3e-06 +3.1e-05 +6e-05 +1.8e-05 +2.4e-05 +6e-06 +5.7e-05 +1.5e-05 +0.000212 +6e-06 +4e-06 +4e-06 +0.000177 +4e-06 +3e-06 +4e-06 +0.000335 +7e-06 +3e-06 +4e-06 +0.000302 +6e-06 +0.000132 +8e-06 +5e-06 +4e-06 +4e-06 +5e-06 +0.000431 +8e-06 +4e-06 +4e-06 +6e-06 +4e-06 +0.000219 +6e-06 +3e-06 +4e-06 +0.000228 +6e-06 +3e-06 +4e-06 +0.000234 +6e-06 +4e-06 +4e-06 +0.000239 +6e-06 +4e-06 +3e-06 +0.000212 +6e-06 +4e-06 +3e-06 +0.00025 +6e-06 +4e-06 +3e-06 +0.00025 +6e-06 +3e-06 +3e-06 +0.00029 +5e-06 +3e-06 +3e-06 +0.000101 +4e-06 +4e-06 +3e-06 +0.000351 +6e-06 +3e-06 +3e-06 +0.000122 +5e-06 +4e-06 +0.000381 +0.0012 +0.000979 +0.001494 +0.001418 +0.037034 +0.000461 +0.000499 +3.5e-05 +0.030896 +1.3e-05 +2.5e-05 +2e-06 +5.6e-05 +2e-06 +0.000168 +1e-06 +4.4e-05 +0.00024 +0.000101 +1e-06 +0.000222 +1e-06 +0.000285 +1e-06 +0.000249 +1e-06 +0.000186 +1e-06 +0.000237 +2e-06 +0.000338 +2e-06 +0.000235 +0.000826 +0.000219 +0.006962 +0.073517 +0.000375 +0.051888 +4e-05 +0.000279 +5.1e-05 +6.4e-05 +0.000389 +7.8e-05 +3.9e-05 +0.000381 +7e-05 +0.00019 +0.00024 +0.000346 +0.00016 +0.000266 +0.000188 +0.000257 +2.8e-05 +2.9e-05 +0.000411 +3.4e-05 +2.8e-05 +0.00068 +0.010716 +0.002634 +0.000322 +0.000624 +0.000105 +0.000517 +0.03726 +0.042492 +0.000326 +0.000737 +0.036449 +5e-06 +5e-06 +2e-06 +2e-06 +1e-06 +2e-06 +3.3e-05 +0.000674 +2e-06 +0 +1e-06 +1e-06 +0.000107 +3.2e-05 +1e-06 +1e-06 +0.000312 +2e-06 +2e-06 +0.000164 +1e-06 +1e-06 +0.000545 +2e-06 +2e-06 +1e-06 +1e-06 +1e-06 +0.00045 +2e-06 +3e-06 +3e-06 +3e-06 +2e-06 +0.000478 +1e-06 +3e-06 +3e-06 +4e-06 +2e-06 +0.000457 +3e-06 +2e-06 +2e-06 +2e-06 +0.000221 +2e-06 +2e-06 +0.000266 +3e-06 +1e-06 +0.000214 +2e-06 +1e-06 +0.00024 +1e-06 +2e-06 +0.000241 +1e-06 +2e-06 +0.000268 +1e-06 +1e-06 +0.000267 +1e-06 +2e-06 +0.000217 +1e-06 +1e-06 +0.000263 +1e-06 +1e-06 +0.000202 +1e-06 +2e-06 +0.000258 +1e-06 +1e-06 +0.000235 +1e-06 +1e-06 +0.000235 +2e-06 +1e-06 +0.000248 +1e-06 +0 +0.000239 +1e-06 +1e-06 +0.000245 +1e-06 +1e-06 +0.000244 +3e-06 +1e-06 +0.00024 +2e-06 +1e-06 +0.000242 +1e-06 +1e-06 +0.000243 +1e-06 +1e-06 +0.00024 +1e-06 +1e-06 +0.000242 +1e-06 +2e-06 +0.000238 +3e-06 +4e-06 +0.000243 +3e-06 +3e-06 +0.000236 +2e-06 +1e-06 +0.000242 +1e-06 +2e-06 +0.000245 +1e-06 +1e-06 +0.000242 +1e-06 +1e-06 +0.000244 +2e-06 +1e-06 +0.000242 +2e-06 +1e-06 +0.00024 +1e-06 +2e-06 +0.000245 +1e-06 +1e-06 +0.000241 +1e-06 +1e-06 +0.000243 +2e-06 +1e-06 +0.000309 +2e-06 +0.000206 +1e-06 +0.000235 +1e-06 +0.00025 +1e-06 +0.000236 +2e-06 +0.000242 +2e-06 +0.000231 +2e-06 +1e-06 +0.000259 +1e-06 +0.00022 +1e-06 +0.000246 +2e-06 +0.000244 +1e-06 +0.000244 +2e-06 +0.00024 +1e-06 +1e-06 +0.000243 +1e-06 +0.000246 +1e-06 +0.000243 +1e-06 +0.000246 +1e-06 +0.000244 +1e-06 +0.000259 +2e-06 +0.000237 +2e-06 +0.000246 +0.000241 +2e-06 +0.000242 +0.000251 +0.000223 +2e-06 +0.000246 +0.000248 +0.000253 +3e-06 +0.000234 +0.000244 +3e-06 +0.000257 +0.000245 +0.00047 +2e-06 +0.000242 +3e-06 +0.000239 +1e-06 +0.000247 +2e-06 +0.000241 +0.000245 +0.002513 +0.00105 +0.000186 +0.000914 +0.000402 +0.000364 +4.6e-05 +0.000373 +7.8e-05 +0.000488 +0.000263 +0.015999 +0.000277 +2.3e-05 +0.000392 +3.1e-05 +0.000565 +0.000361 +0.000212 +0.000249 +0.000235 +0.000258 +0.000252 +0.039877 +2.8e-05 +0.000334 +0.00022 +0.000323 +0.000119 +0.000313 +0.000245 +0.000417 +8.1e-05 +0.000503 +0.000416 +0.00031 +0.000236 +0.000264 +0.000272 +0.000315 +0.000252 +0.000217 +0.000556 +0.000258 +0.000271 +3e-06 +2e-06 +1e-06 +2e-06 +2e-06 +6.9e-05 +0.040539 +0.000387 +3e-06 +6.2e-05 +0.049604 +1.4e-05 +6e-06 +6e-06 +3.3e-05 +1.6e-05 +7e-06 +2.5e-05 +0.000552 +0.000555 +0.000243 +0.065292 +0.016872 +0.000267 +0.000199 +0.000266 +0.000218 +0.04 +0.000348 +0.000412 +0.000115 +0.00086 +0.000487 +0.00062 +1e-05 +7e-06 +4.2e-05 +0.029755 +0.000445 +0.00041 +0.011309 +0.000275 +0.019267 +0.000327 +0.000325 +0.000362 +0.000461 +0.000342 +0.000428 +0.001874 +0.025652 +4e-06 +4.3e-05 +3e-06 +5.1e-05 +3e-06 +5.6e-05 +2e-06 +5.4e-05 +1e-06 +0.0004 +1e-06 +4.8e-05 +3e-06 +3.7e-05 +2e-06 +0.000168 +2e-06 +1e-06 +4.7e-05 +0.000208 +1e-06 +1e-06 +0.000444 +3e-06 +2e-06 +6.8e-05 +0.074649 +0.00038 +0.000472 +0.000286 +0.000369 +0.000254 +0.000464 +0.001541 +0.014374 +3e-06 +1e-06 +1e-06 +1e-06 +2e-06 +5.2e-05 +2e-06 +6.3e-05 +1.3e-05 +1e-06 +1e-06 +6.7e-05 +2e-06 +1e-06 +4.3e-05 +4e-06 +6.1e-05 +1e-06 +1e-06 +7.1e-05 +2e-06 +7e-06 +0.031941 +0.000437 +5e-06 +2e-06 +6.4e-05 +0.03309 +0.000446 +0.00031 +0.000283 +0.000351 +0.000264 +0.000316 +0.001551 +0.014695 +4e-06 +1e-06 +1e-06 +1e-06 +2e-06 +1e-06 +3.5e-05 +1e-06 +3.2e-05 +6e-06 +6.8e-05 +1e-06 +1e-06 +4e-05 +7e-06 +1.5e-05 +2.7e-05 +5e-06 +3.2e-05 +6e-06 +2.5e-05 +3e-05 +0.031848 +0.000419 +4e-06 +1e-06 +6.5e-05 +0.033146 +0.000798 +0.000411 +0.000268 +0.000418 +0.000314 +0.000406 +0.001715 +0.014113 +3e-06 +2e-06 +1e-06 +1e-06 +2e-06 +1e-06 +4.5e-05 +3e-06 +6.7e-05 +1.2e-05 +1e-06 +1e-06 +6.7e-05 +1.9e-05 +1e-06 +1e-06 +1e-05 +1.9e-05 +5.9e-05 +2e-06 +9.3e-05 +2e-06 +0.031635 +0.000323 +3e-06 +2e-06 +6.9e-05 +0.016862 +0.016224 +0.000102 +0.000757 +0.000304 +0.000262 +0.000284 +0.000255 +0.000394 +0.001658 +0.014533 +3e-06 +2e-06 +2e-06 +1e-06 +2e-06 +2e-06 +2e-06 +1e-06 +3.4e-05 +3e-06 +7.5e-05 +1.8e-05 +1e-06 +1e-06 +1e-06 +6e-05 +2e-06 +9e-06 +5.3e-05 +5e-06 +2e-05 +1e-05 +0.031751 +0.000447 +5e-06 +2e-06 +6.8e-05 +0.049683 +0.000361 +0.000256 +0.000223 +0.000304 +0.000278 +0.000303 +0.001661 +0.014947 +4e-06 +2e-06 +1e-06 +2e-06 +1e-06 +1e-06 +3.8e-05 +3e-06 +6.1e-05 +1e-06 +1e-06 +4.2e-05 +4e-06 +5.6e-05 +4e-06 +1e-06 +3e-05 +8e-06 +5.4e-05 +1e-06 +1e-06 +2.6e-05 +0.031728 +0.000296 +4e-06 +2e-06 +5.9e-05 +0.033229 +0.000526 +0.000253 +0.0002 +0.000465 +0.000299 +0.000414 +0.001701 +0.014619 +4e-06 +2e-06 +1e-06 +2e-06 +2e-06 +2e-06 +3.8e-05 +2e-06 +8.1e-05 +1e-06 +0 +1.6e-05 +1e-06 +5e-05 +4e-06 +5.6e-05 +1e-06 +1e-06 +3.1e-05 +9e-06 +2.8e-05 +9e-06 +0.031658 +0.000401 +4e-06 +2e-06 +5.9e-05 +0.033108 +0.002012 +0.000277 +0.000221 +0.000439 +0.00029 +0.000422 +0.002068 +0.012843 +3e-06 +2e-06 +2e-06 +1e-06 +2e-06 +1e-06 +1e-05 +3.5e-05 +2e-06 +6.7e-05 +2e-06 +0 +4.5e-05 +8e-06 +2.2e-05 +3.3e-05 +8e-06 +7.1e-05 +1.4e-05 +1e-06 +1e-06 +2.7e-05 +0.048239 +0.000315 +2e-06 +3e-06 +6.9e-05 +0.033114 +0.000364 +0.000285 +0.000249 +0.00043 +0.000304 +0.000322 +0.001822 +0.014842 +3e-06 +1e-06 +1e-06 +2e-06 +2e-06 +1e-06 +4e-05 +3e-06 +6.4e-05 +1e-06 +1e-06 +4.8e-05 +6e-06 +1.2e-05 +6.3e-05 +2e-06 +5.2e-05 +2e-06 +1e-06 +0 +3.5e-05 +1e-06 +0.031129 +0.000282 +0.000248 +0.008219 +7.1e-05 +0.000592 +4e-06 +1e-06 +6.8e-05 +0.049578 +0.003203 +0.000286 +0.000194 +0.000281 +0.000231 +0.000342 +0.000244 +0.000269 +0.001746 +0.011727 +3e-06 +2e-06 +1e-06 +1e-06 +3e-06 +1e-06 +1e-06 +1e-06 +3.6e-05 +2e-06 +6.5e-05 +1e-06 +1e-06 +6e-05 +1e-06 +1e-06 +5.6e-05 +1e-06 +4.2e-05 +4e-06 +1.7e-05 +2e-06 +0.031641 +0.000449 +3e-06 +2e-06 +5.5e-05 +0.033062 +0.001947 +0.004952 +0.006852 +0.028054 +0.019426 +0.00041 +0.03743 +6e-06 +2e-06 +2e-06 +1e-06 +2e-06 +3.7e-05 +2e-06 +3.4e-05 +2e-06 +0.000627 +3e-06 +6.5e-05 +3e-06 +6.5e-05 +3e-06 +1e-06 +6.5e-05 +5e-06 +1e-06 +0.000216 +2e-06 +1e-06 +1e-06 +0.000451 +1e-06 +2e-06 +1e-06 +1e-06 +3.5e-05 +0.000117 +7.8e-05 +1e-06 +1e-06 +1e-06 +1e-06 +1e-06 +0.000473 +2e-06 +1e-06 +1e-06 +1e-06 +1e-06 +0.000259 +1e-06 +2e-06 +1e-06 +1e-06 +2e-06 +0.000466 +2e-06 +1e-06 +1e-06 +1e-06 +1e-06 +0.000238 +1e-06 +1e-06 +1e-06 +0.000246 +1e-06 +2e-06 +1e-06 +0.000241 +1e-06 +1e-06 +1e-06 +0.00026 +1e-06 +1e-06 +1e-06 +0.000222 +1e-06 +0.000246 +2e-06 +0.000246 +2e-06 +0.000236 +2e-06 +0.000244 +2e-06 +0.000242 +1e-06 +0.000245 +1e-06 +0.000242 +1e-06 +0.000872 +0.000936 +0.000972 +0.000741 +0.000738 +0.000749 +0.048896 +0.008678 +1e-05 +0.00929 +0.087632 +6e-05 +0.000348 +7e-06 +4.2e-05 +0.037889 +0.000383 +0.000111 +0.000477 +0.000235 +4e-06 +2e-06 +3.8e-05 +0.042905 +0.000401 +4e-06 +5.9e-05 +0.032818 +1.5e-05 +3.3e-05 +3e-06 +0.000639 +0.000279 +0.040944 +0.017019 +0.000331 +0.000271 +0.000219 +0.000296 +0.038679 +3e-05 +0.000372 +1.2e-05 +4.9e-05 +2.7e-05 +0.000246 +4.8e-05 +0.000112 +0.000153 +0.032007 +9.6e-05 +0.016748 +0.000467 +0.000211 +0.000548 +5e-06 +4.3e-05 +4e-06 +3.9e-05 +1.9e-05 +2.4e-05 +2.7e-05 +2e-06 +5.9e-05 +0.000466 +3e-06 +5.8e-05 +2e-06 +6e-05 +3e-06 +6.8e-05 +3e-06 +2e-06 +6.2e-05 +0.000149 +1e-06 +1e-06 +3.7e-05 +0.000479 +2e-06 +1e-06 +2e-06 +3.5e-05 +9e-06 +3.5e-05 +1e-06 +0.000418 +2e-06 +1e-06 +1e-06 +2e-06 +1e-06 +3.9e-05 +2e-06 +0.000416 +2e-06 +1e-06 +1e-06 +2e-06 +1e-06 +1e-06 +3.9e-05 +0.000441 +2e-06 +1e-06 +2e-06 +1e-06 +1e-06 +2e-06 +1e-06 +0.00048 +2e-06 +1e-06 +2e-06 +1e-06 +1e-06 +1e-06 +1e-06 +0.00046 +1e-06 +1e-06 +1e-06 +1e-06 +1e-06 +0.000237 +2e-06 +1e-06 +1e-06 +0.000247 +2e-06 +1e-06 +0.000309 +1e-06 +2e-06 +0.000178 +2e-06 +1e-06 +0.000266 +2e-06 +1e-06 +0.000211 +1e-06 +2e-06 +0.000272 +2e-06 +1e-06 +0.000252 +2e-06 +1e-06 +0.000281 +3e-06 +1e-06 +0.000242 +0.007168 +0.035351 +0.000317 +0.000209 +0.000294 +0.039876 +4.8e-05 +4e-05 +5.2e-05 +0.000211 +0.000119 +5.3e-05 +5.8e-05 +1.5e-05 +4.3e-05 +0.000469 +0.000129 +0.000562 +0.000406 +0.000461 +0.00042 +0.000388 +0.000376 +0.000347 +0.000235 +0.000354 +0.000311 +0.000606 +0.000354 +0.000392 +5e-06 +3e-06 +2e-06 +1e-06 +8.8e-05 +0.035315 +0.000274 +3e-06 +5.7e-05 +0.033254 +1.9e-05 +8e-06 +2.2e-05 +1.4e-05 +1.4e-05 +4.4e-05 +0.00056 +0.000402 +0.000379 +0.065308 +0.016992 +0.000466 +0.000437 +0.000462 +0.000328 +0.037834 +0.000455 +0.000159 +0.03674 +0.000388 +0.000112 +0.000521 +0.000409 +0.000307 +0.000231 +0.000242 +0.000371 +0.000685 +0.000244 +0.000247 +0.000101 +0.000669 +0.000307 +0.038181 +0.000394 +2.9e-05 +0.037918 +5e-06 +5e-06 +2e-06 +2e-06 +3e-06 +1e-06 +2e-06 +3e-06 +2e-06 +0.000744 +2e-06 +1e-06 +1e-06 +1e-06 +1e-06 +9e-05 +5e-06 +1e-06 +1e-06 +1e-06 +0.000225 +1e-06 +1e-06 +1e-06 +0.000233 +1e-06 +1e-06 +1e-06 +0.000261 +1e-06 +0.001127 +0.000666 +0.007175 +0.037785 +2.9e-05 +0.000398 +1.1e-05 +2.4e-05 +0.000431 +0.000389 +3.6e-05 +0.000344 +3e-05 +7e-06 +4e-06 +2e-06 +2e-06 +8e-06 +4.3e-05 +2e-06 +2e-06 +3.3e-05 +0.000605 +3e-06 +2e-06 +2e-06 +2e-06 +2e-06 +0.00016 +2e-06 +2e-06 +2e-06 +0.000256 +3e-06 +7.5e-05 +0.000238 +0.000215 +0.000516 +0.000216 +0.000499 +0.000268 +0.000397 +0.000132 +0.000481 +0.00046 +0.000405 +0.000404 +0.000486 +0.0005 +0.000361 +0.000309 +0.000811 +0.00033 +0.000409 +6e-06 +3e-06 +2e-06 +2e-06 +3.7e-05 +0.027895 +0.000541 +1.1e-05 +5.5e-05 +0.032897 +5.9e-05 +4.3e-05 +4.5e-05 +4.2e-05 +4.2e-05 +4e-05 +0.000397 +0.000358 +0.000246 +0.000127 +0.057117 +0.016843 +0.000517 +0.000474 +0.000505 +0.000443 +0.03724 +3.1e-05 +0.000392 +1.2e-05 +0.000275 +3.2e-05 +2.9e-05 +0.000336 +1.4e-05 +0.00027 +3e-05 +0.000323 +1.4e-05 +0.000328 diff --git a/CompactTraceDescriptor/interFileStack.txt b/CompactTraceDescriptor/interFileStack.txt new file mode 100644 index 0000000..c778b81 --- /dev/null +++ b/CompactTraceDescriptor/interFileStack.txt @@ -0,0 +1,42 @@ +2.02377 +2.00238 +1.28467 +2.60399 +5.0072 +3.81183 +1.15204 +3.8028 +1.00028 +0.167993 +4.76011 +3.24731 +1.50412 +0.333297 +0.786241 +3.99887 +7.99963 +0.558056 +7.22157 +2.07826 +0.171856 +0.500168 +3.11988 +1.50805 +0.975534 +0.743518 +8.15618 +13.7971 +5.80261 +0.90102 +0.361659 +3.62007 +0.331577 +4.62802 +10.9888 +0.3442 +3.99798 +0.667425 +3.98732 +0.836006 +0.303362 +3.99806 diff --git a/CompactTraceDescriptor/interSessionStack.txt b/CompactTraceDescriptor/interSessionStack.txt new file mode 100644 index 0000000..20d51d5 --- /dev/null +++ b/CompactTraceDescriptor/interSessionStack.txt @@ -0,0 +1 @@ +30.0208 diff --git a/CompactTraceDescriptor/src/DataProcessor.cpp b/CompactTraceDescriptor/src/DataProcessor.cpp index 63b3f57..007df9b 100644 --- a/CompactTraceDescriptor/src/DataProcessor.cpp +++ b/CompactTraceDescriptor/src/DataProcessor.cpp @@ -59,7 +59,10 @@ int DataProcessor::calculate(const string& experimentName, //inter-deperture time variables StochasticModelFit* modelVet = NULL; - list interArrival_list; + list interArrival_list; // list of inter arrival times of a flow + list interArrival_fileStack; + list interArrival_interFileStack; + list interArrival_interSessionStack; double lastTime = 0; double idt = 0; @@ -69,7 +72,7 @@ int DataProcessor::calculate(const string& experimentName, //new network flow NetworkFlow* netFlow = NetworkFlow::make_flow("dummy"); - //TODO chegar valor retornado de databaseInterface + //TODO checar valor retornado de databaseInterface //reset temp vars flowStrData = ""; @@ -77,6 +80,9 @@ int DataProcessor::calculate(const string& experimentName, relativeTime.clear(); pslist.clear(); interArrival_list.clear(); + interArrival_fileStack.clear(); + interArrival_interFileStack.clear(); + interArrival_interSessionStack.clear(); //load packet-size data databaseInterface->getFlowData(experimentName, fcounter, "frame__len", @@ -87,7 +93,7 @@ int DataProcessor::calculate(const string& experimentName, "frame__time_relative", relativeTime); //evaluate inter-arrival data - //time relative to the beguin of the measurement + //time relative to the begin of the measurement lastTime = 0; for (list::iterator it = relativeTime.begin(); it != relativeTime.end(); it++) @@ -102,10 +108,11 @@ int DataProcessor::calculate(const string& experimentName, //###################################################################### startDalay = relativeTime.front(); netFlow->setFlowStartDelay(startDalay); + flowDuration = relativeTime.back() - relativeTime.front(); netFlow->setFlowDuration(flowDuration); - //TODO DS byte configuration -- now just + //TODO DS byte configuration -- now it is just set to zero netFlow->setFlowDsByte(0); //flow kbytes @@ -269,6 +276,38 @@ int DataProcessor::calculate(const string& experimentName, //###################################################################### //Inter-arrival-time Model //###################################################################### + + /* + for (list::iterator it = interArrival_list.begin(); + it != interArrival_list.end(); it++) + { + if (*it < FILE_CUT_TIME) + { + interArrival_fileStack.push_back(*it); + } + else if (*it < SESSION_CUT_TIME) + { + interArrival_interFileStack.push_back(*it); + } + else + { + interArrival_interSessionStack.push_back(*it); + } + } + */ + +#ifdef DEBUG_DataProcessor_interArrival + if (fcounter == 0) + { + string file1 = "fileStack"; + string file2 = "interFileStack"; + string file3 = "interSessionStack"; + save_data_on_file(file1, interArrival_fileStack); + save_data_on_file(file2, interArrival_interFileStack); + save_data_on_file(file3, interArrival_interSessionStack); + } +#endif + netFlow->setInterDepertureTimeModels( fitModels(interArrival_list, "aic")); @@ -311,11 +350,6 @@ int DataProcessor::calculate(const string& experimentName, return (0); } -void DataProcessor::save_data_on_file(const string& fileName, - const StochasticModelFit& data) -{ -} - StochasticModelFit* DataProcessor::fitModels(list& empiricalData, const string& criterion) { @@ -328,124 +362,145 @@ StochasticModelFit* DataProcessor::fitModels(list& empiricalData, vec paramVec = zeros(2); vec infoCriterion = zeros(2); - modelVet = new StochasticModelFit[numberOfModels]; - - //Inter-arrival vec - vec interArrival = zeros(m); - counter = 0; - for (list::iterator it = empiricalData.begin(); - it != empiricalData.end(); it++) + if (m == 1) { - interArrival(counter) = *it + min_time; - counter++; - } - //Empirical CDF of interArrival - vec* interArrivalCdf = empiricalCdf(empiricalData); - - //Weibull - weibullFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); - modelVet[0].aic = infoCriterion(0); - modelVet[0].bic = infoCriterion(1); - modelVet[0].modelName = WEIBULL; - modelVet[0].param1 = paramVec(0); - modelVet[0].param2 = paramVec(1); - modelVet[0].size = numberOfModels; - - //normal - normalFitting(interArrival, paramVec, infoCriterion); - modelVet[1].aic = infoCriterion(0); - modelVet[1].bic = infoCriterion(1); - modelVet[1].modelName = NORMAL; - modelVet[1].param1 = paramVec(0); - modelVet[1].param2 = paramVec(1); - modelVet[1].size = numberOfModels; - - //exponential mean - exponentialMeFitting(interArrival, paramVec, infoCriterion); - modelVet[2].aic = infoCriterion(0); - modelVet[2].bic = infoCriterion(1); - modelVet[2].modelName = EXPONENTIAL_MEAN; - modelVet[2].param1 = paramVec(0); - modelVet[2].param2 = paramVec(1); - modelVet[2].size = numberOfModels; - - //exponential Linear Regression (LR) - exponentialLrFitting(interArrival, *interArrivalCdf, paramVec, - infoCriterion); - modelVet[3].aic = infoCriterion(0); - modelVet[3].bic = infoCriterion(1); - modelVet[3].modelName = EXPONENTIAL_LINEAR_REGRESSION; - modelVet[3].param1 = paramVec(0); - modelVet[3].param2 = paramVec(1); - modelVet[3].size = numberOfModels; - - //pareto linear regression - paretoLrFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); - modelVet[4].aic = infoCriterion(0); - modelVet[4].bic = infoCriterion(1); - modelVet[4].modelName = PARETO_LINEAR_REGRESSION; - modelVet[4].param1 = paramVec(0); - modelVet[4].param2 = paramVec(1); - modelVet[4].size = numberOfModels; - - //pareto maximum likehood - paretoMlhFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); - modelVet[5].aic = infoCriterion(0); - modelVet[5].bic = infoCriterion(1); - modelVet[5].modelName = PARETO_MAXIMUM_LIKEHOOD; - modelVet[5].param1 = paramVec(0); - modelVet[5].param2 = paramVec(1); - modelVet[5].size = numberOfModels; - - //Cauchy - cauchyFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); - modelVet[6].aic = infoCriterion(0); - modelVet[6].bic = infoCriterion(1); - modelVet[6].modelName = CAUCHY; - modelVet[6].param1 = paramVec(0); - modelVet[6].param2 = paramVec(1); - modelVet[6].size = numberOfModels; + modelVet = new StochasticModelFit[1]; - //Constant - constantFitting(interArrival, paramVec, infoCriterion); - modelVet[7].aic = infoCriterion(0); - modelVet[7].bic = infoCriterion(1); - modelVet[7].modelName = CONSTANT; - modelVet[7].param1 = paramVec(0); - modelVet[7].param2 = paramVec(1); - modelVet[7].size = numberOfModels; + //Constant + modelVet[0].aic = datum::inf; + modelVet[0].bic = datum::inf; + modelVet[0].modelName = CONSTANT; + modelVet[0].param1 = 0; + modelVet[0].param2 = 0; + modelVet[0].size = 1; - if (criterion == "bic") - { - qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), compareBic); - } - else if (criterion == "aic") - { - qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), compareAic); } else { - cout - << "Error @ DataProcessor::fitModels -> Invalid criterion argument: " - << criterion << endl; - cout << "AIC set as default" << endl; - qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), compareAic); - } + modelVet = new StochasticModelFit[numberOfModels]; -#ifdef DEBUG_StochasticModelFit + //Inter-arrival vec + vec interArrival = zeros(m); + counter = 0; + for (list::iterator it = empiricalData.begin(); + it != empiricalData.end(); it++) + { + interArrival(counter) = *it + min_time; + counter++; + } + //Empirical CDF of interArrival + vec* interArrivalCdf = empiricalCdf(empiricalData); + + //Weibull + weibullFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[0].aic = infoCriterion(0); + modelVet[0].bic = infoCriterion(1); + modelVet[0].modelName = WEIBULL; + modelVet[0].param1 = paramVec(0); + modelVet[0].param2 = paramVec(1); + modelVet[0].size = numberOfModels; + + //normal + normalFitting(interArrival, paramVec, infoCriterion); + modelVet[1].aic = infoCriterion(0); + modelVet[1].bic = infoCriterion(1); + modelVet[1].modelName = NORMAL; + modelVet[1].param1 = paramVec(0); + modelVet[1].param2 = paramVec(1); + modelVet[1].size = numberOfModels; + + //exponential mean + exponentialMeFitting(interArrival, paramVec, infoCriterion); + modelVet[2].aic = infoCriterion(0); + modelVet[2].bic = infoCriterion(1); + modelVet[2].modelName = EXPONENTIAL_MEAN; + modelVet[2].param1 = paramVec(0); + modelVet[2].param2 = paramVec(1); + modelVet[2].size = numberOfModels; + + //exponential Linear Regression (LR) + exponentialLrFitting(interArrival, *interArrivalCdf, paramVec, + infoCriterion); + modelVet[3].aic = infoCriterion(0); + modelVet[3].bic = infoCriterion(1); + modelVet[3].modelName = EXPONENTIAL_LINEAR_REGRESSION; + modelVet[3].param1 = paramVec(0); + modelVet[3].param2 = paramVec(1); + modelVet[3].size = numberOfModels; + + //pareto linear regression + paretoLrFitting(interArrival, *interArrivalCdf, paramVec, + infoCriterion); + modelVet[4].aic = infoCriterion(0); + modelVet[4].bic = infoCriterion(1); + modelVet[4].modelName = PARETO_LINEAR_REGRESSION; + modelVet[4].param1 = paramVec(0); + modelVet[4].param2 = paramVec(1); + modelVet[4].size = numberOfModels; + + //pareto maximum likehood + paretoMlhFitting(interArrival, *interArrivalCdf, paramVec, + infoCriterion); + modelVet[5].aic = infoCriterion(0); + modelVet[5].bic = infoCriterion(1); + modelVet[5].modelName = PARETO_MAXIMUM_LIKEHOOD; + modelVet[5].param1 = paramVec(0); + modelVet[5].param2 = paramVec(1); + modelVet[5].size = numberOfModels; + + //Cauchy + cauchyFitting(interArrival, *interArrivalCdf, paramVec, infoCriterion); + modelVet[6].aic = infoCriterion(0); + modelVet[6].bic = infoCriterion(1); + modelVet[6].modelName = CAUCHY; + modelVet[6].param1 = paramVec(0); + modelVet[6].param2 = paramVec(1); + modelVet[6].size = numberOfModels; + + //Constant + constantFitting(interArrival, paramVec, infoCriterion); + modelVet[7].aic = infoCriterion(0); + modelVet[7].bic = infoCriterion(1); + modelVet[7].modelName = CONSTANT; + modelVet[7].param1 = paramVec(0); + modelVet[7].param2 = paramVec(1); + modelVet[7].size = numberOfModels; + + if (criterion == "bic") + { + qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), + compareBic); + } + else if (criterion == "aic") + { + qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), + compareAic); + } + else + { + cout + << "Error @ DataProcessor::fitModels -> Invalid criterion argument: " + << criterion << endl; + cout << "AIC set as default" << endl; + qsort(modelVet, numberOfModels, sizeof(StochasticModelFit), + compareAic); - //if (modelVet[0].modelName == WEIBULL) - //{ - cout << modelVet[0].modelName << "aic:bic->" << modelVet[0].aic << ":" << modelVet[0].bic - << " " << "alpha:betha->" << modelVet[0].param1 - << modelVet[0].param2 << endl; - string fileName = "weibulldata_" + std::to_string(abs(modelVet[0].aic)); - save_data_on_file(fileName, interArrival, *interArrivalCdf); - //} -#endif DEBUG_StochasticModelFit + } - delete interArrivalCdf; +#ifdef DEBUG_StochasticModelFit + //if (modelVet[0].modelName == WEIBULL) + //{ + // cout << modelVet[0].modelName << "aic:bic->" << modelVet[0].aic << ":" << modelVet[0].bic + // << " " << "alpha:betha->" << modelVet[0].param1 + // << modelVet[0].param2 << endl; + // string fileName = "weibulldata_" + std::to_string(abs(modelVet[0].aic)); + // save_data_on_file(fileName, interArrival, *interArrivalCdf); + //} +#endif //DEBUG_StochasticModelFit + + delete interArrivalCdf; + } return (modelVet); } @@ -1152,6 +1207,26 @@ void DataProcessor::save_data_on_file(const string& fileName, const mat& vet1, } +void DataProcessor::save_data_on_file(const string& fileName, + list& theList) +{ + string file_out = fileName + ".txt"; + //int m = theList.size(); + + ofstream writeOnFile(file_out, ios::out); + if (!writeOnFile) + { + cerr << "file could not be oppeded" << endl; + exit(1); + } + + for (list::iterator it = theList.begin(); it != theList.end(); it++) + { + //list::iterator it = randInt_list1.begin(); + writeOnFile << *it << " \n"; + } +} + bool DataProcessor::test_Mode() { diff --git a/CompactTraceDescriptor/src/DataProcessor.h b/CompactTraceDescriptor/src/DataProcessor.h index 3c94b38..d1afad3 100644 --- a/CompactTraceDescriptor/src/DataProcessor.h +++ b/CompactTraceDescriptor/src/DataProcessor.h @@ -83,7 +83,7 @@ class DataProcessor #ifdef TEST_FUNCTIONS void save_data_on_file(const string& fileName, const mat& vet1, const mat& vet2); - void save_data_on_file(const string& fileName, const StochasticModelFit& data); + void save_data_on_file(const string& fileName, list& theList); void printTestResult(string testName, bool result); bool compareDouble(double val1, double val2); bool compareDouble(double val1, double val2, double acErr); @@ -446,12 +446,15 @@ class DataProcessor */ double cdf_uniform(double x, double x_min, double x_max); - // Take as input a list o inter-arrival times, and a pointer to a C vector - // of the struct StochasticModelFit. The available models are ordered here, - // from the best to the worst, according to the specified criterion BIC or - // AIC. If it is not specified, it uses as default AIC. - /** + * @brief + * Take as input a list o inter-arrival times, and a pointer to a C vector + * of the struct StochasticModelFit. The available models are ordered here, + * from the best to the worst, according to the specified criterion BIC or + * AIC. If it is not specified, it uses as default AIC. + * If the empirical data has only a single entry, it will set just a single + * constant model with all parameters equal to zero, and AIC and BIC equals + * to infinite * * @param empiricalData * @param criterion diff --git a/CompactTraceDescriptor/src/Defines.h b/CompactTraceDescriptor/src/Defines.h index b918151..01427ad 100644 --- a/CompactTraceDescriptor/src/Defines.h +++ b/CompactTraceDescriptor/src/Defines.h @@ -8,53 +8,13 @@ #ifndef DEFINES_H_ #define DEFINES_H_ -// Debug defines -//#define DEBUG 1 // basic debug -//#define DEBUG_DataProcessor_calculate_loop 1 -//#define DEBUG_DataProcessor_calculate 1 -//#define DEBUG_NetworkFlow 1 -//#define DEBUG_flowThread 1 -//#define DEBUG_DatabaseInterface 1 -//#define DEBUG_NetworkTrace_exec 1 - - +/******************************************************************************* + * Defines + ******************************************************************************/ //Math #define MEGA_POWER 1000000 -//Protocol code -typedef unsigned short int protocol_code; -#define IPV4_CODE 2048 -#define ARP_CODE 2054 -#define ARP_CODE_REV 2056 -#define IPV6_CODE 34525 -#define ICMP_CODE 1 -#define TCP_CODE 6 -#define UDP_CODE 17 -#define DCCP_CODE 33 -#define GRE_CODE 47 -#define ICMPV6_CODE 58 -#define SCTP_CODE 132 - -//Protocols -typedef unsigned short int protocol; -#define PROTOCOL__NULL 0 -#define PROTOCOL__ETHERNET 1 -#define PROTOCOL__IPV4 2 -#define PROTOCOL__IPV6 3 -#define PROTOCOL__ARP 4 -#define PROTOCOL__ICMP 5 -#define PROTOCOL__ICMPV6 6 -#define PROTOCOL__TCP 7 -#define PROTOCOL__UDP 8 -#define PROTOCOL__DCCP 9 -#define PROTOCOL__GRE 10 -#define PROTOCOL__SCTP 11 -#define PROTOCOL__HTTP 12 -#define PROTOCOL__HTML 13 -#define PROTOCOL__SMTP 14 - -//Stochastic models -typedef unsigned short int stochastic_model; +//Stochastic Models #define WEIBULL "weibull" #define NORMAL "normal" #define EXPONENTIAL_MEAN "exponential-mean" @@ -65,36 +25,68 @@ typedef unsigned short int stochastic_model; #define CONSTANT "constant" #define NO_MODEL "no-model-selected" +// Debug defines +//#define DEBUG 1 // basic debug +//#define DEBUG_DataProcessor_calculate_loop 1 +//#define DEBUG_DataProcessor_calculate 1 +//#define DEBUG_NetworkFlow 1 +//#define DEBUG_flowThread 1 +//#define DEBUG_DatabaseInterface 1 +//#define DEBUG_NetworkTrace_exec 1 +#define DEBUG_DataProcessor_interArrival 1 -/* -#define MODEL__NULL 0 -#define MODEL__BIMODAL_CONSTANT_CONSTANT 1 -#define MODEL__BIMODAL_CONSTANT_WEIBULL 3 -//#define MODEL__BIMODAL_NORMAL_CONSTANT 4 -//#define MODEL__BIMODAL_NORMAL_NORMAL 5 -//#define MODEL__BIMODAL_NORMAL_WEIBULL 6 -#define MODEL__BIMODAL_WEIBULL_CONSTANT 7 -//#define MODEL__BIMODAL_WEIBULL_NORMAL 8 -#define MODEL__BIMODAL_WEIBULL_WEIBULL 9 -#define MODEL__CONSTANT 10 -#define MODEL__NORMAL 11 -#define MODEL__PARETO 12 -#define MODEL__WEIBULL 13 -#define MODEL__GAMMA 14 -#define MODEL__EXPONENTIAL 15 -#define MODEL__UNIFORM 16 -#define MODEL__CAUCHY 17 -#define MODEL__POISSON 18 -*/ - -//Miscellaneous -//typedef string ip_addr; -typedef int port_number; +//Misc +#define TEST_FUNCTIONS 1 //execute regression testes #define HLINE "----------" #define TAB "::" -#define MAX_TRANSPORT_PORT_NUMBER 65535 -//Debug -#define TEST_FUNCTIONS 1 +/******************************************************************************* + * Types + ******************************************************************************/ +typedef unsigned short int protocol; +typedef unsigned short int protocol_code; +typedef unsigned short int stochastic_model; +typedef unsigned int port_number; + +/******************************************************************************* + * Constants + ******************************************************************************/ +//packet analysis features +const double FILE_CUT_TIME = 0.1; +const double SESSION_CUT_TIME = 30; +const int PACKET_SIZE_MODE_CUT_VALUE = 500; + +//protocols +const protocol PROTOCOL__NULL = 0; +const protocol PROTOCOL__ETHERNET = 1; +const protocol PROTOCOL__IPV4 = 2; +const protocol PROTOCOL__IPV6 = 3; +const protocol PROTOCOL__ARP = 4; +const protocol PROTOCOL__ICMP = 5; +const protocol PROTOCOL__ICMPV6 = 6; +const protocol PROTOCOL__TCP = 7; +const protocol PROTOCOL__UDP = 8; +const protocol PROTOCOL__DCCP = 9; +const protocol PROTOCOL__GRE = 10; +const protocol PROTOCOL__SCTP = 11; +const protocol PROTOCOL__HTTP = 12; +const protocol PROTOCOL__HTML = 13; +const protocol PROTOCOL__SMTP = 14; + +//Protocol code +const protocol_code IPV4_CODE = 2048; +const protocol_code ARP_CODE = 2054; +const protocol_code ARP_CODE_REV = 2056; +const protocol_code IPV6_CODE = 34525; +const protocol_code ICMP_CODE = 1; +const protocol_code TCP_CODE = 6; +const protocol_code UDP_CODE = 17; +const protocol_code DCCP_CODE = 33; +const protocol_code GRE_CODE = 47; +const protocol_code ICMPV6_CODE = 58; +const protocol_code SCTP_CODE = 132; + +//Port number +const port_number MAX_TRANSPORT_PORT_NUMBER = 65535; #endif /* DEFINES_H_ */ diff --git a/CompactTraceDescriptor/src/StochasticModelFit.h b/CompactTraceDescriptor/src/StochasticModelFit.h index 526e81f..a6a50bf 100644 --- a/CompactTraceDescriptor/src/StochasticModelFit.h +++ b/CompactTraceDescriptor/src/StochasticModelFit.h @@ -11,14 +11,29 @@ #include using std::string; +/** + * This struct must only be generated by the method DataProcessor::fitModels() + */ typedef struct stochastic_model_fitting { + //AIC criterion value for the model double aic; + + //BIC criterion value for the model double bic; + + //String with a human-readable name of the current model string modelName; + + //first parameter (in alphabetical order) of the model double param1; + + //second parameter (in alphabetical order) of the model double param2; + + //Number of models setted by the method DataProcessor::fitModels() int size; + } StochasticModelFit; int compareBic(const void* a, const void* b);

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 CDHkUI literal 2865968 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