//____________________________________________________________________
//
// Class for storing information on HistFactory Measuremant parameters
//
// Stores various parameters for a HistFactory measurement:
//  - a list of channels
//  - lumi, lumi rel. error
//    (see HistFactory documentation for more details)
//  - parameter of interest (poi)
//    (currently only one poi is possible)
//
// All output is stored in <outdir>.
//
// - see AtlHistFactoryTask for more details
//  
// Author: Soeren Stamm <mailto: stamm@physik.hu-berlin.de>
// Update: $Id: AtlHistFactoryMeasurement.cxx,v 1.11 2016/04/19 07:46:18 stamm Exp $
// Copyright: 2015 (C) Soeren Stamm
//
#ifndef ATLAS_AtlHistFactoryMeasurement
#include <AtlHistFactoryMeasurement.h>
#endif
#include <AtlHistFactoryChannel.h>
#include <AtlHistFactorySample.h>
#include <AtlHistFactorySystematic.h>
#include <TList.h>
#include <TObjString.h>
#include <TString.h>

#ifndef __CINT__
ClassImp(AtlHistFactoryMeasurement);
#endif

//____________________________________________________________________

AtlHistFactoryMeasurement::AtlHistFactoryMeasurement(const char* name,
						     const char* title,
						     const char* out_dir,
						     const char* scheme,
						     const char* out_prefix) :
    TNamed(name, title) {
    //
    // Default constructor
    //
    fOutputDir = new TString(out_dir);
    fOutPrefix = new TString(out_prefix);
    fScheme    = new TString(scheme);
    
    fListOfChannels = new TList;

    fPOIs = new TList;
    fLumi = 0.;
    fLumiRelError = 0.;

    fBinLow  = -1; // full range of discriminant is considered
    fBinHigh = -1; // by default

    fUseAsimovData = kTRUE;
    fUsePseudoExp  = kFALSE;
    fExportShapePlots = kFALSE;
    fExportCorrMatrix = kFALSE;
    fRunPulls = kFALSE;
    fNoSystematics = kFALSE;
}

//____________________________________________________________________

AtlHistFactoryMeasurement::~AtlHistFactoryMeasurement() {
    //
    // Default destructor
    //
    delete fOutputDir;
    delete fListOfChannels;
}

//____________________________________________________________________

void AtlHistFactoryMeasurement::AddChannel(AtlHistFactoryChannel *ch) {
    //
    // Add channel to list of channels
    //
    
    fListOfChannels->Add(ch);
}

//____________________________________________________________________

void AtlHistFactoryMeasurement::AddPOI(const char* poi) {
    //
    // Add parameter of interest (POI)
    //
    if ( fPOIs->FindObject(poi) == 0 )
	fPOIs->Add(new TObjString(poi));
    else
	Warning("AddPOI", "Parameter of interest already added. Do not add it again.");
}

//____________________________________________________________________

void AtlHistFactoryMeasurement::SetDrawOptions(const char* sample_name,
					       Color_t fill_color,
					       Style_t fill_style,
					       Color_t line_color,
					       Style_t line_style) {
    //
    // Set draw options for given sample in all channels
    //
    
    TIter next_channel(fListOfChannels);
    AtlHistFactoryChannel *ch = 0;
    while ( (ch = (AtlHistFactoryChannel*) next_channel()) ) {
	TList *samples = ch->GetListOfSamples();
	
	AtlHistFactorySample *sample = (AtlHistFactorySample*) samples->FindObject(sample_name);
	if ( sample != 0 ) {
	    // channel not necessarily contains this sample
	    sample->SetDrawOptions(fill_color, fill_style,
				   line_color, line_style);
	}
    }

}

//____________________________________________________________________

TString* AtlHistFactoryMeasurement::GetModelFileName(const char* channel) {
    //
    // Return the file name to the model root file.
    //
    // The user is responsible for deleting the returned pointer.
    //
    
    TString *filename = new TString(Form("%s/%s_%s_%s_model.root",
					 fOutputDir->Data(),
					 fOutPrefix->Data(),
					 channel, GetName()));
    return filename;
}
 AtlHistFactoryMeasurement.cxx:1
 AtlHistFactoryMeasurement.cxx:2
 AtlHistFactoryMeasurement.cxx:3
 AtlHistFactoryMeasurement.cxx:4
 AtlHistFactoryMeasurement.cxx:5
 AtlHistFactoryMeasurement.cxx:6
 AtlHistFactoryMeasurement.cxx:7
 AtlHistFactoryMeasurement.cxx:8
 AtlHistFactoryMeasurement.cxx:9
 AtlHistFactoryMeasurement.cxx:10
 AtlHistFactoryMeasurement.cxx:11
 AtlHistFactoryMeasurement.cxx:12
 AtlHistFactoryMeasurement.cxx:13
 AtlHistFactoryMeasurement.cxx:14
 AtlHistFactoryMeasurement.cxx:15
 AtlHistFactoryMeasurement.cxx:16
 AtlHistFactoryMeasurement.cxx:17
 AtlHistFactoryMeasurement.cxx:18
 AtlHistFactoryMeasurement.cxx:19
 AtlHistFactoryMeasurement.cxx:20
 AtlHistFactoryMeasurement.cxx:21
 AtlHistFactoryMeasurement.cxx:22
 AtlHistFactoryMeasurement.cxx:23
 AtlHistFactoryMeasurement.cxx:24
 AtlHistFactoryMeasurement.cxx:25
 AtlHistFactoryMeasurement.cxx:26
 AtlHistFactoryMeasurement.cxx:27
 AtlHistFactoryMeasurement.cxx:28
 AtlHistFactoryMeasurement.cxx:29
 AtlHistFactoryMeasurement.cxx:30
 AtlHistFactoryMeasurement.cxx:31
 AtlHistFactoryMeasurement.cxx:32
 AtlHistFactoryMeasurement.cxx:33
 AtlHistFactoryMeasurement.cxx:34
 AtlHistFactoryMeasurement.cxx:35
 AtlHistFactoryMeasurement.cxx:36
 AtlHistFactoryMeasurement.cxx:37
 AtlHistFactoryMeasurement.cxx:38
 AtlHistFactoryMeasurement.cxx:39
 AtlHistFactoryMeasurement.cxx:40
 AtlHistFactoryMeasurement.cxx:41
 AtlHistFactoryMeasurement.cxx:42
 AtlHistFactoryMeasurement.cxx:43
 AtlHistFactoryMeasurement.cxx:44
 AtlHistFactoryMeasurement.cxx:45
 AtlHistFactoryMeasurement.cxx:46
 AtlHistFactoryMeasurement.cxx:47
 AtlHistFactoryMeasurement.cxx:48
 AtlHistFactoryMeasurement.cxx:49
 AtlHistFactoryMeasurement.cxx:50
 AtlHistFactoryMeasurement.cxx:51
 AtlHistFactoryMeasurement.cxx:52
 AtlHistFactoryMeasurement.cxx:53
 AtlHistFactoryMeasurement.cxx:54
 AtlHistFactoryMeasurement.cxx:55
 AtlHistFactoryMeasurement.cxx:56
 AtlHistFactoryMeasurement.cxx:57
 AtlHistFactoryMeasurement.cxx:58
 AtlHistFactoryMeasurement.cxx:59
 AtlHistFactoryMeasurement.cxx:60
 AtlHistFactoryMeasurement.cxx:61
 AtlHistFactoryMeasurement.cxx:62
 AtlHistFactoryMeasurement.cxx:63
 AtlHistFactoryMeasurement.cxx:64
 AtlHistFactoryMeasurement.cxx:65
 AtlHistFactoryMeasurement.cxx:66
 AtlHistFactoryMeasurement.cxx:67
 AtlHistFactoryMeasurement.cxx:68
 AtlHistFactoryMeasurement.cxx:69
 AtlHistFactoryMeasurement.cxx:70
 AtlHistFactoryMeasurement.cxx:71
 AtlHistFactoryMeasurement.cxx:72
 AtlHistFactoryMeasurement.cxx:73
 AtlHistFactoryMeasurement.cxx:74
 AtlHistFactoryMeasurement.cxx:75
 AtlHistFactoryMeasurement.cxx:76
 AtlHistFactoryMeasurement.cxx:77
 AtlHistFactoryMeasurement.cxx:78
 AtlHistFactoryMeasurement.cxx:79
 AtlHistFactoryMeasurement.cxx:80
 AtlHistFactoryMeasurement.cxx:81
 AtlHistFactoryMeasurement.cxx:82
 AtlHistFactoryMeasurement.cxx:83
 AtlHistFactoryMeasurement.cxx:84
 AtlHistFactoryMeasurement.cxx:85
 AtlHistFactoryMeasurement.cxx:86
 AtlHistFactoryMeasurement.cxx:87
 AtlHistFactoryMeasurement.cxx:88
 AtlHistFactoryMeasurement.cxx:89
 AtlHistFactoryMeasurement.cxx:90
 AtlHistFactoryMeasurement.cxx:91
 AtlHistFactoryMeasurement.cxx:92
 AtlHistFactoryMeasurement.cxx:93
 AtlHistFactoryMeasurement.cxx:94
 AtlHistFactoryMeasurement.cxx:95
 AtlHistFactoryMeasurement.cxx:96
 AtlHistFactoryMeasurement.cxx:97
 AtlHistFactoryMeasurement.cxx:98
 AtlHistFactoryMeasurement.cxx:99
 AtlHistFactoryMeasurement.cxx:100
 AtlHistFactoryMeasurement.cxx:101
 AtlHistFactoryMeasurement.cxx:102
 AtlHistFactoryMeasurement.cxx:103
 AtlHistFactoryMeasurement.cxx:104
 AtlHistFactoryMeasurement.cxx:105
 AtlHistFactoryMeasurement.cxx:106
 AtlHistFactoryMeasurement.cxx:107
 AtlHistFactoryMeasurement.cxx:108
 AtlHistFactoryMeasurement.cxx:109
 AtlHistFactoryMeasurement.cxx:110
 AtlHistFactoryMeasurement.cxx:111
 AtlHistFactoryMeasurement.cxx:112
 AtlHistFactoryMeasurement.cxx:113
 AtlHistFactoryMeasurement.cxx:114
 AtlHistFactoryMeasurement.cxx:115
 AtlHistFactoryMeasurement.cxx:116
 AtlHistFactoryMeasurement.cxx:117
 AtlHistFactoryMeasurement.cxx:118
 AtlHistFactoryMeasurement.cxx:119
 AtlHistFactoryMeasurement.cxx:120
 AtlHistFactoryMeasurement.cxx:121
 AtlHistFactoryMeasurement.cxx:122
 AtlHistFactoryMeasurement.cxx:123
 AtlHistFactoryMeasurement.cxx:124
 AtlHistFactoryMeasurement.cxx:125
 AtlHistFactoryMeasurement.cxx:126
 AtlHistFactoryMeasurement.cxx:127
 AtlHistFactoryMeasurement.cxx:128
 AtlHistFactoryMeasurement.cxx:129
 AtlHistFactoryMeasurement.cxx:130
 AtlHistFactoryMeasurement.cxx:131
 AtlHistFactoryMeasurement.cxx:132
 AtlHistFactoryMeasurement.cxx:133
 AtlHistFactoryMeasurement.cxx:134
 AtlHistFactoryMeasurement.cxx:135
 AtlHistFactoryMeasurement.cxx:136
 AtlHistFactoryMeasurement.cxx:137
 AtlHistFactoryMeasurement.cxx:138