//////////////////////////////////////////////////////////////////////////
// //
// GFDstarPythia2 //
//
// Author: Gero Flucke
// Date: December 20th, 2004
// last update: $Date: 2005/11/07 18:47:03 $ (UTC)
// by: $Author: flucke $
// //
// For PYTHIA from hztool with massive BGF, resolved + massless //
// excitation //
// //
//////////////////////////////////////////////////////////////////////////
#include "GFDstarPythia2.h"
#include "GFAnalysis/GFAxisVariables.h"
#include "GFUtils/GFHistArray.h"
#include "GFUtils/GFHistManip.h"
#include "GFUtils/GFHistManager.h"
#include <TH1.h>
#include <TLegend.h>
#include <TFile.h>
#include <TObjArray.h>
#include <TObjString.h>
ClassImp(GFDstarPythia2)
//_________________________________________________________
GFDstarPythia2::GFDstarPythia2(const char *fileDir, const char *fileRes,
const char *fileExc, const char *rootDir,
const char *filePath)
: GFDstarVirtualHztool(rootDir, filePath),
fFileDir(fileDir), fFileRes(fileRes), fFileExc(fileExc)
{
}
//_________________________________________________________
GFDstarPythia2::~GFDstarPythia2()
{
}
// //_________________________________________________________
// void GFDstarPythia2::DrawHists(const char *var, Int_t flag, Bool_t rel)
// {
// // flag 0: final
// // 1: mass variation only
// // 2: scale variation only
// TObjArray *vars = this->CreateVarArray(var);
// fHistManager->SetBatch();
// fHistManager->Delete();
// for(Int_t i = 0; i < vars->GetEntriesFast(); ++i){
// GFHistArray *hists = NULL;
// TString vari;
// switch(flag){
// case 0:
// hists = this->CreateHistsFinal(vars->At(i)->GetName(), 0);
// vari = "final";
// break;
// case 1:
// hists = this->CreateHistsMass(vars->At(i)->GetName(), 0);
// vari = "m_{c}";
// break;
// case 2:
// hists = this->CreateHistsScale(vars->At(i)->GetName(), 0);
// vari = "#mu_{r}";
// break;
// }
// if(hists){
// hists->First()->SetTitle(Form("%s, %s variation", hists->At(0)->GetTitle(), vari.Data()));
// const Bool_t log = !rel && this->IsLog(vars->At(i)->GetName());
// const Int_t nHist = this->DrawTheHists(hists, NULL, log, kTRUE);
// const Int_t layer = fHistManager->GetNumLayers()-1;
// TLegend *leg = fHistManager->AddLegend(layer, nHist, this->GetName(), kFALSE);
// leg->SetTextAlign(22);
// leg->AddEntry(hists->At(1), "mean", "l");
// leg->AddEntry(hists->At(0), Form("%s up", vari.Data()), "l");
// leg->AddEntry(hists->At(2), Form("%s down", vari.Data()), "l");
// if(rel){
// hists->At(0)->Divide(hists->At(1));
// hists->At(2)->Divide(hists->At(1));
// hists->At(1)->Divide(hists->At(1));
// hists->At(0)->SetYTitle("#sigma/#sigma(mean)");
// hists->At(0)->GetYaxis()->CenterTitle();
// }
// }
// delete hists;
// }
// fHistManager->SetBatch(kFALSE);
// fHistManager->Draw();
// fHistManager->Update();// for the TExec added for log scale
// delete vars;
// }
//_________________________________________________________
GFHistArray* GFDstarPythia2::CreateHistsFinal(const char *var, Int_t dirResFlag)
{
// return this->CreateHistsUpDown(var, "", "", dirResFlag); // we have no error bars...
GFHistArray *result = new GFHistArray(3);
TH1 *h = NULL;
if(dirResFlag == 0){
h = this->CreateHist(var, "");
} else if(dirResFlag < 0){
h = this->CreateHistRes(var, "");
} else if(dirResFlag > 0){
h = this->CreateHistDir(var, "");
}
result->AddAt(NULL, 0);
result->AddAt(h, 1);
result->AddAt(NULL, 2);
return result;
}
//_________________________________________________________
TH1* GFDstarPythia2::CreateHist(const char *var, const char *note)
{
// get final dir+res for var with file-notifyer note (per bin width)
TH1 *hDir = this->CreateHistDir(var, note);
TH1 *hRes = this->CreateHistRes(var, note);
if(!hDir || !hRes){
delete hDir;
delete hRes;
return NULL;
}
const char *hName = this->GetHistName(var);
hDir->Add(hRes); // no sumw2, but fill!
TH1* hResult = GFHistManip::CreateAnalog(hDir, Form("%sSum", hName), kFALSE, kTRUE);
hResult->SetDirectory(NULL);
delete hDir;
delete hRes;
return hResult;
}
//_________________________________________________________
TH1* GFDstarPythia2::CreateHistDir(const char *var, const char *note)
{
// note maybe "" (currently)
TString hName = this->GetHistName(var);
TH1 *hDir = this->GetHist(hName.Data(), Form("%s%s.root", fFileDir.Data(), note));
if(hDir){
hDir->SetName(Form("%sDir", hName.Data()));
hDir->SetTitle(GFAxisVariables::GetAxisLabel(var));
hDir->SetXTitle(GFAxisVariables::GetAxisLabel(var));
hDir->SetYTitle(Form("%s#sigma [nb]", hDir->GetYaxis()->GetTitle()));
}
return hDir;
}
//_________________________________________________________
TH1* GFDstarPythia2::CreateHistRes(const char *var, const char *note)
{
// get res (= exc + massive res) for var with file-notifyer note (per bin width)
TH1 *hExc = this->CreateHistExcitation(var, note);
TH1 *hResM = this->CreateHistResMassive(var, note);
if(!hExc || !hResM){
delete hExc;
delete hResM;
return NULL;
}
const char *hName = this->GetHistName(var);
hExc->Add(hResM); // no sumw2, but fill!
TH1* hResult = GFHistManip::CreateAnalog(hExc, Form("%sAllRes", hName), kFALSE, kTRUE);
hResult->SetDirectory(NULL);
delete hExc;
delete hResM;
return hResult;
}
//_________________________________________________________
TH1* GFDstarPythia2::CreateHistExcitation(const char *var, const char *note)
{
// note maybe "" (currently)
TString hName = this->GetHistName(var);
TH1 *hExc = this->GetHist(hName.Data(), Form("%s%s.root", fFileExc.Data(), note));
if(hExc){
hExc->SetName(Form("%sExc", hName.Data()));
hExc->SetTitle(GFAxisVariables::GetAxisLabel(var));
hExc->SetXTitle(GFAxisVariables::GetAxisLabel(var));
hExc->SetYTitle(Form("%s#sigma [nb]", hExc->GetYaxis()->GetTitle()));
}
return hExc;
}
//_________________________________________________________
TH1* GFDstarPythia2::CreateHistResMassive(const char *var, const char *note)
{
// note maybe "" (currently)
TString hName = this->GetHistName(var);
TH1 *hResM = this->GetHist(hName.Data(), Form("%s%s.root", fFileRes.Data(), note));
if(hResM){
hResM->SetName(Form("%sRes", hName.Data()));
hResM->SetTitle(GFAxisVariables::GetAxisLabel(var));
hResM->SetXTitle(GFAxisVariables::GetAxisLabel(var));
hResM->SetYTitle(Form("%s#sigma [nb]", hResM->GetYaxis()->GetTitle()));
}
return hResM;
}
//_________________________________________________________
GFHistArray* GFDstarPythia2::CreateHistsFinalNorm(const char *var, Int_t dirResFlag)
{
// < 0 res, > 0 dir
TObjArray upDowns;
upDowns.SetOwner();
upDowns.Add(new TObjString(""));
// no variations!
return this->CreateHistsFinalNormInt(var, upDowns, dirResFlag);
}
//_________________________________________________________
TArrayD GFDstarPythia2::TotalCrossSec(ECrossSecType dstarJet, Int_t dirResFlag)
{
// returning array of length 3: total cross section, upper and lower bound
// FIXME: currently no variations for PYTHIA
//
// dirResFlag < 0: resolved only
// > 0: direct only
// = 0: sum
TObjArray upDowns;
upDowns.SetOwner();
upDowns.Add(new TObjString(""));
// upDowns.Add(new TObjString("-"));
// upDowns.Add(new TObjString("+"));
// upDowns.Add(new TObjString("m13"));
// upDowns.Add(new TObjString("m17"));
return this->TotalCrossSecInt(dstarJet, dirResFlag, upDowns);
}
//_________________________________________________________
const char* GFDstarPythia2::GetName() const
{
return "Pythia 6.2";
}
//_________________________________________________________
Bool_t GFDstarPythia2::ShouldApplyHadCor() const
{
// no hadronisation corrections should be applied for Pythia
return kFALSE;
}
ROOT page - Class index - Top of the page
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.