//____________________________________________________________________
//
// Class for information corresponding to the nominal case
//
// This class holds the information for the nominal case. It does not
// support any other systematic specific feature, but is needed to
// store and read the nominal histograms.
// 
//  
// Author: Soeren Stamm <mailto: stamm@physik.hu-berlin.de>
// Update: $Id: AtlHistFactorySystNominal.cxx,v 1.4 2016/04/19 07:46:15 stamm Exp $
// Copyright: 2015 (C) Soeren Stamm
//
#ifndef ATLAS_AtlHistFactorySystNominal
#include <AtlHistFactorySystNominal.h>
#endif
#include <TFile.h>
#include <HepDataMCPlot.h>

#ifndef __CINT__
ClassImp(AtlHistFactorySystNominal);
#endif

//____________________________________________________________________

AtlHistFactorySystNominal::AtlHistFactorySystNominal(const char* systname,
						     const char *systtitle) :
    AtlHistFactorySystematic(systname, systtitle, kFALSE) {
    //
    // Default constructor
    //

    fPlotterFileNom = 0;
    fNominal  = AtlTopLevelAnalysis::kNOMINAL; 
    fHistsNom = 0;

    fIsNominal = kTRUE;
}

//____________________________________________________________________

AtlHistFactorySystNominal::~AtlHistFactorySystNominal() {
    //
    // Default constructor
    //
    
    if ( fPlotterFileNom  != 0 ) delete fPlotterFileNom;
    
    if ( fHistsNom != 0 ) {
	fHistsNom->Delete();
	delete fHistsNom;
    }    
}

//____________________________________________________________________

void AtlHistFactorySystNominal::Initialize(const char* BaseDir,
					   const char* scheme) {
    //
    // Initialize for MCPlotter files
    //
    // Set the MCPlotter files for the nominal case.
    //
    // The file directory is
    // 'BaseDir' + 'systname' + "plots_datamc/MCPlotter.root"
    //
    // Get the list of templates from the HepDataMCPlots
    //
    
    fPlotterFileNom = TFile::Open(Form("%s/%s/%s/MCPlotter.root",
				       BaseDir,
				       AtlTopLevelAnalysis::fgSystematicNames[fNominal],
				       scheme));

    if ( fPlotterFileNom == 0 ) {
	Error("Initialize",
	      "Could not find MCPlotter file. Abort!");
	gSystem->Abort();
    }
    
    if ( fDiscriminant == 0 ) {
	Error("Initialize",
	      "Discriminant not set. Please use SetDiscriminant(..). Abort!");
	gSystem->Abort();
    }	
    
    HepDataMCPlot *HepNom = (HepDataMCPlot*) fPlotterFileNom->Get(fDiscriminant->Data());
    
    if ( HepNom == 0 ) {
	Error("Initialize",
	      "Could not find discriminant '%s' in file.",
	      fDiscriminant->Data());
	Error("Initialize", "Files is %s.",
	      fPlotterFileNom->GetName());
	gSystem->Abort();
    }

    fHistsNom  = HepNom->GetListOfMCTemplates(AtlTopLevelAnalysis::fgSystematicNames[fNominal]);
}

//____________________________________________________________________

void AtlHistFactorySystNominal::GetHistsFromFile(const char* process) {
    //
    // Change the process and load the corresponding informations
    // into the class data members.
    //

    // Nominal is already loaded by default. Nothing to be done here.
}

//____________________________________________________________________

void AtlHistFactorySystNominal::ComputeUpDownVariation(const char* process) {
    //
    // Get the nominal histogram for a given process
    //

    fHistNom = (TH1*) fHistsNom->FindObject(Form("%s_%s",
						 process,
						 AtlTopLevelAnalysis::fgSystematicNames[fNominal]));
}

//____________________________________________________________________

void AtlHistFactorySystNominal::Clear(Option_t *option) {
    //
    // Close MCPlottr files
    // - Do not close the template file. The class does not own this
    //   file. The owner of this file is responsible of closing it.
    //

    if ( fPlotterFileNom != 0 ) {
	fPlotterFileNom->Close();
	delete fPlotterFileNom;
	fPlotterFileNom = 0;
    }
    
    if ( fHistsNom != 0 ) {
	// fHistsNom->Delete();
	delete fHistsNom;
	fHistsNom = 0;
    }
}

//____________________________________________________________________

void AtlHistFactorySystNominal::SaveTemplates(TFile *fout) {
    //
    // Save the templates of the nominal case in the output file.
    //
    
    // Write() will save it to the current directory
    // therefore change the current directory
    fout->cd();
    
    fHistNom->SetDirectory(fout);
    fHistNom->Write();
}
 AtlHistFactorySystNominal.cxx:1
 AtlHistFactorySystNominal.cxx:2
 AtlHistFactorySystNominal.cxx:3
 AtlHistFactorySystNominal.cxx:4
 AtlHistFactorySystNominal.cxx:5
 AtlHistFactorySystNominal.cxx:6
 AtlHistFactorySystNominal.cxx:7
 AtlHistFactorySystNominal.cxx:8
 AtlHistFactorySystNominal.cxx:9
 AtlHistFactorySystNominal.cxx:10
 AtlHistFactorySystNominal.cxx:11
 AtlHistFactorySystNominal.cxx:12
 AtlHistFactorySystNominal.cxx:13
 AtlHistFactorySystNominal.cxx:14
 AtlHistFactorySystNominal.cxx:15
 AtlHistFactorySystNominal.cxx:16
 AtlHistFactorySystNominal.cxx:17
 AtlHistFactorySystNominal.cxx:18
 AtlHistFactorySystNominal.cxx:19
 AtlHistFactorySystNominal.cxx:20
 AtlHistFactorySystNominal.cxx:21
 AtlHistFactorySystNominal.cxx:22
 AtlHistFactorySystNominal.cxx:23
 AtlHistFactorySystNominal.cxx:24
 AtlHistFactorySystNominal.cxx:25
 AtlHistFactorySystNominal.cxx:26
 AtlHistFactorySystNominal.cxx:27
 AtlHistFactorySystNominal.cxx:28
 AtlHistFactorySystNominal.cxx:29
 AtlHistFactorySystNominal.cxx:30
 AtlHistFactorySystNominal.cxx:31
 AtlHistFactorySystNominal.cxx:32
 AtlHistFactorySystNominal.cxx:33
 AtlHistFactorySystNominal.cxx:34
 AtlHistFactorySystNominal.cxx:35
 AtlHistFactorySystNominal.cxx:36
 AtlHistFactorySystNominal.cxx:37
 AtlHistFactorySystNominal.cxx:38
 AtlHistFactorySystNominal.cxx:39
 AtlHistFactorySystNominal.cxx:40
 AtlHistFactorySystNominal.cxx:41
 AtlHistFactorySystNominal.cxx:42
 AtlHistFactorySystNominal.cxx:43
 AtlHistFactorySystNominal.cxx:44
 AtlHistFactorySystNominal.cxx:45
 AtlHistFactorySystNominal.cxx:46
 AtlHistFactorySystNominal.cxx:47
 AtlHistFactorySystNominal.cxx:48
 AtlHistFactorySystNominal.cxx:49
 AtlHistFactorySystNominal.cxx:50
 AtlHistFactorySystNominal.cxx:51
 AtlHistFactorySystNominal.cxx:52
 AtlHistFactorySystNominal.cxx:53
 AtlHistFactorySystNominal.cxx:54
 AtlHistFactorySystNominal.cxx:55
 AtlHistFactorySystNominal.cxx:56
 AtlHistFactorySystNominal.cxx:57
 AtlHistFactorySystNominal.cxx:58
 AtlHistFactorySystNominal.cxx:59
 AtlHistFactorySystNominal.cxx:60
 AtlHistFactorySystNominal.cxx:61
 AtlHistFactorySystNominal.cxx:62
 AtlHistFactorySystNominal.cxx:63
 AtlHistFactorySystNominal.cxx:64
 AtlHistFactorySystNominal.cxx:65
 AtlHistFactorySystNominal.cxx:66
 AtlHistFactorySystNominal.cxx:67
 AtlHistFactorySystNominal.cxx:68
 AtlHistFactorySystNominal.cxx:69
 AtlHistFactorySystNominal.cxx:70
 AtlHistFactorySystNominal.cxx:71
 AtlHistFactorySystNominal.cxx:72
 AtlHistFactorySystNominal.cxx:73
 AtlHistFactorySystNominal.cxx:74
 AtlHistFactorySystNominal.cxx:75
 AtlHistFactorySystNominal.cxx:76
 AtlHistFactorySystNominal.cxx:77
 AtlHistFactorySystNominal.cxx:78
 AtlHistFactorySystNominal.cxx:79
 AtlHistFactorySystNominal.cxx:80
 AtlHistFactorySystNominal.cxx:81
 AtlHistFactorySystNominal.cxx:82
 AtlHistFactorySystNominal.cxx:83
 AtlHistFactorySystNominal.cxx:84
 AtlHistFactorySystNominal.cxx:85
 AtlHistFactorySystNominal.cxx:86
 AtlHistFactorySystNominal.cxx:87
 AtlHistFactorySystNominal.cxx:88
 AtlHistFactorySystNominal.cxx:89
 AtlHistFactorySystNominal.cxx:90
 AtlHistFactorySystNominal.cxx:91
 AtlHistFactorySystNominal.cxx:92
 AtlHistFactorySystNominal.cxx:93
 AtlHistFactorySystNominal.cxx:94
 AtlHistFactorySystNominal.cxx:95
 AtlHistFactorySystNominal.cxx:96
 AtlHistFactorySystNominal.cxx:97
 AtlHistFactorySystNominal.cxx:98
 AtlHistFactorySystNominal.cxx:99
 AtlHistFactorySystNominal.cxx:100
 AtlHistFactorySystNominal.cxx:101
 AtlHistFactorySystNominal.cxx:102
 AtlHistFactorySystNominal.cxx:103
 AtlHistFactorySystNominal.cxx:104
 AtlHistFactorySystNominal.cxx:105
 AtlHistFactorySystNominal.cxx:106
 AtlHistFactorySystNominal.cxx:107
 AtlHistFactorySystNominal.cxx:108
 AtlHistFactorySystNominal.cxx:109
 AtlHistFactorySystNominal.cxx:110
 AtlHistFactorySystNominal.cxx:111
 AtlHistFactorySystNominal.cxx:112
 AtlHistFactorySystNominal.cxx:113
 AtlHistFactorySystNominal.cxx:114
 AtlHistFactorySystNominal.cxx:115
 AtlHistFactorySystNominal.cxx:116
 AtlHistFactorySystNominal.cxx:117
 AtlHistFactorySystNominal.cxx:118
 AtlHistFactorySystNominal.cxx:119
 AtlHistFactorySystNominal.cxx:120
 AtlHistFactorySystNominal.cxx:121
 AtlHistFactorySystNominal.cxx:122
 AtlHistFactorySystNominal.cxx:123
 AtlHistFactorySystNominal.cxx:124
 AtlHistFactorySystNominal.cxx:125
 AtlHistFactorySystNominal.cxx:126
 AtlHistFactorySystNominal.cxx:127
 AtlHistFactorySystNominal.cxx:128
 AtlHistFactorySystNominal.cxx:129
 AtlHistFactorySystNominal.cxx:130
 AtlHistFactorySystNominal.cxx:131
 AtlHistFactorySystNominal.cxx:132
 AtlHistFactorySystNominal.cxx:133
 AtlHistFactorySystNominal.cxx:134
 AtlHistFactorySystNominal.cxx:135
 AtlHistFactorySystNominal.cxx:136
 AtlHistFactorySystNominal.cxx:137
 AtlHistFactorySystNominal.cxx:138
 AtlHistFactorySystNominal.cxx:139
 AtlHistFactorySystNominal.cxx:140
 AtlHistFactorySystNominal.cxx:141
 AtlHistFactorySystNominal.cxx:142
 AtlHistFactorySystNominal.cxx:143
 AtlHistFactorySystNominal.cxx:144
 AtlHistFactorySystNominal.cxx:145
 AtlHistFactorySystNominal.cxx:146
 AtlHistFactorySystNominal.cxx:147
 AtlHistFactorySystNominal.cxx:148
 AtlHistFactorySystNominal.cxx:149
 AtlHistFactorySystNominal.cxx:150
 AtlHistFactorySystNominal.cxx:151
 AtlHistFactorySystNominal.cxx:152
 AtlHistFactorySystNominal.cxx:153
 AtlHistFactorySystNominal.cxx:154
 AtlHistFactorySystNominal.cxx:155
 AtlHistFactorySystNominal.cxx:156
 AtlHistFactorySystNominal.cxx:157
 AtlHistFactorySystNominal.cxx:158
 AtlHistFactorySystNominal.cxx:159