def setup_emme_project_folders(): #tod_dict = json.load(open(os.path.join('inputs', 'skim_params', 'time_of_day.json'))) tod_dict = text_to_dictionary('time_of_day') tod_list = list(set(tod_dict.values())) if os.path.exists(os.path.join('projects')): print 'Delete Project Folder' shutil.rmtree('projects') # Create master project, associate with all tod emmebanks project = app.create_project('projects', master_project) desktop = app.start_dedicated(False, "cth", project) data_explorer = desktop.data_explorer() for tod in tod_list: database = data_explorer.add_database('Banks/' + tod + '/emmebank') #open the last database added so that there is an active one database.open() desktop.project.save() desktop.close() # Create time of day projects, associate with emmebank tod_list.append('TruckModel') tod_list.append('Supplementals') emme_toolbox_path = os.path.join(os.environ['EMMEPATH'], 'toolboxes') for tod in tod_list: project = app.create_project('projects', tod) desktop = app.start_dedicated(False, "cth", project) data_explorer = desktop.data_explorer() database = data_explorer.add_database('Banks/' + tod + '/emmebank') database.open() desktop.project.save() desktop.close() shcopy(emme_toolbox_path + '/standard.mtbx', os.path.join('projects', tod))
def setup_emme_project_folders(): #tod_dict = json.load(open(os.path.join('inputs', 'skim_params', 'time_of_day.json'))) tod_dict = text_to_dictionary('time_of_day') tod_list = list(set(tod_dict.values())) if os.path.exists(os.path.join('projects')): print 'Delete Project Folder' shutil.rmtree('projects') # Create master project, associate with all tod emmebanks project = app.create_project('projects', master_project) desktop = app.start_dedicated(False, "cth", project) data_explorer = desktop.data_explorer() for tod in tod_list: database = data_explorer.add_database('Banks/' + tod + '/emmebank') #open the last database added so that there is an active one database.open() desktop.project.save() desktop.close() # Create time of day projects, associate with emmebank tod_list.append('TruckModel') tod_list.append('Supplementals') for tod in tod_list: project = app.create_project('projects', tod) desktop = app.start_dedicated(False, "cth", project) data_explorer = desktop.data_explorer() database = data_explorer.add_database('Banks/' + tod + '/emmebank') database.open() desktop.project.save() desktop.close()
def open_emme_project(my_project): #Open the Time Period Specific Project passed to the function and load the Input Dictionary my_desktop = app.start_dedicated(True, "cth", my_project) my_modeller = _m.Modeller(my_desktop) return (my_modeller)
def project(self, project_path: str) -> EmmeDesktopApp: """Return already open Emme project, or open new Desktop session if not found. Args: project_path: valid path to Emme project *.emp file Returns: Emme Desktop App object, see Emme API Reference, Desktop section for details. """ project_path = os.path.normcase(os.path.realpath(project_path)) emme_project = self._project_cache.get(project_path) if emme_project: try: # Check if the Emme window was closed emme_project.current_window() except _socket_error: emme_project = None # if window is not opened in this process, start a new one if emme_project is None: if not os.path.isfile(project_path): raise Exception( f"Emme project path does not exist {project_path}") emme_project = _app.start_dedicated(visible=True, user_initials="inro", project=project_path) self._project_cache[project_path] = emme_project return emme_project
def CleanLogbook(self): try: projectFile = None projectFiles = glob.glob("*.emp") if len(projectFiles) > 0: projectFile = projectFiles[0] if projectFile == None: os.chdir("..") projectFiles = glob.glob("*.emp") if len(projectFiles) > 0: projectFile = projectFiles[0] logbookPath = self.Modeller.desktop.modeller_logbook_url self.Modeller = None self.emmeApplication.close() self.emmeApplication = None time.sleep(10) os.remove(logbookPath) self.emmeApplication = _app.start_dedicated(visible=False, user_initials="XTMF", project=projectFile) self.Modeller = inro.modeller.Modeller(self.emmeApplication) self.SendSuccess() except Exception, inst: self.SendRuntimeError(str(inst))
def open_emme_project(my_project): # Open the Time Period Specific Project passed to the function and load the Input Dictionary my_desktop = app.start_dedicated(True, "cth", my_project) my_modeller = _m.Modeller(my_desktop) return my_modeller
def main(): #Start Daysim-Emme Equilibration for x in range(0, global_iterations): #launch daysim #retcode = subprocess.call(["Daysim.exe"]) #Daysim Finished Running, now start Emme Assignment & Skimming code start_of_run = time.time() #want pooled processes finished before executing more code in main: project_list=['C:/ABM/Projects/5to6/5to6.emp','C:/ABM/Projects/6to7/6to7.emp','C:/ABM/Projects/7to8/7to8.emp','C:/ABM/Projects/8to9/8to9.emp', 'C:/ABM/Projects/9to10/9to10.emp', 'C:/ABM/Projects/10to14/10to14.emp', 'C:/ABM/Projects/14to15/14to15.emp','C:/ABM/Projects/15to16/15to16.emp', 'C:/ABM/Projects/16to17/16to17.emp', 'C:/ABM/Projects/17to18/17to18.emp', 'C:/ABM/Projects/18to20/18to20.emp', 'C:/ABM/Projects/20to5/20to5.emp' ] #project_list=['C:/ABM/Projects/5to6/5to6.emp','C:/ABM/Projects/6to7/6to7.emp','C:/ABM/Projects/7to8/7to8.emp', 'C:/ABM/Projects/8to9/8to9.emp'] start_pool(project_list) #Tried exporting skims to hdf5 concurrently, by using a HDF5 file for each time period, and then merging them #all to one HDF5 file at the end, but this was signigicantly slower than writing out sequentially. Below we are able to #launch another instance of modeler because the others were launched/closed in their own pool/process. #This project points to all TOD Banks: project_name = 'C:/ABM/Projects/LoadTripTables/LoadTripTables.emp' my_desktop = app.start_dedicated(False, "cth", project_name) m = _m.Modeller(my_desktop) #skims_to_hdf5(m, hdf5_file_path) end_of_run = time.time() print "Emme Skim Creation and Export to HDF5 completed normally" print 'The Total Time for all processes took', round((end_of_run-start_of_run)/60,2), 'minutes to execute.'
def open_emme_project(my_project): #If you do not want the Emme window to show, change True to False #my_desktop = app.start_dedicated(False, "cth", project_name) my_desktop = app.start_dedicated(True, "PSRC", my_project) my_modeller = _m.Modeller(my_desktop) return(my_modeller)
def open_emme_project(my_project): #If you do not want the Emme window to show, change True to False #my_desktop = app.start_dedicated(False, "cth", project_name) my_desktop = app.start_dedicated(True, "PSRC", my_project) my_modeller = _m.Modeller(my_desktop) return (my_modeller)
def __init__(self, filepath): self.desktop = app.start_dedicated(True, "cth", filepath) self.m = _m.Modeller(self.desktop) pathlist = filepath.split("/") self.fullpath = filepath self.filename = pathlist.pop() self.dir = "/".join(pathlist) + "/" self.bank = self.m.emmebank self.tod = self.bank.title self.current_scenario = list(self.bank.scenarios())[0] self.data_explorer = self.desktop.data_explorer()
def setup_emme_project_folders(): #tod_dict = json.load(open(os.path.join('inputs', 'skim_params', 'time_of_day.json'))) tod_dict = text_to_dictionary('time_of_day') tod_list = list(set(tod_dict.values())) if os.path.exists(os.path.join('projects')): print 'Delete Project Folder' shutil.rmtree('projects') # Create master project, associate with all tod emmebanks project = app.create_project('projects', master_project) desktop = app.start_dedicated(False, modeller_initial, project) data_explorer = desktop.data_explorer() for tod in tod_list: database = data_explorer.add_database('Banks/' + tod + '/emmebank') #open the last database added so that there is an active one database.open() desktop.project.save() desktop.close() # Create time of day projects, associate with emmebank tod_list.append('TruckModel') tod_list.append('Supplementals') for tod in tod_list: project = app.create_project('projects', tod) desktop = app.start_dedicated(False, modeller_initial, project) data_explorer = desktop.data_explorer() database = data_explorer.add_database('Banks/' + tod + '/emmebank') database.open() desktop.project.save() desktop.close() #copy worksheets wspath = os.path.join('inputs/worksheets/', tod) destpath = os.path.join('projects/', tod, 'Worksheets') copyfiles(wspath, destpath) # copy media files destpath = os.path.join('projects/', tod, 'Media') copyfiles('inputs/Media/', destpath)
def __init__(self, filepath): self.desktop = app.start_dedicated(True, "cth", filepath) self.m = _m.Modeller(self.desktop) for t in self.m.toolboxes: t.connection.execute("PRAGMA busy_timeout=1000") #delete locki: self.m.emmebank.dispose() pathlist = filepath.split("/") self.fullpath = filepath self.filename = pathlist.pop() self.dir = "/".join(pathlist) + "/" self.bank = self.m.emmebank self.tod = self.bank.title self.current_scenario = list(self.bank.scenarios())[0] self.data_explorer = self.desktop.data_explorer()
def Metro_Project(working_dir): """Replaces `Metro_Project` directory and creates new .emp file.""" emmebank_path = os.path.join(working_dir, 'emmebank') try: shutil.rmtree(os.path.join(working_dir, 'Metro_Project')) project = _app.create_project(working_dir, 'Metro_Project') except WindowsError: if os.path.exists(working_dir): project = _app.create_project(working_dir, 'Metro_Project') else: print 'Path does not exist. Please enter an existing path.' sys.exit() my_app = _app.start_dedicated(False, '000', project) data = my_app.data_explorer() bank = data.add_database(emmebank_path) return my_app, bank
def __init__(self, filepath): self.app = app self.desktop = app.start_dedicated(True, "SEC", filepath) self.m = _m.Modeller(self.desktop) self.data_explorer = self.desktop.data_explorer() for t in self.m.toolboxes: t.connection.execute("PRAGMA busy_timeout=1000") self.data_base = self.data_explorer.active_database() #delete locki: self.m.emmebank.dispose() pathlist = filepath.split("/") self.fullpath = filepath self.filename = pathlist.pop() self.dir = "/".join(pathlist) + "/" self.bank = self.m.emmebank self.tod = self.bank.title self.data_explorer = self.desktop.data_explorer() self.primary_scenario = self.data_explorer.primary_scenario
def run_assignments_parallel(project_name): start_of_run = time.time() my_desktop = app.start_dedicated(True, "cth", project_name) m = _m.Modeller(my_desktop) print m.emmebank.title #delete and create new demand and skim matrices: delete_matrices(m, "FULL") define_matrices(m) #Import demand/trip tables to emme. This is actually quite fast con-currently. hdf5_trips_to_Emme(m, hdf5_file_path) #set up for assignments intitial_extra_attributes(m) import_extra_attributes(m) arterial_delay_calc(m) vdf_initial(m) #run auto assignment/skims traffic_assignment(m) attribute_based_skims(m, "Time") #get tod from bank name. Only skim for distance if in global distance_skim_tod list tod = m.emmebank.title if tod in distance_skim_tod: print tod attribute_based_skims(m,"Distance") cost_skims(m) class_specific_volumes(m) #run transit assignment skims transit_assignment(m) transit_skims(m) print tod + " finished" end_of_run = time.time() print 'It took', round((end_of_run-start_of_run)/60,2), 'minutes to execute all processes for ' + tod
def __call__(self): #if not os.path.exists('projects'): # self.tool_run_message = "projects folder does not exist" # print self.tool_run_message # _modeller.logbook_write(self.tool_run_message) # raise Exception(self.tool_run_message) #if not os.path.exists('Banks'): # self.tool_run_message = "banks folder does not exist" # print self.tool_run_message # _modeller.logbook_write(self.tool_run_message) # raise Exception(self.tool_run_message) for folders in os.walk(self.BKRCastFolder): foldername = self.getFoldername(self.BKRCastFolder) projname = os.path.join(folders[0], foldername + ".emp") print projname project = _app.start_dedicated(True, "tool", projname)
def run_assignments_parallel(project_name): start_of_run = time.time() my_desktop = app.start_dedicated(True, "cth", project_name) m = _m.Modeller(my_desktop) print m.emmebank.title #delete and create new demand and skim matrices: delete_matrices(m, "FULL") define_matrices(m) #Import demand/trip tables to emme. This is actually quite fast con-currently. hdf5_trips_to_Emme(m, hdf5_file_path) #set up for assignments intitial_extra_attributes(m) import_extra_attributes(m) arterial_delay_calc(m) vdf_initial(m) #run auto assignment/skims traffic_assignment(m) attribute_based_skims(m, "Time") #get tod from bank name. Only skim for distance if in global distance_skim_tod list tod = m.emmebank.title if tod in distance_skim_tod: print tod attribute_based_skims(m, "Distance") cost_skims(m) class_specific_volumes(m) #run transit assignment skims transit_assignment(m) transit_skims(m) print tod + " finished" end_of_run = time.time() print 'It took', round((end_of_run - start_of_run) / 60, 2), 'minutes to execute all processes for ' + tod
def main(): #Start Daysim-Emme Equilibration for x in range(0, global_iterations): #launch daysim #retcode = subprocess.call(["Daysim.exe"]) #Daysim Finished Running, now start Emme Assignment & Skimming code start_of_run = time.time() #want pooled processes finished before executing more code in main: project_list = [ 'C:/ABM/Projects/5to6/5to6.emp', 'C:/ABM/Projects/6to7/6to7.emp', 'C:/ABM/Projects/7to8/7to8.emp', 'C:/ABM/Projects/8to9/8to9.emp', 'C:/ABM/Projects/9to10/9to10.emp', 'C:/ABM/Projects/10to14/10to14.emp', 'C:/ABM/Projects/14to15/14to15.emp', 'C:/ABM/Projects/15to16/15to16.emp', 'C:/ABM/Projects/16to17/16to17.emp', 'C:/ABM/Projects/17to18/17to18.emp', 'C:/ABM/Projects/18to20/18to20.emp', 'C:/ABM/Projects/20to5/20to5.emp' ] #project_list=['C:/ABM/Projects/5to6/5to6.emp','C:/ABM/Projects/6to7/6to7.emp','C:/ABM/Projects/7to8/7to8.emp', 'C:/ABM/Projects/8to9/8to9.emp'] start_pool(project_list) #Tried exporting skims to hdf5 concurrently, by using a HDF5 file for each time period, and then merging them #all to one HDF5 file at the end, but this was signigicantly slower than writing out sequentially. Below we are able to #launch another instance of modeler because the others were launched/closed in their own pool/process. #This project points to all TOD Banks: project_name = 'C:/ABM/Projects/LoadTripTables/LoadTripTables.emp' my_desktop = app.start_dedicated(False, "cth", project_name) m = _m.Modeller(my_desktop) #skims_to_hdf5(m, hdf5_file_path) end_of_run = time.time() print "Emme Skim Creation and Export to HDF5 completed normally" print 'The Total Time for all processes took', round( (end_of_run - start_of_run) / 60, 2), 'minutes to execute.'
def CheckToolExists(self): ns = self.ReadString() ret = ns in self.Modeller.tool_namespaces() if ret == False: _m.logbook_write("Unable to find a tool named " + ns) self.SendReturnSuccess(ret) return def DisableLogbook(self): _m.logbook_write = RedirectLogbookWrite _m.logbook_trace = RedirectLogbookTrace def EnableLogbook(self): _m.logbook_write = self.CachedLogbookWrite _m.logbook_trace = self.CachedLogbookTrace #end XTMFBridge #Get the project file args = sys.argv # 0: This script's location, 1: Emme project file, 2: User initials, 3: Performance flag projectFile = args[1] userInitials = args[2] performancFlag = bool(int(args[3])) pipeName = args[4] #sys.stderr.write(args) TheEmmeEnvironmentXMTF = _app.start_dedicated(visible=False, user_initials=userInitials, project=projectFile) XTMFBridge().Run(TheEmmeEnvironmentXMTF, performancFlag) TheEmmeEnvironmentXMTF.close()
centroids = bank.scenario(scenarioNum).get_network().centroids() names = [i.id for i in centroids] # Return matrix data and zone names return (mat, names) ############################################################################### # Run command line version if __name__ == "__main__": # Start Emme desktop and attach a Modeller session empFile = sys.argv[1] scenarioNum = sys.argv[2] desktop = d.start_dedicated(False, "bts", empFile) m = m.Modeller(desktop) # Set export/import mode based on presence of ZMX extension if sys.argv[3].lower().find("zmx") < 0: export = True else: export = False # Get location of EMX files emxFolder = os.path.dirname(m.emmebank.path) + "\\emmemat" # Get matrix names from command line argument for i in range(3, len(sys.argv)): matName = sys.argv[i]
matNumPremDemand = 468 bypassConventionalTransit = True #scenarios tods = [1, 2, 3, 4, 5, 6, 7, 8] highwayScenarios = [i for i in tods] transitScenarios = [transitImport + i for i in tods] #macros - relative to the databank location hwySkimMacro = "../../scripts/CT_RAMP_skim3.mac" transitSkimMacro = "../../scripts/Transit_assignment_skimming_CT_RAMP3.mac" ############################################################################ #start EMME desktop and attach a modeller session desktop = d.start_dedicated(True, "cmap", empFile) m = m.Modeller(desktop) #location to write matrices emxFolder = os.path.dirname(m.emmebank.path) + "\\emmemat" #get time periods to run, item 2 #1,1,0,0,0,0,0,0 #for example runs periods 1 and 2 runPeriods = map(int, sys.argv[1].split(",")) ############################################################################ #loop by time-of-day for i in range(len(tods)): #run only specified periods
# scenarios transitImport = int(sys.argv[1]) # 100 tods = [1, 2, 3, 4, 5, 6, 7, 8] highwayScenarios = [i for i in tods] transitScenarios = [transitImport + i for i in tods] # settings tapFile = "inputs/tap_attributes.csv" tapLinks = "inputs/tap2node.csv" tapLinesOutFileName = "outputs/tapLines.csv" ############################################################################ # start EMME desktop and attach a modeller session desktop = d.start_dedicated(True, "cmap", empFile) m = m.Modeller(desktop) ############################################################################ # create tap virtual zones taps = [] with open(tapFile, "rb") as csvfile: tapreader = csv.reader(csvfile, skipinitialspace=True) for row in tapreader: taps.append(row) taps_col_names = taps.pop(0) # create access links access_links = [] with open(tapLinks, "rb") as csvfile:
config['emme_folder_name']) emmebank_dimensions_dict = json.load( open(os.path.join(config['data_path'], 'emme_bank_dimensions.json'))) if os.path.exists(emme_folder): shutil.rmtree(emme_folder) os.makedirs(emme_folder) bank_path = os.path.join(emme_folder, 'emmebank') emmebank = _eb.create(bank_path, emmebank_dimensions_dict) emmebank.title = config['emmebank_title'] emmebank.unit_of_length = 'mi' emmebank.coord_unit_length = 0.0001894 scenario = emmebank.create_scenario(999) # project project = app.create_project(emme_folder, 'emme_networks') desktop = app.start_dedicated(False, "SEC", project) data_explorer = desktop.data_explorer() database = data_explorer.add_database(bank_path) #open the database added so that there is an active one database.open() desktop.project.save() desktop.close() emme_toolbox_path = os.path.join(os.environ['EMMEPATH'], 'toolboxes') shcopy(emme_toolbox_path + '/standard.mtbx', emme_folder + '\\emme_networks') my_project = EmmeProject(emme_folder + '\\emme_networks' + '\\emme_networks.emp') os.path.join(emme_folder + 'emme_networks') build_file_folder = os.path.join(config['output_dir'], config['emme_folder_name'],
import array as _array import inro.emme.desktop.app as app import inro.modeller as _m import inro.emme.matrix import inro.emme.database.matrix import json import numpy as _np import time import timeit import os # Start an instance of Emme - for now this is using the GUI start_of_run = time.time() my_desktop = app.start_dedicated(False, "cth", 'C:\Users\craig\Documents\ABM\ABM.emp') my_modeller = _m.Modeller(my_desktop) # Emme and Modeller Tools we used for the assignment and skimming processes manage_vdfs = _m.Modeller().tool("inro.emme.data.function.function_transaction") create_matrix = _m.Modeller().tool("inro.emme.data.matrix.create_matrix") assign_extras = _m.Modeller().tool("inro.emme.traffic_assignment.set_extra_function_parameters") assign_traffic = _m.Modeller().tool("inro.emme.traffic_assignment.path_based_traffic_assignment") skim_traffic = _m.Modeller().tool("inro.emme.traffic_assignment.path_based_traffic_analysis") network_calc = _m.Modeller().tool("inro.emme.network_calculation.network_calculator") create_extras = _m.Modeller().tool("inro.emme.data.extra_attribute.create_extra_attribute") delete_extras = _m.Modeller().tool("inro.emme.data.extra_attribute.delete_extra_attribute") # Define what our scenario and bank we are working in and import basic data like Volume Delay Functions current_scenario = _m.Modeller().desktop.data_explorer().primary_scenario.core_scenario.ref early_am_bank = current_scenario.emmebank default_path = os.path.dirname(_m.Modeller().emmebank.path).replace("\\","/") function_file = os.path.join(default_path,"Inputs/VDFs/early_am_vdfs.in").replace("\\","/")
def EnableLogbook(self): _m.logbook_level(self.previous_level) #end XTMFBridge #Get the project file args = sys.argv # 0: This script's location, 1: Emme project file, 2: User initials, 3: # Performance flag projectFile = args[1] userInitials = args[2] performancFlag = bool(int(args[3])) pipeName = args[4] databank = None if len(args) > 5: databank = args[5] #sys.stderr.write(args) print userInitials print projectFile try: TheEmmeEnvironmentXMTF = _app.start_dedicated(visible=False, user_initials=userInitials, project=projectFile) XTMFBridge().Run(TheEmmeEnvironmentXMTF, databank, performancFlag) TheEmmeEnvironmentXMTF.close() except Exception as e: print dir(e).__class__ print e.message print e.args