def changeMusicFile(self,filename): settings = QSettings() if(self.useUB): import ubeats_music_interface_5 as umusic else: if (settings.value("Music").toString().contains("MUSIC 5")): import ubeats_music_interface_5 as umusic else: import ubeats_music_interface as umusic workpath = self.getHelpUrl() + "/" if (platform.system() != "Linux"): workpath = workpath.replace("/","\\") #read start- , enddate and timestep from csv startdate = "" enddate = "" timestep = 0 counter = 0 # only get RainEtFile when files in gui # skip if not if( not((self.Csvfile == "" or self.ETfile == "") and self.useDefaults == 0 and self.useMusic == 0) ): files = self.getRainEtFile() if((self.useDefaults or self.useMusic) == False): f = open(files[0],"r") for line in f: counter = counter + 1 linearr = line.strip("\n").split(",") if (counter == 2): startdate = linearr[0].split(" ") if (counter == 3): tmp = linearr[0].split(" ")[1].split(":") tmp2 = startdate[1].split(":") timestep = int(tmp[0]) * 360 - int(tmp2[0]) * 360 timestep = timestep + (int(tmp[1]) * 60 - int(tmp2[1]) * 60) #timestep = timestep + int(tmp[2]) - int(tmp2[2]) enddate = linearr[0].split(" ")[0] startdate = startdate[0] f.close() infile = open(filename,"r") filearr = filename.split(".") outfile = open(filearr[0] + "SEI." + filearr[1] ,"w") urbansourcenode = False calcarea = False readcatchmentlist = False link = False routed = False impArea = 0.0 perArea = 0.0 area = 0.0 imp = 0.0 per = 0.0 ID = 0 recvcounter = 0 foundOutBas = 0 OutBasId = 0 receivingnodeid = 0 receiveBasName = "" catchment_paramter_list = []#[1,120,30,20,200,1,10,25,5,0] old static parameter list catchment_paramter_list2 = [self.RainThres,self.RainSoil,self.RainInitial,self.RainField,self.RainInfil,self.RainInfil2,self.RainDepth,self.RainRecharge,self.RainBaseflow,self.RainDeep] for line in infile: linearr = line.strip("\n").split(",") if (recvcounter == 2): receivingnodeid = int(linearr[1]) recvcounter = 0 if (recvcounter == 1): recvcounter = 2 if(linearr[0] == "Node Type"): if(linearr[1] == "ReceivingNode"): recvcounter = 1 if(linearr[0] == "Node ID"): if(foundOutBas): OutBasId = linearr[1] foundOutBas = 0 if(linearr[0] == "Node Name"): if(linearr[1].find("OUT_Bas") != -1): receiveBasName = linearr[1] foundOutBas = 1 if(linearr[0] == "Link Name"): link = True if(link): if(linearr[0] == "Routing"): if(linearr[1] == "Routed"): routed = True link = False if(linearr[0] == "Node Type"): if (linearr[1] == "UrbanSourceNode"): urbansourcenode = True if(urbansourcenode): if(linearr[0] == "Areas - Total Area (ha)"): area = float(linearr[1]) print "area: " + str(area) if(linearr[0] == "Areas - Impervious (%)"): imp = float(linearr[1]) print "imp: " + str(imp) if(linearr[0] == "Areas - Pervious (%)"): per = float(linearr[1]) print "per: " + str(per) calcarea = True #first line of parameter list if(linearr[0] == "Rainfall-Runoff - Impervious Area - Rainfall Threshold (mm/day)"): readcatchmentlist = True if(readcatchmentlist): catchment_paramter_list.append(linearr[1]) #last line of parameter list if(linearr[0] == "Rainfall-Runoff - Groundwater Properties - Daily Deep Seepage Rate (%)"): readcatchmentlist = False if(calcarea): impArea = impArea + (area * imp / 100) perArea = perArea + area print "perArea: " + str(perArea) print "impArea: " + str(impArea) calcarea = False UrbanSourceNode = False if(linearr[0] == "Node ID"): if(int(linearr[1]) > int(ID)): ID = int(linearr[1]) if (linearr[0] == "MeteorologicalTemplate"): # check here too if Rain and ET files are input in GUI # else skip bzw. just copy line from input file, like in line 430 if(self.useMusic): outfile.write("MeteorologicalTemplate," + workpath + self.MusicTemplateFile + ",{MLB Filename}\n") else: if(self.Csvfile == "" or self.ETfile == ""): outfile.write(line) else: outfile.write("RainfallFile," + files[0] +"\n") outfile.write("PETFile," + files[1] + "\n") outfile.write("StartDate," + startdate + "\n") outfile.write("EndDate," + enddate + "\n") outfile.write("Timestep," + str(timestep) + "\n") else: outfile.write(line) umusic.writeMUSICcatchmentnodeEro(outfile,"Pre-developed Catchment",ID+1,perArea,False,catchment_paramter_list2) #pervious umusic.writeMUSICcatchmentnodeEro(outfile,"Urbanised Catchment",ID + 2,impArea,True,catchment_paramter_list) #impervious #umusic.writeMUSICcatchmentnodeEro2(outfile,"Urbanised Catchment",ID + 2, impArea+perArea,impArea/(impArea+perArea),perArea/(impArea+perArea),catchment_paramter_list) if(routed): umusic.writeMUSICjunction2(outfile,"PreJunction",ID + 3,0,0) umusic.writeMUSICjunction2(outfile,"UrbJunction",ID + 4,0,0) umusic.writeMUSIClinkSEI(outfile,ID+1,ID+3,round(math.sqrt(perArea*10000)/60)) umusic.writeMUSIClinkSEI(outfile,ID+2,ID+4,round(math.sqrt(impArea*10000)/60)) infile.close() outfile.close() print "Impervious Area: " + str(impArea) print "Pervious Area: " + str(perArea) #check for tech after out receiving name = "" outid = 0 if(OutBasId == 0 and receivingnodeid != 0): outid = receivingnodeid name = "Receiving Node" if(OutBasId != 0 and receivingnodeid == 0): outid = OutBasId name = receiveBasName if(OutBasId != 0 and receivingnodeid != 0): outid = receivingnodeid name = "Receiving Node" infile = open(filename,"r") found = False techid = 0 for line in infile: linearr = line.strip("\n").split(",") if(linearr[0] == "Source Node ID"): if(linearr[1] == outid): found = True if(found): if(linearr[0] == "Target Node ID"): techid = linearr[1] break infile.close() # get name of tech infile = open(filename,"r") for line in infile: linearr = line.strip("\n").split(",") if(linearr[0] == "Node Name"): tmpname = linearr[1] if(linearr[0] == "Node ID" and linearr[1] == techid): name = tmpname break infile.close() print "tech name: " + name self.writeMusicConfigFile(routed,name)
def readMusicFile(self,filename,newname): settings = QSettings() if (settings.value("Music").toString().contains("MUSIC 5")): import ubeats_music_interface_5 as umusic else: import ubeats_music_interface as umusic largestID = 0 recvcounter = 0 foundOutBas = 0 OutBasId = 0 receivingnodeid = 0 receiveBasName = "" getIDforReuse = False ReuseIDs = [] fileIn = open(filename,"r") fileOut = open(newname,"w") for line in fileIn: linearr = line.strip("\n").split(",") #get receiving node id #this goes over two lines because we first read the node type and then two lines later the id if (recvcounter == 2): receivingnodeid = int(linearr[1]) recvcounter = 0 if (recvcounter == 1): recvcounter = 2 if(linearr[0] == "Node Type"): if(linearr[1] == "ReceivingNode"): recvcounter = 1 if(linearr[1] == "WetlandNode" or linearr[1] == "PondNode" or linearr[1] == "RainWaterTankNode"): self.createReuse = True getIDforReuse = True if(linearr[0] == "Node ID"): if(largestID < int(linearr[1])): largestID = int(linearr[1]) if(foundOutBas): OutBasId = linearr[1] foundOutBas = 0 # get wetland pond an rainwatertank ids to link with reuse node if(getIDforReuse): ReuseIDs.append(int(linearr[1])) getIDforReuse = False # if in node name "OUT-Bas" save and set foundOutBas if(linearr[0] == "Node Name"): if(linearr[1].find("OUT_Bas") != -1): receiveBasName = linearr[1] foundOutBas = 1 fileOut.write(line) # check for reuse if(self.createReuse): umusic.writeMUSICjunction2(fileOut, "Re-use",largestID+1,0,0) for ids in ReuseIDs: umusic.writeTankLinkReuse(fileOut,ids,largestID+1) fileOut.close() name = "" outid = 0 # check wheter outbas or recnode has been found if(OutBasId == 0 and receivingnodeid != 0): name = "Receiving Node" outid = receivingnodeid if(OutBasId != 0 and receivingnodeid == 0): name = receiveBasName outid = OutBasId #if we found both we take receiving node id if(OutBasId != 0 and receivingnodeid != 0): name = "Receiving Node" outid = receivingnodeid infile = open(filename,"r") found = False techid = 0 for line in infile: linearr = line.strip("\n").split(",") if(linearr[0] == "Source Node ID"): if(linearr[1] == outid): found = True if(found): if(linearr[0] == "Target Node ID"): techid = linearr[1] break infile.close() # get name of tech infile = open(filename,"r") for line in infile: linearr = line.strip("\n").split(",") if(linearr[0] == "Node Name"): tmpname = linearr[1] if(linearr[0] == "Node ID" and linearr[1] == techid): name = tmpname break infile.close() print "techname: " + name return name
def convertToSecondaryMusic(self, filename): settings = QSettings() if(self.useUB): import ubeats_music_interface_5 as umusic else: if (settings.value("Music").toString().contains("MUSIC 5")): import ubeats_music_interface_5 as umusic else: import ubeats_music_interface as umusic fileIn = open(filename,"r") filearr = filename.split(".") fileOut = open(filearr[0] + "Secondary." + filearr[1] ,"w") urbfirst = "" urbsec = "" urbsplit1 = "" urbsplit2 = "" urbtmp = "" receiveBasName = "" recvcounter = 0 foundOutBas = 0 OutBasId = 0 receivingnodeid = 0 sumID = 0 tmpID = 0 idfound = False printing = False urbansourcenode = False WSUR = False PB = False IS = False BF = False SW = False tank = False calc = False notread = True foundDetention = False split = False detIds = [] deten = False area = 0.0 tmparea = 0.0 totalarea = 0.0 totalimparea = 0.0 imp = 0.0 per = 0.0 splitlist = [] splitlist2 = [] EtFlux_list = [] fluxinfl_list = [] fluxinfl_list2 = [] tanklist = [] pipelist = [] infillist = [] baseflowlist = [] reclist = [] overflowlist = [] swalelist = [] readcatchmentlist = False writetop = True writebot = False catchment_paramter_list = [] #[1,120,30,20,200,1,10,25,5,0] catchment_paramter_list2 = [self.RainThres,self.RainSoil,self.RainInitial,self.RainField,self.RainInfil,self.RainInfil2,self.RainDepth,self.RainRecharge,self.RainBaseflow,self.RainDeep] j = -1 i = 0 impnodes =[] ImpIDtoImpArea = {} NodeIDToType = {} StartNodeConnectionsPrimary = {} currentNodeType = "" is_primary_connection = True target_id = "" source_id = "" PipeFlowLinkList = [] DrainageLinkList = [] for line in fileIn: i = i + 1 linearr = line.strip("\n").split(",") if (recvcounter == 2): receivingnodeid = int(linearr[1]) recvcounter = 0 if (recvcounter == 1): recvcounter = 2 if(linearr[0] == "Node Type"): if(linearr[1] == "ReceivingNode"): recvcounter = 1 if(linearr[0] == "Node ID"): if(foundOutBas): OutBasId = linearr[1] foundOutBas = 0 NodeIDToType[str(linearr[1])] = currentNodeType if(int(linearr[1]) > sumID): sumID = int(linearr[1]) if(linearr[0] == "Node Name"): if(linearr[1].find("OUT_Bas") != -1): receiveBasName = linearr[1] foundOutBas = 1 if(linearr[0] == "Node Type"): self.printsplitNodes(split,tmpID,urbfirst,urbsec,urbsplit1,urbsplit2,urbtmp,fileOut) currentNodeType = linearr[1] if(split): print "split!!!" splitlist.append(str(tmpID)) splitlist2.append([str(tmpID) + "99","0"]) NodeIDToType[str(tmpID) + "99"] = NodeIDToType[str(tmpID)] baseflowlist.append(str(tmpID) + "99") print splitlist2 urbfirst = "" urbsec = "" urbtmp = "" split = False urbsplit1 = "" urbsplit2 = "" urbansourcenode = False writebot = False writetop = False if(linearr[1] == "UrbanSourceNode"): writetop = True urbansourcenode = True if(urbansourcenode): if(linearr[0] == "Node ID"): tmpID = linearr[1] if(linearr[0] == "Areas - Total Area (ha)"): urbtmp += line writetop = False tmparea = float(linearr[1]) totalarea = totalarea + float(linearr[1]) if(linearr[0] == "Areas - Impervious (%)"): urbtmp += line imp = float(linearr[1]) totalimparea += imp * tmparea / 100 ImpIDtoImpArea[str(tmpID)] = imp * tmparea / 100 impnodes.append(tmpID) if(imp == 0): baseflowlist.append(tmpID) #EtFlux_list.append(tmpID) if(writetop): urbfirst += line if(writebot): urbsec += line if(linearr[0] == "Areas - Pervious (%)"): urbtmp += line per = float(linearr[1]) if (per < 100 and per > 0): split = True #EtFlux_list.append(tmpID) calc = True writebot = True else: fileOut.write(line) if(idfound): if(linearr[0] == "Target Node ID"): if is_primary_connection: StartNodeConnectionsPrimary[source_id] = str(linearr[1]) print "j = " + str(j) if((NodeIDToType[linearr[1]] == "BioRetentionNodeV4") or (NodeIDToType[linearr[1]] == "SwaleNode") or (NodeIDToType[linearr[1]] == "WetlandNode") or (NodeIDToType[linearr[1]] == "PondNode") or (NodeIDToType[linearr[1]] == "InfiltrationSystemNodeV4")): reclist.append(str(source_id) + "99") else: splitlist2[j][1] = str(linearr[1]) idfound = False if(linearr[0] == "Link Name"): is_primary_connection = False if linearr[1] == "Drainage Link": is_primary_connection = True if(linearr[0] == "Target Node ID"): target_id = str(linearr[1]) if is_primary_connection: StartNodeConnectionsPrimary[source_id] = target_id DrainageLinkList.append(Link(source_id,target_id)) PipeFlowLinkList.append(Link(source_id,target_id)) if(linearr[0] == "Source Node ID"): source_id = str(linearr[1]) j = -1 print len(splitlist) print "splitlist" print splitlist print len(splitlist2) print splitlist2 for ID in splitlist: j = j + 1 if(linearr[1] == ID): idfound = True break if(calc): if(imp < 100 and per < 100): urbsplit1 = "Areas - Total Area (ha)," + str(float(tmparea * imp /100)) + ",{ha}\n" urbsplit1 += "Areas - Impervious (%),100,{%}\n" urbsplit1 += "Areas - Pervious (%),0,{%}\n" urbsplit2 = "Areas - Total Area (ha)," + str(float(tmparea * per /100)) + ",{ha}\n" urbsplit2 += "Areas - Impervious (%),0,{%}\n" urbsplit2 += "Areas - Pervious (%),100,{%}\n" area = area + tmparea * (imp/100) calc = False #first line of parameter list if(linearr[0] == "Rainfall-Runoff - Impervious Area - Rainfall Threshold (mm/day)" and notread): readcatchmentlist = True if(readcatchmentlist): catchment_paramter_list.append(linearr[1]) #last line of parameter list if(linearr[0] == "Rainfall-Runoff - Groundwater Properties - Daily Deep Seepage Rate (%)"): readcatchmentlist = False notread = False if(linearr[0] == "Node Type" and linearr[1] == "WetlandNode"): WSUR = True self.createInfilNode = True self.hasOverFlow = True if(linearr[0] == "Node Type" and linearr[1] == "PondNode"): PB = True self.createInfilNode = True self.hasOverFlow = True if(linearr[0] == "Node Type" and linearr[1] == "InfiltrationSystemNodeV4"): IS = True self.createInfilNode = True self.hasOverFlow = True if(linearr[0] == "Node Type" and linearr[1] == "BioRetentionNodeV4"): BF = True self.createInfilNode = True self.hasOverFlow = True if(linearr[0] == "Node Type" and linearr[1] == "SwaleNode"): SW = True self.createInfilNode = True if(linearr[0] == "Node Type" and linearr[1] == "RainWaterTankNode"): tank = True if(linearr[0] == "Node Type" and linearr[1] == "DetentionBasinNode"): foundDetention = True deten = True self.hasOverFlow = True if(linearr[0] == "Node Type" and linearr[1] == "SedimentationBasinNode"): self.hasOverFlow = True if(linearr[0] == "Node Type" and linearr[1] == "MediaFiltrationNode"): self.hasOverFlow = True if(self.hasOverFlow and linearr[0] =="Node ID"): self.hasOverFlow = False overflowlist.append(int(linearr[1])) if(deten and linearr[0] == "Node ID"): detIds.append(int(linearr[1])) deten = False if ( tank and linearr[0] == "Node ID"): tanklist.append(linearr[1]) tank = False if (IS and linearr[0] == "Node ID"): IS = False EtFlux_list.append(linearr[1]) pipelist.append(linearr[1]) #fluxinfl_list2.append(linearr[1]) if(linearr[0] == "Node ID" and (WSUR or PB or BF)): EtFlux_list.append(linearr[1]) infillist.append(linearr[1]) pipelist.append(linearr[1]) WSUR = False PB = False BF = False if (linearr[0] == "Node ID" and (SW)): SW = False swalelist.append(linearr[1]) #fluxinfl_list.append(linearr[1]) # get all pipeflow #if((linearr[0] == "Secondary Outflow Components") and (linearr[1].find("Pipe Flow") >= 0)): #PipeFlowLinkList.append(Link(source_id,target_id)) #pipelist.append(source_id) ''' # get all fluxes if(linearr[0] == "Secondary Outflow Components" and linearr[1].find("Infiltration")): infillist.append(source_id) # get all baseflow if(linearr[0] == "Secondary Outflow Components" and linearr[1].find("Impervious Storm Flow")): baseflowlist.append(source_id) ''' for ID in impnodes: '''if(ID in StartNodeConnectionsPrimary): end_node = StartNodeConnectionsPrimary[ID] if NodeIDToType[end_node] == "PondNode": self.ImpAreaToTreatment += ImpIDtoImpArea[ID] continue if NodeIDToType[end_node] == "WetlandNode": self.ImpAreaToTreatment += ImpIDtoImpArea[ID] continue if NodeIDToType[end_node] == "DetentionBasinNode": self.ImpAreaToTreatment += ImpIDtoImpArea[ID] continue if NodeIDToType[end_node] == "InfiltrationSystemNodeV4": self.ImpAreaToTreatment += ImpIDtoImpArea[ID] continue if NodeIDToType[end_node] == "BioRetentionNodeV4": self.ImpAreaToTreatment += ImpIDtoImpArea[ID] continue if NodeIDToType[end_node] == "SwaleNode": self.ImpAreaToTreatment += ImpIDtoImpArea[ID] continue ''' if(not self.createInfilNode): self.ImpAreaToTreatment = totalimparea if(self.linkedToTreatment(ID,DrainageLinkList,NodeIDToType)): self.ImpAreaToTreatment += ImpIDtoImpArea[ID] print "DrainageLinkList" for link in DrainageLinkList: print link fileIn.close() fileOut.write("\n") print ImpIDtoImpArea print "Summary:" print "sumID: " + str(sumID) print "Area sum: " + str(area) print "ReceivingNode: " + str(receivingnodeid) print "OutBasId: " + str(OutBasId) print "receiveBasName: " + str(receiveBasName) print "Lists: " print catchment_paramter_list print "impnodes" print impnodes print "StartNodeConnection:" print StartNodeConnectionsPrimary print "Node Types List: " print NodeIDToType print "ImpIDtoImpArea" print ImpIDtoImpArea print EtFlux_list print fluxinfl_list print fluxinfl_list2 areaSumID = sumID + 1 #write all the new nodes umusic.writeMUSICcatchmentnode2(fileOut, "Pre-developed Total Runoff", "", areaSumID, 0, 0, totalarea,1, catchment_paramter_list2) umusic.writeMUSICjunction2(fileOut, "Pre-developed Baseflows", areaSumID+1, 0, 0) umusic.writeMUSIClinkToIgnore(fileOut,areaSumID,areaSumID+1) umusic.writeMUSICjunction2(fileOut, "Pre-developed Runoff Frequency", areaSumID+2, 0, 0) umusic.writeMUSIClinkToFrequenzy(fileOut,areaSumID,areaSumID+2) umusic.writeMUSICjunction2(fileOut, "Reuse and ET fluxes",areaSumID+3,0,0) if(self.createInfilNode): umusic.writeMUSICjunction2(fileOut, "Infiltration Fluxes",areaSumID+4,0,0) # if we have no treatment node except rain tank dont create and put zeros for list6 umusic.writeMUSICcatchmentnode3(fileOut, "Urbanised Catchment", "", areaSumID+5, 0, 0, totalarea,1, catchment_paramter_list) umusic.writeMUSICjunction2(fileOut, "Ignore", areaSumID+6, 0, 0) umusic.writeMUSIClinkToIgnore(fileOut,areaSumID+5,areaSumID+6) umusic.writeMUSICjunction2(fileOut, "Untreated Runoff Frequency", areaSumID+7, 0, 0) umusic.writeMUSIClinkToFrequenzy(fileOut,areaSumID+5,areaSumID+7) if(len(baseflowlist) != 0): self.hasBase = True umusic.writeMUSICjunction2(fileOut,"Baseflow",areaSumID+8,0,0) if(len(pipelist) != 0): self.hasPipe = True umusic.writeMUSICjunction2(fileOut,"Pipe Flow",areaSumID+9,0,0) if(len(infillist) != 0): self.hasInfil = True if(len(overflowlist) != 0): self.hasOverFlow = True umusic.writeMUSICjunction2(fileOut,"Overflow",areaSumID+10,0,0) if(foundDetention): for nodeid in detIds: if(self.createInfilNode): umusic.writeMUSIClinkToInfilFlux1(fileOut,nodeid,areaSumID+4) umusic.writeMUSIClinkToFlux(fileOut,nodeid,areaSumID+3) self.linkToReuse = True i = 0 for IDs in splitlist: if(splitlist2[i][1] != "0"): umusic.writeMUSIClink(fileOut,str(splitlist2[i][0]),splitlist2[i][1]) i = i + 1 for i in EtFlux_list: umusic.writeMUSIClinkToFlux(fileOut, i, areaSumID+3) self.linkToReuse = True # Link to Infiltration print "start Flux list" print fluxinfl_list print "StartNodeConnectionsPrimary" print StartNodeConnectionsPrimary for j in fluxinfl_list: # CheckIfConnectedToPond print str(j) start_node = str(j) if(str(j) in StartNodeConnectionsPrimary): end_node = StartNodeConnectionsPrimary[str(j)] print NodeIDToType[end_node] print NodeIDToType[start_node] if NodeIDToType[end_node] == "PondNode": print "PondNode Found" continue if NodeIDToType[end_node] == "WetlandNode": print "Wetland Found" continue if NodeIDToType[end_node] == "DetentionBasinNode": print "DetentionBasinNode Found" continue if NodeIDToType[end_node] == "InfiltrationSystemNodeV4": print "InfiltrationSystemNode Found" continue if NodeIDToType[end_node] == "BioRetentionNodeV4": print "BioRetentionNode Found" continue if NodeIDToType[end_node] == "SwaleNode": print "SwaleNode Found" continue print "writing link for " + str(j) #umusic.writeMUSIClinkToInfilFlux1(fileOut, j, areaSumID+4) #for k in fluxinfl_list2: #umusic.writeMUSIClinkToInfilFlux2(fileOut, k, areaSumID+4) #linknig infilflux baseflow and pipeflow nodes to receiving or outbasin node outid = 0 if(OutBasId == 0 and receivingnodeid != 0): if(self.createInfilNode): umusic.writeMUSIClinkToInfilFlux2(fileOut, areaSumID+4,int(receivingnodeid)) if(self.hasBase): umusic.writeMUSIClink(fileOut, areaSumID+8,int(receivingnodeid)) if(self.hasPipe): umusic.writeMUSIClink(fileOut, areaSumID+9,int(receivingnodeid)) if(self.hasOverFlow): umusic.writeMUSIClink(fileOut, areaSumID+10,int(receivingnodeid)) self.ReceivBas = "Receiving Node" outid = receivingnodeid if(OutBasId != 0 and receivingnodeid == 0): if(self.createInfilNode): umusic.writeMUSIClinkToInfilFlux2(fileOut, areaSumID+4,int(OutBasId)) if(self.hasBase): umusic.writeMUSIClink(fileOut, areaSumID+8,int(OutBasId)) if(self.hasPipe): umusic.writeMUSIClink(fileOut, areaSumID+9,int(OutBasId)) if(self.hasOverFlow): umusic.writeMUSIClink(fileOut, areaSumID+10,int(OutBasId)) self.ReceivBas = receiveBasName outid = OutBasId if(OutBasId != 0 and receivingnodeid != 0): if(self.createInfilNode): umusic.writeMUSIClinkToInfilFlux2(fileOut, areaSumID+4,int(receivingnodeid)) if(self.hasBase): umusic.writeMUSIClink(fileOut, areaSumID+8,int(receivingnodeid)) if(self.hasPipe): umusic.writeMUSIClink(fileOut, areaSumID+9,int(receivingnodeid)) if(self.hasOverFlow): umusic.writeMUSIClink(fileOut, areaSumID+10,int(receivingnodeid)) self.ReceivBas = "Receiving Node" outid = receivingnodeid if (OutBasId == 0 and receivingnodeid == 0): print "didnt find any receiving nodes!!!" for l in tanklist: umusic.writeTankLinkReuse(fileOut,l,areaSumID + 3) # SEI links from predeveloped and urbanised catchmens L = math.sqrt( 2 *totalarea) Ku = L * 0.75 / 60 Kp = L * 0.2 /60 print "pipe ,infil and base list" print pipelist print infillist print baseflowlist print PipeFlowLinkList #make links if(receivingnodeid != 0): #rec links to recv node for r in reclist: umusic.writeMUSIClink(fileOut,r,int(receivingnodeid)) else: if(OutBasId != 0): for r in reclist: #rec links to outbas umusic.writeMUSIClink(fileOut,r,int(OutBasId)) #pipe links if(self.hasPipe): for p in pipelist: if(self.isLastInTrain(p,PipeFlowLinkList,NodeIDToType)): # check if technology is last in train print str(p) + " is last" umusic.writeMUSIClinkPipe(fileOut,p,areaSumID+9) # if yes link it to pipeflow node # links to infil node if(self.hasInfil): for i in infillist: if(self.createInfilNode): umusic.writeMUSIClinkToInfilFlux2(fileOut,i,areaSumID+4) #links to baseflow node if(self.hasBase): for b in baseflowlist: umusic.writeMUSIClinkBase(fileOut,b,areaSumID+8) for s in swalelist: umusic.writeMUSIClinkToInfilFlux3(fileOut,s,areaSumID+4) #links to overflow if(self.hasOverFlow): for t in overflowlist: umusic.writeMUSIClinkToOverFlow(fileOut,t,areaSumID+10) #check if outbas last node or if its connected to another technology found = False techid = 0 #get tech id from successor fileIn = open(filename,"r") for line in fileIn: linearr = line.strip("\n").split(",") if(linearr[0] == "Source Node ID"): if(linearr[1] == outid): found = True if(found): if(linearr[0] == "Target Node ID"): techid = linearr[1] break fileIn.close() # get name of tech name = "" fileIn = open(filename,"r") for line in fileIn: linearr = line.strip("\n").split(",") if(linearr[0] == "Node Name"): tmpname = linearr[1] if(linearr[0] == "Node ID" and linearr[1] == techid): name = tmpname break fileIn.close() if(name != ""): self.ReceivBas = name print "techname: " + self.ReceivBas umusic.writeMUSICfooter(fileOut) fileOut.close() retvals = [] retvals.append(area) retvals.append(totalarea) return retvals
def changeMusicFile(self,filename): settings = QSettings() if(self.useUB): import ubeats_music_interface_5 as umusic else: if (settings.value("Music").toString().contains("MUSIC 5")): import ubeats_music_interface_5 as umusic else: import ubeats_music_interface as umusic workpath = settings.value("workPath").toString() + "/" if (platform.system() != "Linux"): workpath = workpath.replace("/","\\") #read start- , enddate and timestep from csv startdate = "" enddate = "" timestep = 0 counter = 0 files = self.getRainEtFile() if((self.useDefaults or self.useMusic) == False): f = open(files[0],"r") for line in f: counter = counter + 1 linearr = line.strip("\n").split(",") if (counter == 2): startdate = linearr[0].split(" ") if (counter == 3): tmp = linearr[0].split(" ")[1].split(":") tmp2 = startdate[1].split(":") timestep = int(tmp[0]) * 360 - int(tmp2[0]) * 360 timestep = timestep + (int(tmp[1]) * 60 - int(tmp2[1]) * 60) #timestep = timestep + int(tmp[2]) - int(tmp2[2]) enddate = linearr[0].split(" ")[0] startdate = startdate[0] f.close() infile = open(filename,"r") filearr = filename.split(".") outfile = open(filearr[0] + "SEI." + filearr[1] ,"w") urbansourcenode = False calcarea = False readcatchmentlist = False link = False routed = False impArea = 0.0 perArea = 0.0 area = 0.0 imp = 0.0 per = 0.0 ID = 0 recvcounter = 0 foundOutBas = 0 OutBasId = 0 receivingnodeid = 0 receiveBasName = "" catchment_paramter_list = []#[1,120,30,20,200,1,10,25,5,0] old static parameter list catchment_paramter_list2 = [self.RainThres,self.RainSoil,self.RainInitial,self.RainField,self.RainInfil,self.RainInfil2,self.RainDepth,self.RainRecharge,self.RainBaseflow,self.RainDeep] for line in infile: linearr = line.strip("\n").split(",") if (recvcounter == 2): receivingnodeid = int(linearr[1]) recvcounter = 0 if (recvcounter == 1): recvcounter = 2 if(linearr[0] == "Node Type"): if(linearr[1] == "ReceivingNode"): recvcounter = 1 if(linearr[0] == "Node ID"): if(foundOutBas): OutBasId = linearr[1] foundOutBas = 0 if(linearr[0] == "Node Name"): if(linearr[1].find("OUT_Bas") != -1): receiveBasName = linearr[1] foundOutBas = 1 if(linearr[0] == "Link Name"): link = True if(link): if(linearr[0] == "Routing"): if(linearr[1] == "Routed"): routed = True link = False if(linearr[0] == "Node Type"): if (linearr[1] == "UrbanSourceNode"): urbansourcenode = True if(urbansourcenode): if(linearr[0] == "Areas - Total Area (ha)"): area = float(linearr[1]) print "area: " + str(area) if(linearr[0] == "Areas - Impervious (%)"): imp = float(linearr[1]) print "imp: " + str(imp) if(linearr[0] == "Areas - Pervious (%)"): per = float(linearr[1]) print "per: " + str(per) calcarea = True #first line of parameter list if(linearr[0] == "Rainfall-Runoff - Impervious Area - Rainfall Threshold (mm/day)"): readcatchmentlist = True if(readcatchmentlist): catchment_paramter_list.append(linearr[1]) #last line of parameter list if(linearr[0] == "Rainfall-Runoff - Groundwater Properties - Daily Deep Seepage Rate (%)"): readcatchmentlist = False if(calcarea): impArea = impArea + (area * imp / 100) perArea = perArea + area print "perArea: " + str(perArea) print "impArea: " + str(impArea) calcarea = False UrbanSourceNode = False if(linearr[0] == "Node ID"): if(int(linearr[1]) > int(ID)): ID = int(linearr[1]) if (linearr[0] == "MeteorologicalTemplate"): if(self.useMusic): outfile.write("MeteorologicalTemplate," + workpath + self.MusicTemplateFile + ",{MLB Filename}\n") else: outfile.write("RainfallFile," + files[0] +"\n") outfile.write("PETFile," + files[1] + "\n") outfile.write("StartDate," + startdate + "\n") outfile.write("EndDate," + enddate + "\n") outfile.write("Timestep," + str(timestep) + "\n") else: outfile.write(line) umusic.writeMUSICcatchmentnodeEro(outfile,"Pre-developed Catchment",ID+1,perArea,False,catchment_paramter_list2) #pervious umusic.writeMUSICcatchmentnodeEro(outfile,"Urbanised Catchment",ID + 2,impArea,True,catchment_paramter_list) #impervious #umusic.writeMUSICcatchmentnodeEro2(outfile,"Urbanised Catchment",ID + 2, impArea+perArea,impArea/(impArea+perArea),perArea/(impArea+perArea),catchment_paramter_list) if(routed): umusic.writeMUSICjunction2(outfile,"PreJunction",ID + 3,0,0) umusic.writeMUSICjunction2(outfile,"UrbJunction",ID + 4,0,0) umusic.writeMUSIClinkSEI(outfile,ID+1,ID+3,round(math.sqrt(perArea*10000)/60)) umusic.writeMUSIClinkSEI(outfile,ID+2,ID+4,round(math.sqrt(impArea*10000)/60)) infile.close() outfile.close() print "Impervious Area: " + str(impArea) print "Pervious Area: " + str(perArea) #check for tech after out receiving name = "" outid = 0 if(OutBasId == 0 and receivingnodeid != 0): outid = receivingnodeid name = "Receiving Node" if(OutBasId != 0 and receivingnodeid == 0): outid = OutBasId name = receiveBasName if(OutBasId != 0 and receivingnodeid != 0): outid = receivingnodeid name = "Receiving Node" infile = open(filename,"r") found = False techid = 0 for line in infile: linearr = line.strip("\n").split(",") if(linearr[0] == "Source Node ID"): if(linearr[1] == outid): found = True if(found): if(linearr[0] == "Target Node ID"): techid = linearr[1] break infile.close() # get name of tech infile = open(filename,"r") for line in infile: linearr = line.strip("\n").split(",") if(linearr[0] == "Node Name"): tmpname = linearr[1] if(linearr[0] == "Node ID" and linearr[1] == techid): name = tmpname break infile.close() print "tech name: " + name self.writeMusicConfigFile(routed,name)