示例#1
0
def addTSsearch(jobGraph, rootDir, currentDir, baseData, initialGeom, index,
                method, basis, gaussianFelxSele):
    newNode = FDynamoNode("tsSearch.f90", currentDir)
    newNode.verification = ["Opt", "Freq"]
    newNode.noOfExcpectedImaginaryFrequetions = 1
    newNode.templateKey = "QMMM_opt_mopac"
    newNode.additionalKeywords = {"ts_search": "true"}
    newNode.coordsIn = "coordsIn.crd"

    gaussianTime = "72:00:00"

    if not isdir(currentDir):
        makedirs(currentDir)
    saveCrdFromDCD(join(currentDir, "coordsIn.crd"), initialGeom)

    newNode.coordsOut = "coordsDone.crd"
    newNode.getCoordsFromParent = False

    newNode.fDynamoPath = baseData["fDynamoPath"]
    newNode.charge = baseData["charge"]
    newNode.method = baseData["method"]
    newNode.forceField = data["forceField"]
    copyfile(join(baseData["filesDir"], baseData["forceField"]),
             join(currentDir, newNode.forceField))
    newNode.flexiblePart = data["flexiblePart"]
    copyfile(join(baseData["filesDir"], baseData["flexiblePart"]),
             join(currentDir, newNode.flexiblePart))
    newNode.sequence = data["sequence"]
    copyfile(join(baseData["filesDir"], baseData["sequence"]),
             join(currentDir, newNode.sequence))
    newNode.qmSele = data["qmSele"]

    jobGraph.add_node(currentDir, data=newNode)
    jobGraph.add_edge(rootDir, currentDir)

    am1Dir = currentDir

    ########################################################
    currentDir = join(currentDir, "ts_gaussian")
    if not isdir(currentDir):
        makedirs(currentDir)

    newNode = FDynamoNode("tsSearch", currentDir)

    newNode.verification = ["Opt", "Freq"]
    newNode.noOfExcpectedImaginaryFrequetions = 1
    newNode.templateKey = "QMMM_opt_gaussian"
    newNode.fDynamoPath = "/net/people/plgglanow/fortranPackages/AMBER-g09/AMBER-dynamo/makefile"
    newNode.additionalKeywords = {
        "ts_search": "true",
        "method": method,
        "basis": basis,
        "multiplicity": 1,
        "otherOptions": ""
    }
    newNode.coordsIn = "coordsStart.crd"
    newNode.coordsOut = "coordsDone.crd"
    newNode.flexiblePart = basename(gaussianFelxSele)
    copyfile(gaussianFelxSele, join(currentDir, newNode.flexiblePart))
    newNode.processors = 24
    newNode.moduleAddLines = "module add plgrid/apps/gaussian/g16.B.01"
    newNode.partition = "plgrid"
    newNode.time = gaussianTime

    jobGraph.add_node(currentDir, data=newNode)
    jobGraph.add_edge(am1Dir, currentDir)

    ########################################################

    newDir = join(am1Dir, "irc_reverse")
    newNode = FDynamoNode("irc_reverse.f90", newDir)
    newNode.verification = ["SP"]
    newNode.templateKey = "QMMM_irc_mopac"
    newNode.additionalKeywords = {"IRC_dir": "-1"}
    newNode.coordsIn = "coordsStart.crd"
    newNode.coordsOut = "coordsDone.crd"

    jobGraph.add_node(newDir, data=newNode)
    jobGraph.add_edge(am1Dir, newDir)

    ########################################################
    optDir = join(newDir, "opt")

    newNode = FDynamoNode("opt.f90", optDir)
    newNode.verification = ["Opt", "Freq"]
    newNode.noOfExcpectedImaginaryFrequetions = 0
    newNode.templateKey = "QMMM_opt_mopac"
    newNode.additionalKeywords = {
        "ts_search": "false",
        "definedAtoms": baseData["definedAtoms"]
    }
    newNode.coordsIn = "coordsStart.crd"
    newNode.coordsOut = "coordsDone" + str(index) + ".crd"
    newNode.measureRCinOutput = True

    jobGraph.add_node(optDir, data=newNode)
    jobGraph.add_edge(newDir, optDir)

    ########################################################

    optDirGaussian = join(newDir, "optGaussian")

    if not isdir(optDirGaussian):
        makedirs(optDirGaussian)

    newNode = FDynamoNode("opt.f90", optDirGaussian)
    newNode.verification = ["Opt", "Freq"]
    newNode.noOfExcpectedImaginaryFrequetions = 0
    newNode.templateKey = "QMMM_opt_gaussian"
    newNode.fDynamoPath = "/net/people/plgglanow/fortranPackages/AMBER-g09/AMBER-dynamo/makefile"
    newNode.additionalKeywords = {
        "ts_search": "false",
        "definedAtoms": baseData["definedAtoms"],
        "method": method,
        "basis": basis,
        "multiplicity": 1,
        "otherOptions": ""
    }
    newNode.coordsIn = "coordsStart.crd"
    newNode.coordsOut = "coordsDone" + str(index) + ".crd"
    newNode.flexiblePart = basename(gaussianFelxSele)
    copyfile(gaussianFelxSele, join(optDirGaussian, newNode.flexiblePart))
    newNode.measureRCinOutput = True
    newNode.processors = 24
    newNode.moduleAddLines = "module add plgrid/apps/gaussian/g16.B.01"
    newNode.partition = "plgrid"
    newNode.time = gaussianTime

    jobGraph.add_node(optDirGaussian, data=newNode)
    jobGraph.add_edge(optDir, optDirGaussian)

    ########################################################

    newDir = join(am1Dir, "irc_forward")
    newNode = FDynamoNode("irc_forward.f90", newDir)
    newNode.verification = ["SP"]
    newNode.templateKey = "QMMM_irc_mopac"
    newNode.additionalKeywords = {"IRC_dir": "1"}
    newNode.coordsIn = "coordsStart.crd"
    newNode.coordsOut = "coordsDone.crd"

    jobGraph.add_node(newDir, data=newNode)
    jobGraph.add_edge(am1Dir, newDir)

    ########################################################

    optDir = join(newDir, "opt")

    newNode = FDynamoNode("opt.f90", optDir)
    newNode.verification = ["Opt", "Freq"]
    newNode.noOfExcpectedImaginaryFrequetions = 0
    newNode.templateKey = "QMMM_opt_mopac"
    newNode.additionalKeywords = {
        "ts_search": "false",
        "definedAtoms": baseData["definedAtoms"]
    }
    newNode.coordsIn = "coordsStart.crd"
    newNode.coordsOut = "coordsDone" + str(index) + ".crd"
    newNode.measureRCinOutput = True

    jobGraph.add_node(optDir, data=newNode)
    jobGraph.add_edge(newDir, optDir)

    ########################################################

    optDirGaussian = join(optDir, "optGaussian")

    if not isdir(optDirGaussian):
        makedirs(optDirGaussian)

    newNode = FDynamoNode("opt.f90", optDirGaussian)
    newNode.verification = ["Opt", "Freq"]
    newNode.noOfExcpectedImaginaryFrequetions = 0
    newNode.templateKey = "QMMM_opt_gaussian"
    newNode.fDynamoPath = "/net/people/plgglanow/fortranPackages/AMBER-g09/AMBER-dynamo/makefile"
    newNode.additionalKeywords = {
        "ts_search": "false",
        "definedAtoms": baseData["definedAtoms"],
        "method": method,
        "basis": basis,
        "multiplicity": 1,
        "otherOptions": ""
    }
    newNode.coordsIn = "coordsStart.crd"
    newNode.coordsOut = "coordsDone" + str(index) + ".crd"
    newNode.measureRCinOutput = True
    newNode.processors = 24
    newNode.flexiblePart = basename(gaussianFelxSele)
    copyfile(gaussianFelxSele, join(optDirGaussian, newNode.flexiblePart))
    newNode.moduleAddLines = "module add plgrid/apps/gaussian/g16.B.01"
    newNode.partition = "plgrid"
    newNode.time = gaussianTime

    jobGraph.add_node(optDirGaussian, data=newNode)
    jobGraph.add_edge(optDir, optDirGaussian)
def addTSsearch (jobGraph, rootDir, currentDir, baseData, initialGeom, index):
    newNode = FDynamoNode("tsSearch.f90", currentDir)
    newNode.verification = ["Opt" , "Freq"]
    newNode.noOfExcpectedImaginaryFrequetions = 1
    newNode.templateKey = "QMMM_opt_mopac"
    newNode.additionalKeywords = { "ts_search" : "true" }
    newNode.coordsIn = "coordsIn.crd"
    
    makedirs(currentDir)
    saveCrdFromDCD( join(currentDir, "coordsIn.crd"), initialGeom )
    
    newNode.coordsOut = "coordsDone.crd"
    newNode.getCoordsFromParent = False
    
    newNode.fDynamoPath = baseData["fDynamoPath"]
    newNode.charge = baseData["charge"]
    newNode.method = baseData["method"]
    newNode.forceField = data["forceField"]
    copyfile( join(baseData["filesDir"], baseData["forceField"]), join(currentDir, newNode.forceField) )
    newNode.flexiblePart = data["flexiblePart"]
    copyfile( join(baseData["filesDir"], baseData["flexiblePart"]), join(currentDir, newNode.flexiblePart) )
    newNode.sequence = data["sequence"]
    copyfile( join(baseData["filesDir"], baseData["sequence"]), join(currentDir, newNode.sequence) )
    newNode.qmSele = data["qmSele"]
    
    jobGraph.add_node(currentDir, data = newNode)
    jobGraph.add_edge(rootDir, currentDir)
    
    newDir = join(currentDir, "irc_reverse")
    newNode = FDynamoNode("irc_reverse.f90", newDir)
    newNode.verification = ["SP"]
    newNode.templateKey = "QMMM_irc_mopac"
    newNode.additionalKeywords = { "IRC_dir" : "-1" }
    newNode.coordsIn = "coordsStart.crd"
    newNode.coordsOut = "coordsDone.crd"
    

    jobGraph.add_node(newDir, data = newNode)
    jobGraph.add_edge(currentDir, newDir)
    
    optDir = join(newDir, "opt")
    
    newNode = FDynamoNode("opt.f90", optDir)
    newNode.verification = ["Opt", "Freq"]
    newNode.noOfExcpectedImaginaryFrequetions = 0
    newNode.templateKey = "QMMM_opt_mopac"
    newNode.additionalKeywords = { "ts_search" : "false" , "definedAtoms" : baseData["definedAtoms"]}
    newNode.coordsIn = "coordsStart.crd"
    newNode.coordsOut = "coordsDone"+str(index)+".crd"
    newNode.measureRCinOutput = True
    

    jobGraph.add_node(optDir, data = newNode)
    jobGraph.add_edge( newDir, optDir)
    
    newDir = join(currentDir, "irc_forward")
    newNode = FDynamoNode("irc_forward.f90", newDir)
    newNode.verification = ["SP"]
    newNode.templateKey = "QMMM_irc_mopac"
    newNode.additionalKeywords = { "IRC_dir" : "1" }
    newNode.coordsIn = "coordsStart.crd"
    newNode.coordsOut = "coordsDone.crd"
    
    jobGraph.add_node(newDir, data = newNode)
    jobGraph.add_edge(currentDir, newDir)
    
    optDir = join(newDir, "opt")
    
    newNode = FDynamoNode("opt.f90", optDir)
    newNode.verification = ["Opt", "Freq"]
    newNode.noOfExcpectedImaginaryFrequetions = 0
    newNode.templateKey = "QMMM_opt_mopac"
    newNode.additionalKeywords = { "ts_search" : "false" , "definedAtoms" : baseData["definedAtoms"]}
    newNode.coordsIn = "coordsStart.crd"
    newNode.coordsOut = "coordsDone"+str(index)+".crd"
    newNode.measureRCinOutput = True
    
    jobGraph.add_node(optDir, data = newNode)
    jobGraph.add_edge( newDir, optDir)
    

    if len(sys.argv) < 4:
        print("Usage: graphTSsearchWHAM wham.log/RC compileScanScript.sh numberOfTS2find addName")
    else:
        whamLog = sys.argv[1]
        compileScript = sys.argv[2]
        TSno = int(sys.argv[3])
        
        addName = ""
        if len(sys.argv) > 4:
            addName = sys.argv[4]

        if isfile(whamLog):
            tsReactionCoord = getTScoords(whamLog)
        else:
            tsReactionCoord = float(whamLog)
        print("Found reaction coordinate: ", tsReactionCoord)
        data = parseFDynamoCompileScript(compileScript)
        definedAtoms = data["definedAtoms"]
        atoms = atomsFromAtomSelection( definedAtoms)

        currentDir = abspath(dirname(compileScript))

        graphDir = join( getcwd(), "multiTSsearch"+addName )

        sm = GraphManager()
        graph = sm.isGraphHere(graphDir)
        if not graph:
            newGraph = jobGraph = buildGraph(tsReactionCoord, atoms, graphDir, data, currentDir, TSno)
    
            
            result = sm.addGraph(newGraph, graphDir)
            if result:
                sm.buildGraphDirectories(newGraph)
                sm.saveGraphs()
            print("Created new graph")
        else:
            print("Cannot create more than one graph in the same directory")