|
From: subversion c. n. <tra...@li...> - 2018-07-08 18:22:39
|
Revision: 1708
http://sourceforge.net/p/transims/code/1708
Author: davidroden
Date: 2018-07-08 18:22:37 +0000 (Sun, 08 Jul 2018)
Log Message:
-----------
TRANSIMS Version 7.1
SysLib
A warning message was added to Db_Matrix to check for trip tables that are not sorted by origin zone number. An S-Curve function was added to the user function options. {U+201C}Dollars{U+201D} was added to the conversion services. {U+201C}Waterway{U+201D} was added to the facility codes
File_Service
NOTES field was added to the Link Data and Link Direction files. A Turn Difference file was added.
Data_Service
Record numbers were added to the lane ID conversion warning messages. NOTES fields are read by the Link Data, Link Direction and Volume-Speed file I/O functions. Overflow protection was added to the maximum toll rate in the lane use file.
Converge_Service
Turn-Delay files can be output without a Signal file.
LinkSum 7.1.8
Performance file was made optional and a TURN_NODE_FILE and NEW_TURN_DIFFERENCE_FILE/FORMAT keys were added to output turning movement differences for selected nodes.
NetPrep 7.1.12
KEEP_DUPLICATE_LINKS key was added to avoid warning messages and key links with the same A->B node combination.
PlanPrep 7.1.14
SHIFT_SELECTED_PLANS key was added to enable the Select Service to identify specific plans to shift time of day.
PlanSelect 7.1.7
MODE_DELETE_LIMITS and NUMBER_OF_ITERATIONS keys were added to limit the modes that can be deleted to match a traffic count and enable the process to do multiple adjustment iterations to improve the count match. The logic was also changed to limit the replication or deletion of plans if all of the count links need corrections in the same direction (i.e., increase or decrease).
Router 7.1.50
Incorporated updated step convergence logic.
Validate 7.1.12
NOTES fields were added to the Volume-Count, Volume-Speed-Difference, and Volume output files.
VolSpdData 7.1.18
NOTES field was added to the Volume-Speed-Difference file.
Modified Paths:
--------------
version7/branches/aecom/Transims70/Converge_Service/Iteration_Output.cpp
version7/branches/aecom/Transims70/Converge_Service/Step_Output.cpp
version7/branches/aecom/Transims70/Data_Service/Lane_Services.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Lane_Uses.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Link_Data.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Link_Dir.cpp
version7/branches/aecom/Transims70/Data_Service/Write_Link_Data.cpp
version7/branches/aecom/Transims70/Data_Service/Write_Volume_Speeds.cpp
version7/branches/aecom/Transims70/File_Service/File_Service.vcxproj
version7/branches/aecom/Transims70/File_Service/File_Service.vcxproj.filters
version7/branches/aecom/Transims70/File_Service/Link_Data_File.cpp
version7/branches/aecom/Transims70/File_Service/Link_Dir_File.cpp
version7/branches/aecom/Transims70/Include/Db_Matrix.hpp
version7/branches/aecom/Transims70/Include/Execution_Service.hpp
version7/branches/aecom/Transims70/Include/System_Defines.hpp
version7/branches/aecom/Transims70/Include/Turn_Delay_Data.hpp
version7/branches/aecom/Transims70/Include/TypeDefs.hpp
version7/branches/aecom/Transims70/Include/Volume_Speed_Data.hpp
version7/branches/aecom/Transims70/LinkSum/Control.cpp
version7/branches/aecom/Transims70/LinkSum/Execute.cpp
version7/branches/aecom/Transims70/LinkSum/LinkSum.cpp
version7/branches/aecom/Transims70/LinkSum/LinkSum.hpp
version7/branches/aecom/Transims70/LinkSum/LinkSum.vcxproj
version7/branches/aecom/Transims70/LinkSum/LinkSum.vcxproj.filters
version7/branches/aecom/Transims70/LinkSum/Write_Turn_Data.cpp
version7/branches/aecom/Transims70/NetPrep/Control.cpp
version7/branches/aecom/Transims70/NetPrep/Input_Links.cpp
version7/branches/aecom/Transims70/NetPrep/NetPrep.cpp
version7/branches/aecom/Transims70/NetPrep/NetPrep.hpp
version7/branches/aecom/Transims70/PlanPrep/Control.cpp
version7/branches/aecom/Transims70/PlanPrep/PlanPrep.cpp
version7/branches/aecom/Transims70/PlanPrep/PlanPrep.hpp
version7/branches/aecom/Transims70/PlanPrep/Process_Plan.cpp
version7/branches/aecom/Transims70/PlanSelect/Control.cpp
version7/branches/aecom/Transims70/PlanSelect/PlanSelect.cpp
version7/branches/aecom/Transims70/PlanSelect/PlanSelect.hpp
version7/branches/aecom/Transims70/PlanSelect/Read_Plans.cpp
version7/branches/aecom/Transims70/PlanSelect/Read_Vol_Cnt.cpp
version7/branches/aecom/Transims70/Router/Router.cpp
version7/branches/aecom/Transims70/SysLib/Dbfile/Db_Matrix.cpp
version7/branches/aecom/Transims70/SysLib/Service/Convert_Service.cpp
version7/branches/aecom/Transims70/SysLib/Service/Static_Service.cpp
version7/branches/aecom/Transims70/SysLib/Tools/Functions.cpp
version7/branches/aecom/Transims70/Validate/Validate.cpp
version7/branches/aecom/Transims70/Validate/Write_Vol_Cnt.cpp
version7/branches/aecom/Transims70/Validate/Write_Vol_Spd_Diff.cpp
version7/branches/aecom/Transims70/Validate/Write_Volume.cpp
version7/branches/aecom/Transims70/VolSpdData/VolSpdData.cpp
version7/branches/aecom/Transims70/VolSpdData/Write_Vol_Spd_Diff.cpp
Added Paths:
-----------
version7/branches/aecom/Transims70/File_Service/Turn_Diff_File.cpp
version7/branches/aecom/Transims70/Include/Turn_Diff_File.hpp
version7/branches/aecom/Transims70/LinkSum/Write_Turn_Diff.cpp
Modified: version7/branches/aecom/Transims70/Converge_Service/Iteration_Output.cpp
===================================================================
--- version7/branches/aecom/Transims70/Converge_Service/Iteration_Output.cpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/Converge_Service/Iteration_Output.cpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -31,7 +31,7 @@
System_Performance_File (true)->Open (iteration);
Write_Performance ();
}
- if (System_File_Flag (NEW_TURN_DELAY) && System_File_Flag (SIGNAL)) {
+ if (System_File_Flag (NEW_TURN_DELAY)) {
System_Turn_Delay_File (true)->Open (iteration);
Write_Turn_Delays ();
}
Modified: version7/branches/aecom/Transims70/Converge_Service/Step_Output.cpp
===================================================================
--- version7/branches/aecom/Transims70/Converge_Service/Step_Output.cpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/Converge_Service/Step_Output.cpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -32,7 +32,7 @@
System_Performance_File (true)->Open (file_num);
Write_Performance ();
}
- if (System_File_Flag (NEW_TURN_DELAY) && System_File_Flag (SIGNAL)) {
+ if (System_File_Flag (NEW_TURN_DELAY)) {
System_Turn_Delay_File (true)->Open (file_num);
Write_Turn_Delays ();
}
Modified: version7/branches/aecom/Transims70/Data_Service/Lane_Services.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Lane_Services.cpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/Data_Service/Lane_Services.cpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -19,8 +19,8 @@
if (lane < 1 || lane > dir_ptr->Left ()) {
if (lane != 0 && System_File_Flag (POCKET)) {
Link_Data *link_ptr = &link_array [dir_ptr->Link ()];
- Warning (String ("Link %d Left Pocket Lane %d is Out of Range (0..%d)") %
- link_ptr->Link () % lane % dir_ptr->Left ());
+ Warning (String ("Record %d Link %d Left Pocket Lane %d is Out of Range (0..%d)") %
+ Progress_Count () % link_ptr->Link () % lane % dir_ptr->Left ());
}
lane = dir_ptr->Left ();
}
@@ -29,8 +29,8 @@
if (lane < 1 || lane > dir_ptr->Right ()) {
if (lane != 0 && System_File_Flag (POCKET)) {
Link_Data *link_ptr = &link_array [dir_ptr->Link ()];
- Warning (String ("Link %d Right Pocket Lane %d is Out of Range (0..%d)") %
- link_ptr->Link () % lane % dir_ptr->Right ());
+ Warning (String ("Record %d Link %d Right Pocket Lane %d is Out of Range (0..%d)") %
+ Progress_Count () % link_ptr->Link () % lane % dir_ptr->Right ());
}
lane = dir_ptr->Right ();
}
@@ -39,8 +39,8 @@
if (lane == 0) return (-1);
if (lane < 1 || lane > dir_ptr->Lanes ()) {
Link_Data *link_ptr = &link_array [dir_ptr->Link ()];
- Warning (String ("Link %d Main Lane %d is Out of Range (1..%d)") %
- link_ptr->Link () % lane % dir_ptr->Lanes ());
+ Warning (String ("Record %d Link %d Main Lane %d is Out of Range (1..%d)") %
+ Progress_Count () % link_ptr->Link () % lane % dir_ptr->Lanes ());
lane = dir_ptr->Lanes ();
}
lane = dir_ptr->Lanes () - lane + dir_ptr->Left ();
@@ -59,7 +59,7 @@
if (lane == -1) return (0);
if (lane < 0 || lane >= code) {
Link_Data *link_ptr = &link_array [dir_ptr->Link ()];
- Warning (String ("Link %d Lane %d is Out of Range (0..%d)") % link_ptr->Link () % lane % (code-1));
+ Warning (String ("Record %d Link %d Lane %d is Out of Range (0..%d)") % Progress_Count () % link_ptr->Link () % lane % (code-1));
return (1);
}
if (lane < dir_ptr->Left ()) {
@@ -94,7 +94,7 @@
} else {
low = Convert_Lane_ID (dir_ptr, low);
if (low > high) {
- Warning (String ("Link %d Lane Range %d..%d is Illogical") % link_array [dir_ptr->Link ()].Link () % low % high);
+ Warning (String ("Record %d Link %d Lane Range %d..%d is Illogical") % Progress_Count () % link_array [dir_ptr->Link ()].Link () % low % high);
int temp = low;
low = high;
high = temp;
@@ -110,7 +110,7 @@
{
if (low > high) {
Link_Data *link_ptr = &link_array [dir_ptr->Link ()];
- Warning (String ("Link %d Lane Range %d..%d is Illogical") % link_ptr->Link () % low % high);
+ Warning (String ("Record %d Link %d Lane Range %d..%d is Illogical") % Progress_Count () % link_ptr->Link () % low % high);
return (0);
}
low = Make_Lane_ID (dir_ptr, low);
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Lane_Uses.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Lane_Uses.cpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Lane_Uses.cpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -450,7 +450,10 @@
} else {
rate /= MILETOFEET;
}
- lane_use_rec.Max_Rate (DTOI (rate * link_ptr->Length ()));
+ rate *= link_ptr->Length ();
+ if (rate > 32500) rate = 32500;
+
+ lane_use_rec.Max_Rate (DTOI (rate));
}
if (lane_use_rec.Max_Rate () > lane_use_rec.Min_Rate () || file.toll_periods.Num_Periods () > 0) {
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Link_Data.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Link_Data.cpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Link_Data.cpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -14,6 +14,7 @@
Dtime low, high;
Integers volume_map;
Doubles volume;
+ String notes;
Link_Data *link_ptr;
Int_Map_Itr map_itr;
@@ -68,6 +69,10 @@
}
link_ptr = &link_array [map_itr->second];
+ notes = file.Notes ();
+ if (!notes.empty ()) {
+ data.notes_map.insert (Str_Map_Data (link, notes));
+ }
anode = file.Anode ();
bnode = file.Bnode ();
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Link_Dir.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Link_Dir.cpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Link_Dir.cpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -14,6 +14,7 @@
Dtime low, high;
Integers volume_map;
Doubles volume;
+ String notes;
Volume_Speed_Data *data_ptr;
Link_Data *link_ptr;
@@ -66,6 +67,10 @@
}
link_ptr = &link_array [map_itr->second];
+ notes = file.Notes ();
+ if (!notes.empty ()) {
+ data.notes_map.insert (Str_Map_Data (link, notes));
+ }
dir = file.Dir ();
if (dir) {
Modified: version7/branches/aecom/Transims70/Data_Service/Write_Link_Data.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Write_Link_Data.cpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/Data_Service/Write_Link_Data.cpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -13,6 +13,8 @@
int period, num_periods, count;
double value;
bool flag;
+ String notes;
+ Str_Map_Itr str_itr;
Int_Map_Itr map_itr;
Link_Data *link_ptr;
@@ -65,6 +67,15 @@
}
}
if (flag) {
+ str_itr = data.notes_map.find (link_ptr->Link ());
+ if (str_itr != data.notes_map.end ()) {
+ notes = str_itr->second;
+ } else {
+ notes = link_ptr->Name ();
+ if (notes.empty ()) notes = link_ptr->Notes ();
+ }
+ link_data_file.Notes (notes);
+
link_data_file.Write ();
count++;
}
Modified: version7/branches/aecom/Transims70/Data_Service/Write_Volume_Speeds.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Write_Volume_Speeds.cpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/Data_Service/Write_Volume_Speeds.cpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -19,6 +19,8 @@
{
int i, dir, index, count;
Dtime low, high, time;
+ String notes;
+ Str_Map_Itr str_itr;
Int_Map_Itr map_itr;
Dir_Data *dir_ptr;
@@ -80,6 +82,15 @@
data_rec.Total_Vol_Spd_BA ();
data_rec.Total_Vol_Spd ();
+ str_itr = array.notes_map.find (link_ptr->Link ());
+ if (str_itr != array.notes_map.end ()) {
+ notes = str_itr->second;
+ } else {
+ notes = link_ptr->Name ();
+ if (notes.empty ()) notes = link_ptr->Notes ();
+ }
+ data_rec.Notes (notes);
+
count += Put_Volume_Speed_Data (file, data_rec);
}
}
Modified: version7/branches/aecom/Transims70/File_Service/File_Service.vcxproj
===================================================================
--- version7/branches/aecom/Transims70/File_Service/File_Service.vcxproj 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/File_Service/File_Service.vcxproj 2018-07-08 18:22:37 UTC (rev 1708)
@@ -73,6 +73,7 @@
<ClInclude Include="..\Include\Travel_Time_File.hpp" />
<ClInclude Include="..\Include\Trip_File.hpp" />
<ClInclude Include="..\Include\Turn_Delay_File.hpp" />
+ <ClInclude Include="..\Include\Turn_Diff_File.hpp" />
<ClInclude Include="..\Include\Turn_Pen_File.hpp" />
<ClInclude Include="..\Include\Vehicle_File.hpp" />
<ClInclude Include="..\Include\Veh_Type_File.hpp" />
@@ -138,6 +139,7 @@
<ClCompile Include="Travel_Time_File.cpp" />
<ClCompile Include="Trip_File.cpp" />
<ClCompile Include="Turn_Delay_File.cpp" />
+ <ClCompile Include="Turn_Diff_File.cpp" />
<ClCompile Include="Turn_Pen_File.cpp" />
<ClCompile Include="Vehicle_File.cpp" />
<ClCompile Include="Veh_Type_File.cpp" />
Modified: version7/branches/aecom/Transims70/File_Service/File_Service.vcxproj.filters
===================================================================
--- version7/branches/aecom/Transims70/File_Service/File_Service.vcxproj.filters 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/File_Service/File_Service.vcxproj.filters 2018-07-08 18:22:37 UTC (rev 1708)
@@ -200,6 +200,9 @@
<ClInclude Include="..\Include\Vol_Spd_Diff_Data_File.hpp">
<Filter>Header Files</Filter>
</ClInclude>
+ <ClInclude Include="..\Include\Turn_Diff_File.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="File_Service.cpp">
@@ -391,5 +394,8 @@
<ClCompile Include="Vol_Spd_Diff_Data_File.cpp">
<Filter>Source Files\Files</Filter>
</ClCompile>
+ <ClCompile Include="Turn_Diff_File.cpp">
+ <Filter>Source Files\Files</Filter>
+ </ClCompile>
</ItemGroup>
</Project>
\ No newline at end of file
Modified: version7/branches/aecom/Transims70/File_Service/Link_Data_File.cpp
===================================================================
--- version7/branches/aecom/Transims70/File_Service/Link_Data_File.cpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/File_Service/Link_Data_File.cpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -132,6 +132,9 @@
Add_Field (name, DB_DOUBLE, size, units);
}
}
+ if (exe->Notes_Name_Flag ()) {
+ Add_Field ("NOTES", DB_STRING, STRING_FIELD_SIZE);
+ }
return (Set_Field_Numbers ());
}
@@ -201,6 +204,7 @@
Set_Units (ba [i], units);
}
}
+ Notes_Field (Optional_Field (NOTES_FIELD_NAMES));
return (true);
}
Modified: version7/branches/aecom/Transims70/File_Service/Link_Dir_File.cpp
===================================================================
--- version7/branches/aecom/Transims70/File_Service/Link_Dir_File.cpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/File_Service/Link_Dir_File.cpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -160,6 +160,9 @@
}
}
}
+ if (exe->Notes_Name_Flag ()) {
+ Add_Field ("NOTES", DB_STRING, STRING_FIELD_SIZE);
+ }
return (Set_Field_Numbers ());
}
@@ -273,6 +276,7 @@
Set_Units (diff [i], units);
}
}
+ Notes_Field (Optional_Field (NOTES_FIELD_NAMES));
return (true);
}
Added: version7/branches/aecom/Transims70/File_Service/Turn_Diff_File.cpp
===================================================================
--- version7/branches/aecom/Transims70/File_Service/Turn_Diff_File.cpp (rev 0)
+++ version7/branches/aecom/Transims70/File_Service/Turn_Diff_File.cpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -0,0 +1,107 @@
+//*********************************************************
+// Turn_Diff_File.cpp - Turn Movement File Input/Output
+//*********************************************************
+
+#include "Turn_Diff_File.hpp"
+
+//-----------------------------------------------------------
+// Turn_Diff_File constructors
+//-----------------------------------------------------------
+
+Turn_Diff_File::Turn_Diff_File (Access_Type access, string format) :
+ Db_Header (access, format)
+{
+ Setup ();
+}
+
+Turn_Diff_File::Turn_Diff_File (string filename, Access_Type access, string format) :
+ Db_Header (access, format)
+{
+ Setup ();
+
+ Open (filename);
+}
+
+Turn_Diff_File::Turn_Diff_File (Access_Type access, Format_Type format) :
+ Db_Header (access, format)
+{
+ Setup ();
+}
+
+Turn_Diff_File::Turn_Diff_File (string filename, Access_Type access, Format_Type format) :
+ Db_Header (access, format)
+{
+ Setup ();
+
+ Open (filename);
+}
+
+//-----------------------------------------------------------
+// Setup
+//-----------------------------------------------------------
+
+void Turn_Diff_File::Setup (void)
+{
+ File_Type ("Turn Diff File");
+ File_ID ("Turn");
+
+ node = link = to_link = start = end = turn = base = diff = -1;
+}
+
+//---------------------------------------------------------
+// Create_Fields
+//---------------------------------------------------------
+
+bool Turn_Diff_File::Create_Fields (void)
+{
+ Clear_Fields ();
+
+ Add_Field ("NODE", DB_INTEGER, 10);
+ Add_Field ("LINK", DB_INTEGER, 10);
+ Add_Field ("TO_LINK", DB_INTEGER, 10);
+ Add_Field ("START", DB_TIME, TIME_FIELD_SIZE, Time_Format ());
+ Add_Field ("END", DB_TIME, TIME_FIELD_SIZE, Time_Format ());
+ Add_Field ("TURN", DB_DOUBLE, 10.1, PCE);
+ Add_Field ("BASE", DB_DOUBLE, 10.1, PCE);
+ Add_Field ("DIFF", DB_DOUBLE, 10.1, PCE);
+
+ return (Set_Field_Numbers ());
+}
+
+//-----------------------------------------------------------
+// Set_Field_Numbers
+//-----------------------------------------------------------
+
+bool Turn_Diff_File::Set_Field_Numbers (void)
+{
+ //---- required fields ----
+
+ link = Required_Field (IN_LINK_FIELD_NAMES);
+ to_link = Required_Field (OUT_LINK_FIELD_NAMES);
+ turn = Required_Field ("TURN", "VOLUME", "TURN_VOL", "COUNT");
+
+ if (link < 0 || to_link < 0 || turn < 0) return (false);
+
+ node = Optional_Field ("NODE");
+ start = Optional_Field (START_FIELD_NAMES);
+ end = Optional_Field (END_FIELD_NAMES);
+ base = Optional_Field ("BASE", "COUNT", "OLD", "PREVIOUS");
+ diff = Optional_Field ("DIFF", "DIFFERENCE", "CHANGE");
+
+ //---- set default units ----
+
+ if (Version () <= 40) {
+ Set_Units (start, SECONDS);
+ Set_Units (end, SECONDS);
+ Set_Units (turn, VEHICLES);
+ Set_Units (base, VEHICLES);
+ Set_Units (diff, VEHICLES);
+ } else {
+ Set_Units (start, HOUR_CLOCK);
+ Set_Units (end, HOUR_CLOCK);
+ Set_Units (turn, PCE);
+ Set_Units (base, PCE);
+ Set_Units (diff, PCE);
+ }
+ return (true);
+}
Modified: version7/branches/aecom/Transims70/Include/Db_Matrix.hpp
===================================================================
--- version7/branches/aecom/Transims70/Include/Db_Matrix.hpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/Include/Db_Matrix.hpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -178,7 +178,7 @@
int _org_field, _des_field, _period_field, _num_org, _num_des, _max_od, _row_size;
Integers _table_fields;
Int_Map _org_map, _des_map;
- bool _data_flag, _matrix_flag;
+ bool _data_flag, _matrix_flag, _sort_flag;
Buffer _rec_buffer;
};
Modified: version7/branches/aecom/Transims70/Include/Execution_Service.hpp
===================================================================
--- version7/branches/aecom/Transims70/Include/Execution_Service.hpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/Include/Execution_Service.hpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -87,7 +87,7 @@
bool Z_Flag (void) { return (z_flag); }
bool M_Flag (void) { return (m_flag); }
-
+
void Default_Link_Data (bool value) { default_link_data = value; }
bool Default_Link_Data (void) { return (default_link_data); }
Modified: version7/branches/aecom/Transims70/Include/System_Defines.hpp
===================================================================
--- version7/branches/aecom/Transims70/Include/System_Defines.hpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/Include/System_Defines.hpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -212,7 +212,7 @@
FPS, MPS, MPH, KPH, FEET, METERS, MILES, KILOMETERS, DEGREES, MILLION_DEG,
FPS2, MPS2, MPHPS, KPHPS, SPP, RATIO, STOPPED, LANE_KM, LANE_MILE,
IMP_METER, IMP_FOOT, CENT_KM, CENT_MI, VHT, VHD, VMT, VKT, EHT, EHD, EMT, EKT, PHT, PHD, PMT, PKT,
- LITERS, GALLONS,
+ LITERS, GALLONS, DOLLARS,
//---- unconverted units ----
NEST_COUNT, CENTS, DOLLARS_HR, IMPEDANCE, IMP_SECOND, IMP_CENT, VPH, VPHPL, PPV,
VEH_TYPE, FARE_ZONE, TIME_PERIOD, YEARS, PERCENT, VEHICLES, PCE, PERSONS, TRIPS,
@@ -447,7 +447,7 @@
};
enum Function_Type { //---- general function types ----
- LINEAR, LOGIT, EXPONENTIAL, LOGARITHMIC, POWER, POLYNOMIAL, GAMMA, MAX_LOGIT
+ LINEAR, LOGIT, EXPONENTIAL, LOGARITHMIC, POWER, POLYNOMIAL, GAMMA, MAX_LOGIT, SCURVE
};
//---- Projection Service ----
Modified: version7/branches/aecom/Transims70/Include/Turn_Delay_Data.hpp
===================================================================
--- version7/branches/aecom/Transims70/Include/Turn_Delay_Data.hpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/Include/Turn_Delay_Data.hpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -106,10 +106,13 @@
public:
Turn_Period (void) {}
- Dtime Time (int index) { return (at (index).Time ()); }
- double Turn (int index) { return (at (index).Turn ()); }
+ Dtime Time (int index) { return (Index (index) ? at (index).Time () : Dtime (0)); }
+ double Turn (int index) { return (Index (index) ? at (index).Turn () : 0); }
- Turn_Data * Data_Ptr (int index) { return (&at (index)); }
+ Turn_Data * Data_Ptr (int index) { return (Index (index) ? &at (index) : 0); }
+
+private:
+ bool Index (int index) { return (index >= 0 && index < (int) size ()); }
};
typedef Turn_Period::iterator Turn_Itr;
typedef Turn_Period::pointer Turn_Ptr;
@@ -142,13 +145,14 @@
void Average_Turn_Times (Turn_Period_Array &period_array, int weight = 1);
Turn_Period * Period_Ptr (Dtime time);
- Turn_Period * Period_Ptr (int period) { return (&at (period)); }
+ Turn_Period * Period_Ptr (int period) { return (Per (period) ? &at (period) : 0); }
Time_Periods * periods;
- int Period (Dtime time) { return (periods->Period (time)); }
+ int Period (Dtime time) { return ((periods > 0) ? periods->Period (time) : -1); }
int Num_Records (void) { return (num_records); }
private:
+ bool Per (int period) { return ((periods > 0 && period >= 0 && period < (int) size ())); }
int num_records;
};
typedef Turn_Period_Array::iterator Turn_Period_Itr;
Added: version7/branches/aecom/Transims70/Include/Turn_Diff_File.hpp
===================================================================
--- version7/branches/aecom/Transims70/Include/Turn_Diff_File.hpp (rev 0)
+++ version7/branches/aecom/Transims70/Include/Turn_Diff_File.hpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -0,0 +1,52 @@
+//********************************************************
+// Turn_Diff_File.hpp - Turn Movement File Input/Output
+//********************************************************
+
+#ifndef TURN_DIFF_FILE_HPP
+#define TURN_DIFF_FILE_HPP
+
+#include "APIDefs.hpp"
+#include "Db_Header.hpp"
+
+//---------------------------------------------------------
+// Turn_Diff_File Class definition
+//---------------------------------------------------------
+
+class SYSLIB_API Turn_Diff_File : public Db_Header
+{
+public:
+ Turn_Diff_File (Access_Type access, string format);
+ Turn_Diff_File (string filename, Access_Type access, string format);
+ Turn_Diff_File (Access_Type access = READ, Format_Type format = DEFAULT_FORMAT);
+ Turn_Diff_File (string filename, Access_Type access = READ, Format_Type format = DEFAULT_FORMAT);
+
+ int Node (void) { return (Get_Integer (node)); }
+ int Link (void) { return (Get_Integer (link)); }
+ int To_Link (void) { return (Get_Integer (to_link)); }
+ Dtime Start (void) { return (Get_Time (start)); }
+ Dtime End (void) { return (Get_Time (end)); }
+ double Turn (void) { return (Get_Double (turn)); }
+ double Base (void) { return (Get_Double (base)); }
+ double Diff (void) { return (Get_Double (diff)); }
+
+ void Node (int value) { Put_Field (node, value); }
+ void Link (int value) { Put_Field (link, value); }
+ void To_Link (int value) { Put_Field (to_link, value); }
+ void Start (Dtime value) { Put_Field (start, value); }
+ void End (Dtime value) { Put_Field (end, value); }
+ void Turn (double value) { Put_Field (turn, value); }
+ void Base (double value) { Put_Field (base, value); }
+ void Diff (double value) { Put_Field (diff, value); }
+
+ virtual bool Create_Fields (void);
+
+protected:
+ virtual bool Set_Field_Numbers (void);
+
+private:
+ void Setup (void);
+
+ int node, link, to_link, start, end, turn, base, diff;
+};
+
+#endif
Modified: version7/branches/aecom/Transims70/Include/TypeDefs.hpp
===================================================================
--- version7/branches/aecom/Transims70/Include/TypeDefs.hpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/Include/TypeDefs.hpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -124,6 +124,13 @@
typedef Floats::reverse_iterator Flt_RItr;
typedef Floats::pointer Flt_Ptr;
+//---- an integer sorted array of floats ----
+
+typedef map <int, Floats> Flts_Map;
+typedef pair <int, Floats> Flts_Map_Data;
+typedef Flts_Map::iterator Flts_Map_Itr;
+typedef pair <Flts_Map_Itr, bool > Flts_Map_Stat;
+
//---- array of float arrays ----
typedef Vector <Floats> Flts_Array;
Modified: version7/branches/aecom/Transims70/Include/Volume_Speed_Data.hpp
===================================================================
--- version7/branches/aecom/Transims70/Include/Volume_Speed_Data.hpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/Include/Volume_Speed_Data.hpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -81,6 +81,8 @@
Time_Periods * periods;
int Num_Records (void) { return (num_records); }
+ Str_Map notes_map;
+
private:
int num_records;
};
@@ -113,6 +115,7 @@
double Spd_BA (void) { return (spd_ba); }
double Volume (void) { return (volume); }
double Speed (void) { return (speed); }
+ string Notes (void) { return (notes); }
void Link (int value) { link = value; }
void Start (Dtime value) { start = value; }
@@ -131,6 +134,7 @@
void Spd_BA (double value) { spd_ba = (float) value; }
void Volume (double value) { volume = (float) value; }
void Speed (double value) { speed = (float) value; }
+ void Notes (string value) { notes = value; }
void Add_Vol_Spd_AB (Volume_Speed_Data &data);
void Add_Vol_Spd_BA (Volume_Speed_Data &data);
@@ -163,6 +167,7 @@
float spd_ba;
float volume;
float speed;
+ string notes;
};
Modified: version7/branches/aecom/Transims70/LinkSum/Control.cpp
===================================================================
--- version7/branches/aecom/Transims70/LinkSum/Control.cpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/LinkSum/Control.cpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -11,7 +11,7 @@
void LinkSum::Program_Control (void)
{
int i, field, ngroup, num;
- bool binary;
+ bool binary, perf_flag;
String key, token;
Location_File *location_file;
@@ -32,6 +32,7 @@
Select_Service::Program_Control ();
+ perf_flag = System_File_Flag (PERFORMANCE);
turn_flag = System_File_Flag (TURN_DELAY);
Print (2, String ("%s Control Keys:") % Program ());
@@ -41,6 +42,9 @@
key = Get_Control_String (COMPARE_PERFORMANCE_FILE);
if (!key.empty ()) {
+ if (!perf_flag) {
+ Error ("A Performance File is Required for Compare Processing");
+ }
compare_file.File_Type ("Compare Performance File");
Print (1);
@@ -105,6 +109,26 @@
turn_compare_flag = true;
}
+ //---- open the new turn difference file ----
+
+ key = Get_Control_String (NEW_TURN_DIFFERENCE_FILE);
+
+ if (!key.empty ()) {
+ if (!turn_compare_flag) {
+ Error ("Compare Turn Delay File is Required for Turn Differences");
+ }
+ turn_diff_file.File_Type ("New Turn Difference File");
+ Print (1);
+
+ if (Check_Control_Key (NEW_TURN_DIFFERENCE_FORMAT)) {
+ turn_diff_file.Dbase_Format (Get_Control_String (NEW_TURN_DIFFERENCE_FORMAT));
+ }
+ turn_diff_file.Create (Project_Filename (key));
+ turn_diff_flag = true;
+ } else {
+ Warning ("New Turn Difference File is needed to Comparison Turns");
+ }
+
//---- select turn nodes----
key = exe->Get_Control_Text (TURN_NODE_RANGE);
@@ -114,6 +138,16 @@
exe->Error ("Adding Turn Node Ranges");
}
}
+ key = exe->Get_Control_String (TURN_NODE_FILE);
+
+ if (!key.empty ()) {
+ turn_node_file.File_Type ("Turn Node File");
+ turn_node_file.Open (Project_Filename (key));
+
+ while (turn_node_file.Read ()) {
+ turn_range.Add_Ranges (turn_node_file.Record_String ());
+ }
+ }
}
//---- create link activity file ----
@@ -121,6 +155,9 @@
key = Get_Control_String (NEW_LINK_ACTIVITY_FILE);
if (!key.empty ()) {
+ if (!perf_flag) {
+ Error ("A Performance File is needed for the Link Activity File");
+ }
if (!System_File_Flag (LOCATION)) {
Error ("A Location File is needed for the Link Activity File");
}
@@ -139,7 +176,7 @@
key = Get_Control_Text (COPY_LOCATION_FIELDS);
if (key.empty ()) {
- Error ("Location Field Names are Required for Link Activity File");
+ Error ("Location Field Names are Required for the Link Activity File");
}
link_db.File_Type ("Link Location Database");
@@ -171,6 +208,9 @@
key = Get_Control_String (NEW_ZONE_TRAVEL_FILE);
if (!key.empty ()) {
+ if (!perf_flag) {
+ Error ("A Performance File is needed for the Zone Travel File");
+ }
if (!System_File_Flag (LOCATION)) {
Error ("A Location File is needed for the Zone Travel File");
}
@@ -189,6 +229,9 @@
key = Get_Control_String (NEW_GROUP_TRAVEL_FILE);
if (!key.empty ()) {
+ if (!perf_flag) {
+ Error ("A Performance File is needed for the Group Travel File");
+ }
if (!System_File_Flag (LOCATION)) {
Error ("A Location File is needed for the Group Travel File");
}
@@ -213,6 +256,9 @@
if (ngroup > 0) {
Dir_Group group, *group_ptr;
+ if (!perf_flag) {
+ Error ("A Performance File is needed for Link Direction Files");
+ }
//---- process each group ----
for (i=1; i <= ngroup; i++) {
@@ -260,6 +306,10 @@
if (ngroup > 0) {
Data_Group group, *group_ptr;
+ if (!perf_flag) {
+ Error ("A Performance File is needed for Link Data Files");
+ }
+
//---- process each group ----
for (i=1; i <= ngroup; i++) {
@@ -297,6 +347,9 @@
key = Get_Control_String (NEW_DATA_SUMMARY_FILE);
if (!key.empty ()) {
+ if (!perf_flag) {
+ Error ("A Performance File is needed for the Data Summary File");
+ }
Print (1);
summary_file.File_Type ("New Data Summary File");
@@ -342,6 +395,9 @@
key = Get_Control_String (NEW_GROUP_SUMMARY_FILE);
if (!key.empty ()) {
+ if (!perf_flag) {
+ Error ("A Performance File is needed for the Group Summary File");
+ }
Print (1);
group_sum_file.File_Type ("New Group Summary File");
@@ -361,6 +417,9 @@
key = Get_Control_String (NEW_SPEED_CONTOUR_FILE);
if (!key.empty ()) {
+ if (!perf_flag) {
+ Error ("A Performance File is needed for the Speed Contour File");
+ }
Print (1);
speed_contour_file.File_Type ("New Speed Contour File");
Modified: version7/branches/aecom/Transims70/LinkSum/Execute.cpp
===================================================================
--- version7/branches/aecom/Transims70/LinkSum/Execute.cpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/LinkSum/Execute.cpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -109,6 +109,12 @@
Write_Turn_Data ();
}
+ //---- write the turn difference file ----
+
+ if (turn_diff_flag) {
+ Write_Turn_Difference ();
+ }
+
//---- print reports ----
for (int i=First_Report (); i != 0; i=Next_Report ()) {
Modified: version7/branches/aecom/Transims70/LinkSum/LinkSum.cpp
===================================================================
--- version7/branches/aecom/Transims70/LinkSum/LinkSum.cpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/LinkSum/LinkSum.cpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -13,14 +13,14 @@
LinkSum::LinkSum (void) : Select_Service ()
{
Program ("LinkSum");
- Version (7);
+ Version (8);
Title ("Summarize Link Performance Data");
System_File_Type required_files [] = {
- NODE, LINK, PERFORMANCE, END_FILE
+ NODE, LINK, END_FILE
};
System_File_Type optional_files [] = {
- CONNECTION, LANE_USE, LOCATION, TURN_DELAY, NEW_PERFORMANCE, NEW_TURN_DELAY, END_FILE
+ CONNECTION, LANE_USE, LOCATION, PERFORMANCE, TURN_DELAY, NEW_PERFORMANCE, NEW_TURN_DELAY, END_FILE
};
int file_service_keys [] = {
SAVE_LANE_USE_FLOWS, LINK_EQUIVALENCE_FILE, ZONE_EQUIVALENCE_FILE, 0
@@ -44,7 +44,10 @@
{ SELECT_BY_LINK_GROUP, "SELECT_BY_LINK_GROUP", LEVEL0, OPT_KEY, BOOL_KEY, "FALSE", BOOL_RANGE, NO_HELP },
{ COMPARE_TURN_DELAY_FILE, "COMPARE_TURN_DELAY_FILE", LEVEL0, OPT_KEY, IN_KEY, "", FILE_RANGE, NO_HELP },
{ COMPARE_TURN_DELAY_FORMAT, "COMPARE_TURN_DELAY_FORMAT", LEVEL0, OPT_KEY, TEXT_KEY, "TAB_DELIMITED", FORMAT_RANGE, NO_HELP },
+ { NEW_TURN_DIFFERENCE_FILE, "NEW_TURN_DIFFERENCE_FILE", LEVEL0, OPT_KEY, OUT_KEY, "", FILE_RANGE, NO_HELP},
+ { NEW_TURN_DIFFERENCE_FORMAT, "NEW_TURN_DIFFERENCE_FORMAT", LEVEL0, OPT_KEY, TEXT_KEY, "TAB_DELIMITED", FORMAT_RANGE, NO_HELP},
{ TURN_NODE_RANGE, "TURN_NODE_RANGE", LEVEL0, OPT_KEY, LIST_KEY, "ALL", RANGE_RANGE, NO_HELP },
+ { TURN_NODE_FILE, "TURN_NODE_FILE", LEVEL0, OPT_KEY, OUT_KEY, "", FILE_RANGE, NO_HELP},
{ NEW_LINK_ACTIVITY_FILE, "NEW_LINK_ACTIVITY_FILE", LEVEL0, OPT_KEY, OUT_KEY, "", FILE_RANGE, NO_HELP },
{ NEW_LINK_ACTIVITY_FORMAT, "NEW_LINK_ACTIVITY_FORMAT", LEVEL0, OPT_KEY, TEXT_KEY, "TAB_DELIMITED", FORMAT_RANGE, NO_HELP },
{ COPY_LOCATION_FIELDS, "COPY_LOCATION_FIELDS", LEVEL0, OPT_KEY, TEXT_KEY, "", "", NO_HELP },
Modified: version7/branches/aecom/Transims70/LinkSum/LinkSum.hpp
===================================================================
--- version7/branches/aecom/Transims70/LinkSum/LinkSum.hpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/LinkSum/LinkSum.hpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -13,6 +13,7 @@
#include "Db_Array.hpp"
#include "TypeDefs.hpp"
#include "Data_Range.hpp"
+#include "Turn_Diff_File.hpp"
#define NUM_SUM_BINS 1000
#define NUM_PERCENTILES 9
@@ -39,7 +40,8 @@
COMPARE_PERFORMANCE_FILE = 1, COMPARE_PERFORMANCE_FORMAT,
COMPARE_LINK_MAP_FILE, COMPARE_LINK_MAP_FORMAT, SKIP_MAPPED_LINKS,
MINIMUM_LINK_VOLUME, PERSON_BASED_STATISTICS, SELECT_BY_LINK_GROUP,
- COMPARE_TURN_DELAY_FILE, COMPARE_TURN_DELAY_FORMAT, TURN_NODE_RANGE,
+ COMPARE_TURN_DELAY_FILE, COMPARE_TURN_DELAY_FORMAT, NEW_TURN_DIFFERENCE_FILE, NEW_TURN_DIFFERENCE_FORMAT,
+ TURN_NODE_RANGE, TURN_NODE_FILE,
NEW_LINK_ACTIVITY_FILE, NEW_LINK_ACTIVITY_FORMAT, COPY_LOCATION_FIELDS,
NEW_ZONE_TRAVEL_FILE, NEW_ZONE_TRAVEL_FORMAT,
NEW_GROUP_TRAVEL_FILE, NEW_GROUP_TRAVEL_FORMAT,
@@ -62,7 +64,7 @@
bool select_link_flag, activity_flag, zone_flag, group_flag, person_flag, periods_flag, ratios_flag, compare_perf_flag;
bool compare_flag, group_select, summary_flag, group_sum_flag, turn_flag, turn_compare_flag, link_map_flag, skip_link_flag;
- bool speed_contour_flag, flip_flag;
+ bool speed_contour_flag, flip_flag, turn_diff_flag;
int increment, num_inc, nerror;
double header_value, cap_factor, minimum_volume, congested_ratio;
String header_label;
@@ -76,8 +78,10 @@
Performance_File compare_file;
Turn_Delay_File turn_compare_file;
+ Turn_Diff_File turn_diff_file;
Data_Range turn_range;
+ Db_File turn_node_file;
Perf_Period_Array compare_perf_array;
Turn_Period_Array compare_turn_array;
@@ -144,6 +148,7 @@
void Write_Link_Data (Data_Group_Itr &group);
void Write_Link_Dir (Dir_Group_Itr &group);
void Write_Turn_Data (void);
+ void Write_Turn_Difference (void);
void Top_100_Report (int number);
void Top_100_Link_Header (void);
Modified: version7/branches/aecom/Transims70/LinkSum/LinkSum.vcxproj
===================================================================
--- version7/branches/aecom/Transims70/LinkSum/LinkSum.vcxproj 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/LinkSum/LinkSum.vcxproj 2018-07-08 18:22:37 UTC (rev 1708)
@@ -192,6 +192,7 @@
<ClCompile Include="Write_Link_Data.cpp" />
<ClCompile Include="Write_Link_Dir.cpp" />
<ClCompile Include="Write_Turn_Data.cpp" />
+ <ClCompile Include="Write_Turn_Diff.cpp" />
<ClCompile Include="Write_Zone.cpp" />
<ClCompile Include="Zone_Summary.cpp" />
</ItemGroup>
Modified: version7/branches/aecom/Transims70/LinkSum/LinkSum.vcxproj.filters
===================================================================
--- version7/branches/aecom/Transims70/LinkSum/LinkSum.vcxproj.filters 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/LinkSum/LinkSum.vcxproj.filters 2018-07-08 18:22:37 UTC (rev 1708)
@@ -118,5 +118,8 @@
<ClCompile Include="Speed_Contour.cpp">
<Filter>Source Files</Filter>
</ClCompile>
+ <ClCompile Include="Write_Turn_Diff.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
</ItemGroup>
</Project>
\ No newline at end of file
Modified: version7/branches/aecom/Transims70/LinkSum/Write_Turn_Data.cpp
===================================================================
--- version7/branches/aecom/Transims70/LinkSum/Write_Turn_Data.cpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/LinkSum/Write_Turn_Data.cpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -79,11 +79,14 @@
turn_data.To_Index (connect_ptr->To_Index ());
for (period=0; period < nperiod; period++) {
- period_ptr = &turn_period_array [period];
- if (index >= (int) period_ptr->size ()) continue;
+ period_ptr = turn_period_array.Period_Ptr (period);
+ if (period_ptr == 0) continue;
turn_ptr = period_ptr->Data_Ptr (index);
+ if (turn_ptr == 0) continue;
+ turn_period_array.periods->Period_Range (period, low, high);
+
turn_data.Start (low);
turn_data.End (high);
turn_data.Time (turn_ptr->Time ());
Added: version7/branches/aecom/Transims70/LinkSum/Write_Turn_Diff.cpp
===================================================================
--- version7/branches/aecom/Transims70/LinkSum/Write_Turn_Diff.cpp (rev 0)
+++ version7/branches/aecom/Transims70/LinkSum/Write_Turn_Diff.cpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -0,0 +1,120 @@
+//*********************************************************
+// Write_Turn_Diff.cpp - Write the Turn Difference File
+//*********************************************************
+
+#include "LinkSum.hpp"
+
+//---------------------------------------------------------
+// Write_Turn_Difference
+//---------------------------------------------------------
+
+void LinkSum::Write_Turn_Difference (void)
+{
+ int nrec, node, index, period, nperiod;
+ Dtime low, high;
+ bool select_turn_flag;
+
+ Ints_Map node_sort;
+ Ints_Map_Itr sort_itr;
+ Integers ints_rec;
+ Int_Itr int_itr;
+ Int_Map_Itr itr;
+ Dir_Itr dir_itr;
+ Dir_Data *dir_ptr;
+ Link_Data *link_ptr;
+ Node_Data *node_ptr;
+ Connect_Data *connect_ptr;
+ Turn_Period *period_ptr, *compare_ptr;
+ Turn_Data *turn_ptr, *base_ptr;
+
+ Show_Message (String ("Writing %s -- Record") % turn_diff_file.File_Type ());
+ Set_Progress ();
+
+ //---- construct the node link liste ----
+
+ select_turn_flag = (turn_range.size () > 0);
+ nperiod = time_periods.Num_Periods ();
+
+ for (itr = node_map.begin (); itr != node_map.end (); itr++) {
+ if (select_turn_flag && !turn_range.In_Range (itr->first)) continue;
+
+ node_sort.insert (Ints_Map_Data (itr->first, ints_rec));
+ }
+
+ //---- assign links to nodes ----
+
+ for (index=0, dir_itr = dir_array.begin (); dir_itr != dir_array.end (); dir_itr++, index++) {
+ link_ptr = &link_array [dir_itr->Link ()];
+
+ node = (dir_itr->Dir () == 0) ? link_ptr->Bnode () : link_ptr->Anode ();
+
+ node_ptr = &node_array [node];
+
+ sort_itr = node_sort.find (node_ptr->Node ());
+ if (sort_itr == node_sort.end ()) continue;
+
+ sort_itr->second.push_back (index);
+ }
+
+ //---- process each node ----
+
+ nrec = 0;
+
+ for (sort_itr = node_sort.begin (); sort_itr != node_sort.end (); sort_itr++) {
+ Show_Progress ();
+
+ for (int_itr = sort_itr->second.begin (); int_itr != sort_itr->second.end (); int_itr++) {
+
+ dir_ptr = &dir_array [*int_itr];
+ link_ptr = &link_array [dir_ptr->Link ()];
+
+ turn_diff_file.Link (link_ptr->Link ());
+
+ if (dir_ptr->Dir ()) {
+ node_ptr = &node_array [link_ptr->Anode ()];
+ } else {
+ node_ptr = &node_array [link_ptr->Bnode ()];
+ }
+ turn_diff_file.Node (node_ptr->Node ());
+
+ for (index = dir_ptr->First_Connect (); index >= 0; index = connect_ptr->Next_Index ()) {
+ connect_ptr = &connect_array [index];
+
+ dir_ptr = &dir_array [connect_ptr->To_Index ()];
+ link_ptr = &link_array [dir_ptr->Link ()];
+
+ turn_diff_file.To_Link (link_ptr->Link ());
+
+ for (period=0; period < nperiod; period++) {
+ period_ptr = turn_period_array.Period_Ptr (period);
+ if (period_ptr == 0) continue;
+
+ compare_ptr = compare_turn_array.Period_Ptr (period);
+ if (compare_ptr == 0) continue;
+
+ turn_ptr = period_ptr->Data_Ptr (index);
+ if (turn_ptr == 0) continue;
+
+ base_ptr = compare_ptr->Data_Ptr (index);
+ if (base_ptr == 0) continue;
+
+ turn_period_array.periods->Period_Range (period, low, high);
+ turn_diff_file.Start (low);
+ turn_diff_file.End (high);
+
+ turn_diff_file.Turn (turn_ptr->Turn ());
+ turn_diff_file.Base (base_ptr->Turn ());
+ turn_diff_file.Diff (turn_ptr->Turn () - base_ptr->Turn ());
+
+ if (!turn_diff_file.Write (false)) {
+ Error (String ("Writing %s") % turn_diff_file.File_Type ());
+ }
+ nrec++;
+ }
+ }
+ }
+ }
+ End_Progress ();
+
+ Print (2, "Number of New Turn Difference Records = ") << nrec;
+}
Modified: version7/branches/aecom/Transims70/NetPrep/Control.cpp
===================================================================
--- version7/branches/aecom/Transims70/NetPrep/Control.cpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/NetPrep/Control.cpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -78,6 +78,10 @@
script_file.Open (Project_Filename (key));
convert_flag = true;
}
+
+ //---- keep duplicate links ----
+
+ keep_dup_links = Get_Control_Flag (KEEP_DUPLICATE_LINKS);
}
//---- open the input node file ----
Modified: version7/branches/aecom/Transims70/NetPrep/Input_Links.cpp
===================================================================
--- version7/branches/aecom/Transims70/NetPrep/Input_Links.cpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/NetPrep/Input_Links.cpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -17,7 +17,7 @@
int i, anode, bnode, node, xa, ya, xb, yb, index, lanes, num, ft, at, spd, min_spd, num_approach, num_use, field;
int bearing_in, bearing_out, bear_in, bear_out;
double length, x1, y1, x2, y2, z1, z2, dx, dy, dz, ratio, speed, len;
- bool add_node_flag;
+ bool add_node_flag, duplicate_flag;
Db_Header *file;
Link_File *new_file;
@@ -326,9 +326,10 @@
//---- check for duplicate links ----
+ duplicate_flag = false;
ab_ptr = &ab_map;
ab_itr = ab_ptr->find (Int2_Key (anode, bnode));
-
+
if (ab_itr != ab_ptr->end ()) {
dir_ptr = &dir_array [ab_itr->second];
@@ -339,9 +340,11 @@
if (split_ab_flag) {
ab_ptr = &ab_map2;
- } else {
+ } else if (!keep_dup_links) {
Warning ("Duplicate Link Direction A-B = ") << anode << "-" << bnode;
continue;
+ } else {
+ duplicate_flag = true;
}
}
}
@@ -357,9 +360,11 @@
if (split_ab_flag) {
ab_ptr = &ab_map2;
- } else {
+ } else if (!keep_dup_links) {
Warning ("Duplicate Link Direction B-A = ") << bnode << "-" << anode;
continue;
+ } else {
+ duplicate_flag = true;
}
}
}
@@ -384,7 +389,7 @@
}
}
- if (ab_itr == ab_ptr->end ()) {
+ if (ab_itr == ab_ptr->end () || duplicate_flag) {
//---- create a new record ----
@@ -626,7 +631,7 @@
ab_stat = ab_ptr->insert (Int2_Map_Data (Int2_Key (anode, bnode), index));
- if (!ab_stat.second) {
+ if (!ab_stat.second && !keep_dup_links) {
Warning ("Duplicate Link Direction Number = ") << link_rec.Link ();
continue;
}
@@ -711,7 +716,7 @@
ab_stat = ab_ptr->insert (Int2_Map_Data (Int2_Key (bnode, anode), index));
- if (!ab_stat.second) {
+ if (!ab_stat.second && !keep_dup_links) {
Warning ("Duplicate Link Direction Number = ") << link_rec.Link ();
continue;
}
Modified: version7/branches/aecom/Transims70/NetPrep/NetPrep.cpp
===================================================================
--- version7/branches/aecom/Transims70/NetPrep/NetPrep.cpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/NetPrep/NetPrep.cpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -11,7 +11,7 @@
NetPrep::NetPrep (void) : Data_Service ()
{
Program ("NetPrep");
- Version (11);
+ Version (12);
Title ("Network Preparation Utility");
System_File_Type optional_files [] = {
@@ -27,6 +27,7 @@
{ INPUT_LINK_FILE, "INPUT_LINK_FILE", LEVEL0, OPT_KEY, IN_KEY, "", FILE_RANGE, NO_HELP },
{ INPUT_LINK_FORMAT, "INPUT_LINK_FORMAT", LEVEL0, OPT_KEY, TEXT_KEY, "TAB_DELIMITED", FORMAT_RANGE, FORMAT_HELP },
{ INPUT_LINK_SCRIPT, "INPUT_LINK_SCRIPT", LEVEL0, OPT_KEY, IN_KEY, "", FILE_RANGE, NO_HELP },
+ { KEEP_DUPLICATE_LINKS, "KEEP_DUPLICATE_LINKS", LEVEL0, OPT_KEY, BOOL_KEY, "FALSE", BOOL_RANGE, NO_HELP},
{ INPUT_NODE_FILE, "INPUT_NODE_FILE", LEVEL0, OPT_KEY, IN_KEY, "", FILE_RANGE, NO_HELP },
{ INPUT_NODE_FORMAT, "INPUT_NODE_FORMAT", LEVEL0, OPT_KEY, TEXT_KEY, "TAB_DELIMITED", FORMAT_RANGE, FORMAT_HELP },
{ INPUT_NODE_SCRIPT, "INPUT_NODE_SCRIPT", LEVEL0, OPT_KEY, IN_KEY, "", FILE_RANGE, NO_HELP },
@@ -102,7 +103,7 @@
fac_fld = at_fld = -1;
drop_length = split_length = num_loops = max_angle = min_length = next_loop = num_ratio = 0;
convert_flag = spdcap_flag = link_flag = node_flag = zone_flag = route_flag = new_zone_flag = connector_flag = false;
- link_shape_flag = node_shape_flag = zone_shape_flag = int_zone_flag = centroid_flag = expand_flag= false;
+ link_shape_flag = node_shape_flag = zone_shape_flag = int_zone_flag = centroid_flag = expand_flag= keep_dup_links = false;
units_flag = keep_node_flag = keep_link_flag = drop_node_flag = drop_link_flag = shape_flag = correct_flag = false;
length_flag = split_flag = split_ab_flag = collapse_flag = drop_flag = loop_flag = spacing_flag = false;
divided_flag = segment_flag = speed_flag = link_use_flag = approach_flag = link_node_flag = offset_flag = time_flag = false;
Modified: version7/branches/aecom/Transims70/NetPrep/NetPrep.hpp
===================================================================
--- version7/branches/aecom/Transims70/NetPrep/NetPrep.hpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/NetPrep/NetPrep.hpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -36,7 +36,8 @@
protected:
enum NetPrep_Keys {
- INPUT_LINK_FILE = 1, INPUT_LINK_FORMAT, INPUT_LINK_SCRIPT, INPUT_NODE_FILE, INPUT_NODE_FORMAT, INPUT_NODE_SCRIPT,
+ INPUT_LINK_FILE = 1, INPUT_LINK_FORMAT, INPUT_LINK_SCRIPT, KEEP_DUPLICATE_LINKS,
+ INPUT_NODE_FILE, INPUT_NODE_FORMAT, INPUT_NODE_SCRIPT,
INPUT_ZONE_FILE, INPUT_ZONE_FORMAT, INPUT_ZONE_SCRIPT, INPUT_SPDCAP_FILE, INPUT_SPDCAP_FORMAT,
INPUT_UNITS_OF_MEASURE, FACILITY_INDEX_FIELD, AREA_TYPE_INDEX_FIELD, CONVERSION_SCRIPT,
INTERNAL_ZONE_RANGE, KEEP_ZONE_CONNECTORS_AS_LOCALS,
@@ -72,7 +73,7 @@
int straight_diff, thru_diff, forward_diff, short_links, cross_min, cross_max, next_loop, num_ratio;
int num_periods, new_route, num_match;
bool convert_flag, spdcap_flag, link_flag, node_flag, zone_flag, route_flag, new_zone_flag, connector_flag;
- bool link_shape_flag, node_shape_flag, zone_shape_flag, int_zone_flag, centroid_flag, expand_flag;
+ bool link_shape_flag, node_shape_flag, zone_shape_flag, int_zone_flag, centroid_flag, expand_flag, keep_dup_links;
bool units_flag, keep_node_flag, keep_link_flag, drop_node_flag, drop_link_flag, shape_flag, correct_flag;
bool length_flag, split_flag, split_ab_flag, collapse_flag, drop_flag, short_flag, loop_flag, spacing_flag;
bool divided_flag, segment_flag, speed_flag, link_use_flag, approach_flag, link_node_flag, offset_flag, time_flag;
Modified: version7/branches/aecom/Transims70/PlanPrep/Control.cpp
===================================================================
--- version7/branches/aecom/Transims70/PlanPrep/Control.cpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/PlanPrep/Control.cpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -160,7 +160,7 @@
shift_rate = Get_Control_Double (SHIFT_START_PERCENTAGE);
shift_start_flag = (shift_rate > 0.0);
} else if (Check_Control_Key (SHIFT_END_PERCENTAGE)) {
- shift_rate = Get_Control_Double (SHIFT_START_PERCENTAGE);
+ shift_rate = Get_Control_Double (SHIFT_END_PERCENTAGE);
shift_end_flag = (shift_rate > 0.0);
}
if (shift_rate > 0.0) {
@@ -186,6 +186,8 @@
Error ("Shift Time Range is Out of Range");
}
shift_factor = (double) (high_to - low_to) / (high_from - low_from);
+
+ shift_select_flag = Get_Control_Flag (SHIFT_SELECTED_PLANS);
}
//---- reroute plan file ----
Modified: version7/branches/aecom/Transims70/PlanPrep/PlanPrep.cpp
===================================================================
--- version7/branches/aecom/Transims70/PlanPrep/PlanPrep.cpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/PlanPrep/PlanPrep.cpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -11,7 +11,7 @@
PlanPrep::PlanPrep (void) : Select_Service ()
{
Program ("PlanPrep");
- Version (13);
+ Version (14);
Title ("Travel Plan Processing Utility");
System_File_Type optional_files [] = {
@@ -42,6 +42,7 @@
{ SHIFT_END_PERCENTAGE, "SHIFT_END_PERCENTAGE", LEVEL0, OPT_KEY, FLOAT_KEY, "0.0", "0.0..100.0", NO_HELP },
{ SHIFT_FROM_TIME_RANGE, "SHIFT_FROM_TIME_RANGE", LEVEL0, OPT_KEY, TEXT_KEY, "", TIME_RANGE, NO_HELP },
{ SHIFT_TO_TIME_RANGE, "SHIFT_TO_TIME_RANGE", LEVEL0, OPT_KEY, TEXT_KEY, "", TIME_RANGE, NO_HELP },
+ { SHIFT_SELECTED_PLANS, "SHIFT_SELECTED_PLANS", LEVEL0, OPT_KEY, BOOL_KEY, "FALSE", BOOL_RANGE, NO_HELP},
{ REROUTE_PLAN_FILE, "REROUTE_PLAN_FILE", LEVEL0, OPT_KEY, IN_KEY, "", FILE_RANGE, NO_HELP },
{ REROUTE_PLAN_FORMAT, "REROUTE_PLAN_FORMAT", LEVEL0, OPT_KEY, TEXT_KEY, "TAB_DELIMITED", FORMAT_RANGE, FORMAT_HELP },
{ REROUTE_TIME_RANGE, "REROUTE_TIME_RANGE", LEVEL0, OPT_KEY, TEXT_KEY, "0:00..24:00", TIME_RANGE, NO_HELP },
@@ -63,7 +64,7 @@
num_repair = repair_plans = num_subarea_merge = num_new_skims = num_constraints = num_merge_files = check_sum = check_sum_type = 0;
select_flag = merge_flag = subarea_flag = combine_flag = output_flag = new_plan_flag = new_trip_flag = new_select_flag = false;
repair_flag = skim_flag = plan_skim_flag = plan_flag = check_sum_flag = export_flag = false;
- shift_start_flag = shift_end_flag = reroute_flag = false;
+ shift_start_flag = shift_end_flag = shift_select_flag = reroute_flag = false;
shift_rate = 0.0;
shift_factor = 1.0;
num_shifted = 0;
Modified: version7/branches/aecom/Transims70/PlanPrep/PlanPrep.hpp
===================================================================
--- version7/branches/aecom/Transims70/PlanPrep/PlanPrep.hpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/PlanPrep/PlanPrep.hpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -28,7 +28,7 @@
enum PlanPrep_Keys {
MERGE_PLAN_FILE = 1, MERGE_PLAN_FORMAT, MERGE_SUBAREA_LEGS, REPAIR_PLAN_LEGS, CHECK_PLAN_SUMS,
CONSTRAIN_PARKRIDE_LOTS, MAX_PARKING_DEMAND_RATIO, CONSTRAIN_TRANSIT_LOADS, MAX_ROUTE_LOAD_FACTOR,
- SHIFT_START_PERCENTAGE, SHIFT_END_PERCENTAGE, SHIFT_FROM_TIME_RANGE, SHIFT_TO_TIME_RANGE,
+ SHIFT_START_PERCENTAGE, SHIFT_END_PERCENTAGE, SHIFT_FROM_TIME_RANGE, SHIFT_TO_TIME_RANGE, SHIFT_SELECTED_PLANS,
REROUTE_PLAN_FILE, REROUTE_PLAN_FORMAT, REROUTE_TIME_RANGE, REROUTE_PERCENTAGE,
};
virtual void Program_Control (void);
@@ -47,7 +47,7 @@
int check_sum, check_sum_type, num_reroute, num_shifted;
bool select_flag, merge_flag, subarea_flag, combine_flag, output_flag, new_plan_flag, new_trip_flag, new_select_flag;
bool repair_flag, plan_skim_flag, skim_flag, plan_flag, check_sum_flag, export_flag;
- bool park_list_flag, route_list_flag, shift_start_flag, shift_end_flag, reroute_flag;
+ bool park_list_flag, route_list_flag, shift_start_flag, shift_end_flag, shift_select_flag, reroute_flag;
double max_ratio, max_factor, shift_rate, shift_factor, reroute_percent;
Dtime low_from, high_from, low_to, high_to, reroute_start, reroute_end;
Time_Periods shift_from, shift_to;
Modified: version7/branches/aecom/Transims70/PlanPrep/Process_Plan.cpp
===================================================================
--- version7/branches/aecom/Transims70/PlanPrep/Process_Plan.cpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/PlanPrep/Process_Plan.cpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -13,7 +13,7 @@
string process_type;
Dtime shift, duration;
double prob;
- bool keep_flag, out_flag;
+ bool keep_flag, out_flag, shift_flag;
Trip_Index trip_index;
Time_Index time_index;
@@ -24,7 +24,7 @@
//---- selection checks ----
- if (!exe->Select_Plan_Data (*plan_ptr)) {
+ if (!exe->shift_select_flag && !exe->Select_Plan_Data (*plan_ptr)) {
keep_flag = false;
} else {
@@ -73,46 +73,55 @@
keep_flag = false;
} else {
+
+ if (exe->shift_select_flag) {
+ shift_flag = exe->Select_Plan_Data (*plan_ptr);
+ } else {
+ shift_flag = true;
+ }
- //---- shift start times ----
+ if (shift_flag) {
- if (exe->shift_start_flag) {
- out_flag = false;
+ //---- shift start times ----
- if (plan_ptr->Depart () >= exe->low_from && plan_ptr->Depart () <= exe->high_from) {
- prob = random_thread.Probability ();
+ if (exe->shift_start_flag) {
+ out_flag = false;
- if (exe->shift_rate > prob) {
- out_flag = true;
+ if (plan_ptr->Depart () >= exe->low_from && plan_ptr->Depart () <= exe->high_from) {
+ prob = random_thread.Probability ();
- duration = plan_ptr->Arrive () - plan_ptr->Depart ();
- shift = (int) (exe->shift_factor * (plan_ptr->Depart () - exe->low_from));
+ if (exe->shift_rate > prob) {
+ out_flag = true;
- plan_ptr->Depart (exe->low_to + shift);
- plan_ptr->Arrive (plan_ptr->Depart () + duration);
+ duration = plan_ptr->Arrive () - plan_ptr->Depart ();
+ shift = (int) (exe->shift_factor * (plan_ptr->Depart () - exe->low_from));
- plan_ptr->Start (plan_ptr->Depart ());
- plan_ptr->End (plan_ptr->Arrive ());
- num_shifted++;
+ plan_ptr->Depart (exe->low_to + shift);
+ plan_ptr->Arrive (plan_ptr->Depart () + duration);
+
+ plan_ptr->Start (plan_ptr->Depart ());
+ plan_ptr->End (plan_ptr->Arrive ());
+ num_shifted++;
+ }
+
}
- }
+ } else if (exe->shift_end_flag) { //---- shift the end time ----
+ out_flag = false;
- } else if (exe->shift_end_flag) { //---- shift the end time ----
- out_flag = false;
+ if (plan_ptr->Arrive () >= exe->low_from && plan_ptr->Arrive () <= exe->high_from) {
+ prob = random_thread.Probability ();
- if (plan_ptr->Arrive () >= exe->low_from && plan_ptr->Arrive () <= exe->high_from) {
- prob = random_thread.Probability ();
+ if (exe->shift_rate > prob) {
+ out_flag = true;
- if (exe->shift_rate > prob) {
- out_flag = true;
+ duration = plan_ptr->Arrive () - plan_ptr->Depart ();
+ shift = (int) (exe->shift_factor * (plan_ptr->Arrive () - exe->low_from));
- duration = plan_ptr->Arrive () - plan_ptr->Depart ();
- shift = (int) (exe->shift_factor * (plan_ptr->Arrive () - exe->low_from));
-
- plan_ptr->Arrive (exe->low_to + shift);
- plan_ptr->End (plan_ptr->Arrive ());
- num_shifted++;
+ plan_ptr->Arrive (exe->low_to + shift);
+ plan_ptr->End (plan_ptr->Arrive ());
+ num_shifted++;
+ }
}
}
}
Modified: version7/branches/aecom/Transims70/PlanSelect/Control.cpp
===================================================================
--- version7/branches/aecom/Transims70/PlanSelect/Control.cpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/PlanSelect/Control.cpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -49,6 +49,12 @@
}
vol_cnt_file.Open (Project_Filename (key));
+ Mode_Range_Key (MODE_DELETE_LIMITS, delete_flag);
+ Mode_Range_Key (MODE_ADD_LIMITS, add_flag);
+
new_hhold = Get_Control_Integer (NEW_HOUSEHOLD_ID);
+
+ num_iter = Get_Control_Integer (NUMBER_OF_ITERATIONS);
}
+ if (num_iter == 0) num_iter = 1;
}
Modified: version7/branches/aecom/Transims70/PlanSelect/PlanSelect.cpp
===================================================================
--- version7/branches/aecom/Transims70/PlanSelect/PlanSelect.cpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/PlanSelect/PlanSelect.cpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -11,7 +11,7 @@
PlanSelect::PlanSelect (void) : Select_Service ()
{
Program ("PlanSelect");
- Version (3);
+ Version (7);
Title (...
[truncated message content] |