// @(#)root/treeplayer:$Id$
// Author: Luca Giommi   22/08/16

/*************************************************************************
 * Copyright (C) 1995-2016, 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_TSimpleAnalysis
#define ROOT_TSimpleAnalysis

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TSimpleAnalysis                                                      //
//                                                                      //
// A TSimpleAnalysis object creates histograms from a TChain. These     //
// histograms are stored to an output file. The histogrammed            //
// (TTreeFormula) expressions, their cuts, the input and output files   //
// are configured through a simple config file that allows comments     //
// starting with '#'.                                                   //
//                                                                      //
//////////////////////////////////////////////////////////////////////////


#include <string>
#include <fstream>
#include <vector>
#include <map>

class TSimpleAnalysis {

private:
   std::string              fConfigFile; ///< Name of the configuration file
   std::vector<std::string> fInputFiles; ///< .root input files
   std::string              fOutputFile; ///< Output file in which are stored the histograms
   std::string              fTreeName; ///< Name of the input tree
   std::ifstream            fIn; ///< Stream for the input file

   //The map contains in the first part the names of the histograms written in the output file, in the
   //second part the pair of what is shown in the histograms and the cut applied on the variables
   std::map<std::string, std::pair<std::string, std::string>> fHists;

   //The elements of the enumeration refer to the different types of elements
   //that are in the input file
   enum EReadingWhat {
      kReadingOutput, ///< Reading the name of the output file
      kReadingTreeName, ///< Reading the name of the tree
      kReadingInput, ///< Reading the name of the .root input files
      kReadingExpressions ///< Reading the expressions
   };

   std::string HandleExpressionConfig(const std::string& line);
   std::string GetLine(int& numbLine);
   bool HandleInputFileNameConfig(const std::string& line);
   bool SetTreeName();


public:
   TSimpleAnalysis(const std::string& file): fConfigFile (file) {}
   TSimpleAnalysis(const std::string& output, const std::vector<std::string>& inputFiles,
                   const std::vector<std::string>& expressions, const std::string& treeName);
   bool Run();
   bool Configure();

};

bool RunSimpleAnalysis(const char* configurationFile);

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