//
// MC sample inside HepDataMCPlotter
// Helper class for creating the histogram stacks
//
//  
// Author: Oliver Maria Kind <mailto: kind@mail.desy.de>
// Update: $Id: HepDataMCSample.cxx,v 1.4 2014/11/18 14:56:10 stamm Exp $
// Copyright: 2009 (C) Oliver Maria Kind
//
#ifndef HEP_HepDataMCSample
#include <HepDataMCSample.h>
#endif
#include <iostream>
#include <TSystem.h>

using namespace std;

#ifndef __CINT__
ClassImp(HepDataMCSample);
#endif

//____________________________________________________________________

HepDataMCSample::HepDataMCSample() {
    //
    // Default constructor
    //
    fFile = 0;
    fHistogram = 0;
}

//____________________________________________________________________

HepDataMCSample::HepDataMCSample(const char* name, const char* title,
				 Color_t color, Style_t line_style,
				 Width_t line_width, Style_t fill_style) :
    TNamed(name, title), fAttFill(color, fill_style),
    fAttLine(color, line_style, line_width) {
    //
    // Normal constructor
    //
    fNEvents = 0.;
    fXsection = 0.;
    fLumi = 0.;
    fFile = 0;
    fHistogram = 0;
}

//____________________________________________________________________

HepDataMCSample::~HepDataMCSample() {
    //
    // Default destructor
    //
    Info("~HepDataMCSample", "Sample = %s", GetName());
    if ( fFile != 0 ) {
 	Info("~HepDataMCSample", "File = %s", fFile->GetName());
 	cout.flush();
	delete fFile; fFile = 0;
    }
    fHistogram = 0;
}

//____________________________________________________________________

TFile* HepDataMCSample::Open() {
    //
    // Open histogram file for reading.
    //
    // Read also the weighted number of events contained in this
    // sample. In a first attempt the JobInfo histogram is tried. If
    // this cannot be found the original CutFlow histogram from the
    // Top-D3PDs is searched for.
    //
    if ( fFile == 0 ) {
	fFile = new TFile(GetName(), "read");

	// Look for JobInfo histogram. If this doesn't exist try
	// cut-flow
	Float_t  nevt = 0.;
	TH1F *h = (TH1F*)fFile->Get("job_info/h_nevts");
	if ( h != 0 ) {
	    nevt = h->GetBinContent(3);
	} else {
	    h = (TH1F*)fFile->Get("fullCutFlow_genXpileupXzvertexWeights");
	    if ( h != 0 ) nevt = h->GetBinContent(1);
	}

	// Set lumi
	if ( fLumi <= 0. ) {
	    if ( h == 0 ) {
		Error("Open",
		      "Cannot find histogram for number of events in file %s needed to compute the luminosity. Abort!",
		      fFile->GetName());
		gSystem->Abort(0);
	    }
	    fNEvents = nevt;
	}
    }
    return fFile;
}

//____________________________________________________________________

void HepDataMCSample::Close() {
    //
    // Close histogram file
    //
    if ( fFile != 0 ) delete fFile;
    fFile = 0;
}

//____________________________________________________________________

Float_t HepDataMCSample::GetLumi() const {
    //
    // Get luminosity (pb^-1)
    //
    // In case the luminosity had been set via SetLumi() beforehand
    // this number will be returned. Otherwiese the luminosity
    // calculated from the given x-section and the number of processed
    // events is returned (this is the standard case).
    //
    return ( fLumi > 0. ) ? fLumi : fNEvents/fXsection;
}

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