// @(#)root/roostats:$Id$
// Author: Sven Kreiss and Kyle Cranmer    June 2010
/*************************************************************************
 * Copyright (C) 1995-2008, 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 ROOSTATS_ToyMCStudy
#define ROOSTATS_ToyMCStudy

//_________________________________________________
/*
BEGIN_HTML
<p>
ToyMCStudy is an implementation of RooAbsStudy for toy Monte Carlo sampling.
This class is automatically used by ToyMCSampler when given a ProofConfig.
This is also its intended use case.
</p>
END_HTML
*/
//

#ifndef ROOT_Rtypes
#include "Rtypes.h"
#endif

#include "RooAbsStudy.h"

#include "RooStats/ToyMCSampler.h"
#include "RooStats/SamplingDistribution.h"

#include "RooWorkspace.h"
#include "RooArgSet.h"

#include "RooDataSet.h"
#include "RooLinkedList.h"
#include "RooLinkedListIter.h"

#include <vector>

namespace RooStats {

class ToyMCStudy: public RooAbsStudy {

   public:
      // need to have constructor without arguments for proof
      ToyMCStudy(const char *name = "ToyMCStudy", const char *title = "ToyMCStudy") :
         RooAbsStudy(name, title),
         fRandomSeed(0),
         fToyMCSampler(NULL)
      {
         // In this case, this is the normal output. The SamplingDistribution
         // instances are stored as detailed output.
         storeDetailedOutput(kTRUE);
      }

	   RooAbsStudy* clone(const char* /*newname*/="") const { return new ToyMCStudy(*this) ; }     

      virtual ~ToyMCStudy() {}

      // RooAbsStudy interfaces
      virtual Bool_t initialize(void);
      virtual Bool_t execute(void);
      virtual Bool_t finalize(void);

      RooDataSet* merge();

      void SetToyMCSampler(ToyMCSampler& t) { fToyMCSampler = &t; }
      void SetParamPoint(const RooArgSet& paramPoint) { fParamPoint.add(paramPoint); }

      void SetRandomSeed(unsigned int seed) { fRandomSeed = seed; } 

   protected:

      unsigned int fRandomSeed; 
      ToyMCSampler *fToyMCSampler;
      RooArgSet fParamPoint;

   protected:
   ClassDef(ToyMCStudy,2); // toy MC study for parallel processing
   
};


class ToyMCPayload : public TNamed {
   
   public:
      
      ToyMCPayload() {
         // proof constructor, do not use
	 fDataSet = NULL;
      }

      ToyMCPayload(RooDataSet* sd)
      {
         fDataSet = sd;
      }
      
      virtual ~ToyMCPayload() {
      }


      RooDataSet* GetSamplingDistributions()
      {
         return fDataSet;
      }
   
   private:
      RooDataSet* fDataSet;
   
   protected:
   ClassDef(ToyMCPayload,1);
};


}


#endif
 ToyMCStudy.h:1
 ToyMCStudy.h:2
 ToyMCStudy.h:3
 ToyMCStudy.h:4
 ToyMCStudy.h:5
 ToyMCStudy.h:6
 ToyMCStudy.h:7
 ToyMCStudy.h:8
 ToyMCStudy.h:9
 ToyMCStudy.h:10
 ToyMCStudy.h:11
 ToyMCStudy.h:12
 ToyMCStudy.h:13
 ToyMCStudy.h:14
 ToyMCStudy.h:15
 ToyMCStudy.h:16
 ToyMCStudy.h:17
 ToyMCStudy.h:18
 ToyMCStudy.h:19
 ToyMCStudy.h:20
 ToyMCStudy.h:21
 ToyMCStudy.h:22
 ToyMCStudy.h:23
 ToyMCStudy.h:24
 ToyMCStudy.h:25
 ToyMCStudy.h:26
 ToyMCStudy.h:27
 ToyMCStudy.h:28
 ToyMCStudy.h:29
 ToyMCStudy.h:30
 ToyMCStudy.h:31
 ToyMCStudy.h:32
 ToyMCStudy.h:33
 ToyMCStudy.h:34
 ToyMCStudy.h:35
 ToyMCStudy.h:36
 ToyMCStudy.h:37
 ToyMCStudy.h:38
 ToyMCStudy.h:39
 ToyMCStudy.h:40
 ToyMCStudy.h:41
 ToyMCStudy.h:42
 ToyMCStudy.h:43
 ToyMCStudy.h:44
 ToyMCStudy.h:45
 ToyMCStudy.h:46
 ToyMCStudy.h:47
 ToyMCStudy.h:48
 ToyMCStudy.h:49
 ToyMCStudy.h:50
 ToyMCStudy.h:51
 ToyMCStudy.h:52
 ToyMCStudy.h:53
 ToyMCStudy.h:54
 ToyMCStudy.h:55
 ToyMCStudy.h:56
 ToyMCStudy.h:57
 ToyMCStudy.h:58
 ToyMCStudy.h:59
 ToyMCStudy.h:60
 ToyMCStudy.h:61
 ToyMCStudy.h:62
 ToyMCStudy.h:63
 ToyMCStudy.h:64
 ToyMCStudy.h:65
 ToyMCStudy.h:66
 ToyMCStudy.h:67
 ToyMCStudy.h:68
 ToyMCStudy.h:69
 ToyMCStudy.h:70
 ToyMCStudy.h:71
 ToyMCStudy.h:72
 ToyMCStudy.h:73
 ToyMCStudy.h:74
 ToyMCStudy.h:75
 ToyMCStudy.h:76
 ToyMCStudy.h:77
 ToyMCStudy.h:78
 ToyMCStudy.h:79
 ToyMCStudy.h:80
 ToyMCStudy.h:81
 ToyMCStudy.h:82
 ToyMCStudy.h:83
 ToyMCStudy.h:84
 ToyMCStudy.h:85
 ToyMCStudy.h:86
 ToyMCStudy.h:87
 ToyMCStudy.h:88
 ToyMCStudy.h:89
 ToyMCStudy.h:90
 ToyMCStudy.h:91
 ToyMCStudy.h:92
 ToyMCStudy.h:93
 ToyMCStudy.h:94
 ToyMCStudy.h:95
 ToyMCStudy.h:96
 ToyMCStudy.h:97
 ToyMCStudy.h:98
 ToyMCStudy.h:99
 ToyMCStudy.h:100
 ToyMCStudy.h:101
 ToyMCStudy.h:102
 ToyMCStudy.h:103
 ToyMCStudy.h:104
 ToyMCStudy.h:105
 ToyMCStudy.h:106
 ToyMCStudy.h:107
 ToyMCStudy.h:108
 ToyMCStudy.h:109
 ToyMCStudy.h:110
 ToyMCStudy.h:111
 ToyMCStudy.h:112
 ToyMCStudy.h:113
 ToyMCStudy.h:114
 ToyMCStudy.h:115
 ToyMCStudy.h:116
 ToyMCStudy.h:117
 ToyMCStudy.h:118
 ToyMCStudy.h:119
 ToyMCStudy.h:120
 ToyMCStudy.h:121
 ToyMCStudy.h:122