Skip to content

Commit 6f37a46

Browse files
Add dimuon channels in Exodus decayer (#21)
* Add swtich to simulate dimuon channels * Small modification of notes * Modified mass shape of eta 2-body decay * Modified mass shape of eta 2-body decay * rename TH1F fEPMassEtaDalitz --------- Co-authored-by: Daniel Samitz <[email protected]>
1 parent e4204ff commit 6f37a46

File tree

4 files changed

+161
-52
lines changed

4 files changed

+161
-52
lines changed

GeneratorParam/ExodusDecayer.cxx

Lines changed: 70 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ ClassImp(ExodusDecayer)
1919
ExodusDecayer::ExodusDecayer():
2020
fEPMassPion(0),
2121
fEPMassEta(0),
22+
fEPMassEtaDalitz(0),
2223
fEPMassEtaPrime(0),
2324
fEPMassEtaPrime_toOmega(0),
2425
fEPMassRho(0),
@@ -29,7 +30,8 @@ ExodusDecayer::ExodusDecayer():
2930
fEPMassPhiDalitz_toPi0(0),
3031
fEPMassJPsi(0),
3132
fPol(new TF1("dsigdcostheta","1.+[0]*x*x",-1.,1.)), /* Polarization Function for resonances */
32-
fInit(0)
33+
fInit(0),
34+
fDecayToDimuon(0)
3335

3436
{
3537
// Constructor
@@ -39,6 +41,7 @@ ExodusDecayer::~ExodusDecayer()
3941
{
4042
delete fEPMassPion;
4143
delete fEPMassEta;
44+
delete fEPMassEtaDalitz;
4245
delete fEPMassEtaPrime;
4346
delete fEPMassEtaPrime_toOmega;
4447
delete fEPMassRho;
@@ -67,12 +70,12 @@ void ExodusDecayer::Init()
6770
Double_t kwHelp_pion, kwHelp_eta, kwHelp_omega, kwHelp_etaprime, kwHelp_etaprime_toOmega, kwHelp_phi, kwHelp_phi_toPi0;
6871
Double_t krollWada_pion, krollWada_eta, krollWada_omega, krollWada_etaprime, krollWada_etaprime_toOmega, krollWada_phi, krollWada_phi_toPi0;
6972
Double_t formFactor_pion, formFactor_eta, formFactor_omega, formFactor_etaprime, formFactor_etaprime_toOmega, formFactor_phi, formFactor_phi_toPi0;
70-
Double_t weight_pion, weight_eta, weight_omega_dalitz, weight_etaprime, weight_etaprime_toOmega, weight_phi_dalitz, weight_phi_dalitz_toPi0;
73+
Double_t weight_pion, weight_eta_dalitz, weight_omega_dalitz, weight_etaprime, weight_etaprime_toOmega, weight_phi_dalitz, weight_phi_dalitz_toPi0;
7174

7275
Float_t binwidth;
7376
Float_t mass_bin, mass_min, mass_max;
74-
Double_t vmass_rho, vmass_omega, vmass_phi, vmass_jpsi, vwidth_rho, vwidth_omega, vwidth_phi, vwidth_jpsi;
75-
Double_t weight_rho, weight_omega, weight_phi, weight_jpsi;
77+
Double_t vmass_eta, vmass_rho, vmass_omega, vmass_phi, vmass_jpsi, vwidth_eta, vwidth_rho, vwidth_omega, vwidth_phi, vwidth_jpsi;
78+
Double_t weight_eta, weight_rho, weight_omega, weight_phi, weight_jpsi;
7679

7780
//================================================================================//
7881
// Create electron pair mass histograms from dalitz decays //
@@ -89,7 +92,8 @@ void ExodusDecayer::Init()
8992
etaprimemass = (TDatabasePDG::Instance()->GetParticle(331))->Mass();
9093
phimass = (TDatabasePDG::Instance()->GetParticle(333))->Mass();
9194
// child - electron
92-
emass = (TDatabasePDG::Instance()->GetParticle(11))->Mass();
95+
if (fDecayToDimuon == 0) emass = (TDatabasePDG::Instance()->GetParticle(11))->Mass();
96+
else emass = (TDatabasePDG::Instance()->GetParticle(13))->Mass();
9397
// child - other : third childs from Dalitz decays
9498
omasspion = pionmass;
9599
omasseta = etamass;
@@ -101,7 +105,8 @@ void ExodusDecayer::Init()
101105
maxomega = omegamass - pionmass;
102106
maxetaprime = etaprimemass - omassgamma;
103107
maxetaprime_toOmega = etaprimemass - omegamass;
104-
maxphi = phimass - omasseta;
108+
if (fDecayToDimuon == 0) maxphi = phimass - omasseta;
109+
else maxphi = phimass - omassgamma;
105110
maxphi_toPi0 = phimass - pionmass;
106111

107112
binwidth_pion = (maxpion - min) / (Double_t)nbins;
@@ -127,14 +132,15 @@ void ExodusDecayer::Init()
127132
delta_omega = (omasspion / omegamass) * (omasspion / omegamass);
128133
delta_etaprime = (omassgamma / etaprimemass) * (omassgamma / etaprimemass);
129134
delta_etaprime_toOmega = (omegamass / etaprimemass) * (omegamass / etaprimemass);
130-
delta_phi = (omasseta / phimass) * (omasseta / phimass);
135+
if (fDecayToDimuon == 0) delta_phi = (omasseta / phimass) * (omasseta / phimass);
136+
else delta_phi = (omassgamma / phimass) * (omassgamma / phimass);
131137
delta_phi_toPi0 = (pionmass / phimass) * (pionmass / phimass);
132138

133139
// create pair mass histograms for Dalitz decays of pi0, eta, omega, eta' and phi
134140
fEPMassPion = new TH1F("fEPMassPion", "Dalitz electron pair from pion", nbins, min, maxpion);
135141
fEPMassPion->SetDirectory(0);
136-
fEPMassEta = new TH1F("fEPMassEta", "Dalitz electron pair from eta", nbins, min, maxeta);
137-
fEPMassEta->SetDirectory(0);
142+
fEPMassEtaDalitz = new TH1F("fEPMassEtaDalitz", "Dalitz electron pair from eta", nbins, min, maxeta);
143+
fEPMassEtaDalitz->SetDirectory(0);
138144
fEPMassOmegaDalitz = new TH1F("fEPMassOmegaDalitz", "Dalitz electron pair from omega ", nbins, min, maxomega);
139145
fEPMassOmegaDalitz->SetDirectory(0);
140146
fEPMassEtaPrime = new TH1F("fEPMassEtaPrime", "Dalitz electron pair from etaprime", nbins, min, maxetaprime);
@@ -167,10 +173,18 @@ void ExodusDecayer::Init()
167173
q_phi = (mLL_phi / phimass) * (mLL_phi / phimass);
168174
q_phi_toPi0 = (mLL_phi_toPi0 / phimass) * (mLL_phi_toPi0 / phimass);
169175

170-
if ( q_pion <= 4.0 * epsilon_pion || q_eta <= 4.0 * epsilon_eta || q_omega <= 4.0 * epsilon_omega || q_etaprime <= 4.0 * epsilon_etaprime || q_etaprime_toOmega <= 4.0 * epsilon_etaprime_toOmega || q_phi <= 4.0 * epsilon_phi || q_phi_toPi0 <= 4.0 * epsilon_phi_toPi0 )
171-
{
172-
printf("ExodusDecayer: Error in calculating Dalitz mass histogram binning!\n");
173-
}
176+
if (fDecayToDimuon == 0)
177+
{
178+
if ( q_pion <= 4.0 * epsilon_pion || q_eta <= 4.0 * epsilon_eta || q_omega <= 4.0 * epsilon_omega || q_etaprime <= 4.0 * epsilon_etaprime || q_etaprime_toOmega <= 4.0 * epsilon_etaprime_toOmega || q_phi <= 4.0 * epsilon_phi || q_phi_toPi0 <= 4.0 * epsilon_phi_toPi0 )
179+
{
180+
printf("ExodusDecayer: Error in calculating Dalitz mass histogram binning!\n");
181+
}
182+
} else {
183+
if ( q_eta <= 4.0 * epsilon_eta || q_omega <= 4.0 * epsilon_omega || q_etaprime <= 4.0 * epsilon_etaprime || q_phi <= 4.0 * epsilon_phi)
184+
{
185+
printf("ExodusDecayer: Error in calculating Dalitz mass histogram binning!\n");
186+
}
187+
}
174188

175189

176190
kwHelp_pion = (1.0 + q_pion / (1.0 - delta_pion)) * (1.0 + q_pion / (1.0 - delta_pion))
@@ -186,7 +200,6 @@ void ExodusDecayer::Init()
186200
- 4.0 * q_etaprime / ((1.0 - delta_etaprime) * (1.0 - delta_etaprime));
187201
kwHelp_etaprime_toOmega = (1.0 + q_etaprime_toOmega / (1.0 - delta_etaprime_toOmega)) * (1.0 + q_etaprime_toOmega / (1.0 - delta_etaprime_toOmega))
188202
- 4.0 * q_etaprime_toOmega / ((1.0 - delta_etaprime_toOmega) * (1.0 - delta_etaprime_toOmega));
189-
190203
kwHelp_phi = (1.0 + q_phi / (1.0 - delta_phi)) * (1.0 + q_phi / (1.0 - delta_phi))
191204
- 4.0 * q_phi / ((1.0 - delta_phi) * (1.0 - delta_phi));
192205
kwHelp_phi_toPi0 = (1.0 + q_phi_toPi0 / (1.0 - delta_phi_toPi0)) * (1.0 + q_phi_toPi0 / (1.0 - delta_phi_toPi0))
@@ -195,11 +208,18 @@ void ExodusDecayer::Init()
195208

196209

197210

198-
if ( kwHelp_pion <= 0.0 || kwHelp_eta <= 0.0 || kwHelp_omega <= 0.0 || kwHelp_etaprime <= 0.0 || kwHelp_etaprime_toOmega <= 0.0 || kwHelp_phi <= 0.0 || kwHelp_phi_toPi0 <= 0.0 )
199-
{
200-
printf("ExodusDecayer: Error in calculating Dalitz mass histogram binning!\n");
201-
202-
}
211+
if (fDecayToDimuon == 0)
212+
{
213+
if ( kwHelp_pion <= 0.0 || kwHelp_eta <= 0.0 || kwHelp_omega <= 0.0 || kwHelp_etaprime <= 0.0 || kwHelp_etaprime_toOmega <= 0.0 || kwHelp_phi <= 0.0 || kwHelp_phi_toPi0 <= 0.0 )
214+
{
215+
printf("ExodusDecayer: Error in calculating Dalitz mass histogram binning!\n");
216+
}
217+
} else {
218+
if ( kwHelp_eta <= 0.0 || kwHelp_omega <= 0.0 || kwHelp_etaprime <= 0.0 || kwHelp_phi <= 0.0)
219+
{
220+
printf("ExodusDecayer: Error in calculating Dalitz mass histogram binning!\n");
221+
}
222+
}
203223

204224

205225
// Invariant mass distributions of electron pairs from Dalitz decays
@@ -261,7 +281,7 @@ void ExodusDecayer::Init()
261281

262282

263283
weight_pion = krollWada_pion * formFactor_pion * formFactor_pion;
264-
weight_eta = krollWada_eta * formFactor_eta * formFactor_eta;
284+
weight_eta_dalitz = krollWada_eta * formFactor_eta * formFactor_eta;
265285
weight_omega_dalitz = krollWada_omega * formFactor_omega;
266286
weight_etaprime = krollWada_etaprime * formFactor_etaprime;
267287
weight_etaprime_toOmega = krollWada_etaprime_toOmega * formFactor_etaprime_toOmega;
@@ -271,7 +291,7 @@ void ExodusDecayer::Init()
271291

272292
// Fill histograms of electron pair masses from dalitz decays
273293
fEPMassPion ->AddBinContent(ibin, weight_pion);
274-
fEPMassEta ->AddBinContent(ibin, weight_eta);
294+
fEPMassEtaDalitz ->AddBinContent(ibin, weight_eta_dalitz);
275295
fEPMassOmegaDalitz->AddBinContent(ibin, weight_omega_dalitz);
276296
fEPMassEtaPrime ->AddBinContent(ibin, weight_etaprime);
277297
fEPMassEtaPrime_toOmega ->AddBinContent(ibin, weight_etaprime_toOmega);
@@ -290,12 +310,14 @@ void ExodusDecayer::Init()
290310

291311
// Get the particle masses
292312
// parent
313+
vmass_eta = (TDatabasePDG::Instance()->GetParticle(221))->Mass();
293314
vmass_rho = (TDatabasePDG::Instance()->GetParticle(113))->Mass();
294315
vmass_omega = (TDatabasePDG::Instance()->GetParticle(223))->Mass();
295316
vmass_phi = (TDatabasePDG::Instance()->GetParticle(333))->Mass();
296317
vmass_jpsi = (TDatabasePDG::Instance()->GetParticle(443))->Mass();
297318
// Get the particle widths
298319
// parent
320+
vwidth_eta = (TDatabasePDG::Instance()->GetParticle(221))->Width();
299321
vwidth_rho = (TDatabasePDG::Instance()->GetParticle(113))->Width();
300322
vwidth_omega = (TDatabasePDG::Instance()->GetParticle(223))->Width();
301323
vwidth_phi = (TDatabasePDG::Instance()->GetParticle(333))->Width();
@@ -316,6 +338,8 @@ void ExodusDecayer::Init()
316338
binwidth = (mass_max-mass_min)/(Double_t)nbins;
317339

318340
// create pair mass histograms for resonances of rho, omega, phi and jpsi
341+
fEPMassEta = new TH1F("fEPMassEta","mass eta",nbins,mass_min,mass_max);
342+
fEPMassEta->SetDirectory(0);
319343
fEPMassRho = new TH1F("fEPMassRho","mass rho",nbins,mass_min,mass_max);
320344
fEPMassRho->SetDirectory(0);
321345
fEPMassOmega = new TH1F("fEPMassOmega","mass omega",nbins,mass_min,mass_max);
@@ -330,13 +354,15 @@ void ExodusDecayer::Init()
330354
mass_bin = mass_min+(Double_t)(ibin-1)*binwidth+binwidth/2.0;
331355

332356
// weight_rho = (Float_t)GounarisSakurai(mass_bin,vmass_rho,vwidth_rho,emass);
357+
weight_eta = (Float_t)Lorentz(mass_bin,vmass_eta,vwidth_eta);
333358
weight_rho = (Float_t)RhoShapeFromNA60(mass_bin,vmass_rho,vwidth_rho,emass);
334359

335360
weight_omega = (Float_t)GounarisSakurai(mass_bin,vmass_omega,vwidth_omega,emass);
336361
weight_phi = (Float_t)GounarisSakurai(mass_bin,vmass_phi,vwidth_phi,emass);
337362
weight_jpsi = (Float_t)Lorentz(mass_bin,vmass_jpsi,vwidth_jpsi);
338363

339364
// Fill histograms of electron pair masses from resonance decays
365+
fEPMassEta ->AddBinContent(ibin,weight_eta);
340366
fEPMassRho ->AddBinContent(ibin,weight_rho);
341367
fEPMassOmega->AddBinContent(ibin,weight_omega);
342368
fEPMassPhi ->AddBinContent(ibin,weight_phi);
@@ -391,6 +417,7 @@ Double_t ExodusDecayer::RhoShapeFromNA60(Float_t mass, Double_t vmass, Double_t
391417
//HERE hack: substitute original muon mass for electron mass:
392418
//Double_t mMu = TDatabasePDG::Instance()->GetParticle("mu-")->Mass();
393419
Double_t mMu = TDatabasePDG::Instance()->GetParticle("e-")->Mass();
420+
if (fDecayToDimuon == 1) mMu = TDatabasePDG::Instance()->GetParticle("mu-")->Mass();
394421

395422
const double Norm = 0.0744416*1.01;
396423
// 0.0744416 at m = 0.72297
@@ -468,7 +495,8 @@ void ExodusDecayer::Decay(Int_t idpart, TLorentzVector* pparent)
468495

469496
// Get the particle masses of daughters
470497
Double_t emass, proton_mass, omass_pion, omass_eta, omass_gamma, omass_omega;
471-
emass = (TDatabasePDG::Instance()->GetParticle(11)) ->Mass();
498+
if (fDecayToDimuon == 0) emass = (TDatabasePDG::Instance()->GetParticle(11))->Mass();
499+
else emass = (TDatabasePDG::Instance()->GetParticle(13))->Mass();
472500
proton_mass = (TDatabasePDG::Instance()->GetParticle(2212)) ->Mass();
473501
omass_pion = (TDatabasePDG::Instance()->GetParticle(111))->Mass();
474502
omass_eta = (TDatabasePDG::Instance()->GetParticle(221))->Mass();
@@ -500,7 +528,7 @@ void ExodusDecayer::Decay(Int_t idpart, TLorentzVector* pparent)
500528
epmass = fEPMassPion->GetRandom();
501529
realp_mass=omass_gamma;
502530
}else if(idpart==idEta){
503-
epmass = fEPMassEta->GetRandom();
531+
epmass = fEPMassEtaDalitz->GetRandom();
504532
realp_mass=omass_gamma;
505533
}else if(idpart==idOmega){
506534
epmass = fEPMassOmegaDalitz->GetRandom();
@@ -509,17 +537,20 @@ void ExodusDecayer::Decay(Int_t idpart, TLorentzVector* pparent)
509537
if(idpartner==22){
510538
epmass = fEPMassEtaPrime->GetRandom();
511539
realp_mass=omass_gamma;
512-
}else if (idpartner==223){
540+
}else if (idpartner==223 && fDecayToDimuon == 0){
513541
epmass = fEPMassEtaPrime_toOmega->GetRandom();
514542
realp_mass=omass_omega;
515543
}
516544
}else if(idpart==idPhi){
517-
if(idpartner==221){
545+
if(idpartner==221 && fDecayToDimuon == 0){
518546
epmass = fEPMassPhiDalitz->GetRandom();
519547
realp_mass=omass_eta;
520-
}else if (idpartner==111){
548+
}else if (idpartner==111 && fDecayToDimuon == 0){
521549
epmass = fEPMassPhiDalitz_toPi0->GetRandom();
522550
realp_mass=omass_pion;
551+
}else if (idpartner==22 && fDecayToDimuon == 1){
552+
epmass = fEPMassPhiDalitz->GetRandom();
553+
realp_mass=omass_gamma;
523554
}
524555

525556
}else{ printf("ExodusDecyer: ERROR: Dalitz mass parametrization not found \n");
@@ -599,9 +630,9 @@ void ExodusDecayer::Decay(Int_t idpart, TLorentzVector* pparent)
599630
fProducts_pion[1]=fProducts_dalitz[1];
600631
fProducts_pion[2]=fProducts_dalitz[2];
601632
}else if(idpart==idEta){
602-
fProducts_eta[0]=fProducts_dalitz[0];
603-
fProducts_eta[1]=fProducts_dalitz[1];
604-
fProducts_eta[2]=fProducts_dalitz[2];
633+
fProducts_eta_dalitz[0]=fProducts_dalitz[0];
634+
fProducts_eta_dalitz[1]=fProducts_dalitz[1];
635+
fProducts_eta_dalitz[2]=fProducts_dalitz[2];
605636
}else if(idpart==idOmega){
606637
fProducts_omega_dalitz[0]=fProducts_dalitz[0];
607638
fProducts_omega_dalitz[1]=fProducts_dalitz[1];
@@ -623,7 +654,7 @@ void ExodusDecayer::Decay(Int_t idpart, TLorentzVector* pparent)
623654
// Generate 2-body resonance decays: Rho/Omega/Phi/JPsi //
624655
//-----------------------------------------------------------------------------//
625656

626-
if((idpart==idRho||idpart==idOmega||idpart==idPhi||idpart==idJPsi)&&(idpartner==0)){
657+
if(((idpart==idEta&&fDecayToDimuon==1)||idpart==idRho||idpart==idOmega||idpart==idPhi||idpart==idJPsi)&&(idpartner==0)){
627658

628659

629660
//get the parent mass
@@ -638,7 +669,10 @@ void ExodusDecayer::Decay(Int_t idpart, TLorentzVector* pparent)
638669

639670
// Sample the electron pair mass from a histogram and set Polarization
640671
for( ;; ) {
641-
if(idpart==idRho){
672+
if(idpart==idEta&&fDecayToDimuon==1){
673+
epmass_res = fEPMassEta->GetRandom();
674+
PolPar=0.;
675+
}else if(idpart==idRho){
642676
epmass_res = fEPMassRho->GetRandom();
643677
PolPar=0.;
644678
}else if(idpart==idOmega){
@@ -708,7 +742,10 @@ void ExodusDecayer::Decay(Int_t idpart, TLorentzVector* pparent)
708742
fProducts_res[0].Boost(boostLab_res_corr);
709743
fProducts_res[1].Boost(boostLab_res_corr);
710744

711-
if(idpart==idRho) {
745+
if(idpart==idEta&&fDecayToDimuon==1) {
746+
fProducts_eta[0]=fProducts_res[0];
747+
fProducts_eta[1]=fProducts_res[1];
748+
}else if(idpart==idRho) {
712749
fProducts_rho[0]=fProducts_res[0];
713750
fProducts_rho[1]=fProducts_res[1];
714751
}else if(idpart==idOmega){
@@ -725,4 +762,4 @@ void ExodusDecayer::Decay(Int_t idpart, TLorentzVector* pparent)
725762
}
726763

727764
return;
728-
}
765+
}

GeneratorParam/ExodusDecayer.h

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ class ExodusDecayer : public TVirtualMCDecayer
5050
virtual Float_t GetPartialBranchingRatio(Int_t /*ipart*/) {return -1;}
5151
virtual Float_t GetLifetime(Int_t /*kf*/) {return -1;}
5252
virtual void ReadDecayTable() {;}
53+
virtual void DecayToDimuons() {fDecayToDimuon = 1;}
5354

5455
virtual TH1F* ElectronPairMassHistoPion() {return fEPMassPion;}
5556
virtual TH1F* ElectronPairMassHistoEta() {return fEPMassEta;}
@@ -65,6 +66,7 @@ class ExodusDecayer : public TVirtualMCDecayer
6566

6667
virtual const TLorentzVector* Products_pion() const {return fProducts_pion;}
6768
virtual const TLorentzVector* Products_eta() const {return fProducts_eta;}
69+
virtual const TLorentzVector* Products_eta_dalitz() const {return fProducts_eta_dalitz;}
6870
virtual const TLorentzVector* Products_etaprime() const {return fProducts_etaprime;}
6971
virtual const TLorentzVector* Products_etaprime_toOmega() const {return fProducts_etaprime_toOmega;}
7072
virtual const TLorentzVector* Products_rho() const {return fProducts_rho;}
@@ -79,6 +81,7 @@ class ExodusDecayer : public TVirtualMCDecayer
7981
// Histograms for electron pair mass
8082
TH1F* fEPMassPion;
8183
TH1F* fEPMassEta;
84+
TH1F* fEPMassEtaDalitz;
8285
TH1F* fEPMassEtaPrime;
8386
TH1F* fEPMassEtaPrime_toOmega;
8487
TH1F* fEPMassRho;
@@ -93,7 +96,8 @@ class ExodusDecayer : public TVirtualMCDecayer
9396

9497
// Decay products
9598
TLorentzVector fProducts_pion[3];
96-
TLorentzVector fProducts_eta[3];
99+
TLorentzVector fProducts_eta[2];
100+
TLorentzVector fProducts_eta_dalitz[3];
97101
TLorentzVector fProducts_etaprime[3];
98102
TLorentzVector fProducts_etaprime_toOmega[3];
99103
TLorentzVector fProducts_rho[2];
@@ -111,7 +115,8 @@ class ExodusDecayer : public TVirtualMCDecayer
111115
Double_t GounarisSakurai(Float_t mass, Double_t vmass, Double_t vwidth, Double_t emass);
112116
Double_t RhoShapeFromNA60(Float_t mass, Double_t vmass, Double_t vwidth, Double_t emass);
113117
Double_t Lorentz(Float_t mass, Double_t vmass, Double_t vwidth);
118+
Bool_t fDecayToDimuon; // Decay to dimuons instead of dielectrons
114119

115120
ClassDef(ExodusDecayer, 1)
116121
};
117-
#endif
122+
#endif

0 commit comments

Comments
 (0)