/*****************************************************************************
 * Project: RooFit                                                           *
 * Package: RooFitCore                                                       *
 *    File: $Id$
 * Authors:                                                                  *
 *   WV, Wouter Verkerke, UC Santa Barbara, verkerke@slac.stanford.edu       *
 *   DK, David Kirkby,    UC Irvine,         dkirkby@uci.edu                 *
 *                                                                           *
 * Copyright (c) 2000-2005, Regents of the University of California          *
 *                          and Stanford University. All rights reserved.    *
 *                                                                           *
 * Redistribution and use in source and binary forms,                        *
 * with or without modification, are permitted according to the terms        *
 * listed in LICENSE (http://roofit.sourceforge.net/license.txt)             *
 *****************************************************************************/
#ifndef ROO_DATA_WEIGHTED_AVERAGE
#define ROO_DATA_WEIGHTED_AVERAGE

#include "RooAbsOptTestStatistic.h"
#include "RooCmdArg.h"

class RooDataWeightedAverage : public RooAbsOptTestStatistic {
public:

  // Constructors, assignment etc
  RooDataWeightedAverage() {
    // Default constructor
  } ;  

  RooDataWeightedAverage(const char *name, const char *title, RooAbsReal& real, RooAbsData& data, const RooArgSet& projDeps,
			 Int_t nCPU=1, RooFit::MPSplit interleave=RooFit::BulkPartition, Bool_t showProgress=kFALSE, Bool_t verbose=kTRUE) ;

  RooDataWeightedAverage(const RooDataWeightedAverage& other, const char* name=0);
  virtual TObject* clone(const char* newname) const { return new RooDataWeightedAverage(*this,newname); }

  virtual RooAbsTestStatistic* create(const char *name, const char *title, RooAbsReal& real, RooAbsData& adata,
				      const RooArgSet& projDeps, const char* /*rangeName*/=0, const char* /*addCoefRangeName*/=0, 
				      Int_t nCPU=1, RooFit::MPSplit interleave=RooFit::BulkPartition, Bool_t verbose=kTRUE, Bool_t /*splitCutRange*/=kFALSE, Bool_t = kFALSE) {
    // Virtual constructor
    return new RooDataWeightedAverage(name,title,real,adata,projDeps,nCPU,interleave,verbose) ;
  }

  virtual Double_t globalNormalization() const ;

  virtual ~RooDataWeightedAverage();


protected:

  Double_t _sumWeight ;  // Global sum of weights needed for normalization
  Bool_t _showProgress ; // Show progress indication during evaluation if true
  virtual Double_t evaluatePartition(Int_t firstEvent, Int_t lastEvent, Int_t stepSize) const ;
  
  ClassDef(RooDataWeightedAverage,1) // Optimized calculator of data weighted average of a RooAbsReal
};

#endif
 RooDataWeightedAverage.h:1
 RooDataWeightedAverage.h:2
 RooDataWeightedAverage.h:3
 RooDataWeightedAverage.h:4
 RooDataWeightedAverage.h:5
 RooDataWeightedAverage.h:6
 RooDataWeightedAverage.h:7
 RooDataWeightedAverage.h:8
 RooDataWeightedAverage.h:9
 RooDataWeightedAverage.h:10
 RooDataWeightedAverage.h:11
 RooDataWeightedAverage.h:12
 RooDataWeightedAverage.h:13
 RooDataWeightedAverage.h:14
 RooDataWeightedAverage.h:15
 RooDataWeightedAverage.h:16
 RooDataWeightedAverage.h:17
 RooDataWeightedAverage.h:18
 RooDataWeightedAverage.h:19
 RooDataWeightedAverage.h:20
 RooDataWeightedAverage.h:21
 RooDataWeightedAverage.h:22
 RooDataWeightedAverage.h:23
 RooDataWeightedAverage.h:24
 RooDataWeightedAverage.h:25
 RooDataWeightedAverage.h:26
 RooDataWeightedAverage.h:27
 RooDataWeightedAverage.h:28
 RooDataWeightedAverage.h:29
 RooDataWeightedAverage.h:30
 RooDataWeightedAverage.h:31
 RooDataWeightedAverage.h:32
 RooDataWeightedAverage.h:33
 RooDataWeightedAverage.h:34
 RooDataWeightedAverage.h:35
 RooDataWeightedAverage.h:36
 RooDataWeightedAverage.h:37
 RooDataWeightedAverage.h:38
 RooDataWeightedAverage.h:39
 RooDataWeightedAverage.h:40
 RooDataWeightedAverage.h:41
 RooDataWeightedAverage.h:42
 RooDataWeightedAverage.h:43
 RooDataWeightedAverage.h:44
 RooDataWeightedAverage.h:45
 RooDataWeightedAverage.h:46
 RooDataWeightedAverage.h:47
 RooDataWeightedAverage.h:48
 RooDataWeightedAverage.h:49
 RooDataWeightedAverage.h:50
 RooDataWeightedAverage.h:51
 RooDataWeightedAverage.h:52
 RooDataWeightedAverage.h:53
 RooDataWeightedAverage.h:54
 RooDataWeightedAverage.h:55
 RooDataWeightedAverage.h:56
 RooDataWeightedAverage.h:57