@@ -19,6 +19,7 @@ ClassImp(ExodusDecayer)
1919ExodusDecayer::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+ }
0 commit comments