//____________________________________________________________________
//
// Class for fraction fit on a given HepDataMCPlot
// 
//
//  
// Author: Umberto Prosperi Porta <mailto: umberto.prosperi@physik.hu-berlin.de>
// Update: $Id: HepFractionFitterTask.cxx,v 1.1 2011/08/22 04:19:28 kind Exp $
// Copyright: 2011 (C) Umberto Prosperi Porta
//



#ifndef HEP_HepFractionFitterTask
#include <HepFractionFitterTask.h>
#endif
#include <TFractionFitter.h>
#include <HepDataMCPlot.h>
#include <TString.h>
#include <TFile.h>
#include <TList.h>
#include <TH1F.h>
#include <TObjArray.h>
#include <iostream>

using namespace std;

#ifndef __CINT__
ClassImp(HepFractionFitterTask);
#endif

//____________________________________________________________________
HepFractionFitterTask::HepFractionFitterTask(const char* name,
					 const char* title) : TTask(name, title) {
    //
    // Default constructor


       
}

//____________________________________________________________________

HepFractionFitterTask::~HepFractionFitterTask() {
    //
    // Default destructor
    //

}
//____________________________________________________________________

void HepFractionFitterTask::SetInputFilename(const char* InputFilename) {

    //
    // Set name of input file containing HepDataMCPlot
    // with the histograms for the fit
    //       
       

    fInputFilename.Remove(0);
    fInputFilename.Append(InputFilename);
}
//____________________________________________________________________

void HepFractionFitterTask::SetHepDataMCPlotName(const char* HepDataMCPlotName) {
    //
    // Set name of HepDataMCPlot
    //
    fHepDataMCPlotName.Remove(0);
    fHepDataMCPlotName.Append(HepDataMCPlotName);
}


//____________________________________________________________________

void HepFractionFitterTask::Exec(Option_t *option) {
    //
    // Execute task
    //
   
   
    f_input = new TFile(fInputFilename,"READ");
    fHepDataMCPlot = (HepDataMCPlot*)f_input->Get(fHepDataMCPlotName);


    Nmc = fHepDataMCPlot->GetMCHistStack()->GetHists()->GetEntries();

    TObjArray *mc = new TObjArray(Nmc);

    for(int i=0; i<fHepDataMCPlot->GetMCHistStack()->GetHists()->GetEntries(); i++){

	mc->Add((TH1F*)fHepDataMCPlot->GetMCHistStack()->GetHists()->At(i));

    }

    fHistDATA = (TH1F*)fHepDataMCPlot->GetHistDATA();
    
    TFractionFitter *fit = new TFractionFitter(fHistDATA,mc);


    //  fit->Constrain(1,0.0,1.0);               // constrain fraction 1 to be between 0 and 1
    fit->SetRangeX(1,7);                         // use only the first 7 bins in the fit

    
    Int_t status = fit->Fit();                   // perform the fit
 
    TString currentworkingdir ="$LIBQCDANALYSIS/hist/";
    TString filename = "FractionFitter.root";
    new TFile(currentworkingdir+filename,"RECREATE");
    

    
    cout << "fit status: " << status << endl;
    if (status == 0) {                       // check on fit status

	TH1F* result = (TH1F*) fit->GetPlot();

	fHistDATA->Write();

	result->Write();
	
    }



    

}






























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