void RandomSelect::Program_Control (void) { String key; //---- create the network files ---- Data_Service::Program_Control (); Read_Select_Keys (); trip_flag = System_File_Flag (TRIP); if (trip_flag) System_File_False (HOUSEHOLD); Print (2, String ("%s Control Keys:") % Program ()); //---- get the number of partitions ---- num_parts = Get_Control_Integer (NUMBER_OF_PARTITIONS); part_count.assign (num_parts, 0); //---- check the selection file ---- if (num_parts > 1) { Selection_File *file = (Selection_File *) System_File_Handle (NEW_SELECTION); if (!file->Part_Flag ()) { file->Clear_Fields (); file->Partition_Flag (true); file->Create_Fields (); file->Write_Header (); } } }
void ArcSnapshot::Program_Control (void) { int i; String key, text; bool z_flag, m_flag; string method_text [] = { "AT_INCREMENT", "TOTAL", "MAXIMUM", "" }; Set_Range_String (SUMMARY_TIME_INCREMENT, "0.0..1440.0"); //---- open network files ---- Data_Service::Program_Control (); Read_Select_Keys (); max_time = Model_End_Time (); //---- get the projection data ---- project_flag = projection.Read_Control (); //---- get the z coordinate flag ---- m_flag = projection.M_Flag (); z_flag = projection.Z_Flag (); //---- open the snapshot file ---- Print (2, String ("%s Control Keys:") % Program ()); key = Get_Control_String (SNAPSHOT_FILE); if (!key.empty ()) { if (Check_Control_Key (SNAPSHOT_FORMAT)) { snapshot_file.Dbase_Format (Get_Control_String (SNAPSHOT_FORMAT)); } snapshot_file.Open (Project_Filename (key)); } else { key = Get_Control_String (OCCUPANCY_FILE); if (key.empty ()) { Error ("A Snapshot or Occupancy file is Required"); } if (Check_Control_Key (OCCUPANCY_FORMAT)) { occupancy_file.Dbase_Format (Get_Control_String (OCCUPANCY_FORMAT)); } occupancy_file.Open (Project_Filename (key)); occupancy_flag = true; } //---- get the arcview snapshot file ---- key = Get_Control_String (NEW_ARC_SNAPSHOT_FILE); if (!key.empty ()) { if (key.Ends_With (".shp")) { key.Split_Last (text, "."); } shapename = Project_Filename (key); text = shapename + "_time_of_day.shp"; Print_Filename (2, "New Arc Snapshot File", text); snapshot_flag = true; } //---- new snapshot file ---- key = Get_Control_String (NEW_SNAPSHOT_FILE); if (!key.empty ()) { Print (1); if (Check_Control_Key (NEW_SNAPSHOT_FORMAT)) { new_snapshot_file.Dbase_Format (Get_Control_String (NEW_SNAPSHOT_FORMAT)); } new_snapshot_file.Location_Flag (true); new_snapshot_file.Create (Project_Filename (key)); output_flag = true; if (project_flag) { project_coord.Set_Projection (projection.Input_Projection (), projection.Output_Projection ()); } } //---- new link summary file ---- key = Get_Control_String (NEW_LINK_SUMMARY_FILE); if (!key.empty ()) { if (occupancy_flag) { Error ("New Link Summary File requires a Snapshot File"); } Print (1); summary_file.File_Type ("Link Summary File"); if (Check_Control_Key (NEW_LINK_SUMMARY_FORMAT)) { summary_file.Dbase_Format (Get_Control_String (NEW_LINK_SUMMARY_FORMAT)); } sum_flag = true; summary_file.Create (Project_Filename (key)); } if (!snapshot_flag && !output_flag && !sum_flag) { Error ("An Arcview Snapshot, New Snapshot, or New Link Summary File is Required"); } //---- cell size ---- cell_size = Get_Control_Double (CELL_SIZE); //---- lane width ---- Read_Draw_Keys (); //---- draw vehicle shapes ---- if (snapshot_flag && !shape_flag) { circle_flag = Get_Control_Flag (ADD_PASSENGER_CIRCLE_SIZE); square_flag = Get_Control_Flag (ADD_PASSENGER_SQUARE_SIZE); } //---- pad file time labels ---- pad_flag = Get_Control_Flag (PAD_FILE_TIME_LABEL); //---- get the time processing method ---- key = Get_Control_Text (TIME_PROCESSING_METHOD); if (!key.empty ()) { for (i=0; (int) method_text [i].size () > 0; i++) { if (key.Equals (method_text [i])) { method = i; break; } } if ((int) method_text [i].size () == 0) { Error (String ("Unrecognized Time Processing Method = %s") % key); } if (!occupancy_flag && method == TOTAL) { Error ("Snapshot Files cannot be Totaled"); } } //---- initialize the shape file ---- arcview_snapshot.File_Type ("New Arc Snapshot File"); arcview_snapshot.File_Access (CREATE); arcview_snapshot.Shape_Type ((shape_flag) ? POLYGON : DOT); arcview_snapshot.Z_Flag (z_flag); arcview_snapshot.M_Flag (m_flag); if (occupancy_flag) { arcview_snapshot.Replicate_Fields (&occupancy_file); arcview_snapshot.LinkDir_Type ((Direction_Type) occupancy_file.LinkDir_Type ()); link_field = occupancy_file.Link_Field (); dir_field = occupancy_file.Dir_Field (); start_field = occupancy_file.Start_Field (); end_field = occupancy_file.End_Field (); lane_field = occupancy_file.Lane_Field (); offset_field = occupancy_file.Offset_Field (); occ_field = occupancy_file.Occupancy_Field (); type_field = -1; } else { Snapshot_File *file = &snapshot_file; if (file->Compress_Flag ()) { dummy_snapshot.Status_Flag (); dummy_snapshot.Create_Fields (); file = &dummy_snapshot; } arcview_snapshot.Replicate_Fields (file); arcview_snapshot.LinkDir_Type ((Direction_Type) file->LinkDir_Type ()); link_field = file->Link_Field (); dir_field = file->Dir_Field (); lane_field = file->Lane_Field (); offset_field = file->Offset_Field (); type_field = file->Type_Field (); cell_field = file->Cell_Field (); occ_field = start_field = end_field = -1; if (circle_flag) { arcview_snapshot.Add_Field ("RADIUS", DB_DOUBLE, 14.2); circle_field = arcview_snapshot.Field_Number ("RADIUS"); } if (square_flag) { arcview_snapshot.Add_Field ("SQUARE", DB_DOUBLE, 14.2); square_field = arcview_snapshot.Field_Number ("SQUARE"); } } arcview_snapshot.Set_Projection (projection.Input_Projection (), projection.Output_Projection ()); }
void PlanSum::Program_Control (void) { String key; bool link_flag, report_flag; link_flag = report_flag = false; if (!Set_Control_Flag (UPDATE_FLOW_RATES) && !Set_Control_Flag (UPDATE_TRAVEL_TIMES)) { System_File_False (NEW_LINK_DELAY); } //---- initialize the MPI thread range ---- MPI_Setup (); //---- set equivalence flags --- if (Report_Flag (LINK_GROUP) || Report_Flag (RIDER_GROUP)) { Link_Equiv_Flag (true); link_flag = true; } if (skim_flag || trip_flag) { Zone_Equiv_Flag (true); zone_flag = true; } Stop_Equiv_Flag (Report_Flag (STOP_GROUP)); //---- create the network files ---- Data_Service::Program_Control (); Read_Select_Keys (); Read_Flow_Time_Keys (); plan_file = (Plan_File *) System_File_Handle (PLAN); if (!plan_file->Part_Flag ()) Num_Threads (1); select_flag = System_File_Flag (SELECTION); new_delay_flag = System_File_Flag (NEW_LINK_DELAY); if (System_File_Flag (LINK_DELAY)) { link_flag = true; Link_Delay_File *file = (Link_Delay_File *) System_File_Handle (LINK_DELAY); turn_flag = file->Turn_Flag (); } if (new_delay_flag) { link_flag = true; Link_Delay_File *file = (Link_Delay_File *) System_File_Handle (NEW_LINK_DELAY); turn_flag = file->Turn_Flag (); } else { turn_flag = System_File_Flag (CONNECTION); } Print (2, String ("%s Control Keys:") % Program ()); //---- new trip time file ---- key = Get_Control_String (NEW_TRIP_TIME_FILE); if (!key.empty ()) { time_file.File_Type ("New Trip Time File"); time_file.File_ID ("Time"); if (Master ()) { time_file.Create (Project_Filename (key)); } time_flag = true; } //---- new link volume file ---- key = Get_Control_String (NEW_LINK_VOLUME_FILE); if (!key.empty ()) { volume_file.File_Type ("New Link Volume File"); volume_file.File_ID ("Volume"); if (Master ()) { volume_file.Create (Project_Filename (key)); volume_file.Num_Decimals (1); volume_file.Data_Units (Performance_Units_Map (FLOW_DATA)); volume_file.Copy_Periods (sum_periods); volume_file.Create_Fields (); volume_file.Write_Header (); } volume_flag = new_delay_flag = link_flag = true; } //---- read report types ---- List_Reports (); if (Report_Flag (TOP_100) || Report_Flag (VC_RATIO) || Report_Flag (LINK_GROUP)) { new_delay_flag = link_flag = report_flag = true; cap_factor = (double) sum_periods.Range_Length () / (Dtime (1, HOURS) * sum_periods.Num_Periods ()); } if (link_flag && (!System_File_Flag (LINK) || !System_File_Flag (NODE))) { Error ("Link and Node Files are Required for Link-Based Output"); } if (System_File_Flag (LANE_USE) && !System_File_Flag (LINK)) { Error ("A Link File is Required for Lane-Use Processing"); } travel_flag = Report_Flag (SUM_TRAVEL); //---- ridership summary ---- passenger_flag = Report_Flag (SUM_PASSENGERS); transfer_flag = (Report_Flag (SUM_STOPS) || Report_Flag (STOP_GROUP)); rider_flag = (System_File_Flag (NEW_RIDERSHIP) || Report_Flag (SUM_RIDERS) || Report_Flag (RIDER_GROUP)); xfer_flag = Report_Flag (SUM_TRANSFERS); xfer_detail = Report_Flag (XFER_DETAILS); if (passenger_flag || transfer_flag || rider_flag || xfer_flag || xfer_detail) { if (!System_File_Flag (TRANSIT_STOP) || !System_File_Flag (TRANSIT_ROUTE) || !System_File_Flag (TRANSIT_SCHEDULE)) { Error ("Transit Network Files are Required for Ridership Output"); } if ((passenger_flag || rider_flag) && !System_File_Flag (TRANSIT_DRIVER)) { Error ("A Transit Driver File is needed for Passengers Summaries"); } } else { System_File_False (TRANSIT_STOP); System_File_False (TRANSIT_ROUTE); System_File_False (TRANSIT_SCHEDULE); System_File_False (TRANSIT_DRIVER); } //---- process support data ---- if (Link_Equiv_Flag ()) { link_equiv.Read (Report_Flag (LINK_EQUIV)); } if (Zone_Equiv_Flag ()) { zone_equiv.Read (Report_Flag (ZONE_EQUIV)); } if (Stop_Equiv_Flag ()) { stop_equiv.Read (Report_Flag (STOP_EQUIV)); } //---- allocate work space ---- if (time_flag || Report_Flag (TRIP_TIME)) { time_flag = true; int periods = sum_periods.Num_Periods (); start_time.assign (periods, 0); mid_time.assign (periods, 0); end_time.assign (periods, 0); } //---- transfer arrays ---- if (xfer_flag || xfer_detail) { Integers rail; rail.assign (10, 0); total_on_array.assign (10, rail); if (xfer_detail) { int num = sum_periods.Num_Periods (); if (num < 1) num = 1; walk_on_array.assign (num, total_on_array); drive_on_array.assign (num, total_on_array); } } //---- initialize the trip summary data ---- if (travel_flag) { trip_sum_data.Copy_Periods (sum_periods); } //---- initialize the passenger summary data ---- if (passenger_flag) { pass_sum_data.Copy_Periods (sum_periods); } }
void LinkSum::Program_Control (void) { int i, field, ngroup, num; bool binary; String key, token; Location_File *location_file; Db_Field *fld; Doubles dbl; Doubles_Itr itr; //---- set the equivalence flags ---- Zone_Equiv_Flag (Check_Control_Key (NEW_GROUP_TRAVEL_FILE)); group_select = Set_Control_Flag (SELECT_BY_LINK_GROUP); Link_Equiv_Flag (group_select || Report_Flag (LINK_GROUP) || Report_Flag (TRAVEL_TIME) || Report_Flag (GROUP_REPORT) || Report_Flag (GROUP_SUMMARY) || Check_Control_Key (NEW_GROUP_SUMMARY_FILE)); //---- open network files ---- Data_Service::Program_Control (); Read_Select_Keys (); turn_flag = System_File_Flag (TURN_DELAY); Print (2, String ("%s Control Keys:") % Program ()); //---- open the compare performance file ---- key = Get_Control_String (COMPARE_PERFORMANCE_FILE); if (!key.empty ()) { compare_file.File_Type ("Compare Performance File"); Print (1); if (Check_Control_Key (COMPARE_PERFORMANCE_FORMAT)) { compare_file.Dbase_Format (Get_Control_String (COMPARE_PERFORMANCE_FORMAT)); } compare_file.Open (Project_Filename (key)); compare_flag = true; } num_inc = sum_periods.Num_Periods (); if (num_inc < 1) num_inc = 1; cap_factor = (double) sum_periods.Range_Length () / (Dtime (1, HOURS) * num_inc); if (cap_factor <= 0.0) cap_factor = 1.0; //---- open the compare link map file ---- key = Get_Control_String (COMPARE_LINK_MAP_FILE); if (!key.empty ()) { link_map_file.File_Type ("Compare Link Map File"); Print (1); if (Check_Control_Key (COMPARE_LINK_MAP_FORMAT)) { link_map_file.Dbase_Format (Get_Control_String (COMPARE_LINK_MAP_FORMAT)); } link_map_file.Open (Project_Filename (key)); link_map_flag = true; } //---- get minimum volume ---- minimum_volume = Get_Control_Double (MINIMUM_LINK_VOLUME); //---- person-based statistics ---- person_flag = Get_Control_Flag (PERSON_BASED_STATISTICS); //---- get the select by link group flag ---- group_select = Get_Control_Flag (SELECT_BY_LINK_GROUP); if (group_select || select_subareas || select_polygon || select_facilities) select_flag = true; //---- turning movement data ---- if (turn_flag) { //---- open the compare turn delays file ---- key = Get_Control_String (COMPARE_TURN_DELAY_FILE); if (!key.empty ()) { turn_compare_file.File_Type ("Compare Turn Delay File"); Print (1); if (Check_Control_Key (COMPARE_TURN_DELAY_FORMAT)) { turn_compare_file.Dbase_Format (Get_Control_String (COMPARE_TURN_DELAY_FORMAT)); } turn_compare_file.Open (Project_Filename (key)); turn_compare_flag = true; } //---- select turn nodes---- key = exe->Get_Control_Text (TURN_NODE_RANGE); if (!key.empty () && !key.Equals ("ALL")) { if (!turn_range.Add_Ranges (key)) { exe->Error ("Adding Turn Node Ranges"); } } } //---- create link activity file ---- key = Get_Control_String (NEW_LINK_ACTIVITY_FILE); if (!key.empty ()) { if (!System_File_Flag (LOCATION)) { Error ("A Location File is needed for the Link Activity File"); } location_file = System_Location_File (); binary = (location_file->Record_Format () == BINARY); Print (1); activity_file.File_Type ("New Link Activity File"); if (Check_Control_Key (NEW_LINK_ACTIVITY_FORMAT)) { activity_file.Dbase_Format (Get_Control_String (NEW_LINK_ACTIVITY_FORMAT)); } activity_file.Create (Project_Filename (key)); //---- copy location field name ---- key = Get_Control_Text (COPY_LOCATION_FIELDS); if (key.empty ()) { Error ("Location Field Names are Required for Link Activity File"); } link_db.File_Type ("Link Location Database"); //---- set required fields ---- link_db.Add_Field ("LINK", DB_INTEGER, 10); activity_file.Add_Field ("LINK", DB_INTEGER, 10); //---- copy selected fields ---- while (!key.Split (token)) { field = location_file->Field_Number (token); if (field < 0) { Error (String ("Field %s was Not Found in the Location File") % token); } field_list.push_back (field); fld = location_file->Field (field); link_db.Add_Field (fld->Name (), fld->Type (), fld->Size (), fld->Units (), binary); activity_file.Add_Field (fld->Name (), fld->Type (), fld->Size (), fld->Units (), binary); } activity_file.Write_Header (); activity_flag = true; } //---- create zone travel file ---- key = Get_Control_String (NEW_ZONE_TRAVEL_FILE); if (!key.empty ()) { if (!System_File_Flag (LOCATION)) { Error ("A Location File is needed for the Zone Travel File"); } Print (1); zone_file.File_Type ("New Zone Travel File"); if (Check_Control_Key (NEW_ZONE_TRAVEL_FORMAT)) { zone_file.Dbase_Format (Get_Control_String (NEW_ZONE_TRAVEL_FORMAT)); } zone_file.Create (Project_Filename (key)); zone_flag = true; } //---- create zone group travel file ---- key = Get_Control_String (NEW_GROUP_TRAVEL_FILE); if (!key.empty ()) { if (!System_File_Flag (LOCATION)) { Error ("A Location File is needed for the Group Travel File"); } Print (1); group_file.File_Type ("New Group Travel File"); if (Check_Control_Key (NEW_GROUP_TRAVEL_FORMAT)) { group_file.Dbase_Format (Get_Control_String (NEW_GROUP_TRAVEL_FORMAT)); } group_file.Create (Project_Filename (key)); group_flag = true; } if (!activity_flag && !zone_flag && !group_flag) { System_File_False (LOCATION); } //---- get the number of direction groups ---- ngroup = Highest_Control_Group (NEW_LINK_DIRECTION_FILE, 0); if (ngroup > 0) { Dir_Group group, *group_ptr; //---- process each group ---- for (i=1; i <= ngroup; i++) { key = Get_Control_String (NEW_LINK_DIRECTION_FILE, i); if (key.empty ()) continue; Print (1); dir_group.push_back (group); group_ptr = &dir_group.back (); group_ptr->group = i; group_ptr->file = new Link_Direction_File (); group_ptr->file->File_Type (String ("New Link Direction File #%d") % i); if (Check_Control_Key (NEW_LINK_DIRECTION_FORMAT, i)) { group_ptr->file->Dbase_Format (Get_Control_String (NEW_LINK_DIRECTION_FORMAT, i)); } group_ptr->file->Lane_Use_Flows (Lane_Use_Flows ()); group_ptr->file->Create (Project_Filename (key)); //---- get the field name ---- key = Get_Control_Text (NEW_LINK_DIRECTION_FIELD, i); if (key.empty ()) { Error (String ("New Link Direction Field #%d is Missing") % i); } group_ptr->field = Performance_Code (key); group_ptr->index = Get_Control_Flag (NEW_LINK_DIRECTION_INDEX, i); group_ptr->flip = Get_Control_Flag (NEW_LINK_DIRECTION_FLIP, i); if (group_ptr->flip && !compare_flag) { Warning ("Link Direction Flipping requires Comparison Data"); group_ptr->flip = false; } Set_Link_Dir (group_ptr); } } //---- get the number of groups ---- ngroup = Highest_Control_Group (NEW_LINK_DATA_FILE, 0); if (ngroup > 0) { Data_Group group, *group_ptr; //---- process each group ---- for (i=1; i <= ngroup; i++) { key = Get_Control_String (NEW_LINK_DATA_FILE, i); if (key.empty ()) continue; Print (1); data_group.push_back (group); group_ptr = &data_group.back (); group_ptr->group = i; group_ptr->file = new Link_Data_File (); group_ptr->file->File_Type (String ("New Link Data File #%d") % i); if (Check_Control_Key (NEW_LINK_DATA_FORMAT, i)) { group_ptr->file->Dbase_Format (Get_Control_String (NEW_LINK_DATA_FORMAT, i)); } group_ptr->file->Lane_Use_Flows (Lane_Use_Flows ()); group_ptr->file->Create (Project_Filename (key)); //---- get the field name ---- key = Get_Control_Text (NEW_LINK_DATA_FIELD, i); if (key.empty ()) { Error (String ("New Link Data Field #%d is Missing") % i); } group_ptr->field = Performance_Code (key); Set_Link_Data (group_ptr); } } //---- data summary file ---- key = Get_Control_String (NEW_DATA_SUMMARY_FILE); if (!key.empty ()) { Print (1); summary_file.File_Type ("New Data Summary File"); if (Check_Control_Key (NEW_DATA_SUMMARY_FORMAT)) { summary_file.Dbase_Format (Get_Control_String (NEW_DATA_SUMMARY_FORMAT)); } summary_file.Add_Field ("MEASURE", DB_STRING, 40); summary_file.Add_Field ("VALUE", DB_DOUBLE, 12.2); if (compare_flag) summary_file.Add_Field ("COMPARE", DB_DOUBLE, 12.2); summary_file.Create (Project_Filename (key)); summary_flag = true; //---- data summary periods ---- if (!Control_Key_Empty (NEW_DATA_SUMMARY_PERIODS)) { periods_flag = data_periods.Add_Ranges (Get_Control_Text (NEW_DATA_SUMMARY_PERIODS)); } //---- data summary ratios ---- if (Check_Control_Key (NEW_DATA_SUMMARY_RATIOS)) { Double_List list; Dbl_Itr itr; Get_Control_List (NEW_DATA_SUMMARY_RATIOS, list); for (i=0, itr = list.begin (); itr != list.end (); itr++, i++) { if (i > 0 && *itr >= 1.0) { data_ratios.push_back (Round (*itr * 100.0)); ratios_flag = true; } } } } //---- group summary file ---- key = Get_Control_String (NEW_GROUP_SUMMARY_FILE); if (!key.empty ()) { Print (1); group_sum_file.File_Type ("New Group Summary File"); if (Check_Control_Key (NEW_GROUP_SUMMARY_FORMAT)) { group_sum_file.Dbase_Format (Get_Control_String (NEW_GROUP_SUMMARY_FORMAT)); } group_sum_file.Add_Field ("MEASURE", DB_STRING, 40); group_sum_file.Add_Field ("VALUE", DB_DOUBLE, 12.2); if (compare_flag) group_sum_file.Add_Field ("COMPARE", DB_DOUBLE, 12.2); group_sum_file.Create (Project_Filename (key)); group_sum_flag = true; } //---- read report types ---- List_Reports (); if (!compare_flag && (Report_Flag (TIME_CHANGE) || Report_Flag (VOLUME_CHANGE) || Report_Flag (TOP_TIME_CHANGE) || Report_Flag (TOP_VOL_CHANGE) || Report_Flag (RELATIVE_GAP))) { Error ("A Compare Performance File is Required for Change Reports"); } //---- process support data ---- if (Link_Equiv_Flag ()) { link_equiv.Read (Report_Flag (LINK_EQUIV)); } if (group_flag) { zone_equiv.Read (Report_Flag (ZONE_EQUIV)); } //---- allocate work space ---- if (periods_flag || ratios_flag) { num = (periods_flag) ? (int) data_periods.size () : 1; num += (ratios_flag) ? (int) data_ratios.size () : 1; if (num_inc + 1 > num) { num = num_inc + 1; } } else { num = num_inc + 1; } sum_bin.assign (num, dbl); for (itr = sum_bin.begin (); itr != sum_bin.end (); itr++) { itr->assign (NUM_SUM_BINS, 0.0); } }
void EventSum::Program_Control (void) { String key; //---- create the network files ---- Data_Service::Program_Control (); Read_Select_Keys (); select_flag = System_File_Flag (SELECTION); trip_file_flag = System_File_Flag (TRIP); new_select_flag = System_File_Flag (NEW_SELECTION); update_flag = System_File_Flag (PLAN) || System_File_Flag (NEW_PLAN); if (update_flag && (!System_File_Flag (PLAN) || !System_File_Flag (NEW_PLAN))) { Error ("Input and Output Plan Files are Required for Plan Updates"); } num_inc = sum_periods.Num_Periods (); Print (2, String ("%s Control Keys:") % Program ()); //---- get the compare travel time file ---- key = Get_Control_String (TRAVEL_TIME_FILE); if (!key.empty ()) { if (Check_Control_Key (TRAVEL_TIME_FORMAT)) { time_in_file.Dbase_Format (Get_Control_String (TRAVEL_TIME_FORMAT)); } time_in_file.Open (Project_Filename (key)); time_in_flag = true; } //---- get the travel time file ---- key = Get_Control_String (NEW_TRAVEL_TIME_FILE); if (!key.empty ()) { if (Check_Control_Key (NEW_TRAVEL_TIME_FORMAT)) { travel_time_file.Dbase_Format (Get_Control_String (NEW_TRAVEL_TIME_FORMAT)); } travel_time_file.Create (Project_Filename (key)); time_file_flag = true; } //---- get the time summary file ---- key = Get_Control_String (NEW_TIME_SUMMARY_FILE); if (!key.empty ()) { time_sum_file.File_Type ("New Time Summary File"); if (Check_Control_Key (NEW_TIME_SUMMARY_FORMAT)) { time_sum_file.Dbase_Format (Get_Control_String (NEW_TIME_SUMMARY_FORMAT)); } time_sum_file.Create (Project_Filename (key)); time_sum_flag = true; //---- get the minimum schedule variance ---- min_variance = Get_Control_Time (MINIMUM_SCHEDULE_VARIANCE); } //---- get the link event file ---- key = Get_Control_String (NEW_LINK_EVENT_FILE); if (!key.empty ()) { link_event_file.File_Type ("New Link Event File"); if (Check_Control_Key (NEW_LINK_EVENT_FORMAT)) { link_event_file.Dbase_Format (Get_Control_String (NEW_LINK_EVENT_FORMAT)); } link_event_file.Create (Project_Filename (key)); link_event_flag = true; } //---- new time distribution file ---- time_diff.Open_Distribution (Get_Control_String (NEW_TIME_DISTRIBUTION_FILE)); //---- new trip time gap file ---- time_gap.Open_Trip_Gap_File (Get_Control_String (NEW_TRIP_TIME_GAP_FILE)); //---- read report types ---- List_Reports (); //---- set report flags ---- time_flag = time_diff.Report_Flags (Report_Flag (TOTAL_TIME), Report_Flag (PERIOD_TIME), Report_Flag (TOT_TIME_SUM), Report_Flag (PER_TIME_SUM)); if (time_diff.Output_Flag () || Report_Flag (PERIOD_TIME) || Report_Flag (PER_TIME_SUM)) { time_diff.Set_Periods (sum_periods); time_flag = time_diff_flag = true; } if (time_gap.Output_Flag () || Report_Flag (TRP_TIME_GAP)) { time_gap.Report_Flags (Report_Flag (TRP_TIME_GAP)); time_gap.Set_Periods (sum_periods); time_gap_flag = true; } //---- set the compare flag ---- compare_flag = (time_in_flag || trip_file_flag); }
void PerfPrep::Program_Control (void) { String key; Strings list; Str_Itr str_itr; //---- open network files ---- Data_Service::Program_Control (); Read_Select_Keys (); Read_Flow_Time_Keys (); Print (2, String ("%s Control Keys:") % Program ()); new_file_flag = System_File_Flag (NEW_PERFORMANCE); //---- open the merge performance ---- key = Get_Control_String (MERGE_PERFORMANCE_FILE); if (!key.empty ()) { merge_file.File_Type ("Merge Performance File"); Print (1); if (Check_Control_Key (MERGE_PERFORMANCE_FORMAT)) { merge_file.Dbase_Format (Get_Control_String (MERGE_PERFORMANCE_FORMAT)); } merge_file.Open (Project_Filename (key)); merge_flag = true; if (!new_file_flag) { Error ("A New Performance File is required for Merge Processing"); } } //---- open the base performance ---- key = Get_Control_String (BASE_PERFORMANCE_FILE); if (!key.empty ()) { base_file.File_Type ("Base Performance File"); Print (1); if (Check_Control_Key (BASE_PERFORMANCE_FORMAT)) { base_file.Dbase_Format (Get_Control_String (BASE_PERFORMANCE_FORMAT)); } base_file.Open (Project_Filename (key)); base_flag = true; if (!new_file_flag) { Error ("A New Performance File is required for Base Processing"); } } //---- open the merge turn delay ---- turn_flag = System_File_Flag (TURN_DELAY); if (turn_flag) { key = Get_Control_String (MERGE_TURN_DELAY_FILE); if (!key.empty ()) { turn_file.File_Type ("Merge Turn Delay File"); Print (1); if (Check_Control_Key (MERGE_TURN_DELAY_FORMAT)) { turn_file.Dbase_Format (Get_Control_String (MERGE_TURN_DELAY_FORMAT)); } turn_file.Open (Project_Filename (key)); turn_merge_flag = true; if (!System_File_Flag (NEW_TURN_DELAY)) { Error ("A New Turn Delay File is required for Merge Processing"); } } } //---- processing method ---- Print (1); key = Get_Control_Text (PROCESSING_METHOD); if (!key.empty ()) { method = Combine_Code (key); if (method != UPDATE_TIMES) { if (merge_flag || turn_merge_flag) { if (method == WEIGHTED_LINK_AVG || method == REPLACE_AVERAGE) { //---- merge weighting factor ---- factor = Get_Control_Double (MERGE_WEIGHTING_FACTOR); } } else { //Error (String ("Processing Method %s requires Merge Files") % key); } } } //---- read the smoothing parameters ---- smooth_flag = smooth_data.Read_Control (); if (smooth_flag) { if (!smooth_data.Num_Input (time_periods.Num_Periods ())) { Error ("Smooth Parameters are Illogical"); } if (!new_file_flag) { Error ("A New Performance File is required for Data Smoothing"); } } //---- set min travel time ---- min_time_flag = Get_Control_Flag (SET_MIN_TRAVEL_TIME); if (min_time_flag && !new_file_flag) { Error ("A New Performance File is required for Minimum Travel Times"); } //---- set merge transit data ---- key = Get_Control_Text (MERGE_TRANSIT_DATA); if (!key.empty ()) { transit_flag = true; if (!System_File_Flag (TRANSIT_STOP) || !System_File_Flag (TRANSIT_ROUTE) || !System_File_Flag (TRANSIT_SCHEDULE) || !System_File_Flag (TRANSIT_DRIVER)) { Error ("Transit Network Files are Required for Transit Loading"); } if (!new_file_flag) { Error ("A New Performance File is required to Merge Transit Data"); } key.Parse (list); for (str_itr = list.begin (); str_itr != list.end (); str_itr++) { if (str_itr->Starts_With ("VEH")) { transit_veh_flag = true; } else if (str_itr->Starts_With ("PER")) { transit_person_flag = true; } else if (str_itr->Starts_With ("PCE") || str_itr->Starts_With ("CAR_EQ")) { transit_pce_flag = true; } } if (!System_File_Flag (VEHICLE_TYPE) && transit_pce_flag) { Warning ("Vehicle Type File is Required for Transit PCE Loading"); } if (!System_File_Flag (RIDERSHIP) && transit_person_flag) { Warning ("Ridership File is Required for Transit Person Loading"); } if (!merge_flag) { method = Combine_Code (Get_Control_Text (PROCESSING_METHOD)); } } //---- open the time constraint file ---- key = Get_Control_String (TIME_CONSTRAINT_FILE); if (!key.empty ()) { constraint_file.File_Type ("Time Constraint File"); Print (1); if (Check_Control_Key (TIME_CONSTRAINT_FORMAT)) { constraint_file.Dbase_Format (Get_Control_String (TIME_CONSTRAINT_FORMAT)); } constraint_file.Open (Project_Filename (key)); constraint_flag = true; } //---- open the time ratio file ---- key = Get_Control_String (NEW_TIME_RATIO_FILE); if (!key.empty ()) { time_ratio_file.File_Type ("New Time Ratio File"); time_ratio_file.Create (Project_Filename (key)); time_ratio_flag = true; } //---- open the deleted record file ---- key = Get_Control_String (NEW_DELETED_RECORD_FILE); if (!key.empty ()) { deleted_file.File_Type ("New Deleted Record File"); Print (1); if (Check_Control_Key (NEW_DELETED_RECORD_FORMAT)) { deleted_file.Dbase_Format (Get_Control_String (NEW_DELETED_RECORD_FORMAT)); } deleted_file.Create (Project_Filename (key)); del_file_flag = true; } List_Reports (); first_delete = deleted_flag = (Report_Flag (DELETED_RECORDS) || del_file_flag); }