/*! 
 * \page mpePage
 *

\section mpeSec MPE Utilities

The utilib::logEvent class enables a code to generate 
parallel event log files that can be viewed
with viewers like \c upshot and \c jumpshot.  These viewers in turn allow the
time sequence of events, thread activations, and messages to be visually
inspected, an aid to debugging and development.
Event logging uses the MPE extension library distributed with MPICH, and 
MPE is supposed to work with other flavors of MPI.

Event logging is compiled if UTILIB is configured to use MPI, MPE and 
validation.
Otherwise, the event logging macros all compile
into no-ops.  Even if event logging is compiled, you must set the
command line parameter "eventLog" to a non-zero value to obtain a log.
For example, the PICO MILP solver is setup to take values between 0 and 4,
where 0 means no log and 1 through 4 produce successively more detailed logs:

- Level 1: worker, incumbentCast, hub thread activations;
          problem bounding and new incumbent signaling states

- Level 2: level 1 + new incumbent messages, incumbent heuristic thread
          activations, pruning states

- Level 3: level 2 + status print events, and workerAux, spReceive, and
          spServe thread activations

- Level 4: level 3 + worker->hub messages

By default, a text file called "event.alog" is created, which can be
viewed with the \c upshot viewer.  If the environment variable
MPE_LOG_FORMAT is set to CLOG, then the output is a binary file called
"event.clog" which can be viewed with \c jumpshot.  This mechanism is
dictated by MPE, and our experience recommends the use of \c jumpshot.

The \ref utilib::IF_LOGGING_COMPILED "IF_LOGGING_COMPILED" macro is
used to add logging mechanism.  For example, if 
\verbatim
    IF_LOGGING_COMPILED(int myLogState;)
\endverbatim
is added into a class, then the variable \c myLogState is used to 
define a logging state.  This value needs to be initialized before being
used.  For example, the following could appear in a constructor:
\verbatim
    #ifdef EVENT_LOGGING_PRESENT
      myLogState = logEvent::defineState("name of state","corresponding X color");
    #endif
\endverbatim
Events are logged with the \ref utilib::LOG_EVENT "LOG_EVENT" macro, which uses
the syntax:
\verbatim
    LOG_EVENT(level,what,myLogState)
\endverbatim
Here, "level" is the minimum logging level to log the event.  "what" is
"start" to make the start of a state, "end" for the end, and "point"
for start and end in quick succession (for logging "point events").

*/
