LDMX Software
simcore::BertiniAtLeastNProductsProcess Class Reference

Public Member Functions

 BertiniAtLeastNProductsProcess (double threshold, int Zmin, double Emin, std::vector< int > pdg_ids, int min_products)
 
bool acceptProjectile (const G4HadProjectile &projectile) const override
 
bool acceptTarget (const G4Nucleus &targetNucleus) const override
 
bool acceptEvent () const override
 
- Public Member Functions inherited from simcore::BertiniEventTopologyProcess
 BertiniEventTopologyProcess (bool count_light_ions=true)
 
G4HadFinalState * ApplyYourself (const G4HadProjectile &projectile, G4Nucleus &targetNucleus) override
 
void cleanupSecondaries ()
 
constexpr bool isLightIon (const int pdgCode) const
 Check if the PDG code corresponds to a light ion nucleus.
 
constexpr bool skipCountingParticle (const int pdgcode) const
 Whether or not to include a particular particle type in any counting.
 
virtual void incrementEventWeight (int N)
 

Private Attributes

double threshold_
 
int zmin_
 
double emin_
 
std::vector< int > pdg_ids_
 
int min_products_
 

Detailed Description

Definition at line 14 of file BertiniAtLeastNProductsModel.h.

Constructor & Destructor Documentation

◆ BertiniAtLeastNProductsProcess()

simcore::BertiniAtLeastNProductsProcess::BertiniAtLeastNProductsProcess ( double threshold,
int Zmin,
double Emin,
std::vector< int > pdg_ids,
int min_products )
inline

Definition at line 16 of file BertiniAtLeastNProductsModel.h.

18 : BertiniEventTopologyProcess{},
19 threshold_{threshold},
20 zmin_{Zmin},
21 emin_{Emin},
22 pdg_ids_{pdg_ids},
23 min_products_{min_products} {}

Member Function Documentation

◆ acceptEvent()

bool simcore::BertiniAtLeastNProductsProcess::acceptEvent ( ) const
overridevirtual

Implements simcore::BertiniEventTopologyProcess.

Definition at line 5 of file BertiniAtLeastNProductsModel.cxx.

5 {
6 int secondaries{theParticleChange.GetNumberOfSecondaries()};
7 int matching_count{0};
8 for (int i{0}; i < secondaries; ++i) {
9 const auto secondary{theParticleChange.GetSecondary(i)->GetParticle()};
10 const auto pdg_code{secondary->GetDefinition()->GetPDGEncoding()};
11 const auto energy{secondary->GetKineticEnergy()};
12 if (std::find(std::begin(pdg_ids_), std::end(pdg_ids_), pdg_code) !=
13 std::end(pdg_ids_)) {
14 if (energy > threshold_) {
15 ++matching_count;
16 }
17 }
18 if (matching_count >= min_products_) {
19 return true;
20 }
21 }
22 return false;
23}

◆ acceptProjectile()

bool simcore::BertiniAtLeastNProductsProcess::acceptProjectile ( const G4HadProjectile & projectile) const
inlineoverridevirtual

Implements simcore::BertiniEventTopologyProcess.

Definition at line 25 of file BertiniAtLeastNProductsModel.h.

25 {
26 return projectile.GetKineticEnergy() >= emin_;
27 }

◆ acceptTarget()

bool simcore::BertiniAtLeastNProductsProcess::acceptTarget ( const G4Nucleus & targetNucleus) const
inlineoverridevirtual

Implements simcore::BertiniEventTopologyProcess.

Definition at line 28 of file BertiniAtLeastNProductsModel.h.

28 {
29 return targetNucleus.GetZ_asInt() >= zmin_;
30 }

Member Data Documentation

◆ emin_

double simcore::BertiniAtLeastNProductsProcess::emin_
private

Definition at line 36 of file BertiniAtLeastNProductsModel.h.

◆ min_products_

int simcore::BertiniAtLeastNProductsProcess::min_products_
private

Definition at line 38 of file BertiniAtLeastNProductsModel.h.

◆ pdg_ids_

std::vector<int> simcore::BertiniAtLeastNProductsProcess::pdg_ids_
private

Definition at line 37 of file BertiniAtLeastNProductsModel.h.

◆ threshold_

double simcore::BertiniAtLeastNProductsProcess::threshold_
private

Definition at line 34 of file BertiniAtLeastNProductsModel.h.

◆ zmin_

int simcore::BertiniAtLeastNProductsProcess::zmin_
private

Definition at line 35 of file BertiniAtLeastNProductsModel.h.


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