// @(#)root/roostats:$Id$
// Author: Kyle Cranmer, Akira Shibata
/*************************************************************************
 * 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_CONFIGPARSER_h
#define ROOSTATS_CONFIGPARSER_h


#include <cstdlib>
#include <string>
#include <TXMLNode.h>

#include "TList.h"
#include "TFile.h"
#include "TXMLAttr.h"

#include "RooStats/HistFactory/Channel.h"
#include "RooStats/HistFactory/Measurement.h"
#include "RooStats/HistFactory/Sample.h"


namespace RooStats{
   namespace HistFactory {

     class ConfigParser {

     public:

       // The "main" method
       std::vector< RooStats::HistFactory::Measurement > GetMeasurementsFromXML(std::string input); 
       RooStats::HistFactory::Measurement CreateMeasurementFromDriverNode( TXMLNode* node );
       RooStats::HistFactory::Channel ParseChannelXMLFile( std::string filen );

       // Helpers used to process a channel
       HistFactory::Data CreateDataElement( TXMLNode* node );
       HistFactory::Sample CreateSampleElement( TXMLNode* node );
       HistFactory::StatErrorConfig CreateStatErrorConfigElement( TXMLNode* node );

       // Helpers used when processing a Sample
       HistFactory::NormFactor  MakeNormFactor( TXMLNode* node );
       HistFactory::HistoSys    MakeHistoSys( TXMLNode* node );
       HistFactory::HistoFactor MakeHistoFactor( TXMLNode* node );
       HistFactory::OverallSys  MakeOverallSys( TXMLNode* node );
       HistFactory::ShapeFactor MakeShapeFactor( TXMLNode* node );
       HistFactory::ShapeSys    MakeShapeSys( TXMLNode* node );
       HistFactory::StatError   ActivateStatError( TXMLNode* node );
       HistFactory::PreprocessFunction ParseFunctionConfig( TXMLNode* functionNode );

     protected:

       bool CheckTrueFalse( std::string val, std::string Name );
       bool IsAcceptableNode( TXMLNode* functionNode );

       // To facilitate writing xml, when not
       // specified, files and paths default
       // to these cached values
       std::string m_currentInputFile;
       std::string m_currentChannel;
       std::string m_currentHistoPath;

     };
   }
}

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