Example #1
0
    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)
Example #2
0
	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
Example #3
0
	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
Example #4
0
    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)