Example #1
0
void TripPrep::Trip_Processing::operator()()
{
	int part = 0;

	if (exe->update_flag && !exe->select_flag) {
		random_part.Seed (exe->random.Seed () + 1000 * (num + 1));
		if (thread_flag) part_count.assign (exe->num_parts, 0);
	}
	if (exe->factor_flag) {
		random_part.Seed (exe->random.Seed () + 1000 * (num + 1));
		random_fac.Seed (exe->random.Seed () + 2000 * (num + 1));
		random_move.Seed (exe->random.Seed () + 3000 * (num + 1));
	}
	trip_file = new Trip_File (exe->trip_file->File_Access (), exe->trip_file->Dbase_Format ());
	trip_file->Part_Flag (exe->trip_file->Part_Flag ());
	trip_file->Pathname (exe->trip_file->Pathname ());
	trip_file->First_Open (false);

	if (exe->new_trip_flag) {
		new_trip_file = new Trip_File (exe->new_trip_file->File_Access (), exe->new_trip_file->Dbase_Format ());
		new_trip_file->File_Type (exe->new_trip_file->File_Type ());
		new_trip_file->Part_Flag (exe->new_trip_file->Part_Flag ());
		new_trip_file->Pathname (exe->new_trip_file->Pathname ());
		new_trip_file->Sort_Type (exe->new_trip_file->Sort_Type ());
		new_trip_file->First_Open (false);
	}
	if (exe->merge_flag) {
		merge_file = new Trip_File (exe->merge_file.File_Access (), exe->merge_file.Dbase_Format ());
		merge_file->Part_Flag (exe->merge_file.Part_Flag ());
		merge_file->Pathname (exe->merge_file.Pathname ());
		merge_file->First_Open (false);
	}

	//---- compile the user script ----

	if (exe->script_flag) {
		Db_Base_Array files;

		files.push_back (trip_file);

		program.Initialize (files, exe->random.Seed () + 100 * (num + 1));
		program.Read_Only (0, false);

		program.Replicate (&exe->program);
	}

	//---- process each partition ----

	while (exe->partition_queue.Get (part)) {
		Read_Trips (part);

		num_temp = 0;
		trip_ptr_array.clear ();
		traveler_sort.clear ();
		time_sort.clear ();
	}
	MAIN_LOCK
	exe->trip_file->Add_Counters (trip_file);
	trip_file->Close ();

	if (exe->new_trip_flag) {
		exe->new_trip_file->Add_Counters (new_trip_file);
		new_trip_file->Close ();
	}
	if (exe->merge_flag) {
		exe->merge_file.Add_Counters (merge_file);
		merge_file->Close ();
	}
	if ((exe->update_flag || exe->new_select_flag) && !exe->select_flag && thread_flag) {
		for (part = 0; part < exe->num_parts; part++) {
			exe->part_count [part] += part_count [part];
		}
		exe->select_map.insert (select_map.begin (), select_map.end ());
	}
	END_LOCK
}
Example #2
0
void EventSum::Execute (void)
{

	//---- read the network and demand files ----

	Demand_Service::Execute ();

	max_hhold = MAX_INTEGER / Traveler_Scale ();

	//---- read the household list ----

	if (hhlist_flag) {
		Read_HHList ();
	}

	//---- read input travel times ----

	if (time_in_flag) {
		Read_Times ();
	}

	//---- read activity file ----

	if (activity_flag) {
		Read_Activity ();
	}

	//---- read trip file ----

	if (trip_file_flag) {
		Read_Trips ();
	}

	//---- read the event file ----

	if (combine_flag) {
		Combine_Events ();
	} else {
		Read_Events ();
	}

	//---- select travelers ----

	if (select_flag) {
		Select_Travelers ();
	}

	//---- write travel time file ----

	if (time_file_flag) {
		Write_Events ();
	}

	//---- write time summary file ----

	if (time_sum_flag) {
		Write_Times ();
	}

	//---- write the link events file ----

	if (link_flag) {
		Write_Links ();
	}

	//---- write the time distribution file ----

	if (distrib_flag) {
		time_diff.Write_Distribution ();
	}

	//---- update plans ----

	if (update_flag) {
		Update_Plans ();
	}

	//---- write new household list ----

	if (new_hhold_flag) {
		Write_HHList ();
	}

	//---- print the comparison summary ----

	time_diff.Total_Summary ();

	//---- print reports ----

	Show_Message ("Writing Summary Reports");	

	for (int i=First_Report (); i != 0; i=Next_Report ()) {
		switch (i) {
			case TOP_100_TTIME:		//---- top 100 travel time differences ----
				Top_100_TTime_Report ();
				break;
			case TOTAL_DISTRIB:		//---- total difference distribution ----
			case TTIME_DISTRIB:		//---- time difference distributions ----
				time_diff.Time_Distribution (i);
				break;
			case PERIOD_SUM:		//---- time period summary ----
				time_diff.Period_Summary ();
				break;
			case TOP_100_LINK:
				Top_100_Link_Report ();
				break;
			case TOP_100_PERIOD:	//---- top 100 period events ----
				Top_100_Period_Report ();
				break;
			case LINK_EVENT:		//---- link event report -----
				Link_Event_Report ((int) Report_Data ());
				break;
			case GROUP_EVENT:		//---- group event report ----
				Group_Event_Report ((int) Report_Data ());
				break;
			case TRAVELER_SUM:		//---- traveler summary report ----
				Traveler_Sum_Report ();
				break;
			case EVENT_SUM:			//---- event summary report ----
				Event_Sum_Report ();
				break;
			default:
				break;
		}
	}
	Exit_Stat (DONE);
}