// @(#)root/roostats:$Id$
// Author: George Lewis, Kyle Cranmer
/*************************************************************************
 * 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 HISTFACTORY_CHANNEL_H
#define HISTFACTORY_CHANNEL_H

#include <string>
#include <fstream>
#include <iostream>


#include "RooStats/HistFactory/Data.h"
#include "RooStats/HistFactory/Sample.h"
#include "RooStats/HistFactory/Systematics.h"

namespace RooStats{
namespace HistFactory {

class Channel  {


public:
  friend class Measurement;

  Channel();
  Channel(const Channel& other);
  Channel(std::string Name, std::string InputFile="");

  // set name of channel
  void SetName( const std::string& Name ) { fName = Name; }
  // get name of channel
  std::string GetName() { return fName; }
  // set name of input file containing histograms
  void SetInputFile( const std::string& file ) { fInputFile = file; }
  // get name of input file
  std::string GetInputFile() { return fInputFile; }
  // set path for histograms in input file
  void SetHistoPath( const std::string& file ) { fHistoPath = file; }
  // get path to histograms in input file
  std::string GetHistoPath() { return fHistoPath; }

  // set data object
  void SetData( const RooStats::HistFactory::Data& data ) { fData = data; }
  void SetData( std::string HistoName, std::string InputFile, std::string HistoPath="" );
  void SetData( double Val );
  void SetData( TH1* hData );
  // get data object
  RooStats::HistFactory::Data& GetData() { return fData; }

  // add additional data object
  void AddAdditionalData( const RooStats::HistFactory::Data& data ) { fAdditionalData.push_back(data); }
  // retrieve vector of additional data objects
  std::vector<RooStats::HistFactory::Data>& GetAdditionalData() { return fAdditionalData; }

  void SetStatErrorConfig( double RelErrorThreshold, Constraint::Type ConstraintType );
  void SetStatErrorConfig( double RelErrorThreshold, std::string ConstraintType );
  // define treatment of statistical uncertainties
  void SetStatErrorConfig( RooStats::HistFactory::StatErrorConfig Config ) { fStatErrorConfig = Config; }
  // get information about threshold for statistical uncertainties and constraint term
  HistFactory::StatErrorConfig& GetStatErrorConfig() { return fStatErrorConfig; }

  void AddSample( RooStats::HistFactory::Sample sample );
  // get vector of samples for this channel
  std::vector< RooStats::HistFactory::Sample >& GetSamples() { return fSamples; }

  void Print(std::ostream& = std::cout);  
  void PrintXML( std::string Directory, std::string Prefix="" );

  void CollectHistograms();
  bool CheckHistograms();

protected:
  
  std::string fName;
  std::string fInputFile;
  std::string fHistoPath;

  HistFactory::Data fData;

  // One can add additional datasets
  // These are simply added to the xml under a different name
  std::vector<RooStats::HistFactory::Data> fAdditionalData;

  HistFactory::StatErrorConfig fStatErrorConfig;

  std::vector< RooStats::HistFactory::Sample > fSamples;

  // Open a file and copy a histogram
  TH1* GetHistogram( std::string InputFile, std::string HistoPath, std::string HistoName );


};

  extern Channel BadChannel;
 
} // namespace HistFactory
} // namespace RooStats

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