//////////////////////////////////////////////////////////////////////////
// //
// GFDstarPythia //
// //
// //
// Author: Gero Flucke //
// Date: Jan 6th, 2005 //
// last update: $Date: 2005/11/07 18:47:03 $
// by: $Author: flucke $
// //
//////////////////////////////////////////////////////////////////////////
#include <TObjString.h>
#include "GFDstarPythia.h"
#include "GFAnalysis/GFDstarHistsAnalysisMc.h"
#include "GFUtils/GFHistManip.h"
#include "GFUtils/GFHistArray.h"
ClassImp(GFDstarPythia)
////////////////////////////////////////////////////////////
GFDstarPythia::GFDstarPythia(const char *histMcLabel)
{
fMc = new GFDstarHistsAnalysisMc(histMcLabel, "Pythia");
fMc->SetBatch();
fMcDir = new GFDstarHistsAnalysisMc(histMcLabel, "DirCharm");
fMcDir->SetBatch();
fMcRes = new GFDstarHistsAnalysisMc(histMcLabel, "ResCharmA");
fMcRes->SetBatch();
fMcExc = new GFDstarHistsAnalysisMc(histMcLabel, "CharmEx");
fMcExc->SetBatch();
}
////////////////////////////////////////////////////////////
GFDstarPythia::~GFDstarPythia()
{
delete fMc;
delete fMcDir;
delete fMcRes;
delete fMcExc;
}
// virtual void DrawHists(const char *var, Int_t flag, Bool_t rel = kFALSE);
//_________________________________________________________
GFHistArray* GFDstarPythia::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 GFDstarPythia::TotalCrossSec(ECrossSecType dstarJet, Int_t dirResFlag)
{
// < 0 res, > 0 dir, == 0 complete
if(dirResFlag > 0){
if (dstarJet == 1) return fMcDir->XSectionTotDsJet("");
else if(dstarJet == 2) return fMcDir->XSectionTotDsDiJet();
else return fMcDir->XSectionTot();
} else if(dirResFlag == 0){
if (dstarJet == 1) return fMc->XSectionTotDsJet("");
else if(dstarJet == 2) return fMc->XSectionTotDsDiJet();
else return fMc->XSectionTot();
} else {
if (dstarJet == 1) {
TArrayD res = fMcRes->XSectionTotDsJet("");
TArrayD exc = fMcExc->XSectionTotDsJet("");
TArrayD result(2);
result[0] = res[0] + exc[0]; // ignore error
return result;
} else if (dstarJet == 2) {
TArrayD res = fMcRes->XSectionTotDsDiJet();
TArrayD exc = fMcExc->XSectionTotDsDiJet();
TArrayD result(2);
result[0] = res[0] + exc[0]; // ignore error
return result;
} else {
TArrayD res = fMcRes->XSectionTot();
TArrayD exc = fMcExc->XSectionTot();
TArrayD result(2);
result[0] = res[0] + exc[0]; // ignore error
return result;
}
}
}
////////////////////////////////////////////////////////////
GFHistArray* GFDstarPythia::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* GFDstarPythia::CreateHistFrom(const char *var, const char *note, GFDstarHistsAnalysisMc *mc) const
{
if(!mc) return NULL;
if(TString(note) != "") this->Warning("CreateHistFrom", "Ignore note '%s'", note);
TH1 *hResult = NULL;
switch(this->IsDsJetOrDs(var)){
case GFDstarVirtualTheory::kInclusive:
hResult = mc->XSection(var);
break;
case GFDstarVirtualTheory::kDstarJet:
hResult = mc->XSectionDsJet(var, "");
break;
case GFDstarVirtualTheory::kDiJet:
hResult = mc->XSectionDsDiJet(var);
break;
case GFDstarVirtualTheory::kInclDoubleDiff:
{
TString var1, var2;
Int_t bin1 = -1, bin2 = -1;
if(this->DecodeDoubleDiff(var, var1, var2, bin1, bin2)){
hResult = mc->XSection(var1, var2, bin1, bin2);
} else {
this->Error("CreateHistFrom", "Could not decode %s for incl. double diff.", var);
}
}
break;
case kUnknown:
this->Error("CreateHistFrom", "kUnkown from IsDsJetOrDs");
}
if(hResult) {
hResult->SetDirectory(NULL);// cf. below // no sumw2, but fill
hResult = GFHistManip::CreateAnalog(hResult, hResult->GetName(), kFALSE, kTRUE);
hResult->SetDirectory(NULL);
}
mc->GetHistManager()->Delete();// will delete the first hResult
return hResult;
}
////////////////////////////////////////////////////////////
TH1* GFDstarPythia::CreateHist(const char *var, const char *note)
{
return this->CreateHistFrom(var, note, fMc);
}
////////////////////////////////////////////////////////////
TH1* GFDstarPythia::CreateHistDir(const char *var, const char *note)
{
return this->CreateHistFrom(var, note, fMcDir);
}
////////////////////////////////////////////////////////////
TH1* GFDstarPythia::CreateHistResMassive(const char *var, const char *note)
{
return this->CreateHistFrom(var, note, fMcRes);
}
////////////////////////////////////////////////////////////
TH1* GFDstarPythia::CreateHistExcitation(const char *var, const char *note)
{
return this->CreateHistFrom(var, note, fMcExc);
}
////////////////////////////////////////////////////////////
TH1* GFDstarPythia::CreateHistRes(const char *var, const char *note)
{
TH1 *hRes = this->CreateHistResMassive(var, note);
TH1 *hExc = this->CreateHistExcitation(var, note);
TH1 *hResult = NULL;
if(hRes && hExc) {
hRes->Add(hExc);// no sumw2, but fill
hResult = GFHistManip::CreateAnalog(hRes, hRes->GetName(), kFALSE, kTRUE);
hResult->SetDirectory(NULL);
} else {
this->Error("CreateHistRes", "missing hist for res. (%p) or exc. (%p)", hRes, hExc);
}
delete hRes;
delete hExc;
return hResult;
}
////////////////////////////////////////////////////////////
const char* GFDstarPythia::GetName() const
{
return "Pythia 6.1";
}
////////////////////////////////////////////////////////////
Bool_t GFDstarPythia::ShouldApplyHadCor() const
{
// no hadronisation corrections should be applied for Pythia
return kFALSE;
}
////////////////////////////////////////////////////////////
Bool_t GFDstarPythia::DecodeDoubleDiff(const char *var, TString& var1, TString& var2,
Int_t& bin1, Int_t& bin2) const
{
TString thisVar(var);
if(thisVar.BeginsWith("pteta")){
if(thisVar.Length() >= 7){
var1 = "pt";
var2 = "eta";
bin1 = thisVar[5] - '0';
bin2 = thisVar[6] - '0';
return kTRUE;
}
} else if(thisVar.BeginsWith("etapt")){
if(thisVar.Length() >= 7){
var1 = "eta";
var2 = "pt";
bin1 = thisVar[5] - '0';
bin2 = thisVar[6] - '0';
return kTRUE;
}
} else if(thisVar.BeginsWith("zDspt")){
if(thisVar.Length() >= 7){
var1 = "zDs";
var2 = "pt";
bin1 = thisVar[5] - '0';
bin2 = thisVar[6] - '0';
return kTRUE;
}
} else if(thisVar.BeginsWith("ptzDs")){
if(thisVar.Length() >= 7){
var1 = "pt";
var2 = "zDs";
bin1 = thisVar[5] - '0';
bin2 = thisVar[6] - '0';
return kTRUE;
}
} else if(thisVar.BeginsWith("zDseta")){
if(thisVar.Length() >= 8){
var1 = "zDs";
var2 = "eta";
bin1 = thisVar[6] - '0';
bin2 = thisVar[7] - '0';
return kTRUE;
}
} else if(thisVar.BeginsWith("etazDs")){
if(thisVar.Length() >= 8){
var1 = "eta";
var2 = "zDs";
bin1 = thisVar[6] - '0';
bin2 = thisVar[7] - '0';
return kTRUE;
}
}
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.