objref frec strdef cmd, dircmd, direx, comper, version, vercomment, vercomment2, mypath, userstr, machname, machnick, outfile, edate, comver strdef verleft, verright objref strobj strobj = new StringFunctions() proc typeout() {local i, myline, rn, rank, gid, srcid localobj tgt, f, cell, f2c // Write out the cell types & gid ranges if (pc.id == 0) { // Write header to file 1 time only rn = -1 sprint(dircmd, "ls ../results/%s", RunName) {system(dircmd, direx)} {sprint(comper, "ls: cannot access ../results/%s: No such file or directory", RunName)} while (strcmp(direx,comper)!=0 && strcmp(direx,"")!=0 ) { rn = rn + 1 sprint(dircmd, "ls ../results/%s_%02.0f", RunName, rn) {system(dircmd, direx)} {sprint(comper, "ls: cannot access ../results/%s_%02.0f: No such file or directory", RunName, rn)} } if (rn>-1) { sprint(RunName, "%s_%02.0f", RunName, rn) } printf(" so I will create it now\n") sprint(dircmd, "mkdir ../results/%s", RunName) {system(dircmd, direx)} //sprint(dircmd, "cp ../setupfiles/lowindex.hoc ../results/%s", RunName) //{system(dircmd, direx)} //sprint(dircmd, "cp ../stimulation/sintrainparams.hoc ../results/%s", RunName) //{system(dircmd, direx)} //sprint(dircmd, "cp ../cells/allsyns.dat ../results/%s", RunName) //{system(dircmd, direx)} // check for hg sprint(dircmd, "hg parent --template '{rev}: {desc}\n'") {system(dircmd, direx)} // check string for "no hg in" index = strobj.len(direx) // if the check matches, then use backup files if (index<1) { sprint(dircmd, "cp ../hg_status.out ../results/%s/hg_status.out", RunName) {system(dircmd, direx)} sprint(dircmd, "cp ../hg_diff.out ../results/%s/hg_diff.out", RunName) {system(dircmd, direx)} f2c = new File() f2c.ropen("../vercomment.txt") // Open the celltype myline=f2c.gets(vercomment) strobj.left(vercomment, myline-1) f2c.close f2c.ropen("../version.txt") // Open the celltype f2c.scanstr(version) f2c.close } else { // else use built in hg sprint(dircmd, "hg status") {system(dircmd, direx)} if (strcmp(direx,"")>0) { comver = "Yes" sprint(dircmd, "hg status > ../results/%s/hg_status.out", RunName) {system(dircmd, direx)} sprint(dircmd, "hg diff > ../results/%s/hg_diff.out", RunName) {system(dircmd, direx)} } else { comver = "No" } sprint(dircmd, "hg parent --template '{rev}: {desc}\n'") {system(dircmd, direx)} if (strobj.len(direx)<2) { vercomment="unknown" } else { strobj.left(direx, strobj.len(direx)-1) // hg parent rev/desc vercomment=direx } i = strobj.substr(vercomment, "'") while (i>0) { verleft = vercomment strobj.left(verleft, i) verright = vercomment strobj.right(verright, i+1) sprint(vercomment,"%s''%s", verleft, verright) i = strobj.substr(verright, "'") if (i>0) { i = i + strobj.len(verleft)+2 } } sprint(dircmd, "hg parent --template '{node}\n'") {system(dircmd, direx)} if (strobj.len(direx)<2) { version="unknown" } else { strobj.left(direx, strobj.len(direx)-1) // hg parent node version=direx } } system("cd ..;pwd",mypath) if (strobj.len(mypath)<2) { mypath="unknown" } else { strobj.left(mypath, strobj.len(mypath)-1) // path } system("whoami", userstr) if (strobj.len(userstr)<2) { userstr="unknown" } else { strobj.left(userstr, strobj.len(userstr)-1) // whoami } {system("hostname", machname)} if (strobj.len(machname)<2) { machname="unknown" } else { strobj.left(machname, strobj.len(machname)-1) // hostname } machnick = machname// nickname for host machine, usually second term in address i = strobj.substr(machnick, ".") if (i>0) { strobj.right(machnick, i+1) i = strobj.substr(machnick, ".") if (i>0) { strobj.left(machnick, i) } } {system("date \"+%d-%b-%Y %H:%M:%S\"", edate)} if (strobj.len(edate)<2) { edate="unknown" } else { strobj.left(edate, strobj.len(edate)-1) // date } sprint(outfile, "../results/%s/runreceipt.txt", RunName) frec = new File(outfile) frec.wopen() frec.printf("NumProcessors = %g;\n", pc.nhost) frec.printf("ExecutionDate = '%s';\n", edate) frec.printf("ExecutedBy = '%s';\n", userstr) if (strcmp(machnick,"local")!=0) { frec.printf("Machine = '%s';\n", machnick) } frec.printf("MachineFull = '%s';\n", machname) frec.printf("ModelVerComment='%s';\n", vercomment) frec.printf("ModelVersion='%s';\n", version) frec.printf("ModelDirectory ='%s';\n", mypath) frec.printf("NEURONVersion ='%s';\n", nrnversion(2)) // version number and mercurial changeset frec.printf("WorkDirChg ='%s';\n", comver) // whether this job was run using a model working directory that // had been changed since the last version update // If no, the run can therefore be easily reproduced(No) // If yes, we won't have any record of the changes and that // will limit our ability to reproduce the run unless // we record the changes, which we do in that case (Yes) printmyvars() frec.close() } pc.barrier() // Wait for all ranks to get to this point sprint(cmd,"../results/%s/celltype.dat", RunName) f = new File(cmd) if (pc.id == 0) { // Write header to file 1 time only f.wopen() f.printf("celltype\ttypeIndex\trangeStart\trangeEnd\n") for i=0, numCellTypes-1 { f.printf("%s\t%s\t%d\t%d\t%d\n", cellType[i].cellType_string, cellType[i].technicalType, i, cellType[i].cellStartGid, cellType[i].cellEndGid) } f.close() } } /**/strdef thisline, getval, result, paramstr, testline, valstr /**/proc printmyvars() {local strlen localobj pfobj pfobj = new File() pfobj.ropen("../setupfiles/parameters.hoc") while (pfobj.gets(thisline)>-1) { testline=thisline strobj.left(testline, 1) // testline if (strcmp(testline,"d")==0) { result=thisline strobj.right(result, 13) strlen = strobj.head(result, "\",", paramstr) {sprint(getval, "printnow(%s, paramstr, %g)", paramstr, strobj.len(paramstr))} {execute1(getval)} } } pfobj.close } /**/proc printnow() { if (argtype(1)==0) { if ($3>0) { //sprint(getval, "paramval = %s", $s2) // Note that paramval cannot be a local variable //{execute1(getval)} {frec.printf("%s = %g;\n", paramstr, $1)} } } else { if (argtype(1)==2) { if ($3>0) { //sprint(getval, "paramval = %s", $s2) // Note that paramval cannot be a local variable //{execute1(getval)} {frec.printf("%s = '%s';\n", paramstr, $s1)} } } } } typeout() {pc.broadcast(RunName, 0)}