Beispiel #1
0
def chooseNetwork(showTemplates=True):
    """
    console Interface to choose a VascularNetwork for simulation / vascularPolynomial Chaos
    """
    dirNamesTemplate = []
    prettyPringOffset = 0
    if showTemplates:
        # network templates
        templatePath = mFPH.getDirectory('networkXmlFileTemplateDirectory', '',
                                         '', 'read')
        dirNamesTemplate = [
            d for d in os.listdir(templatePath) if '.' not in d
        ]
        prettyPrintList("\n Template Networks: \n", dirNamesTemplate)
        prettyPringOffset = len(dirNamesTemplate)
    # working directory
    workingDirectoryPath = mFPH.getDirectory('workingDirectory', '', '',
                                             'read')
    dirWorkingDirectory = [
        d for d in os.listdir(workingDirectoryPath) if '.' not in d
    ]
    prettyPrintList("\n WorkingDirectory Networks: \n",
                    dirWorkingDirectory,
                    indexOffSet=prettyPringOffset)

    dirNames = dirNamesTemplate + dirWorkingDirectory
    userInput = userInputEvaluationInt(len(dirNames), 0)
    print ""
    print '====================================='
    return dirNames[userInput]
    def __init__(self, networkName = None, dataNumber = None, connect = False):

        Visualisation3DGUI.__init__(self)

        # load functions
        self.networkName = networkName
        self.dataNumber = dataNumber
        self.connect = connect

        # vascularNewtor Instance
        self.vascularNetwork = None

        # dictionary with 3D vessels
        self.vessels3D = {}
        self.nPointsPerCircle = 8  # points for the circle at one gridpoint should bee around 8-16-32

        # vessel area/wall
        self.areaFactor         = [2]
        self.areaFactorMaximum  = 200
        self.wallMovement       = [True]

        # look up table
        self.pressureMaxima      = None
        self.pressureMaximaSplit = None
        self.cLUT = None # color look up table class
        self.quantityLUT = ['Pressure']

        # enable waveSplit LUT
        self.waveSplit = [False] # us an array as it is behaving like a pointer

        # simulation timing and update
        self.updateTime         = 1./60.
        self.totalTime          = 0
        self.timeStepsTotal     = 50 # get this from solution length e.g. len(area)
        self.timeStepCurrent    = 0
        self.timeStepIncrement  = 1 # time step increment from [1, ... self.totalTimeSteps-1 ]
        self.timeStepStart      = 0
        self.timeStepStop       = 50

        ## create movie
        self.recordMovieData = False
        self.movieCount = 0
        self.oneCycle = False

        self.templateMovDataDirectory = ''.join([cur,'/.movieTemplateData'])

        self.movieSaveDirectory = mFPH.getDirectory('movieDirectory', networkName, dataNumber, 'write')

        self.movieNumber    = 0
        self.movieFileType  = '.mp4'

        ## create screen shot
        self.screenShotNumber        = 0
        self.screenShotDataDirectory = mFPH.getDirectory('screenshotDirectory', networkName, dataNumber, 'write')

        self.initialzeVisualisation()
Beispiel #3
0
def chooseSolutionDataCase():
    """
    console Interface to choose a vascular1DFlow simulation case for e.g. Visualisation
    Output:
        networkName <string>
        dataNumber  <string>
    """
    workingDirectory = mFPH.getDirectory('workingDirectory', '', '', 'read')
    networkCases = [d for d in os.listdir(workingDirectory) if '.' not in d]

    fileNameDataNumber = []

    indexOffSet = 0
    for networkName in networkCases:
        simulationCaseDict = mFPH.getSimulationCaseDescriptions(
            networkName)  #, exception = 'No')
        networkDirectory = mFPH.getDirectory('networkXmlFileXXXDirectory',
                                             networkName, 'xxx', 'read')

        listToPrint = []
        if simulationCaseDict != None:
            first = True
            for root, dirs, files in os.walk(networkDirectory):
                for file in files:
                    if ".hdf5" in file and "uqsa" not in file:
                        solutionDataFile = file.split('.')[0]
                        dataNumber = solutionDataFile.split(
                            '_SolutionData_')[-1]
                        if len(dataNumber) == 3:
                            if dataNumber not in simulationCaseDict:
                                description = "'{}' not listed in simulation descriptions of network '{}'.".format(
                                    dataNumber, networkName)
                            else:
                                description = simulationCaseDict[dataNumber]

                            listToPrint.append("{} : {}".format(
                                dataNumber, description))
                            fileNameDataNumber.append(
                                [networkName, dataNumber])

        prettyPrintList("\n        {}".format(networkName),
                        listToPrint,
                        indexOffSet=indexOffSet)
        indexOffSet = indexOffSet + len(listToPrint)

    if len(fileNameDataNumber) == 0:
        print "No solutionCases available, system exit"
        exit()

    question = "  Choose simulation case you want to open according to its number, (q)-quit: "
    userInput = userInputEvaluationInt(len(fileNameDataNumber), 0, question)
    networkName = fileNameDataNumber[userInput][0]
    dataNumber = fileNameDataNumber[userInput][1]

    return networkName, dataNumber
Beispiel #4
0
def findExistingDataNumbers(networkName):
    """
    evaluates exiting data numbers of a network
    
    Args: networkName (str) := networkName
    
    Returns: existingDataNumbers (list)
    """
    # TODO: better way to handle this case?
    destinationNetworkName = networkName
    if "_template" in networkName:
        destinationNetworkName = ''.join(networkName.split("_template"))
        try:
            _ = mFPH.getFilePath('simulationDescriptionFile',
                                 destinationNetworkName,
                                 "xxx",
                                 'read',
                                 exception='No')
        except:
            _ = mFPH.getFilePath('simulationDescriptionFile',
                                 destinationNetworkName, "xxx",
                                 'write')  #, exception = 'No')

    simulationCaseDict = mFPH.getSimulationCaseDescriptions(
        destinationNetworkName)  #, exception = 'No')
    print(simulationCaseDict)
    networkDirectory = mFPH.getDirectory('networkXmlFileXXXDirectory',
                                         destinationNetworkName, 'xxx', 'read')

    existingDataNumbers = []

    for root, dirs, files in os.walk(networkDirectory):
        for file in files:
            if ".hdf5" in file and "_SolutionData_" in file:
                solutionDataFile = file.split('.')[0]
                dataNumber = solutionDataFile.split('_SolutionData_')[-1]
                if len(dataNumber) == 3:
                    existingDataNumbers.append(dataNumber)
    return existingDataNumbers
Beispiel #5
0
def main():
    """
    vnc main function
    
    menu and all options in one big function
    
    need refactoring:
        transformed into class 
        splitted in single member functions
        thus give possibility to make gui
        xdot on click should call function in class vncMain
        vascularNetwork should never be deleted ?!
        modules need to be imported as modules !!
    """
    # set graphs directory
    graphPath = str(cur + '/NetworkFiles/')

    # create a new window
    window = MyDotWindow()
    window.connect('destroy', gtk.main_quit)
    window.show()

    #create the main graph instance of a graph class
    mainGraph = Graph()

    #START THE MAIN LOOP
    menuInput = ""
    subMenuInput = ''

    # create vascularNetwork instance
    vascularNetwork = VascularNetwork()
    networkName = None
    k = None
    while menuInput != "q":
        menuInput = ""
        print ""
        print '====================================='
        print '#    VascularNetworkCreator_v2.1    #'
        print '====================================='
        print " [a] - add vessel to network"
        print " [d] - delete vessel in network"
        print " [n] - new network"
        print " [b] - set boundary conditions"
        print " [f] - set global fluid properties"
        print " [l] - load network"
        print " [s] - save network"
        print " [u] - update XML from CSV file(s)"
        print " [g] - print network graph"
        print " [p] - print network informations"
        print " [q] - quit"
        print ""
        print '===========Parameter Units==========='
        print ' NOTE! All parameter units are in the'
        print ' Pa, seconds, and meters system'
        print ' i.e. not mmHg, seconds, cm, or dynes,'
        print ' seconds, grams'
        print '====================================='
        print '  current network: ', networkName
        while menuInput not in ("l", "b", "q", "a", "s", "g", "f", "d", "u",
                                'n', 'p'):
            menuInput = raw_input("what to do? ")

        if menuInput == "a":
            print "Add new vessel"

            existing = False
            vesselId = raw_input(" enter the vessel id:  ")
            while True:
                try:
                    vesselId = int(vesselId)
                    if vesselId not in vascularNetwork.vessels:
                        break
                    else:
                        existing = True
                except ValueError:
                    print "TYPE-ERROR: vessel id must be type(int) not type(string)"
                    vesselId = raw_input(" enter non existing id: ")
                if existing == True:
                    print " the vessel id exists already enter a new one"
                    vesselId = raw_input(" enter non existing id: ")
                    existing = False

            if vascularNetwork.vessels != {}:

                existing = False
                mother = raw_input(" enter existing mother id:  ")
                while True:
                    try:
                        mother = int(mother)
                        if mother in vascularNetwork.vessels.keys(
                        ) and vascularNetwork.vessels[
                                mother].rightDaughter == None:
                            break
                        else:
                            existing = True
                    except ValueError:
                        print "TYPE-ERROR: mother id must be type(int) not type(string)"
                        mother = raw_input(" enter existing mother id:  ")
                    if existing == True:
                        if mother not in vascularNetwork.vessels:
                            print " there exists no vessel with this id"
                        else:
                            print "   only bifurcations possible!"
                        mother = raw_input(" enter existing mother id:  ")
                        existing = False

                if vascularNetwork.vessels[mother].leftDaughter == None:
                    vascularNetwork.vessels[mother].leftDaughter = vesselId
                else:
                    vascularNetwork.vessels[mother].rightDaughter = vesselId

            vascularNetwork.addVessel(vesselId)
            print " define vessel compliance!"

            inputType = '0'
            print "     available compliance types:"
            print ""
            # get all defined boundaryConditions from constants-dict save as bcTypes
            complianceTypes = nxml.vesselComplianceElements.keys()
            compTypes = ['default (Hayashi)']
            for compType in complianceTypes:
                compTypes.append(compType)
            # show all compliance types in the compTypes
            index = 0
            for key in compTypes:
                print "       [", str(index).rjust(2), "]    ", key
                index = index + 1
            # get user input and check if it was correct to define the bcType
            existing = False
            inputType = raw_input("      choose type ")
            while True:
                # check if right input
                try:
                    inputType = int(inputType)
                    if inputType in np.linspace(0,
                                                len(compTypes) - 1,
                                                len(compTypes)):
                        break
                    else:
                        existing = True
                # if not int but string
                except ValueError:
                    print "      TYPE-ERROR: vessel id must be type(int) not type(string)"
                    inputType = (raw_input("      choose type "))
                # if int but to low or high
                if existing == True:
                    print "       the type does not exist"
                    inputType = (raw_input("      choose type "))
                    existing = False

            compType = compTypes[int(inputType)]

            if compType != 'default (Hayashi)':
                vesselData = {'complianceType': compType}
                nxml.vesselComplianceElements[compType]

                print ""
                print "      set values for the Compliance: ", compType
                question = True
                for arg in nxml.vesselComplianceElements[compType]:
                    if arg != 'complianceType':
                        currValue = raw_input(
                            str("            set value for " + str(arg) + ' '))
                        test = True
                        try:
                            float(currValue)
                        except:
                            print '            VALUE or TYPE ERROR, set to None'
                            test = False
                        if test == True: vesselData[arg] = (float(currValue))
                        else: vesselData[arg] = None
                vascularNetwork.updateNetwork(
                    {'vesselData': {
                        vesselId: vesselData
                    }})

            mainGraph.update_graph(vascularNetwork, window)

        if menuInput == "d":
            print "Delete a vessel and all its daugthers"
            if vascularNetwork.vessels.keys() != []:

                existing = False
                vesselId = raw_input(" enter existing vessel id: ")
                while True:
                    try:
                        vesselId = int(vesselId)
                        if vesselId in vascularNetwork.vessels:
                            break
                        else:
                            existing = True
                    except ValueError:
                        print "TYPE-ERROR: vessel id must be type(int) not type(string)"
                        vesselId = raw_input(" enter existing vessel id: ")
                    if existing == True:
                        print " the vessel does not exist"
                        vesselId = raw_input(" enter existing vessel id: ")
                        existing = False

                #travers the tree starting with the vessel and collect all ids
                toDelete = findAllDaughters(vascularNetwork, vesselId)

                toDelete.append(vesselId)

                for vesselToDelete in toDelete:
                    vascularNetwork.deleteVessel(vesselToDelete)

                # empty the graph to redraw it
                if vascularNetwork.vessels.keys() == []:
                    mainGraph.update_graph(None, window)
                    vascularNetwork = VascularNetwork()
                else:
                    mainGraph.update_graph(vascularNetwork, window)

            else:
                print " there are no vessels to delete"

        elif menuInput == "n":
            print "new network"
            question = raw_input(
                " are u sure to delete all current data? [y] - yes: ")
            if question == 'y':
                # delete vascularNetwork
                del vascularNetwork
                # create vascularNetwork instance
                mainGraph.update_graph(None, window)
                vascularNetwork = VascularNetwork()

        elif menuInput == "p":
            vascularNetwork.showVessels()
            vascularNetwork.showNetwork()
            vascularNetwork.randomInputManager.printOutInfo()

        elif menuInput == "g":
            print mainGraph.getGraph()

        elif menuInput == "b":
            subMenuInput = ''

            while subMenuInput not in ['1', '2', '3', 'b']:
                if vascularNetwork.getVariableValue('vessels') == {}:
                    print " there are no vessels defined and thus no boundarys available"
                    break
                else:
                    # evaluate boundarys in Network
                    boundarys = []
                    notDefinedBoundarys = []

                    boundarys.extend(vascularNetwork.boundaryVessels)
                    if vascularNetwork.root != None and vascularNetwork.root not in boundarys:
                        boundarys.append(vascularNetwork.root)

                    boundarysSaved = vascularNetwork.boundaryConditions.keys()

                    # update saved boundary conditions
                    for boundarysCurrent in boundarys:
                        if boundarysCurrent not in boundarysSaved:
                            print " boundary added to vascularNetwork"
                            vascularNetwork.boundaryConditions[
                                boundarysCurrent] = []
                            boundarysSaved.append(boundarysCurrent)

                        if vascularNetwork.boundaryConditions[
                                boundarysCurrent] == []:
                            notDefinedBoundarys.append(boundarysCurrent)

                    nonBoundarys = list(
                        set(boundarys).symmetric_difference(
                            set(boundarysSaved)))
                    for nonBoundary in nonBoundarys:
                        print " boundary removed from vacularNetwork"
                        del (vascularNetwork.boundaryConditions[nonBoundary])
                        if nonBoundary in notDefinedBoundarys:
                            notDefinedBoundarys.remove(nonBoundary)

                    vascularNetwork.evaluateConnections()
                    print ""
                    print "    sub menu: boundary conditions"
                    print ""
                    print "     [1] - show  boundary conditions"
                    print "     [2] - add   boundary condition "
                    print "     [3] - del   boundary condition "
                    #                     print "     [4] - load  boundary conditions from CSV"
                    #                     print "     [5] - write boundary conditions to CSV"
                    print "     [b] - back to the main menu"
                    print ""
                    subMenuInput = raw_input("     what to do? ")

                    if subMenuInput == '1':
                        print "     boundary conditions"
                        pprint.pprint(vascularNetwork.boundaryConditions)
                        subMenuInput = ''

                    elif subMenuInput == '2' and vascularNetwork.root != []:

                        print "     add   boundary condition"
                        print ""

                        definedBoundarys = list(
                            set(notDefinedBoundarys).symmetric_difference(
                                set(vascularNetwork.boundaryConditions.keys()))
                        )
                        print "     vessels with defined boundary condition:"
                        print "       ", '  '.join(
                            str(i) for i in definedBoundarys)

                        print "     vessels with undefined boundary condition:"
                        print "       ", '  '.join(
                            str(i) for i in notDefinedBoundarys)
                        print ""

                        existing = False
                        vesselId = raw_input(" enter existing vessel id: ")
                        while True:
                            try:
                                vesselId = int(vesselId)
                                if vesselId in vascularNetwork.vessels:
                                    break
                                else:
                                    existing = True
                            except ValueError:
                                print " TYPE-ERROR: vessel id must be type(int) not type(string)"
                                vesselId = raw_input(
                                    " enter existing vessel id: ")
                            if existing == True:
                                print " the vessel does not exist"
                                vesselId = raw_input(
                                    " enter existing vessel id: ")
                                existing = False

                        inputType = '0'
                        print "     add boundary condition type:"
                        print ""
                        # get all defined boundaryConditions from constants-dict save as bcTypes
                        bcTypesAll = nxml.bcTagsClassReferences.keys()
                        bcTypes = []
                        for bcType in bcTypesAll:
                            if "_" is not bcType[0]:
                                bcTypes.append(bcType)
                        bcTypes.sort()
                        # show all boundaryConditions in the bcTypes
                        index = 0
                        for key in bcTypes:
                            print "       [", str(index).rjust(2), "]    ", key
                            index = index + 1
                        # get user input and check if it was correct to define the bcType
                        existing = False
                        inputType = raw_input("      choose type ")
                        while True:
                            # check if right input
                            try:
                                inputType = int(inputType)
                                if inputType in np.linspace(
                                        0,
                                        len(bcTypes) - 1, len(bcTypes)):
                                    break
                                else:
                                    existing = True
                            # if not int but string
                            except ValueError:
                                print "      TYPE-ERROR: vessel id must be type(int) not type(string)"
                                inputType = (raw_input("      choose type "))
                            # if int but to low or high
                            if existing == True:
                                print "       the type does not exist"
                                inputType = (raw_input("      choose type "))
                                existing = False

                        bcType = bcTypes[int(inputType)]

                        boundaryInstance = eval(
                            nxml.bcTagsClassReferences[bcType])()
                        boundaryDataDict = {}
                        boundaryDataDict['name'] = bcType

                        print ""
                        print "      set values for the BC condition: ", bcType
                        print "          enter 'b' for the first value to skip this procedure"
                        question = True
                        for arg in nxml.boundaryConditionElements[bcType]:
                            if question == True:
                                currValue = raw_input(
                                    str("            set value for " +
                                        str(arg) + ' '))
                                if currValue == 'b': question = False
                                test = True
                                try:
                                    float(currValue)
                                except:
                                    print '            VALUE or TYPE ERROR, set to None'
                                    test = False
                                if test == True:
                                    boundaryDataDict[arg] = (float(currValue))
                                else:
                                    boundaryDataDict[arg] = None
                            else:
                                boundaryDataDict[arg] = None
                        if len(vascularNetwork.boundaryConditions.keys()) == 1:
                            print "      set position of the BC condition"
                            position = '2'
                            while position not in ['1', '0']:
                                position = raw_input(
                                    "          enter '0' for the start or '1' for the end of the vessel "
                                )
                            if position == '1':
                                #bcType = ''.join(['_',bcType])
                                boundaryDataDict['name'] = ''.join(
                                    ['_', bcType])

                        print bcType, boundaryDataDict

                        boundaryInstances = []
                        boundaryInstance.update(boundaryDataDict)
                        boundaryInstances.append(boundaryInstance)

                        if vesselId not in vascularNetwork.boundaryConditions.keys(
                        ):
                            vascularNetwork.boundaryConditions[
                                vesselId] = boundaryInstances
                        else:
                            vascularNetwork.boundaryConditions[
                                vesselId].extend(boundaryInstances)

                        #if vascularNetwork.getVariableValue('root') != None:
                        mainGraph.update_graph(vascularNetwork, window)
                        subMenuInput = ''

                    elif subMenuInput == '3' and vascularNetwork.root != []:
                        print "     delete boundary condition"
                        print ""
                        pprint.pprint(vascularNetwork.boundaryConditions)

                        vesselId = -1
                        while vesselId not in vascularNetwork.boundaryConditions.keys(
                        ):
                            vesselId = int(
                                raw_input("      choose vessel id "))

                        bcs = vascularNetwork.boundaryConditions[vesselId]
                        if bcs != []:
                            print ""
                            index = 0
                            for bc in bcs:
                                print "       [", str(index).rjust(
                                    2), "]    ", bc.name
                                index = index + 1
                            print ""
                            inType = '0'
                            while inType not in np.linspace(
                                    0,
                                    len(bcs) - 1, len(bcs)):
                                inType = int(
                                    raw_input(
                                        "      choose condition to delete "))

                            print ""
                            print "     boundary condition ", bcs[
                                inType], " removed!"
                            print ""
                            vascularNetwork.boundaryConditions[
                                vesselId].remove(bcs[inType])

                            mainGraph.update_graph(vascularNetwork, window)
                        else:
                            print "     nothing to delete!"
                        subMenuInput = ''

#                     elif subMenuInput == '4' and vascularNetwork.root != []:
#                         print "     load  boundary conditions from CSV"
#                         print ""
#                         networkName = enterNetworkName(networkName)
#                         boundaryConditions,boundaryConditionPolyChaos = mCSV.readBCFromCSV(networkName)
#                         vascularNetwork.update({'boundaryConditions':boundaryConditions,
#                                                 'boundaryConditionPolyChaos':boundaryConditionPolyChaos})
#
#                         mainGraph.update_graph(vascularNetwork, window)
#
#                     elif subMenuInput == '5' and vascularNetwork.root != []:
#                         print "     write boundary conditions to CSV"
#                         print ""
#                         networkName = enterNetworkName(networkName)
#                         boundaryConditions = vascularNetwork.getVariableValue('boundaryConditions')
#                         boundaryConditionPolyChaos = deepcopy(vascularNetwork.getVariableValue('boundaryConditionPolyChaos'))
#                         mCSV.writeBCToCSV(networkName, boundaryConditions, boundaryConditionPolyChaos)

                    elif subMenuInput == 'b':
                        break

        elif menuInput == "f":

            subMenuInput = ''
            while subMenuInput not in ["1", "2", "b"]:
                print ""
                print "    sub menu: set global fluid properties"
                print ""
                print "     [1] - set all"
                print "     [2] - set individual"
                print "     [b] - back to the main menu"
                print ""
                print "    current fluid properties:"
                for key, value in vascularNetwork.globalFluid.iteritems():
                    print "     {0:20}     {1:10}  {2:10}".format(
                        key, value, variableUnits[key])
                print ""
                subMenuInput = raw_input("    what to do? ")

                if subMenuInput == '1':
                    print "     set all fluid properties"

                    for key in vascularNetwork.globalFluid.keys():
                        inputType = "1"
                        typeFalse = False
                        while typeFalse == False:
                            try:
                                inputType = raw_input(
                                    "      type value for property: {} with unit {} : "
                                    .format(key, variableUnits[key]))
                                inputType = float(inputType)
                                typeFalse = True
                                vascularNetwork.globalFluid[key] = inputType
                            except:
                                pass
                    subMenuInput = ''

                elif subMenuInput == '2':
                    print "     set individual fluid property:"
                    i = 0
                    properties = vascularNetwork.globalFluid.keys()
                    for property_i in properties:
                        print "          [", i, '] - ', property_i
                        i = 1 + i
                    inputType = 0
                    while inputType not in [
                            str(i) for i in range(0, len(properties))
                    ]:
                        inputType = raw_input("      choose property to set ")

                    inputProperty = ""
                    inputFalse = False
                    while inputFalse == False:
                        try:
                            inputProperty = raw_input(
                                "      type value for property: {} with unit {} : "
                                .format(
                                    properties[int(inputType)],
                                    variableUnits[properties[int(inputType)]]))
                            inputProperty = float(inputProperty)
                            vascularNetwork.globalFluid[properties[int(
                                inputType)]] = inputProperty
                            inputFalse = True
                        except:
                            pass
                    subMenuInput = ''

                elif subMenuInput == 'b':
                    break

        elif menuInput == "l":
            try:
                vncRescentNetworksFile = open(
                    mFPH.getFilePath('vncRescentNetworksFile', 'networkName',
                                     'xxx', 'read'), 'rb')
                recentNetworkNames = cPickle.load(vncRescentNetworksFile)
                vncRescentNetworksFile.close()
            except:
                recentNetworkNames = []

            subMenuInput = ''

            while subMenuInput not in ["1", "2", "3", '5', '6',
                                       "b"]:  #["1","2","3",'4','5','6',"b"]:

                print ""
                print "    sub menu: load data"
                print ""
                print "     [1] - load network from XML"
                print "     [2] - load template network"
                print "     [3] - load vessel data from CSV"
                #print "     [4] - load vessel data and boundary conditions from CSV"
                print "     [4] - "
                print "     [5] - load network from SolutionData"
                #print "     [6] - load random inputs from CSV"
                print "     [b] - back to the main menu"
                print ""

                subMenuInput = raw_input("what to do? ")

                if subMenuInput in ["1", "2", "3", '5']:
                    print ""
                    print "         recently used networks"
                    i = 1
                    for name in recentNetworkNames:
                        print "          [", i, '] - ', name
                        i = 1 + i
                    print ""

                if subMenuInput == '1':
                    print "     load from XML\n"

                    networkName = enterNetworkName(
                        networkName, recentNetworkNames=recentNetworkNames)
                    if networkName == None: break

                    # delete the old network
                    del vascularNetwork

                    #load the new network
                    try:
                        vascularNetwork = mXML.loadNetworkFromXML(networkName)
                    except ValueError as e:
                        mainGraph.update_graph(None, window)
                        vascularNetwork = VascularNetwork()
                        print "\n  could not load network, it does not exist or the file is not up-to-date! \n"
                        print(str(e))
                        #if networkName in recentNetworkNames:
                        #    recentNetworkNames.remove(networkName)
                        networkName = None

                        #vncRescentNetworksFile = open(mFPH.getFilePath('vncRescentNetworksFile', 'networkName', 'xxx', 'write'),'wb')
                        # store pickle
                        #cPickle.dump(recentNetworkNames, vncRescentNetworksFile, protocol=2)
                        #vncRescentNetworksFile.close()

                        break

                    if networkName != None:
                        mainGraph.update_graph(vascularNetwork, window)
                    break

                elif subMenuInput == '2':
                    print "\n     load template network:\n"

                    # network templates
                    templatePath = mFPH.getDirectory(
                        'networkXmlFileTemplateDirectory', '', '', 'read')

                    dirNamesTemplate = [
                        d for d in os.listdir(templatePath) if '.' not in d
                    ]
                    for index, dirName in enumerate(dirNamesTemplate):
                        print "        [ {:3} ] - {}".format(index, dirName)
                    print ""
                    indexChoosen = None
                    while indexChoosen not in [
                            str(i) for i in xrange(len(dirNamesTemplate))
                    ]:
                        indexChoosen = raw_input(
                            "     Insert index of network: ")

                    templateNetworkName = dirNamesTemplate[int(indexChoosen)]
                    #load the new network

                    del vascularNetwork
                    # delete the old network
                    try:
                        vascularNetwork = mXML.loadNetworkFromXML(
                            templateNetworkName)
                        vascularNetwork.name = None
                        networkName = None
                    except:
                        mainGraph.update_graph(None, window)
                        vascularNetwork = VascularNetwork()
                        print "\n  could not load network, it does not exist! \n"
                        if networkName in recentNetworkNames:
                            recentNetworkNames.remove(networkName)
                        networkName = None
                        vncRescentNetworksFile = open(
                            mFPH.getFilePath('vncRescentNetworksFile',
                                             'networkName', 'xxx', 'write'),
                            'wb')
                        # store pickle
                        cPickle.dump(recentNetworkNames,
                                     vncRescentNetworksFile,
                                     protocol=2)
                        vncRescentNetworksFile.close()
                        break
                    mainGraph.update_graph(vascularNetwork, window)
                    break

                elif subMenuInput == '3':
                    print "     load vessel data from CSV - non existing vessels are added automatically"
                    print ""
                    networkName = enterNetworkName(
                        networkName, recentNetworkNames=recentNetworkNames)
                    if networkName == None: break

                    vesselData = mCSV.readVesselDataFromCSV(networkName)
                    if vesselData == None:
                        print "\n  could not load network csv, it does not exist! \n"
                    else:
                        vascularNetwork.updateNetwork(vesselData)
                        mainGraph.update_graph(vascularNetwork, window)
                    break

#                 elif subMenuInput == '4':
#                     print "     load vessel data and boundary conditions from CSV"
#                     networkName = enterNetworkName(networkName, recentNetworkNames = recentNetworkNames)
#                     if networkName == None:break
#
#                     vascularNetwork.updateNetwork(mCSV.readVesselDataFromCSV(networkName))
#                     boundaryConditions,boundaryConditionPolyChaos = mCSV.readBCFromCSV(networkName)
#                     vascularNetwork.update({'boundaryConditions':boundaryConditions,
#                                             'boundaryConditionPolyChaos':boundaryConditionPolyChaos})
#
#                     mainGraph.update_graph(vascularNetwork, window)
#                     break

                elif subMenuInput == '5':
                    print "     load network from SolutionData"
                    try:
                        networkName, dataNumber = mStartUp.chooseSolutionDataCase(
                        )

                        vascularNetwork = mXML.loadNetworkFromXML(
                            networkName, dataNumber=dataNumber)
                        vascularNetwork.name = None
                        networkName = None
                        mainGraph.update_graph(vascularNetwork, window)

                    except:
                        print "\n ERROR occured could not open requested network, file does not exist or is out dated"
                    break

#                 elif subMenuInput == '6':
#                     print "     load random input from CSV"
#                     networkName = enterNetworkName(networkName)
#                     mCSV.readRandomInputsfromCSV(networkName, vascularNetwork.randomInputManager)
#                     vascularNetwork.randomInputManager.linkRandomInputUpdateFunctions(vascularNetwork)

                elif subMenuInput == 'b':
                    break

            if networkName != None:
                if networkName not in recentNetworkNames:
                    recentNetworkNames.insert(0, networkName)
                else:
                    recentNetworkNames.remove(networkName)
                    recentNetworkNames.insert(0, networkName)
                if len(recentNetworkNames) > 9: recentNetworkNames.pop(-1)

                vncRescentNetworksFile = open(
                    mFPH.getFilePath('vncRescentNetworksFile', 'networkName',
                                     'xxx', 'write'), 'wb')
                # store pickle
                cPickle.dump(recentNetworkNames,
                             vncRescentNetworksFile,
                             protocol=2)
                vncRescentNetworksFile.close()

        elif menuInput == "s":
            subMenuInput = ''
            print ""
            print "    sub menu: save data"
            print ""
            print "     [1] - write to XML"
            print "     [2] - write vessel data to CSV"
            #print "     [3] - write vessel data and boundary conditions to CSV"
            print "     [3] - "
            print "     [4] - write graph to .png"
            #print "     [5] - write random input data to CSV"
            print "     [b] - back to the main menu"
            print ""
            while subMenuInput not in ["1", "2", '4',
                                       "b"]:  #["1","2","3",'4','5',"b"]:
                subMenuInput = raw_input("what to do? ")

                if subMenuInput == '1':
                    print "     write to XML"
                    networkName = enterNetworkName(networkName)
                    vascularNetwork.name = networkName
                    if networkName == None: break
                    mXML.writeNetworkToXML(vascularNetwork)
                    break

                elif subMenuInput == '2':
                    print "     write vessel data to CSV"
                    networkName = enterNetworkName(networkName)
                    if networkName == None: break
                    mCSV.writeVesselDataToCSV(networkName,
                                              vascularNetwork.vessels)
                    break

#                 elif subMenuInput == '3':
#                     print "     write vessel data and boundary conditions to CSV"
#                     networkName = enterNetworkName(networkName)
#                     if networkName == None:break
#                     boundaryConditions = vascularNetwork.getVariableValue('boundaryConditions')
#                     boundaryConditionPolyChaos = deepcopy(vascularNetwork.getVariableValue('boundaryConditionPolyChaos'))
#                     # write data
#                     mCSV.writeVesselDataToCSV(networkName, vascularNetwork.vessels)
#                     mCSV.writeBCToCSV(networkName, boundaryConditions,boundaryConditionPolyChaos)
#                     break

                elif subMenuInput == '4':
                    print "     write graph to .png"
                    vncNetworkGraphFile = mFPH.getFilePath(
                        'vncNetworkGraphFile', networkName, 'xxx', 'write')
                    #mainGraph.graph.write(graphPath+networkName+'/'+pictureName+'.dot')
                    mainGraph.graph.write_png(vncNetworkGraphFile)
                    break


#                 elif subMenuInput == '5':
#                     print "     write random input data to CSV"
#                     networkName = enterNetworkName(networkName)
#                     mCSV.writeRandomInputstoCSV(networkName, vascularNetwork.randomInputManager)
#                     break

                if subMenuInput == 'b':
                    break

        elif menuInput == "u":
            try:
                vncRescentNetworksFile = open(
                    mFPH.getFilePath('vncRescentNetworksFile', 'networkName',
                                     'xxx', 'read'), 'rb')
                recentNetworkNames = cPickle.load(vncRescentNetworksFile)
                vncRescentNetworksFile.close()
            except:
                recentNetworkNames = []

            subMenuInput = ''
            print ""
            print "    sub menu: update XML from CSV"
            print ""
            print "     load from XML"
            print ""
            print "         recently used networks"
            i = 1
            for name in recentNetworkNames:
                print "          [", i, '] - ', name
                i = 1 + i
            print ""
            networkName = enterNetworkName(
                networkName, recentNetworkNames=recentNetworkNames)
            if networkName == None: break
            # delete the old network
            del vascularNetwork
            #load the new network
            try:
                vascularNetwork = mXML.loadNetworkFromXML(networkName)
            except ValueError as e:
                mainGraph.update_graph(None, window)
                vascularNetwork = VascularNetwork()
                print "\n  could not load network, it does not exist or the file is not up-to-date! \n"
                print(str(e))
                #if networkName in recentNetworkNames:
                #    recentNetworkNames.remove(networkName)
                networkName = None

            if networkName == None:
                mainGraph.update_graph(None, window)
            else:
                mainGraph.update_graph(vascularNetwork, window)

            if networkName is not None:
                print "     load vessel data from CSV - non existing vessels are added automatically"
                vesselData = mCSV.readVesselDataFromCSV(networkName)
                if vesselData == None:
                    print "\n  could not load network csv, it does not exist! \n"
                else:
                    vascularNetwork.updateNetwork(vesselData)
                    #print "     load boundaryData from csv as well? press [u]"
                    #subMenuInput = raw_input("yes [u]? ")
                    #if subMenuInput == 'u':
                    #    boundaryConditions,boundaryConditionPolyChaos = mCSV.readBCFromCSV(networkName)
                    #    vascularNetwork.update({'boundaryConditions':boundaryConditions,
                    #                           'boundaryConditionPolyChaos':boundaryConditionPolyChaos})

                    mainGraph.update_graph(vascularNetwork, window)

                print "     write to XML"
                vascularNetwork.name = networkName
                mXML.writeNetworkToXML(vascularNetwork)
            else:
                print "\n  could not update network \n"

    print "bye bye .."
def main():
    print ""
    print '====================================='
    print '#     STARFiSh_v0.3_development     #'
    print '====================================='

    optionsDict = mStartUp.parseOptions(
        ['f', 'e', 'n', 'd', 's', 'v', 'r', 'w', 'p'])

    networkName = optionsDict['networkName']
    newNetworkName = optionsDict['NewNetworkName']
    save = optionsDict['save']
    dataNumber = optionsDict['dataNumber']
    simulationDescription = optionsDict['simulationDescription']
    vizOutput = optionsDict['vizOutput']
    resimulate = optionsDict['resimulate']

    filename = str(networkName + '.xml')

    print '____________Simulation_______________'
    print '%-20s %s' % ('Network name', networkName)
    print '%-20s %s' % ('Data number', dataNumber)
    print '%-20s %s' % ('Save simulation', save)
    print '%-20s %s' % ('Case description', simulationDescription)
    print '%-20s %s' % ('Resimulate', resimulate)
    print '%-20s %s' % ('Visualisationmode', vizOutput)

    ## check if template
    if '_template' in networkName:
        networkName = mFPH.createWorkingCopyOfTemplateNetwork(networkName)

    # load network from the path!
    if resimulate == False:
        vascularNetwork = mXML.loadNetworkFromXML(
            networkName)  # moved to vascularNetowrk constror
    else:
        # resimulate network
        vascularNetwork = mXML.loadNetworkFromXML(networkName,
                                                  dataNumber=dataNumber)
        if simulationDescription == '':
            simulationDescription = vascularNetwork.description

    if vascularNetwork == None: exit()

    oldNetworkDirectory = mFPH.getDirectory('networkXmlFileXXXDirectory',
                                            networkName, "xxx", 'read')

    vascularNetwork.update({
        'description': simulationDescription,
        'dataNumber': dataNumber
    })

    New_network = cNred.NetworkReduction(vascularNetwork)
    truncateFile = ''.join([oldNetworkDirectory, '/', 'truncate.txt'])
    New_network.reduceNetwork(truncateFile)

    New_network.name = newNetworkName
    newNetworkXmlFile = mFPH.getFilePath('networkXmlFile', newNetworkName,
                                         "xxx", 'write')

    mXML.writeNetworkToXML(New_network,
                           dataNumber=dataNumber,
                           networkXmlFile=newNetworkXmlFile)

    if New_network.initialsationMethod == 'FromSolution':
        oldInitialValuePath = mFPH.getDirectory('initialValueFileDirectory',
                                                networkName, dataNumber,
                                                'write')
        newInitialValuePath = mFPH.getDirectory('initialValueFileDirectory',
                                                newNetworkName, dataNumber,
                                                'write')
        if os.path.isdir(newInitialValuePath):
            shutil.rmtree(newInitialValuePath)

        shutil.copytree(oldInitialValuePath, newInitialValuePath)

    copyFlowFile = True
    if copyFlowFile:
        oldInflowFile = ''.join([oldNetworkDirectory, '/', 'inflow.csv'])
        newNetworkDirectory = mFPH.getDirectory('networkXmlFileXXXDirectory',
                                                newNetworkName, "xxx", 'read')
        newInflowFile = ''.join([newNetworkDirectory, '/', 'inflow.csv'])

        shutil.copyfile(oldInflowFile, newInflowFile)

    copyTruncateFile = True
    if copyTruncateFile:

        newNetworkDirectory = mFPH.getDirectory('networkXmlFileXXXDirectory',
                                                newNetworkName, "xxx", 'read')
        newTruncateFile = ''.join([newNetworkDirectory, '/', 'truncate.txt'])

        shutil.copyfile(truncateFile, newTruncateFile)
Beispiel #7
0
def chooseUQSACaseFile(networkName):
    """
    console Interface to choose a vascularPolynomialChaos Config File
     including the possility to create a template Config File
    Input:
        networkName of VascularNetwork
    Output:
        networkName,dataNumber of the Config File (networkName should be the same)
    """
    from VascularPolynomialChaosLib import classUqsaCase

    workingDirectory = mFPH.getDirectory('workingDirectory', '', '', 'read')
    networkDirectory = os.path.join(*[workingDirectory, networkName])

    filesNetworkDir = os.listdir(networkDirectory)
    filenames = []

    for fileNetworkDir in filesNetworkDir:
        # check if polychaos directory:
        if 'vascularPolynomialChaos' in fileNetworkDir:
            allFilenames = os.listdir(
                os.path.join(*[workingDirectory, networkName, fileNetworkDir]))
            for filename in allFilenames:
                if ".xml" in filename and "uqsaCase" in filename:
                    filenames.append(filename)

    print "\n  No dataNumber for UQSAcase file passed, choose between all available UQSAcase files:"
    print "  (NB: use -n dataNumber to define a specific UQSAcase you want to open)\n"
    print "   [   0 ] - Create new template uqsa case file and exit"
    if filenames != []:
        prettyPrintList('', filenames, indexOffSet=1)

    question = "  Choose Option or Config-File you want to open according to its number:, (q)-quit: "
    userInput = userInputEvaluationInt(1 + len(filenames), 0, question)

    if userInput in [0]:

        userInputDataNumber = 'xxxx'
        dataNumber = False
        while dataNumber == False:
            userInputDataNumber = str(
                raw_input(
                    "\n  Insert dataNumber for polynomial Chaos case (overwrites if existing): "
                ))
            dataNumber = evaluateDataNumber(userInputDataNumber,
                                            exception="Warning")[0]

        # create template configuration
        configurationFilePathTemplate = mFPH_VPC.getFilePath(
            'uqsaCaseTemplateFile', networkName, dataNumber, 'read')

        uqsaCase = classUqsaCase.UqsaCase()
        uqsaCase.loadXMLFile(configurationFilePathTemplate)

        # TODO: check if file exits and ask if it should be overwritten
        configurationFilePath = mFPH_VPC.getFilePath('uqsaCaseXmlFile',
                                                     networkName, dataNumber,
                                                     'write')
        uqsaCase.writeXMLFile(configurationFilePath)
        # copy network file
        toCopyFile = mFPH.getFilePath('networkXmlFile', networkName, 'xxx',
                                      'write')
        destinationFile = mFPH_VPC.getFilePath('vpcNetworkXmlFile',
                                               networkName, dataNumber,
                                               'write')
        shutil.copy(toCopyFile, destinationFile)
        print "files created!, exit()"
        exit()

    else:
        networkName = filenames[userInput - 1]
        dataNumber = networkName.split('.')[0].split('_')[-1]

    return dataNumber