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

Sample scripts for validating future samples #1216

Merged
merged 11 commits into from
Nov 30, 2023
8 changes: 4 additions & 4 deletions DQM/python/dqm.py
Original file line number Diff line number Diff line change
Expand Up @@ -600,20 +600,20 @@ def __init__(self, name='SampleValidation') :
super().__init__(name, 'dqm::SampleValidation', 'DQM')

# primary histograms
self.build1DHistogram("pdgid_primaries", "PDG ID of primary particles", 18, 0, 18)
self.build1DHistogram("pdgid_primaries", "PDG ID of primary particles", 19, 0, 19)
self.build1DHistogram("energy_primaries", "Energy of primary particles", 90, 0, 9000) # range applicable for 4 GeV beam
self.build2DHistogram("beam_smear", "x", 30, -150, 150, "y", 30, -150, 150)
self.build1DHistogram("pdgid_primarydaughters", "PDG ID of primary daughtesr", 18, 0, 18)
self.build1DHistogram("pdgid_primarydaughters", "PDG ID of primary daughtesr", 19, 0, 19)
self.build1DHistogram("energy_daughterphoton", "Energy spectrum of all photons from primary", 170, 0, 8500)

# primary daughter of interest (brem / dark brem) histograms
self.build1DHistogram("pdgid_harddaughters", "PDG ID of primary daughters", 18, 0, 18)
self.build1DHistogram("pdgid_harddaughters", "PDG ID of primary daughters", 19, 0, 19)
self.build1DHistogram("startZ_hardbrem", "Start z position of hard primary daughter", 100, -500, 500)
self.build1DHistogram("endZ_hardbrem", "End z position of hard primary daughter", 100, -500, 500)
self.build1DHistogram("energy_hardbrem", "Energy spectrum of hard primary daughter", 130, 2000, 8500)

# daughters of hard brem histograms
self.build1DHistogram("pdgid_hardbremdaughters", "PDG ID of hard brem daughters", 18, 0, 18)
self.build1DHistogram("pdgid_hardbremdaughters", "PDG ID of hard brem daughters", 19, 0, 19)
self.build1DHistogram("startZ_hardbremdaughters", "Start z position of hard brem daughters", 200, -1000, 1000)


Expand Down
10 changes: 4 additions & 6 deletions DQM/src/DQM/SampleValidation.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,7 @@ namespace dqm {
if (parent_track_id == 0) {
histograms_.fill("pdgid_primaries", pdgid_label(pdgid));
histograms_.fill("energy_primaries", energy);
if (energy > 4001) {
hard_thresh = 5000;
}
hard_thresh = (2500/4000)*energy;
primary_daughters = daughters;
for (const ldmx::SimTrackerHit &sphit : targetSPHits) {
if (sphit.getTrackID() == it.first && sphit.getPosition()[2] < 0) {
Expand Down Expand Up @@ -89,7 +87,7 @@ namespace dqm {
}

int SampleValidation::pdgid_label(const int pdgid) {
int label = 0;
int label = 18;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cool! Just add a comment that this is a catch-all/overflow bin for code readability

if (pdgid == -11) label = 1; // e+

if (pdgid == 11) label = 2; // e-
Expand Down Expand Up @@ -118,11 +116,11 @@ namespace dqm {

if (pdgid == 310) label = 14; // K-Short

if (pdgid > 2300) label = 16; //exotic (e.g., baryon with strangeness)
if (pdgid == 3122 || pdgid == 3222 || pdgid == 3212 || pdgid == 3112 || pdgid == 3322 || pdgid == 3312) label = 16; // strange baryon

if (pdgid > 10000) label = 15; //nuclei
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is it worth differentiating between general nuclei and light ions here? The production of alpha, deuterium, and tritium from PN interactions is non-trivial.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can include this distinction since I meant for the label to mainly catch remnants of a tungsten explosion. Do you think "light"/"heavy" nuclei is granular enough, with "light" being only hydrogen or helium nuclides?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The bertini cascade will attempt to take nucleons being ejected from the cascade that are "similar" and bunch them together into deuterium, tritium, alpha (called "Coalescence") so you can get these even for quite ordinary interactions.

There is a version of a test for what counts as a light ion here (that probably should live somewhere else...)
https://github.com/LDMX-Software/ldmx-sw/blob/8e6e9e195eb71ad78f7aa94648a179342a12e1f6/Biasing/include/Biasing/PhotoNuclearTopologyFilters.h#L62C1-L78


if (pdgid == 622) label = 17; // dark photon
if (pdgid == 622) label = 17; // dark photon, need pdg id for other models like ALPs and SIMPs

return label;
}
Expand Down
2 changes: 1 addition & 1 deletion Validation/src/Validation/simparticles.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
@plotter(hist=True, event=False)
def beamenergy_comp(d: Differ, out_dir=None):

pdgid_labels = ['', 'e+', 'e-', 'μ+', 'μ-', 'γ', 'p', 'n', 'π+', 'π-', 'π0', 'K+', 'K-', 'K-L', 'K-S', 'nucleus', 'exotic', "A\'"] # finish later
pdgid_labels = ['', 'e+', 'e-', 'μ+', 'μ-', 'γ', 'p', 'n', 'π+', 'π-', 'π0', 'K+', 'K-', 'K-L', 'K-S', 'nucleus', 'strange baryon', "A\'", 'something else'] # finish later

d.plot1d("SampleValidation/SampleValidation_pdgid_primaries", "PDG ID, primaries",
tick_labels=pdgid_labels,
Expand Down