All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions | Private Attributes | List of all members
evgen::ldm::Kaon2HiggsFlux Class Reference

Kaon2HiggsFlux class definiton Implementation of model taken from: https://arxiv.org/abs/1909.11670. More...

Inheritance diagram for evgen::ldm::Kaon2HiggsFlux:
evgen::ldm::IMeVPrtlFlux evgen::ldm::IMeVPrtlStage

Public Member Functions

 Kaon2HiggsFlux (fhicl::ParameterSet const &pset)
 Constructor. More...
 
 ~Kaon2HiggsFlux ()
 Destructor. More...
 
bool MakeFlux (const simb::MCFlux &flux, MeVPrtlFlux &higgs, double &weight) override
 
void configure (const fhicl::ParameterSet &) override
 Interface for configuring the particular algorithm tool. More...
 
double MaxWeight () override
 
- Public Member Functions inherited from evgen::ldm::IMeVPrtlFlux
virtual ~IMeVPrtlFlux () noexcept=default
 Virtual Destructor. More...
 
 IMeVPrtlFlux (const fhicl::ParameterSet &pset)
 
- Public Member Functions inherited from evgen::ldm::IMeVPrtlStage
virtual ~IMeVPrtlStage () noexcept
 Virtual Destructor. More...
 
 IMeVPrtlStage (const char *name)
 
TVector3 RandomUnitVector ()
 
double GetRandom ()
 
const char * Name ()
 

Private Attributes

double fM
 Mass of Higgs [GeV]. More...
 
double fMixingAngle
 Mixing angle of dark higgs. More...
 
bool fKDAROnly
 
bool fKDIFOnly
 
bool fKDIFandBeamline
 
bool fIgnoreParentDecayTime
 
double fKPBR
 
double fKLBR
 

Additional Inherited Members

- Protected Member Functions inherited from evgen::ldm::IMeVPrtlFlux
TLorentzVector BeamOrigin ()
 
double EnuLab (double enucm, TLorentzVector meson_mom, TLorentzVector meson_pos)
 
- Protected Attributes inherited from evgen::ldm::IMeVPrtlFlux
evgb::EvtTimeShiftI * fTimeShiftMethod
 
TRotation fBeam2Det
 
TVector3 fBeamOrigin
 
std::string fSpillTimeConfig
 
- Protected Attributes inherited from evgen::ldm::IMeVPrtlStage
CLHEP::HepRandomEngine * fEngine
 
const char * fName
 

Detailed Description

Kaon2HiggsFlux class definiton Implementation of model taken from: https://arxiv.org/abs/1909.11670.

Definition at line 48 of file Kaon2HiggsFlux_tool.cc.

Constructor & Destructor Documentation

evgen::ldm::Kaon2HiggsFlux::Kaon2HiggsFlux ( fhicl::ParameterSet const &  pset)

Constructor.

Definition at line 80 of file Kaon2HiggsFlux_tool.cc.

80  :
81  IMeVPrtlStage("Kaon2HiggsFlux"),
82  IMeVPrtlFlux(pset)
83 {
84  this->configure(pset);
85 
86 }
IMeVPrtlFlux(const fhicl::ParameterSet &pset)
Definition: IMeVPrtlFlux.h:49
void configure(const fhicl::ParameterSet &) override
Interface for configuring the particular algorithm tool.
IMeVPrtlStage(const char *name)
Definition: IMeVPrtlStage.h:46
evgen::ldm::Kaon2HiggsFlux::~Kaon2HiggsFlux ( )

Destructor.

Definition at line 90 of file Kaon2HiggsFlux_tool.cc.

91 {
92 }

Member Function Documentation

void evgen::ldm::Kaon2HiggsFlux::configure ( const fhicl::ParameterSet &  )
overridevirtual

Interface for configuring the particular algorithm tool.

Parameters
ParameterSetThe input set of parameters for configuration

Implements evgen::ldm::IMeVPrtlStage.

Definition at line 181 of file Kaon2HiggsFlux_tool.cc.

182 {
183  fM = pset.get<double>("M");
184  fMixingAngle = pset.get<double>("MixingAngle");
185  fIgnoreParentDecayTime = pset.get<bool>("IgnoreParentDecayTime");
186  fKDAROnly = pset.get<bool>("KDAROnly", false);
187  fKDIFOnly = pset.get<bool>("KDIFOnly", false);
188  fKDIFandBeamline = pset.get<bool>("KDIFandBeamline", false);
189 
190  // Throw exception for a bad mass value
193  throw cet::exception("Kaon2HiggsFlux Tool: BAD MASS. Configured mass (" + std::to_string(fM) +
194  ") is larger than allowed for K+ (" + std::to_string(Constants::Instance().kplus_mass - Constants::Instance().piplus_mass) + ") and KL (" +
195  std::to_string(Constants::Instance().klong_mass - Constants::Instance().pizero_mass) + " production.");
196  }
197 
198  fKPBR = KaonPlusBranchingRatio(fM, fMixingAngle);
199  fKLBR = KaonLongBranchingRatio(fM, fMixingAngle);
200 
201  std::cout << "K+ branching ratio: " << fKPBR << std::endl;
202  std::cout << "K0 branching ratio: " << fKLBR << std::endl;
203 
204 }
double KaonLongBranchingRatio(double higs_mass, double mixing)
double KaonPlusBranchingRatio(double higs_mass, double mixing)
double fMixingAngle
Mixing angle of dark higgs.
double fM
Mass of Higgs [GeV].
static const Constants & Instance()
Definition: Constants.h:68
std::string to_string(WindowPattern const &pattern)
BEGIN_PROLOG could also be cout
bool evgen::ldm::Kaon2HiggsFlux::MakeFlux ( const simb::MCFlux &  flux,
MeVPrtlFlux higgs,
double &  weight 
)
overridevirtual

Implements evgen::ldm::IMeVPrtlFlux.

Definition at line 214 of file Kaon2HiggsFlux_tool.cc.

214  {
215 
216  // make the kaon parent
217  evgen::ldm::KaonParent kaon(flux);
218  if (!kaon.kaon_pdg) return false; // parent wasn't a kaon
219 
220  // select on the kaon
221  if (fKDAROnly && (kaon.mom.P() > 1e-3 || kaon.pos.Z() < 72000.)) return false; //selects KDAR from absorber only.
222  if (fKDAROnly) std::cout << "FOUND KDAR\n";
223  if (fKDIFOnly && (kaon.mom.P() <= 1e-3)){ // no KDAR allowed (from anywhere). Accepts KDIF from beamline or absorber.
224  std::cout << "found KDAR, skipping to next event\n";
225  return false;
226  }
227  if (fKDIFandBeamline && (kaon.mom.P() <= 1e-3 && kaon.pos.Z() >= 72000.)) return false; //allows for KDAR from decay-pipe, and any KDIF. This option is exactly orthogonal to "KDAROnly" option.
228 
229  TLorentzVector Beam4 = BeamOrigin();
230  // get position in detector frame
231  higgs.pos_beamcoord = kaon.pos;
232  higgs.pos = kaon.pos;
233  higgs.pos.Transform(fBeam2Det);
234  higgs.pos += Beam4;
235 
236  if (fIgnoreParentDecayTime) higgs.pos.SetT(Beam4.T());
237 
238  // get the momentum direction in the kaon parent rest frame
239  double kaon_mass = kaon.mom.M();
240  double higs_mass = fM;
241  double pion_mass = TDatabasePDG::Instance()->GetParticle(PionPdg(kaon.kaon_pdg))->Mass();
242 
243  // ignore if we can't make this higgs
244  if (kaon_mass - pion_mass < higs_mass) return false;
245 
246  // isotropic decay
247  TVector3 kaon_frame_momentum = RandomUnitVector() * higgs_momentum(kaon_mass, pion_mass, higs_mass);
248  std::cout << "Rest frame higgs P: " << higgs_momentum(kaon_mass, pion_mass, higs_mass) << std::endl;
249 
250  // boost to lab frame
251  TLorentzVector mom;
252  mom.SetVectM(kaon_frame_momentum, higs_mass);
253  mom.Boost(kaon.mom.BoostVector());
254 
255  higgs.mom_beamcoord = mom;
256  // rotate to detector frame
257  higgs.mom = mom;
258  higgs.mom.Transform(fBeam2Det);
259 
260  higgs.kmom_beamcoord = kaon.mom;
261  // also save the kaon momentum in the detector frame
262  higgs.kmom = kaon.mom;
263  higgs.kmom.Transform(fBeam2Det);
264 
265  // The weight is the importance weight times the branching-ratio weight
266  weight = kaon.weight / SMKaonBR(kaon.kaon_pdg);
267  if (kaon.kaon_pdg == 130 /* KLong */) {
268  weight = weight * fKLBR;
269  }
270  else { // KPlus or KMinus
271  weight = weight * fKPBR;
272  }
273 
274  // and save the secondary momentum
275  higgs.sec = higgs.kmom - higgs.mom;
276  higgs.sec_beamcoord = higgs.kmom_beamcoord - higgs.mom_beamcoord;
277 
278  // set the mixing
279  higgs.C1 = fMixingAngle;
280  higgs.mass = fM;
281 
282  higgs.kaon_pdg = kaon.kaon_pdg;
283  higgs.generator = 0; // kDissonantHiggs
284  higgs.secondary_pdg = PionPdg(kaon.kaon_pdg);
285  higgs.equiv_enu = EnuLab(flux.fnecm, higgs.kmom, higgs.pos);
286 
287  return true;
288 }
double fMixingAngle
Mixing angle of dark higgs.
double fM
Mass of Higgs [GeV].
double higgs_momentum(double kaon_mass, double pion_mass, double higs_mass)
double SMKaonBR(int kaon_pdg)
TLorentzVector BeamOrigin()
Definition: IMeVPrtlFlux.h:107
do i e
double EnuLab(double enucm, TLorentzVector meson_mom, TLorentzVector meson_pos)
Definition: IMeVPrtlFlux.h:119
int PionPdg(int kaon_pdg)
BEGIN_PROLOG could also be cout
double evgen::ldm::Kaon2HiggsFlux::MaxWeight ( )
overridevirtual

Implements evgen::ldm::IMeVPrtlStage.

Definition at line 206 of file Kaon2HiggsFlux_tool.cc.

206  {
207  // Weight comes from the NuMi importance weight -- max is 100 (add in an epsilon)
208  //
209  // Also get the max BR
210  return 100.0001 * std::max(fKPBR / SMKaonBR(321), fKLBR / SMKaonBR(130));
211 }
double SMKaonBR(int kaon_pdg)

Member Data Documentation

bool evgen::ldm::Kaon2HiggsFlux::fIgnoreParentDecayTime
private

Definition at line 73 of file Kaon2HiggsFlux_tool.cc.

bool evgen::ldm::Kaon2HiggsFlux::fKDAROnly
private

Definition at line 70 of file Kaon2HiggsFlux_tool.cc.

bool evgen::ldm::Kaon2HiggsFlux::fKDIFandBeamline
private

Definition at line 72 of file Kaon2HiggsFlux_tool.cc.

bool evgen::ldm::Kaon2HiggsFlux::fKDIFOnly
private

Definition at line 71 of file Kaon2HiggsFlux_tool.cc.

double evgen::ldm::Kaon2HiggsFlux::fKLBR
private

Definition at line 77 of file Kaon2HiggsFlux_tool.cc.

double evgen::ldm::Kaon2HiggsFlux::fKPBR
private

Definition at line 76 of file Kaon2HiggsFlux_tool.cc.

double evgen::ldm::Kaon2HiggsFlux::fM
private

Mass of Higgs [GeV].

Definition at line 68 of file Kaon2HiggsFlux_tool.cc.

double evgen::ldm::Kaon2HiggsFlux::fMixingAngle
private

Mixing angle of dark higgs.

Definition at line 69 of file Kaon2HiggsFlux_tool.cc.


The documentation for this class was generated from the following file: