# Copyright (c) 2012 Santosh Philip
# =======================================================================
# Distributed under the MIT License.
# (See accompanying file LICENSE or copy at
# http://opensource.org/licenses/MIT)
# =======================================================================
"""get the loop data to draw the diagram
Other notes:
- tested for idd version 6.0
- when E+ is updated, run versionchangecheck.py for the following objects
uses the following objects
['plantloop', ]
"""
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals
[docs]def plantloopfieldlists(data):
"""return the plantloopfield list"""
objkey = "plantloop".upper()
numobjects = len(data.dt[objkey])
return [
[
"Name",
"Plant Side Inlet Node Name",
"Plant Side Outlet Node Name",
"Plant Side Branch List Name",
"Demand Side Inlet Node Name",
"Demand Side Outlet Node Name",
"Demand Side Branch List Name",
]
] * numobjects
[docs]def plantloopfields(data, commdct):
"""get plantloop fields to diagram it"""
fieldlists = plantloopfieldlists(data)
objkey = "plantloop".upper()
return extractfields(data, commdct, objkey, fieldlists)
[docs]def branchlist2branches(data, commdct, branchlist):
"""get branches from the branchlist"""
objkey = "BranchList".upper()
theobjects = data.dt[objkey]
fieldlists = []
objnames = [obj[1] for obj in theobjects]
for theobject in theobjects:
fieldlists.append(list(range(2, len(theobject))))
blists = extractfields(data, commdct, objkey, fieldlists)
thebranches = [
branches for name, branches in zip(objnames, blists) if name == branchlist
]
return thebranches[0]
[docs]def branch_inlet_outlet(data, commdct, branchname):
"""return the inlet and outlet of a branch"""
objkey = "Branch".upper()
theobjects = data.dt[objkey]
theobject = [obj for obj in theobjects if obj[1] == branchname]
theobject = theobject[0]
inletindex = 6
outletindex = len(theobject) - 2
return [theobject[inletindex], theobject[outletindex]]
[docs]def splittermixerfieldlists(data, commdct, objkey):
"""docstring for splittermixerfieldlists"""
objkey = objkey.upper()
objindex = data.dtls.index(objkey)
objcomms = commdct[objindex]
theobjects = data.dt[objkey]
fieldlists = []
for theobject in theobjects:
fieldlist = list(range(1, len(theobject)))
fieldlists.append(fieldlist)
return fieldlists
[docs]def splitterfields(data, commdct):
"""get splitter fields to diagram it"""
objkey = "Connector:Splitter".upper()
fieldlists = splittermixerfieldlists(data, commdct, objkey)
return extractfields(data, commdct, objkey, fieldlists)
[docs]def mixerfields(data, commdct):
"""get mixer fields to diagram it"""
objkey = "Connector:Mixer".upper()
fieldlists = splittermixerfieldlists(data, commdct, objkey)
return extractfields(data, commdct, objkey, fieldlists)
[docs]def repeatingfields(theidd, commdct, objkey, flds):
"""return a list of repeating fields
fld is in format 'Component %s Name'
so flds = [fld % (i, ) for i in range(n)]
does not work for 'fields as indicated'"""
# TODO : make it work for 'fields as indicated'
if type(flds) != list:
flds = [flds] # for backward compatability
objindex = theidd.dtls.index(objkey)
objcomm = commdct[objindex]
allfields = []
for fld in flds:
thefields = []
indx = 1
for i in range(len(objcomm)):
try:
thefield = fld % (indx,)
if objcomm[i]["field"][0] == thefield:
thefields.append(thefield)
indx = indx + 1
except KeyError as err:
pass
allfields.append(thefields)
allfields = list(zip(*allfields))
return [item for sublist in allfields for item in sublist]
[docs]def objectcount(data, key):
"""return the count of objects of key"""
objkey = key.upper()
return len(data.dt[objkey])
[docs]def getfieldindex(data, commdct, objkey, fname):
"""given objkey and fieldname, return its index"""
objindex = data.dtls.index(objkey)
objcomm = commdct[objindex]
for i_index, item in enumerate(objcomm):
try:
if item["field"] == [fname]:
break
except KeyError as err:
pass
return i_index
[docs]def getadistus(data, commdct):
"""docstring for fname"""
objkey = "ZoneHVAC:AirDistributionUnit".upper()
objindex = data.dtls.index(objkey)
objcomm = commdct[objindex]
adistutypefield = "Air Terminal Object Type"
ifield = getfieldindex(data, commdct, objkey, adistutypefield)
adistus = objcomm[ifield]["key"]
return adistus
[docs]def makeadistu_inlets(data, commdct):
"""make the dict adistu_inlets"""
adistus = getadistus(data, commdct)
# assume that the inlet node has the words "Air Inlet Node Name"
airinletnode = "Air Inlet Node Name"
adistu_inlets = {}
for adistu in adistus:
objkey = adistu.upper()
objindex = data.dtls.index(objkey)
objcomm = commdct[objindex]
airinlets = []
for i, comm in enumerate(objcomm):
try:
if comm["field"][0].find(airinletnode) != -1:
airinlets.append(comm["field"][0])
except KeyError as err:
pass
adistu_inlets[adistu] = airinlets
return adistu_inlets