comparison python/storage.py @ 978:184f1dd307f9

corrected print and exception statements for Python 3
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Thu, 08 Feb 2018 05:53:50 -0500
parents 7f5cbdc107c5
children cc89267b5ff9
comparison
equal deleted inserted replaced
977:9c27a0315c4d 978:184f1dd307f9
878 '''Open file filename in read mode by default 878 '''Open file filename in read mode by default
879 and checks it is open''' 879 and checks it is open'''
880 try: 880 try:
881 return open(filename, option) 881 return open(filename, option)
882 except IOError: 882 except IOError:
883 print 'File {} could not be opened.'.format(filename) 883 print('File {} could not be opened.'.format(filename))
884 if quitting: 884 if quitting:
885 from sys import exit 885 from sys import exit
886 exit() 886 exit()
887 return None 887 return None
888 888
950 headers += ['flow{}'.format(i+1), 'occupancy{}'.format(i+1), 'speed{}'.format(i+1)] 950 headers += ['flow{}'.format(i+1), 'occupancy{}'.format(i+1), 'speed{}'.format(i+1)]
951 f.close() 951 f.close()
952 return read_csv(filename, delimiter = ',', names = headers) 952 return read_csv(filename, delimiter = ',', names = headers)
953 953
954 def generatePDLaneColumn(data): 954 def generatePDLaneColumn(data):
955 data['LANE'] = data['LANE\LINK\NO'].astype(str)+'_'+data['LANE\INDEX'].astype(str) 955 data['LANE'] = data['LANE\\LINK\\NO'].astype(str)+'_'+data['LANE\\INDEX'].astype(str)
956 956
957 def convertTrajectoriesVissimToSqlite(filename): 957 def convertTrajectoriesVissimToSqlite(filename):
958 '''Relies on a system call to sqlite3 958 '''Relies on a system call to sqlite3
959 sqlite3 [file.sqlite] < import_fzp.sql''' 959 sqlite3 [file.sqlite] < import_fzp.sql'''
960 sqlScriptFilename = "import_fzp.sql" 960 sqlScriptFilename = "import_fzp.sql"
1096 If lanes is not None, only the data for the selected lanes will be provided 1096 If lanes is not None, only the data for the selected lanes will be provided
1097 (format as string x_y where x is link index and y is lane index)''' 1097 (format as string x_y where x is link index and y is lane index)'''
1098 if filename.endswith(".fzp"): 1098 if filename.endswith(".fzp"):
1099 columns = ['NO', '$VEHICLE:SIMSEC', 'POS'] 1099 columns = ['NO', '$VEHICLE:SIMSEC', 'POS']
1100 if lanes is not None: 1100 if lanes is not None:
1101 columns += ['LANE\LINK\NO', 'LANE\INDEX'] 1101 columns += ['LANE\\LINK\\NO', 'LANE\\INDEX']
1102 data = read_csv(filename, delimiter=';', comment='*', header=0, skiprows = 1, usecols = columns, low_memory = lowMemory) 1102 data = read_csv(filename, delimiter=';', comment='*', header=0, skiprows = 1, usecols = columns, low_memory = lowMemory)
1103 data = selectPDLanes(data, lanes) 1103 data = selectPDLanes(data, lanes)
1104 data.sort(['$VEHICLE:SIMSEC'], inplace = True) 1104 data.sort(['$VEHICLE:SIMSEC'], inplace = True)
1105 1105
1106 nStationary = 0 1106 nStationary = 0
1126 To distinguish between cars passing and collision, 1126 To distinguish between cars passing and collision,
1127 one checks when the sign of the position difference inverts 1127 one checks when the sign of the position difference inverts
1128 (if the time are closer than collisionTimeDifference) 1128 (if the time are closer than collisionTimeDifference)
1129 If lanes is not None, only the data for the selected lanes will be provided 1129 If lanes is not None, only the data for the selected lanes will be provided
1130 (format as string x_y where x is link index and y is lane index)''' 1130 (format as string x_y where x is link index and y is lane index)'''
1131 data = read_csv(filename, delimiter=';', comment='*', header=0, skiprows = 1, usecols = ['LANE\LINK\NO', 'LANE\INDEX', '$VEHICLE:SIMSEC', 'NO', 'POS'], low_memory = lowMemory) 1131 data = read_csv(filename, delimiter=';', comment='*', header=0, skiprows = 1, usecols = ['LANE\\LINK\\NO', 'LANE\\INDEX', '$VEHICLE:SIMSEC', 'NO', 'POS'], low_memory = lowMemory)
1132 data = selectPDLanes(data, lanes) 1132 data = selectPDLanes(data, lanes)
1133 data = data.convert_objects(convert_numeric=True) 1133 data = data.convert_objects(convert_numeric=True)
1134 1134
1135 merged = merge(data, data, how='inner', left_on=['LANE\LINK\NO', 'LANE\INDEX', '$VEHICLE:SIMSEC'], right_on=['LANE\LINK\NO', 'LANE\INDEX', '$VEHICLE:SIMSEC'], sort = False) 1135 merged = merge(data, data, how='inner', left_on=['LANE\\LINK\\NO', 'LANE\\INDEX', '$VEHICLE:SIMSEC'], right_on=['LANE\\LINK\\NO', 'LANE\\INDEX', '$VEHICLE:SIMSEC'], sort = False)
1136 merged = merged[merged['NO_x']>merged['NO_y']] 1136 merged = merged[merged['NO_x']>merged['NO_y']]
1137 1137
1138 nCollisions = 0 1138 nCollisions = 0
1139 for name, group in merged.groupby(['LANE\LINK\NO', 'LANE\INDEX', 'NO_x', 'NO_y']): 1139 for name, group in merged.groupby(['LANE\\LINK\\NO', 'LANE\\INDEX', 'NO_x', 'NO_y']):
1140 diff = group['POS_x']-group['POS_y'] 1140 diff = group['POS_x']-group['POS_y']
1141 # diff = group['POS_x']-group['POS_y'] # to check the impact of convert_objects and the possibility of using type conversion in read_csv or function to convert strings if any 1141 # diff = group['POS_x']-group['POS_y'] # to check the impact of convert_objects and the possibility of using type conversion in read_csv or function to convert strings if any
1142 if len(diff) >= 2 and npmin(diff) < 0 and npmax(diff) > 0: 1142 if len(diff) >= 2 and npmin(diff) < 0 and npmax(diff) > 0:
1143 xidx = diff[diff < 0].argmax() 1143 xidx = diff[diff < 0].argmax()
1144 yidx = diff[diff > 0].argmin() 1144 yidx = diff[diff > 0].argmin()
1186 for line in inputfile: 1186 for line in inputfile:
1187 numbers = line.strip().split() 1187 numbers = line.strip().split()
1188 if obj.getNum() != int(numbers[0]): 1188 if obj.getNum() != int(numbers[0]):
1189 # check and adapt the length to deal with issues in NGSIM data 1189 # check and adapt the length to deal with issues in NGSIM data
1190 if (obj.length() != obj.positions.length()): 1190 if (obj.length() != obj.positions.length()):
1191 print 'length pb with object %s (%d,%d)' % (obj.getNum(),obj.length(),obj.positions.length()) 1191 print('length pb with object {} ({},{})'.format(obj.getNum(),obj.length(),obj.positions.length()))
1192 obj.last = obj.getFirstInstant()+obj.positions.length()-1 1192 obj.last = obj.getFirstInstant()+obj.positions.length()-1
1193 #obj.velocities = utils.computeVelocities(f.positions) # compare norm to speeds ? 1193 #obj.velocities = utils.computeVelocities(f.positions) # compare norm to speeds ?
1194 objects.append(obj) 1194 objects.append(obj)
1195 if (nObjects>0) and (len(objects)>=nObjects): 1195 if (nObjects>0) and (len(objects)>=nObjects):
1196 break 1196 break
1204 obj.followingVehicles.append(int(numbers[15])) 1204 obj.followingVehicles.append(int(numbers[15]))
1205 obj.spaceHeadways.append(float(numbers[16])) 1205 obj.spaceHeadways.append(float(numbers[16]))
1206 obj.timeHeadways.append(float(numbers[17])) 1206 obj.timeHeadways.append(float(numbers[17]))
1207 1207
1208 if (obj.size[0] != float(numbers[8])): 1208 if (obj.size[0] != float(numbers[8])):
1209 print 'changed length obj %d' % (obj.getNum()) 1209 print('changed length obj {}'.format(obj.getNum()))
1210 if (obj.size[1] != float(numbers[9])): 1210 if (obj.size[1] != float(numbers[9])):
1211 print 'changed width obj %d' % (obj.getNum()) 1211 print('changed width obj {}'.format(obj.getNum()))
1212 1212
1213 inputfile.close() 1213 inputfile.close()
1214 return objects 1214 return objects
1215 1215
1216 def convertNgsimFile(inputfile, outputfile, append = False, nObjects = -1, sequenceNum = 0): 1216 def convertNgsimFile(inputfile, outputfile, append = False, nObjects = -1, sequenceNum = 0):
1225 features = loadNgsimFile(inputfile, sequenceNum) 1225 features = loadNgsimFile(inputfile, sequenceNum)
1226 for f in features: 1226 for f in features:
1227 nObjectsPerType[f.userType-1] += 1 1227 nObjectsPerType[f.userType-1] += 1
1228 f.write(out) 1228 f.write(out)
1229 1229
1230 print nObjectsPerType 1230 print(nObjectsPerType)
1231 1231
1232 out.close() 1232 out.close()
1233 1233
1234 def loadPinholeCameraModel(filename, tanalystFormat = True): 1234 def loadPinholeCameraModel(filename, tanalystFormat = True):
1235 '''Loads the data from a file containing the camera parameters 1235 '''Loads the data from a file containing the camera parameters