// @(#)root/proof:$Id$
// Author: Fons Rademakers   13/02/97

/*************************************************************************
 * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

#ifndef ROOT_TProofSuperMaster
#define ROOT_TProofSuperMaster


//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TProofSuperMaster                                                    //
//                                                                      //
// This class controls a Parallel ROOT Facility, PROOF, cluster.        //
// It fires the slave servers, it keeps track of how many slaves are    //
// running, it keeps track of the slaves running status, it broadcasts  //
// messages to all slaves, it collects results, etc.                    //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#ifndef ROOT_TProof
#include "TProof.h"
#endif
#ifndef ROOT_TString
#include "TString.h"
#endif

class TVirtualProofPlayer;
class TDSet;

class TProofSuperMaster : public TProof {

friend class TProofPlayerSuperMaster;

protected:
   Bool_t    StartSlaves(Bool_t);
   void      ValidateDSet(TDSet *dset);
   virtual   TVirtualProofPlayer *MakePlayer(const char *player = 0, TSocket *s = 0);

public:
   TProofSuperMaster(const char *masterurl, const char *conffile = kPROOF_ConfFile,
                     const char *confdir = kPROOF_ConfDir, Int_t loglevel = 0,
                     const char *alias = 0, TProofMgr *mgr = 0);
   virtual ~TProofSuperMaster() { }

   Long64_t Process(TDSet *set, const char *selector,
                    Option_t *option = "", Long64_t nentries = -1,
                    Long64_t firstentry = 0);
   Long64_t Process(TFileCollection *fc, const char *sel, Option_t *o = "",
                    Long64_t nent = -1, Long64_t fst = 0)
                    { return TProof::Process(fc, sel, o, nent, fst); }
   Long64_t Process(const char *dsname, const char *sel,
                    Option_t *o = "", Long64_t nent = -1,
                    Long64_t fst = 0, TObject *enl = 0)
                    { return TProof::Process(dsname, sel, o, nent, fst, enl); }
   Long64_t Process(const char *sel, Long64_t nent, Option_t *o = "")
                    { return TProof::Process(sel, nent, o); }
   // Process via TSelector
   Long64_t Process(TDSet *set, TSelector *selector,
                    Option_t *option = "", Long64_t nentries = -1,
                    Long64_t firstentry = 0)
                    { return TProof::Process(set, selector, option, nentries, firstentry); }
   Long64_t Process(TFileCollection *fc, TSelector *sel, Option_t *o = "",
                    Long64_t nent = -1, Long64_t fst = 0)
                    { return TProof::Process(fc, sel, o, nent, fst); }
   Long64_t Process(const char *dsname, TSelector *sel,
                    Option_t *o = "", Long64_t nent = -1,
                    Long64_t fst = 0, TObject *enl = 0)
                    { return TProof::Process(dsname, sel, o, nent, fst, enl); }
   Long64_t Process(TSelector *sel, Long64_t nent, Option_t *o = "")
                    { return TProof::Process(sel, nent, o); }

   ClassDef(TProofSuperMaster,0) //PROOF control class for making submasters
};

#endif
 TProofSuperMaster.h:1
 TProofSuperMaster.h:2
 TProofSuperMaster.h:3
 TProofSuperMaster.h:4
 TProofSuperMaster.h:5
 TProofSuperMaster.h:6
 TProofSuperMaster.h:7
 TProofSuperMaster.h:8
 TProofSuperMaster.h:9
 TProofSuperMaster.h:10
 TProofSuperMaster.h:11
 TProofSuperMaster.h:12
 TProofSuperMaster.h:13
 TProofSuperMaster.h:14
 TProofSuperMaster.h:15
 TProofSuperMaster.h:16
 TProofSuperMaster.h:17
 TProofSuperMaster.h:18
 TProofSuperMaster.h:19
 TProofSuperMaster.h:20
 TProofSuperMaster.h:21
 TProofSuperMaster.h:22
 TProofSuperMaster.h:23
 TProofSuperMaster.h:24
 TProofSuperMaster.h:25
 TProofSuperMaster.h:26
 TProofSuperMaster.h:27
 TProofSuperMaster.h:28
 TProofSuperMaster.h:29
 TProofSuperMaster.h:30
 TProofSuperMaster.h:31
 TProofSuperMaster.h:32
 TProofSuperMaster.h:33
 TProofSuperMaster.h:34
 TProofSuperMaster.h:35
 TProofSuperMaster.h:36
 TProofSuperMaster.h:37
 TProofSuperMaster.h:38
 TProofSuperMaster.h:39
 TProofSuperMaster.h:40
 TProofSuperMaster.h:41
 TProofSuperMaster.h:42
 TProofSuperMaster.h:43
 TProofSuperMaster.h:44
 TProofSuperMaster.h:45
 TProofSuperMaster.h:46
 TProofSuperMaster.h:47
 TProofSuperMaster.h:48
 TProofSuperMaster.h:49
 TProofSuperMaster.h:50
 TProofSuperMaster.h:51
 TProofSuperMaster.h:52
 TProofSuperMaster.h:53
 TProofSuperMaster.h:54
 TProofSuperMaster.h:55
 TProofSuperMaster.h:56
 TProofSuperMaster.h:57
 TProofSuperMaster.h:58
 TProofSuperMaster.h:59
 TProofSuperMaster.h:60
 TProofSuperMaster.h:61
 TProofSuperMaster.h:62
 TProofSuperMaster.h:63
 TProofSuperMaster.h:64
 TProofSuperMaster.h:65
 TProofSuperMaster.h:66
 TProofSuperMaster.h:67
 TProofSuperMaster.h:68
 TProofSuperMaster.h:69
 TProofSuperMaster.h:70
 TProofSuperMaster.h:71
 TProofSuperMaster.h:72
 TProofSuperMaster.h:73
 TProofSuperMaster.h:74
 TProofSuperMaster.h:75
 TProofSuperMaster.h:76
 TProofSuperMaster.h:77
 TProofSuperMaster.h:78
 TProofSuperMaster.h:79
 TProofSuperMaster.h:80
 TProofSuperMaster.h:81
 TProofSuperMaster.h:82