00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef ROO_REAL_MPFE
00017 #define ROO_REAL_MPFE
00018
00019 #include "RooAbsReal.h"
00020 #include "RooRealProxy.h"
00021 #include "RooListProxy.h"
00022 #include "RooArgList.h"
00023 #include "RooMPSentinel.h"
00024
00025 class RooArgSet ;
00026
00027 class RooRealMPFE : public RooAbsReal {
00028 public:
00029
00030 RooRealMPFE(const char *name, const char *title, RooAbsReal& arg, Bool_t calcInline=kFALSE) ;
00031 RooRealMPFE(const RooRealMPFE& other, const char* name=0);
00032 virtual TObject* clone(const char* newname) const { return new RooRealMPFE(*this,newname); }
00033 virtual ~RooRealMPFE();
00034
00035 void calculate() const ;
00036 virtual Double_t getVal(const RooArgSet* nset=0) const ;
00037 void standby() ;
00038
00039 void setVerbose(Bool_t clientFlag=kTRUE, Bool_t serverFlag=kTRUE) ;
00040
00041 protected:
00042
00043
00044 virtual Double_t evaluate() const ;
00045 friend class RooAbsTestStatistic ;
00046 virtual void constOptimizeTestStatistic(ConstOpCode opcode) ;
00047
00048 enum State { Initialize,Client,Server,Inline } ;
00049 State _state ;
00050
00051 enum Message { SendReal=0, SendCat=1, Calculate=2, Retrieve=3, ReturnValue=4, Terminate=5,
00052 ConstOpt=6, Verbose=7, RetrieveErrors=8, SendError=9, LogEvalError=10 } ;
00053
00054 void initialize() ;
00055 void initVars() ;
00056 void serverLoop() ;
00057
00058 RooRealProxy _arg ;
00059
00060 RooListProxy _vars ;
00061 RooArgList _saveVars ;
00062 mutable Bool_t _calcInProgress ;
00063 Bool_t _verboseClient ;
00064 Bool_t _verboseServer ;
00065 Bool_t _inlineMode ;
00066 mutable Bool_t _forceCalc ;
00067 mutable RooAbsReal::ErrorLoggingMode _remoteEvalErrorLoggingState ;
00068 Int_t _pid ;
00069
00070 Int_t _pipeToClient[2] ;
00071 Int_t _pipeToServer[2] ;
00072
00073 static RooMPSentinel _sentinel ;
00074
00075 ClassDef(RooRealMPFE,1)
00076 };
00077
00078 #endif