Skip to content

Commit 4de779a

Browse files
committed
add separate finalStateID for dihadrons
1 parent 79e73bc commit 4de779a

File tree

4 files changed

+81
-9
lines changed

4 files changed

+81
-9
lines changed

macro/dihadrons/analysis.C

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
R__LOAD_LIBRARY(Sidis-eic)
2+
3+
void analysis(
4+
TString source="delphes",
5+
Double_t eleBeamEn=5, Double_t ionBeamEn=41
6+
// Double_t eleBeamEn=18, Double_t ionBeamEn=275
7+
)
8+
{
9+
Analysis *A;
10+
TString configFile, outfilePrefix;
11+
if(source=="delphes") {
12+
configFile = Form("datarec/delphes/%dx%d/delphes.config",(int)eleBeamEn,(int)ionBeamEn);
13+
outfilePrefix = Form("dihadrons.delphes.%dx%d",(int)eleBeamEn,(int)ionBeamEn);
14+
A = new AnalysisDelphes(configFile, outfilePrefix);
15+
} else {
16+
fmt::print(stderr,"ERROR: source '{}' not implemented\n",source);
17+
return;
18+
}
19+
20+
A->maxEvents = 30000; // limiter
21+
A->writeSimpleTree = true;
22+
A->SetReconMethod("Ele");
23+
A->includeOutputSet["1h"] = true;
24+
A->includeOutputSet["2h"] = true;
25+
26+
A->AddFinalState("pipTrack");
27+
A->AddFinalState("pimTrack");
28+
29+
// single-hadron cuts ====================================
30+
A->AddBinScheme("w"); A->BinScheme("w")->BuildBin("Min",3.0); // W > 3 GeV
31+
A->AddBinScheme("y"); A->BinScheme("y")->BuildBin("Range",0.01,0.95); // 0.01 < y < 0.95
32+
A->AddBinScheme("z"); A->BinScheme("z")->BuildBin("Range",0.2,0.9); // 0.2 < z < 0.9
33+
A->AddBinScheme("xF"); A->BinScheme("xF")->BuildBin("Min",0.0); // xF > 0
34+
A->AddBinScheme("ptLab"); A->BinScheme("ptLab")->BuildBin("Min",0.1); // pT_lab > 0.1 GeV (tracking limit)
35+
36+
A->Execute();
37+
};

src/Analysis.cxx

Lines changed: 38 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,9 @@ Analysis::Analysis(
6767
PIDtoFinalState.insert({ -321, "KmTrack" });
6868
PIDtoFinalState.insert({ 2212, "pTrack" });
6969

70+
// dihadrons
71+
availableBinSchemes.insert({ "dihMh", "M_{h}" });
72+
7073
// kinematics reconstruction methods
7174
// - choose one of these methods using `SetReconMethod(TString name)`
7275
// - if you specify none, a default method will be chosen
@@ -101,7 +104,6 @@ Analysis::Analysis(
101104
infiles.clear();
102105
entriesTot = 0;
103106
errorCnt = 0;
104-
dihSet = new DihadronSet();
105107
};
106108

107109

@@ -320,6 +322,38 @@ void Analysis::Prepare() {
320322
SetReconMethod("Ele");
321323
};
322324

325+
// if including dihadrons, define a dihadron final state
326+
if(includeOutputSet["2h"]) {
327+
if(activeFinalStates.size()!=2) {
328+
fmt::print(stderr,"ERROR: cannot include dihadron outputSet, since there should only be 2 final states defined\n");
329+
includeOutputSet["2h"] = false;
330+
} else {
331+
// add to dihSet
332+
dihSet = new DihadronSet();
333+
// set finalStateID and title
334+
TString dihadronFinalState = "";
335+
TString dihadronTitle = "";
336+
for(auto state : activeFinalStates) {
337+
dihadronFinalState += state + "_";
338+
dihadronTitle += finalStateToTitle.at(state);
339+
dihadronTitle(TRegexp(" .*")) = "";
340+
dihSet->IncludeHadron(state);
341+
}
342+
dihadronFinalState(TRegexp("_$")) = "";
343+
// aesthetic quick fix: re-order the name and title for pi+pi-
344+
if(dihadronFinalState=="pimTrack_pipTrack") {
345+
dihadronFinalState = "pipTrack_pimTrack";
346+
dihadronTitle = "#pi^{+}#pi^{-}";
347+
}
348+
dihadronTitle += " dihadrons";
349+
// add the new dihadron final state
350+
finalStateToTitle.insert({dihadronFinalState,dihadronTitle});
351+
fmt::print("DEFINE DIHADRON finalStateID='{}' title='{}'\n",dihadronFinalState,dihadronTitle);
352+
AddFinalState(dihadronFinalState);
353+
dihSet->SetFinalStateID(dihadronFinalState);
354+
}
355+
}
356+
323357
// build HistosDAG with specified binning
324358
HD = new HistosDAG();
325359
HD->Build(binSchemes);
@@ -347,7 +381,7 @@ void Analysis::Prepare() {
347381
HD->SetBinSchemeValue("tSpin", [this](){ return (Double_t)kin->tSpin; });
348382
HD->SetBinSchemeValue("lSpin", [this](){ return (Double_t)kin->lSpin; });
349383
/* dihadron */
350-
HD->SetBinSchemeValue("Mh", [this](){ return dih->Mh; });
384+
HD->SetBinSchemeValue("dihMh", [this](){ return dih->Mh; });
351385
/* jets */
352386
#ifndef EXCLUDE_DELPHES
353387
HD->SetBinSchemeValue("JetPT", [this](){ return kin->pTjet; });
@@ -478,7 +512,7 @@ void Analysis::Prepare() {
478512
}
479513
// -- dihadron kinematics
480514
if(includeOutputSet["2h"]) {
481-
HS->DefineHist1D("Mh","M_{h}","GeV",NBINS,0,5);
515+
HS->DefineHist1D("dihMh", "M_{h}", "GeV", 2*NBINS, 0, 5);
482516
}
483517
// -- jet kinematics
484518
#ifndef EXCLUDE_DELPHES
@@ -690,7 +724,6 @@ void Analysis::AddFinalState(TString finalStateN) {
690724
};
691725
BinScheme("finalState")->BuildExternalBin(finalStateN,finalStateT);
692726
activeFinalStates.insert(finalStateN);
693-
if(includeOutputSet["2h"]) dihSet->IncludeHadron(finalStateN);
694727
fmt::print("AddFinalState: name='{}'\n title='{}'\n",finalStateN,finalStateT);
695728
};
696729

@@ -795,7 +828,7 @@ void Analysis::FillHistosTracks() {
795828
void Analysis::FillHistosDihadrons() {
796829
HD->CheckBins();
797830
HD->Payload([this](Histos *H){
798-
H->FillHist1D("Mh", dih->Mh, wTrack);
831+
H->FillHist1D("dihMh", dih->Mh, wTrack);
799832
});
800833
HD->ExecuteOps(true);
801834
}

src/Dihadrons.cxx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,10 @@ void DihadronSet::CalculateKinematics(Analysis *A) {
4949
for(std::size_t i=0; i<dihListRec.size(); i++) {
5050
A->dih = &(dihListRec[i]);
5151
A->dihTrue = &(dihListGen[i]);
52-
auto finalStateID_tmp = A->finalStateID; // FIXME: this is a bad workaround to fill a single final state
53-
A->finalStateID = includedHadrons[0];
52+
auto finalStateID_tmp = A->finalStateID; // temporarily change Analysis::finalStateID
53+
A->finalStateID = dihadronFinalStateID; // to that of this DihadronSet
5454
A->FillHistosDihadrons();
55-
A->finalStateID = finalStateID_tmp; // revert bad workaround
55+
A->finalStateID = finalStateID_tmp; // revert Analysis::finalStateID
5656
}
5757

5858
// reset internal storage

src/Dihadrons.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,17 @@ class Dihadron {
1717

1818
class DihadronSet {
1919
public:
20-
DihadronSet() : debug(false) {};
20+
DihadronSet() : debug(false), dihadronFinalStateID("") {};
2121
~DihadronSet() {};
2222
void IncludeHadron(TString hadName);
2323
void AddHadron(Analysis *A);
24+
void SetFinalStateID(TString state) { dihadronFinalStateID = state; }
2425
void CalculateKinematics(Analysis *A);
2526
private:
2627
std::vector<TString> includedHadrons;
2728
std::map<TString,std::vector<TLorentzVector>> hadSetRec, hadSetGen;
2829
std::vector<Dihadron> dihListRec, dihListGen;
30+
TString dihadronFinalStateID;
2931
bool debug;
3032
ClassDef(DihadronSet,1);
3133
};

0 commit comments

Comments
 (0)