@@ -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() {
795828void 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}
0 commit comments