Beispiel #1
0
//__________________________________________________________________________________
void	ReadInPostFiles(void)
{
	if (!likeFuncList.lLength)
		return;
	_String fileIndex;
	FILE* modelList = fopen (fileIndex.getStr(),"r");
	fileIndex = baseArgDir &"TemplateBatchFiles/postprocessors.lst";
	modelList = fopen (fileIndex.getStr(),"r");

	fseek (modelList,0,SEEK_END);
	unsigned long  fLength = ftell(modelList);
	fseek (modelList,0,SEEK_END);
	fLength = ftell(modelList);
	if (fLength)
	{
		rewind (modelList);
		_String theData (fLength);
		fread (theData.getStr(),sizeof (char), fLength, modelList);
		_ElementaryCommand::ExtractConditions(theData,0,availablePostProcessors);
		for (long i = 0; i<availablePostProcessors.countitems(); i++)
		{
			_String* thisString = (_String*)availablePostProcessors(i);
			_List	thisFile;
			_ElementaryCommand::ExtractConditions(*thisString,thisString->FirstNonSpaceIndex(),thisFile,',');
			if (thisFile.lLength!=3)
			{
				availablePostProcessors.Delete(i);
				i--;
				continue;
			}
			for (long j = 0; j<3; j++)
				((_String*)thisFile(j))->StripQuotes();
			if (*(_String*)thisFile(0)!=_String("SEPARATOR"))
			{
				fileIndex = *((_String*)pathNames(0)) &"TemplateBatchFiles/" & *(_String*)thisFile(1);
				FILE* dummyFile = fopen (fileIndex,"r");
				if (!dummyFile)
				{
					fileIndex =baseArgDir&"TemplateBatchFiles/"& *(_String*)thisFile(1);
					dummyFile = fopen (fileIndex,"r");				
				}
				if (dummyFile)
				{	
					fclose (dummyFile);
					_String* condition = (_String*)thisFile(2);
					if (condition->sLength)
					{
						_Formula condCheck (*condition,nil);
						_PMathObj condCheckRes = condCheck.Compute();
						if ((!condCheckRes)||(condCheckRes->Value()<.5))
						{
							availablePostProcessors.Delete(i);
							i--;
							continue;
						}
					}
					*(_String*)thisFile(1) = fileIndex;
					availablePostProcessors.Replace(i,&thisFile,true);
					continue;
				}
			}
			availablePostProcessors.Delete(i);
			i--;
		}
			
	}
}
Beispiel #2
0
int main (int argc, char* argv[])
{
    mainArgCount = argc - 1;


#ifdef  __HYPHYMPI__
    int            rank,
                   size;

    MPI_Init       (&argc, &argv);
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
    MPI_Comm_size(MPI_COMM_WORLD, &size);

    setParameter  (mpiNodeID,    (_Parameter)rank);
    setParameter    (mpiNodeCount, (_Parameter)size);
    _hy_mpi_node_rank = rank;

    if (rank == 0) {
        mpiNodesThatCantSwitch.Populate (size,1,0);
        /* {
              char hostname[256];
              gethostname(hostname, sizeof(hostname));
              printf("PID %d on %s ready for attach\n", getpid(), hostname);
              fflush(stdout);
              //getchar ();
          } */
#endif


        //for (long k=0; k<NSIG; k++)
        //{
        //  signal(k, &hyphyBreak);
        //}

#ifdef  __HYPHYMPI__
    }
#endif

    char    curWd[4096],
            dirSlash = GetPlatformDirectoryChar ();
    getcwd (curWd,4096);

    _String baseDir (curWd);

    if (baseDir.getChar (baseDir.sLength-1) != dirSlash) {
        baseDir=baseDir & dirSlash;
    }


#if defined _HYPHY_LIBDIRECTORY_
    _String libDir (_HYPHY_LIBDIRECTORY_);

    if (libDir.getChar (libDir.sLength-1) != dirSlash) {
        libDir=libDir & dirSlash;
    }

    pathNames&& &libDir;
#else
     pathNames&& &baseDir;
    _String libDir = baseDir;
#endif

    _String argFile;

    libDirectory  = libDir;
    libArgDir     = libDirectory;
    baseDirectory = baseDir;
    baseArgDir    = baseDirectory;

    _ExecutionList ex;

#ifdef _OPENMP
    systemCPUCount = omp_get_max_threads();
#endif

#ifdef _MINGW32_MEGA_
    {
        char pid[16];
        snprintf (pid,16,"%u", GetCurrentProcessId());

        _String pipeName = _String("\\\\.\\pipe\\MEGAPipe") & pid;
        printf ("Pipe name = %s\n", pipeName.sData);
        if ((_HY_MEGA_Pipe = CreateFile(pipeName.sData, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL)) == INVALID_HANDLE_VALUE) {
            char* lpMsgBuf;
            FormatMessage(
                FORMAT_MESSAGE_ALLOCATE_BUFFER |
                FORMAT_MESSAGE_FROM_SYSTEM |
                FORMAT_MESSAGE_IGNORE_INSERTS,
                NULL,
                GetLastError(),
                MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
                (LPTSTR) &lpMsgBuf,
                0, NULL );
            FlagError (_String("Failed to create a pipe named '") & pipeName & "' to send data from HyPhy to MEGA. Error: "&lpMsgBuf);
        }
    }
#endif

    for (long i=1; i<argc; i++) {
        _String thisArg (argv[i]);
        if (thisArg.sData[0]=='-') {
            ProcessConfigStr (thisArg);
        } else if (thisArg.beginswith ("BASEPATH=")) {
            baseArgDir = thisArg.Cut(9,-1);
            if (baseArgDir.sLength) {
                if (baseArgDir.sData[baseArgDir.sLength-1]!=dirSlash) {
                    baseArgDir = baseArgDir&dirSlash;
                }

                baseDirectory = baseArgDir;
            }
        } else if (thisArg.beginswith ("LIBPATH=")) {
            libArgDir = thisArg.Cut(8,-1);
            if (libArgDir.sLength) {
                if (libArgDir.sData[libArgDir.sLength-1] != dirSlash) {
                    libArgDir = libArgDir & dirSlash;
                }
                libDirectory = libArgDir;
            }
        } else if (thisArg.beginswith ("USEPATH=")) {
            baseDir             = thisArg.Cut(8,-1);
            errorFileName       = baseDir & errorFileName;
            messageFileName     = baseDir & messageFileName;
            pathNames.Delete    (0);
            pathNames&&         &baseDir;
        } else
#ifdef __MP__
            if (thisArg.beginswith ("CPU=")) {
                _String cpus = thisArg.Cut(4,-1);
                systemCPUCount = cpus.toNum();
                if (systemCPUCount<1) {
                    systemCPUCount = 1;
                }
                pthread_setconcurrency (systemCPUCount+1);
            } else
#endif
                argFile = thisArg;
    }

    GlobalStartup();

    if (calculatorMode) {
        printf ("\nHYPHY is running in calculator mode. Type 'exit' when you are finished.\n");
        while (ExpressionCalculator()) ;
        return 0;
    }

    if (pipeMode) {
        _String bfIn (stdin);
        _ExecutionList exIn (bfIn);
        exIn.Execute();
        GlobalShutdown();
        return 0;
    }

    // try to read the preferences
    _String     prefFile (curWd);
    prefFile = prefFile & '/' & prefFileName;
    FILE     * testPrefFile = fopen (prefFile.sData,"r");
    if (!testPrefFile) {
        prefFile = baseArgDir & prefFileName;
        testPrefFile = fopen (prefFile.sData,"r");
    }
    if (testPrefFile) {
        fclose(testPrefFile);
        ReadBatchFile (prefFile,ex);
        ex.Execute();
        ex.Clear();
    }
    //printf ("Node %d before mpiParallelOptimizer\n", rank);
#ifdef __HYPHYMPI__
    if (rank>0) {
        //if (mpiParallelOptimizer || mpiPartitionOptimizer)
        //  mpiOptimizerLoop (rank, size);
        //else
        _String defaultBaseDirectory = *(_String*)pathNames(0);
        mpiNormalLoop (rank, size, defaultBaseDirectory);
        /*argFile = "SHUTDOWN_CONFIRM";
        MPISendString (argFile, senderID);*/
    } else {
#endif
        if (!argFile.sLength) {
            long selection = -2;
            if (!updateMode) {
                selection = DisplayListOfChoices();
            }

            if (selection == -1) {
                dialogPrompt = "Batch file to run:";
                _String fStr (ReturnDialogInput (true));
                if (logInputMode) {
                    _String tts = loggedFileEntry&fStr;
                    loggedUserInputs && & tts;
                }

                PushFilePath (fStr);
                ReadBatchFile (fStr,ex);
            } else {
                _String templ;

                if (selection >= 0) {
                    templ = baseArgDir &"TemplateBatchFiles" & dirSlash;
                } else {
                    templ = baseArgDir & "TemplateBatchFiles" & dirSlash & "WebUpdate.bf";
                }

                if (selection >= 0) {
                    templ= templ&*(_String*)(*(_List*)availableTemplateFiles(selection))(2);
                }

                PushFilePath (templ);
                ReadBatchFile (templ,ex);
            }
        } else {
#ifndef __MINGW32__
            if (argFile.sData[0] != '/') {
                argFile       = baseDirectory & argFile;
            }
#else
            if (argFile.sData[1] != ':') { // not an absolute path
                argFile       = baseDirectory & argFile;
            }
#endif
            PushFilePath  (argFile);
            ReadBatchFile (argFile,ex);
        }

        ex.Execute();

        if (usePostProcessors && (!updateMode)) {
            ReadInPostFiles();
            printf ("\n\n**********Continue with result processing (y/n)?");
            _String c_str (StringFromConsole());

            if (logInputMode) {
                loggedUserInputs && & c_str;
            }

            if (c_str.getChar(0) !='n' && c_str.getChar(0)!='N' ) {
                long choice = DisplayListOfPostChoices();
                while (choice != -1) {
                    _ExecutionList postEx;
                    argFile = *(_String*)(*(_List*)availablePostProcessors(choice-1))(1);
                    PushFilePath (argFile);
                    ReadBatchFile (argFile, postEx);
                    postEx.Execute();
                    PopFilePath ();
                    printf ("\n\n**********Continue with result processing (y/n)?");

                    c_str = StringFromConsole();
                    if (logInputMode) {
                        loggedUserInputs && & c_str;
                    }

                    if (c_str.getChar(0)=='n' || c_str.getChar(0)=='N' ) {
                        break;
                    }

                    choice = DisplayListOfPostChoices();
                }
            }
        }
#ifdef __HYPHYMPI__
    }
    ReportWarning               (_String ("Node ") & (long)rank & " is shutting down\n");
#endif


#ifdef _MINGW32_MEGA_
    if (_HY_MEGA_Pipe != INVALID_HANDLE_VALUE) {
        CloseHandle (_HY_MEGA_Pipe);
    }
#endif

    PurgeAll                    (true);
    GlobalShutdown              ();

#ifdef __HYPHYMPI__
    if (rank == 0) {
        printf ("\n\n");
    }
#endif

}