Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Displaced DM Decay Primary Generator #1353

Closed
tomeichlersmith opened this issue May 14, 2024 · 6 comments
Closed

Displaced DM Decay Primary Generator #1353

tomeichlersmith opened this issue May 14, 2024 · 6 comments
Labels
simcore SimCore and Geant4 simulation module

Comments

@tomeichlersmith
Copy link
Member

Is your feature request related to a problem? Please describe.
The current best option for simulating displaced DM decays is three stages.

  1. Have MadGraph generate the DM and their decays (i.e. something like e N -> e N DM and then DM -> e+ e-)
  2. Split this output LHE into two LHEs: one containing the production of the DM (e N -> e N DM) and one containing its decay (DM -> e+ e-). At this point, you would also determine where the production happens and where the decay happens (probably sampling from some probability distribution so that the decay happens at different lengths). You can also include a time difference between them.
  3. Give both of these LHEs to the simulation as two separate generators. Geant4 will then do the simulation with both of them at their specified time difference.

This solution has been implemented by folks at UVA. https://github.com/mrsolt/uva-ldmx/tree/main/visibles

Describe the solution you'd like
I think we could avoid the intermediate LHE files pretty easily. The sampling of decay lengths is a rather simple procedure and we already have an LHEReader for the LHEPrimaryGenerator. I think implementing a DisplacedDecayGenerator which would read in the single LHE file from MadGraph and then (with some configuration parameters) pick-out the DM and the decay particles, sample a decay length and place the decay particles at the correct position and time relative to the DM. We could also look into manually setting the endpoint of the DM since it has no other processes.

Describe alternatives you've considered
The alternative implemented by UVA and already functional with the current ldmx-sw is functional and physically appropriate. I just find it difficult to maintain and share.

@tomeichlersmith tomeichlersmith added the simcore SimCore and Geant4 simulation module label May 14, 2024
@EinarElen
Copy link
Contributor

EinarElen commented May 14, 2024

Geant4 has a feature that lets you "pre-assign" decay products to particles. Would that be helpful for this? If you use this, you don't need to calculate the endpoint yourself, you can just let Geant do that

@tomeichlersmith
Copy link
Member Author

That would be incredibly helpful, I was planning on just doing that manually.

@tomeichlersmith
Copy link
Member Author

From these slides, it sounds like we need to define a child class of G4VExtDecayer.

Or we use G4PrimaryParticle's SetDaughter and SetNext. Although, I don't see a method for defining the decay length in this case.

@EinarElen
Copy link
Contributor

EinarElen commented May 14, 2024

That's mixing up two things! The pre-assigned decay products are a property of G4DynamicParticle and it is a public method. When G4Decay runs, it will prioritize any pre-assigned products. G4VExtDecayer is a fallback for when neither pre-assigned products or regular decay tables aren't available.

Regarding lifetime, I think the easiest would be to just make a particle definition for the DM particle with an average lifetime. But there is also a "pre-assigned lifetime" for dynamic particles you can use

@EinarElen
Copy link
Contributor

I think the reason for most documentation talking about primary particles is just... LHC bias. Where other than in the primary collision would you ever create weird particles

@tomeichlersmith
Copy link
Member Author

I'm going to mark this as closed. Users can either use the pre-processing method like linked above or utilize the support for visible decay written into G4DarkBreM introduced in #1386

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
simcore SimCore and Geant4 simulation module
Projects
None yet
Development

No branches or pull requests

2 participants