#ifndef ROO_REAL_MPFE
#define ROO_REAL_MPFE
#include "RooAbsReal.h"
#include "RooRealProxy.h"
#include "RooListProxy.h"
#include "RooArgList.h"
#include "RooMPSentinel.h"
class RooArgSet ;
class RooRealMPFE : public RooAbsReal {
public:
RooRealMPFE(const char *name, const char *title, RooAbsReal& arg, Bool_t calcInline=kFALSE) ;
RooRealMPFE(const RooRealMPFE& other, const char* name=0);
virtual TObject* clone(const char* newname) const { return new RooRealMPFE(*this,newname); }
virtual ~RooRealMPFE();
void calculate() const ;
virtual Double_t getVal(const RooArgSet* nset=0) const ;
void standby() ;
void setVerbose(Bool_t clientFlag=kTRUE, Bool_t serverFlag=kTRUE) ;
protected:
virtual Double_t evaluate() const ;
friend class RooAbsTestStatistic ;
virtual void constOptimizeTestStatistic(ConstOpCode opcode) ;
enum State { Initialize,Client,Server,Inline } ;
State _state ;
enum Message { SendReal=0, SendCat=1, Calculate=2, Retrieve=3, ReturnValue=4, Terminate=5,
ConstOpt=6, Verbose=7, RetrieveErrors=8, SendError=9, LogEvalError=10 } ;
void initialize() ;
void initVars() ;
void serverLoop() ;
RooRealProxy _arg ;
RooListProxy _vars ;
RooArgList _saveVars ;
mutable Bool_t _calcInProgress ;
Bool_t _verboseClient ;
Bool_t _verboseServer ;
Bool_t _inlineMode ;
mutable Bool_t _forceCalc ;
mutable Bool_t _remoteEvalErrorLoggingState ;
Int_t _pid ;
Int_t _pipeToClient[2] ;
Int_t _pipeToServer[2] ;
static RooMPSentinel _sentinel ;
ClassDef(RooRealMPFE,1)
};
#endif