//////////////////////////////////////////////////////////////////////////
//                                                                      //
// 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.