|
ATLAS Offline Software
|
#include <PunchThroughTool.h>
|
StatusCode | registerParticle (int pdgID, bool doAntiparticle=false, double minEnergy=0., int maxNumParticles=-1, double numParticlesFactor=1., double energyFactor=1., double posAngleFactor=1., double momAngleFactor=1.) |
| registers a type of punch-through particles which will be simulated More...
|
|
StatusCode | registerCorrelation (int pdgID1, int pdgID2, double minCorrEnergy=0., double fullCorrEnergy=0.) |
| register a correlation for the two given types of punch-through particles with a given energy threshold above which we will have full correlation More...
|
|
std::unique_ptr< ISF::PDFcreator > | readLookuptablePDF (int pdgID, const std::string &folderName) |
| reads out the lookuptable for the given type of particle More...
|
|
int | getAllParticles (const ISF::ISFParticle &isfp, ISFParticleVector &isfpCont, CLHEP::HepRandomEngine *rndmEngine, int pdg, double interpEnergy, double interpEta, int numParticles=-1) const |
| create the right number of punch-through particles for the given pdg and return the number of particles which was created. More...
|
|
int | getCorrelatedParticles (const ISF::ISFParticle &isfp, ISFParticleVector &isfpCont, int doPdg, int corrParticles, CLHEP::HepRandomEngine *rndmEngine, double interpEnergy, double interpEta) const |
| get the right number of particles for the given pdg while considering the correlation to an other particle type, which has already created 'corrParticles' number of particles More...
|
|
ISF::ISFParticle * | getOneParticle (const ISF::ISFParticle &isfp, int pdg, CLHEP::HepRandomEngine *rndmEngine, double interpEnergy, double interpEta) const |
| create exactly one punch-through particle with the given pdg and the given max energy More...
|
|
ISF::ISFParticle * | createExitPs (const ISF::ISFParticle &isfp, int PDGcode, double energy, double theta, double phi, double momTheta, double momPhi) const |
| create a ISF Particle state at the MS entrace containing a particle with the given properties More...
|
|
double | getFloatAfterPatternInStr (const char *str, const char *pattern) |
| get the floating point number in a string, after the given pattern More...
|
|
Amg::Vector3D | propagator (double theta, double phi) const |
| get particle through the calorimeter More...
|
|
std::vector< double > | inversePCA (int pcaCdfIterator, std::vector< double > &variables) const |
|
double | interpolateEnergy (const double &energy, CLHEP::HepRandomEngine *rndmEngine) const |
|
double | interpolateEta (const double &eta, CLHEP::HepRandomEngine *rndmEngine) const |
|
std::vector< std::map< std::string, std::string > > | getInfoMap (const std::string &mainNode, const std::string &xmlFilePath) |
|
int | passedParamIterator (int pid, double eta, const std::vector< std::map< std::string, std::string >> &mapvect) const |
|
StatusCode | initializeInverseCDF (const std::string &quantileTransformerConfigFile) |
|
StatusCode | initializeInversePCA (const std::string &inversePCAConfigFile) |
|
|
std::vector< double > | m_energyPoints |
| energy and eta points in param More...
|
|
std::vector< double > | m_etaPoints |
|
double | m_R1 {0.} |
| calo-MS borders More...
|
|
double | m_R2 {0.} |
|
double | m_z1 {0.} |
|
double | m_z2 {0.} |
|
const HepPDT::ParticleDataTable * | m_particleDataTable {nullptr} |
| ParticleDataTable needed to get connection pdg_code <-> charge. More...
|
|
TFile * | m_fileLookupTable {nullptr} |
| ROOT objects. More...
|
|
std::map< int, PunchThroughParticle * > | m_particles |
| needed to create punch-through particles with the right distributions More...
|
|
StringProperty | m_filenameLookupTable {this, "FilenameLookupTable", "CaloPunchThroughParametrisation.root", "holds the filename of the lookup table"} |
| Properties. More...
|
|
StringProperty | m_filenameInverseCDF {this, "FilenameInverseCdf", "", "holds the filename of inverse quantile transformer config"} |
|
StringProperty | m_filenameInversePCA {this, "FilenameInversePca", "", "holds the filename of inverse PCA config"} |
|
PublicToolHandle< IPunchThroughClassifier > | m_punchThroughClassifier {this, "PunchThroughClassifier", "ISF_PunchThroughClassifier", ""} |
|
IntegerArrayProperty | m_pdgInitiators {this, "PunchThroughInitiators", {}, "vector of punch-through initiator pgds"} |
|
IntegerArrayProperty | m_initiatorsMinEnergy {this, "InitiatorsMinEnergy", {}, "vector of punch-through initiator min energies to create punch through"} |
|
DoubleArrayProperty | m_initiatorsEtaRange {this, "InitiatorsEtaRange", {}, "vector of min and max abs eta range to allow punch through initiators"} |
|
IntegerArrayProperty | m_punchThroughParticles {this, "PunchThroughParticles", {}, "vector of pdgs of the particles produced in punch-throughs"} |
|
BooleanArrayProperty | m_doAntiParticles {this, "DoAntiParticles", {}, "vector of bools to determine if anti-particles are created for each punch-through particle type"} |
|
IntegerArrayProperty | m_correlatedParticle {this, "CorrelatedParticle", {}, "holds the pdg of the correlated particle for each given pdg"} |
|
DoubleArrayProperty | m_minCorrEnergy {this, "MinCorrelationEnergy", {}, "holds the energy threshold below which no particle correlation is computed"} |
|
DoubleArrayProperty | m_fullCorrEnergy {this, "FullCorrelationEnergy", {}, "holds the energy threshold above which a particle correlation is fully developed"} |
|
DoubleArrayProperty | m_posAngleFactor {this, "ScalePosDeflectionAngles", {}, "tuning parameter to scale the position deflection angles"} |
|
DoubleArrayProperty | m_momAngleFactor {this, "ScaleMomDeflectionAngles", {}, "tuning parameter to scale the momentum deflection angles"} |
|
DoubleArrayProperty | m_minEnergy {this, "MinEnergy", {}, "punch-through particles minimum energies"} |
|
IntegerArrayProperty | m_maxNumParticles {this, "MaxNumParticles", {}, "maximum number of punch-through particles for each particle type"} |
|
DoubleArrayProperty | m_numParticlesFactor {this, "NumParticlesFactor", {}, "scale the number of punch-through particles"} |
|
DoubleArrayProperty | m_energyFactor {this, "EnergyFactor", {}, "scale the energy of the punch-through particles"} |
|
ServiceHandle< IPartPropSvc > | m_particlePropSvc {this, "PartPropSvc", "PartPropSvc", "particle properties svc"} |
|
ServiceHandle< IGeoIDSvc > | m_geoIDSvc {this, "GeoIDSvc", "ISF::GeoIDSvc"} |
|
ServiceHandle< IEnvelopeDefSvc > | m_envDefSvc {this, "EnvelopeDefSvc", "AtlasGeometry_EnvelopeDefSvc"} |
|
DoubleProperty | m_beamPipe {this, "BeamPipeRadius", 500.} |
| beam pipe radius More...
|
|
std::vector< std::vector< std::vector< double > > > | m_inverse_PCA_matrix |
| pca vectors More...
|
|
std::vector< std::vector< double > > | m_PCA_means |
|
std::vector< std::map< std::string, std::string > > | m_xml_info_pca |
| infoMaps More...
|
|
std::vector< std::map< std::string, std::string > > | m_xml_info_cdf |
|
std::vector< std::map< double, double > > | m_variable0_inverse_cdf |
| (vector of map) for CDF mappings More...
|
|
std::vector< std::map< double, double > > | m_variable1_inverse_cdf |
|
std::vector< std::map< double, double > > | m_variable2_inverse_cdf |
|
std::vector< std::map< double, double > > | m_variable3_inverse_cdf |
|
std::vector< std::map< double, double > > | m_variable4_inverse_cdf |
|
Definition at line 55 of file PunchThroughTool.h.
◆ PunchThroughTool()
ISF::PunchThroughTool::PunchThroughTool |
( |
const std::string & |
type, |
|
|
const std::string & |
name, |
|
|
const IInterface * |
parent |
|
) |
| |
◆ ~PunchThroughTool()
virtual ISF::PunchThroughTool::~PunchThroughTool |
( |
| ) |
|
|
virtualdefault |
◆ computePunchThroughParticles()
interface function: fill a vector with the punch-through particles
Definition at line 288 of file PunchThroughTool.cxx.
290 ATH_MSG_DEBUG(
"[ punchthrough ] starting punch-through simulation");
293 auto isfpCont = std::make_unique<ISF::ISFParticleVector>();
301 ATH_MSG_VERBOSE (
"[ GeoIDSvc ] input particle doesn't point to calorimeter"<<
"Next GeoID: "<<
m_geoIDSvc->identifyNextGeoID(isfp) );
313 for ( ; pdgIt != pdgItEnd; ++pdgIt, ++minEnergyIt)
315 if (std::abs(isfp.
pdgCode()) == *pdgIt){
316 if(std::sqrt( isfp.
momentum().mag2() + isfp.
mass()*isfp.
mass() ) < *minEnergyIt){
317 ATH_MSG_DEBUG(
"[ punchthrough ] particle does not meet initiator min energy requirement. Dropping it in the calo.");
325 if (pdgIt == pdgItEnd)
327 ATH_MSG_DEBUG(
"[ punchthrough ] particle is not registered as punch-through initiator. Dropping it in the calo.");
333 ATH_MSG_DEBUG(
"[ punchthrough ] particle does not meet initiator eta range requirement. Dropping it in the calo.");
341 double punchThroughClassifierRand = CLHEP::RandFlat::shoot(rndmEngine);
343 ATH_MSG_DEBUG(
"[ punchthrough ] punchThroughProbability output: " << punchThroughProbability <<
" RandFlat: " << punchThroughClassifierRand );
346 if( punchThroughClassifierRand > punchThroughProbability){
347 ATH_MSG_DEBUG(
"[ punchthrough ] particle not classified to create punch through. Dropping it in the calo.");
361 const double initEnergy = std::sqrt( isfp.
momentum().mag2() + isfp.
mass()*isfp.
mass() );
362 const double initEta = isfp.
position().eta();
368 std::map<int, int> corrPdgNumDone;
374 while(isfpCont->empty() && nTries < maxTries) {
379 int doPdg = currentParticle.first;
381 int corrPdg = currentParticle.second->getCorrelatedPdg();
390 if (
pos == corrPdgNumDone.end() )
pos = corrPdgNumDone.find(corrPdg);
394 if (
pos == corrPdgNumDone.end() )
397 if ( CLHEP::RandFlat::shoot(rndmEngine) > 0.5 ) doPdg = corrPdg;
400 corrPdgNumDone[doPdg] =
getAllParticles(isfp, *isfpCont, rndmEngine, doPdg, interpEnergy, interpEta);
409 const int donePdg =
pos->first;
410 const int doneNumPart =
pos->second;
412 if (donePdg == doPdg) doPdg = corrPdg;
424 else getAllParticles(isfp, *isfpCont, rndmEngine, doPdg, interpEnergy, interpEta);
431 if (!isfpCont->empty())
ATH_MSG_DEBUG(
"[ punchthrough ] returning ISFparticle vector , size: "<<isfpCont->size() );
436 ATH_MSG_DEBUG(
"position of produced punch-through particle: x = "<< position.x() <<
" y = "<< position.y() <<
" z = "<< position.z());
441 return isfpCont.release();
◆ createExitPs()
create a ISF Particle state at the MS entrace containing a particle with the given properties
@TODO: fix
Definition at line 1318 of file PunchThroughTool.cxx.
1334 ATH_MSG_DEBUG(
"setRThetaPhi input parameters: std::sqrt(energy*energy - mass*mass) = "<< std::sqrt(
energy*
energy -
mass*
mass) <<
" momTheta = "<< momTheta <<
" momPhi = "<< momPhi);
1339 charge *= (pdg > 0.) ? 1. : -1.;
1341 const double pTime = 0;
◆ dotProduct()
std::vector< double > ISF::PunchThroughTool::dotProduct |
( |
const std::vector< std::vector< double >> & |
m, |
|
|
const std::vector< double > & |
v |
|
) |
| |
|
staticprivate |
◆ finalize()
StatusCode ISF::PunchThroughTool::finalize |
( |
| ) |
|
|
virtual |
◆ getAllParticles()
int ISF::PunchThroughTool::getAllParticles |
( |
const ISF::ISFParticle & |
isfp, |
|
|
ISFParticleVector & |
isfpCont, |
|
|
CLHEP::HepRandomEngine * |
rndmEngine, |
|
|
int |
pdg, |
|
|
double |
interpEnergy, |
|
|
double |
interpEta, |
|
|
int |
numParticles = -1 |
|
) |
| const |
|
private |
create the right number of punch-through particles for the given pdg and return the number of particles which was created.
also create these particles with the right distributions (energy, theta, phi). if a second argument is given, create exactly this number of particles (also with the right energy,theta,phi distributions
Definition at line 448 of file PunchThroughTool.cxx.
456 if ( numParticles < 0 )
470 numParticles =
int(
p->getNumParticlesPDF()->getRand(rndmEngine,
parameters) );
473 numParticles = lround( numParticles *=
p->getNumParticlesFactor() );
478 ATH_MSG_VERBOSE(
"[ punchthrough ] adding " << numParticles <<
" punch-through particles with pdg " << pdg);
481 double energyRest = std::sqrt( isfp.
momentum().mag2() + isfp.
mass()*isfp.
mass() );
482 double minEnergy =
p->getMinEnergy();
485 for ( numCreated = 0; (numCreated < numParticles) && (energyRest > minEnergy); numCreated++ )
493 ATH_MSG_ERROR(
"[ punchthrough ] something went wrong while creating punch-through particles");
499 double curEnergy = std::sqrt(
par->momentum().mag2() + restMass*restMass);
503 energyRest -= curEnergy;
506 isfpCont.push_back(
par );
◆ getCorrelatedParticles()
int ISF::PunchThroughTool::getCorrelatedParticles |
( |
const ISF::ISFParticle & |
isfp, |
|
|
ISFParticleVector & |
isfpCont, |
|
|
int |
doPdg, |
|
|
int |
corrParticles, |
|
|
CLHEP::HepRandomEngine * |
rndmEngine, |
|
|
double |
interpEnergy, |
|
|
double |
interpEta |
|
) |
| const |
|
private |
get the right number of particles for the given pdg while considering the correlation to an other particle type, which has already created 'corrParticles' number of particles
Definition at line 518 of file PunchThroughTool.cxx.
523 const double initEnergy = std::sqrt( isfp.
momentum().mag2() + isfp.
mass()*isfp.
mass() );
526 double rand = CLHEP::RandFlat::shoot(rndmEngine)
527 *(
p->getFullCorrelationEnergy()-
p->getMinCorrelationEnergy())
528 +
p->getMinCorrelationEnergy();
529 if ( initEnergy <
rand )
532 return getAllParticles(isfp, isfpCont, rndmEngine, pdg, interpEnergy, interpEta);
537 double *histDomains =
p->getCorrelationHistDomains();
538 TH2F *hist2d =
nullptr;
541 if ( initEnergy < histDomains[1])
545 hist2d =
p->getCorrelationLowEHist();
549 double rand = CLHEP::RandFlat::shoot(rndmEngine)*(histDomains[2]-histDomains[1])
551 hist2d = ( initEnergy <
rand) ?
p->getCorrelationLowEHist()
552 :
p->getCorrelationHighEHist();
559 Int_t xbin = hist2d->GetXaxis()->FindFixBin(corrParticles);
560 int numParticles = 0;
566 double rand = CLHEP::RandFlat::shoot(rndmEngine);
568 for (
int ybin = 1; ybin <= hist2d->GetNbinsY(); ybin++ )
570 sum += hist2d->GetBinContent(xbin, ybin);
574 numParticles = ybin - 1;
579 numParticles = lround( numParticles *
p->getNumParticlesFactor() );
584 return getAllParticles(isfp, isfpCont, rndmEngine, pdg, interpEnergy, interpEta, numParticles);
◆ getFloatAfterPatternInStr()
double ISF::PunchThroughTool::getFloatAfterPatternInStr |
( |
const char * |
str, |
|
|
const char * |
pattern |
|
) |
| |
|
private |
get the floating point number in a string, after the given pattern
Definition at line 1358 of file PunchThroughTool.cxx.
1362 const std::string_view
str( cstr);
1363 const std::string_view
pattern( cpattern);
1366 if (
pos == std::string::npos)
1368 ATH_MSG_WARNING(
"[ punchthrough ] unable to retrieve floating point number from string");
1369 return -999999999999.;
1371 const std::string_view substring =
str.substr(
pos+
pattern.length());
1372 std::from_chars(substring.data(), substring.data() + substring.size(),
num);
◆ getInfoMap()
std::vector< std::map< std::string, std::string > > ISF::PunchThroughTool::getInfoMap |
( |
const std::string & |
mainNode, |
|
|
const std::string & |
xmlFilePath |
|
) |
| |
|
private |
Definition at line 793 of file PunchThroughTool.cxx.
794 std::vector<std::map<std::string, std::string>> xml_info;
795 xmlDocPtr
doc = xmlParseFile( xmlFilePath.c_str() );
798 for( xmlNodePtr nodeRoot =
doc->children; nodeRoot !=
nullptr; nodeRoot = nodeRoot->next) {
799 if (xmlStrEqual( nodeRoot->name, BAD_CAST mainNode.c_str() )) {
800 for( xmlNodePtr nodeRootChild = nodeRoot->children; nodeRootChild !=
nullptr; nodeRootChild = nodeRootChild->next ) {
801 if (xmlStrEqual( nodeRootChild->name, BAD_CAST
"info" )) {
802 if (nodeRootChild->children != NULL) {
803 for( xmlNodePtr infoNode = nodeRootChild->children; infoNode !=
nullptr; infoNode = infoNode->next) {
804 if(xmlStrEqual( infoNode->name, BAD_CAST
"item" )){
805 std::map<std::string, std::string> xml_info_item;
806 xml_info_item.insert({
"name", (
const char*) xmlGetProp( infoNode, BAD_CAST
"name" ) });
807 xml_info_item.insert({
"etaMins", (
const char*) xmlGetProp( infoNode, BAD_CAST
"etaMins" ) });
808 xml_info_item.insert({
"etaMaxs", (
const char*) xmlGetProp( infoNode, BAD_CAST
"etaMaxs" ) });
809 xml_info_item.insert({
"pidStr", (
const char*) xmlGetProp( infoNode, BAD_CAST
"pidStr" ) });
810 xml_info.push_back(xml_info_item);
◆ getOneParticle()
create exactly one punch-through particle with the given pdg and the given max energy
Definition at line 592 of file PunchThroughTool.cxx.
600 ATH_MSG_DEBUG(
"[ punchthrough ] passedPCAIterator ==> pcaCdfIterator = "<< pcaCdfIterator <<
" , pdg = "<< pdg <<
" , interpEnergy = "<< interpEnergy <<
" MeV, interpEta(*100) = "<< interpEta*100);
604 if (
p->getdoAnti() )
607 double rand = CLHEP::RandFlat::shoot(rndmEngine);
609 if (
rand > 0.5) anti = -1;
614 std::vector<int> parInitEnergyEta;
615 parInitEnergyEta.push_back(
std::round(interpEnergy) );
616 parInitEnergyEta.push_back(
std::round(interpEta*100) );
620 double deltaTheta = 0.;
622 double momDeltaTheta = 0.;
623 double momDeltaPhi = 0.;
625 double principal_component_0 = 0.;
626 double principal_component_1 = 0.;
627 double principal_component_2 = 0.;
628 double principal_component_3 = 0.;
629 double principal_component_4 = 0.;
630 std::vector<double> transformed_variables;
633 principal_component_0 =
p->getPCA0PDF()->getRand(rndmEngine, parInitEnergyEta);
634 principal_component_1 =
p->getPCA1PDF()->getRand(rndmEngine, parInitEnergyEta);
635 principal_component_2 =
p->getPCA2PDF()->getRand(rndmEngine, parInitEnergyEta);
636 principal_component_3 =
p->getPCA3PDF()->getRand(rndmEngine, parInitEnergyEta);
637 principal_component_4 =
p->getPCA4PDF()->getRand(rndmEngine, parInitEnergyEta);
639 ATH_MSG_DEBUG(
"Drawn punch through kinematics PCA components: PCA0 = "<< principal_component_0 <<
" PCA1 = "<< principal_component_1 <<
" PCA2 = "<< principal_component_2 <<
" PCA3 = "<< principal_component_3 <<
" PCA4 = "<< principal_component_4 );
641 std::vector<double> principal_components {
642 principal_component_0,
643 principal_component_1,
644 principal_component_2,
645 principal_component_3,
646 principal_component_4
649 transformed_variables =
inversePCA(pcaCdfIterator,principal_components);
657 ATH_MSG_DEBUG(
"Transformed punch through kinematics: energy = "<<
energy <<
" MeV deltaTheta = "<< deltaTheta <<
" deltaPhi = "<<
deltaPhi <<
" momDeltaTheta = "<< momDeltaTheta <<
" momDeltaPhi = "<< momDeltaPhi );
659 energy *=
p->getEnergyFactor();
660 if (energy < p->getMinEnergy()) {
661 energy =
p->getMinEnergy() + 10;
671 deltaTheta *= ( CLHEP::RandFlat::shoot(rndmEngine) > 0.5 ) ? 1. : -1.;
674 theta = isfp.
position().theta() + deltaTheta*
p->getPosAngleFactor();
677 while ( (theta >
M_PI) || (
theta < 0.) );
680 deltaPhi *= ( CLHEP::RandFlat::shoot(rndmEngine) > 0.5 ) ? 1. : -1.;
684 while ( std::fabs(phi) > 2*
M_PI) phi /= 2.;
692 double momTheta = 0.;
696 momDeltaTheta *= ( CLHEP::RandFlat::shoot(rndmEngine) > 0.5 ) ? 1. : -1.;
699 momTheta =
theta + momDeltaTheta*
p->getMomAngleFactor();
702 while ( (momTheta >
M_PI) || (momTheta < 0.) );
706 momDeltaPhi *= ( CLHEP::RandFlat::shoot(rndmEngine) > 0.5 ) ? 1. : -1.;
708 double momPhi =
phi + momDeltaPhi*
p->getMomAngleFactor();
710 while ( std::fabs(momPhi) > 2*
M_PI) momPhi /= 2.;
711 while (momPhi >
M_PI) momPhi -= 2*
M_PI;
712 while (momPhi < -
M_PI) momPhi += 2*
M_PI;
716 ATH_MSG_DEBUG(
"createExitPs input parameters: doAnti? = "<< pdg*anti <<
" energy = "<<
energy <<
" theta = "<< theta <<
" phi = "<< phi <<
" momTheta = "<< momTheta <<
" momPhi " << momPhi );
◆ getVariableCDFmappings()
std::map< double, double > ISF::PunchThroughTool::getVariableCDFmappings |
( |
xmlNodePtr & |
nodeParent | ) |
|
|
staticprivate |
Definition at line 944 of file PunchThroughTool.cxx.
946 std::map<double, double> mappings;
948 for( xmlNodePtr
node = nodeParent->children;
node !=
nullptr;
node =
node->next ) {
950 if (xmlStrEqual(
node->
name, BAD_CAST
"CDFmap" )) {
951 double ref =
atof( (
const char*) xmlGetProp(
node, BAD_CAST
"ref" ) );
952 double quant =
atof( (
const char*) xmlGetProp(
node, BAD_CAST
"quant" ) );
954 mappings.insert(std::pair<double, double>(
ref, quant) );
◆ initialize()
StatusCode ISF::PunchThroughTool::initialize |
( |
| ) |
|
|
virtual |
AlgTool initialize method.
Definition at line 74 of file PunchThroughTool.cxx.
82 return StatusCode::FAILURE;
87 if (resolvedFileName.empty()) {
89 return StatusCode::FAILURE;
91 ATH_MSG_INFO(
"[ punchthrough ] Parametrisation file found: " << resolvedFileName );
96 ATH_MSG_WARNING(
"[ punchthrough ] unable to open the lookup-table for the punch-through simulation (file does not exist)");
97 return StatusCode::FAILURE;
101 ATH_MSG_WARNING(
"[ punchthrough ] unable to open the lookup-table for the punch-through simulation (wrong or empty file?)");
102 return StatusCode::FAILURE;
108 ATH_MSG_WARNING(
"[ punchthrough ] unable to open or read the inverse CDF config");
109 return StatusCode::FAILURE;
115 ATH_MSG_WARNING(
"[ punchthrough ] unable to open or read the inverse PCA config");
116 return StatusCode::FAILURE;
122 ATH_MSG_WARNING(
"[ punchthrough ] size of infoMap for PCA and CDF differs! Something is wrong with input xml files.");
123 return StatusCode::FAILURE;
133 ATH_MSG_FATAL(
" [ punchthrough ] Could not get ParticleDataTable! Cannot associate pdg code with charge! Abort. " );
134 return StatusCode::FAILURE;
140 ATH_MSG_FATAL (
"[ punchthrough ] Could not retrieve GeometryIdentifier Service. Abort");
141 return StatusCode::FAILURE;
148 return StatusCode::FAILURE;
172 ATH_MSG_VERBOSE(
"[ punchthrough ] registering punch-through particle type with pdg = " << pdg );
173 if (
registerParticle( pdg, doAnti, minEnergy, maxNum, numFactor, energyFactor, posAngleFactor, momAngleFactor )
174 != StatusCode::SUCCESS)
176 ATH_MSG_ERROR(
"[ punchthrough ] unable to register punch-through particle type with pdg = " << pdg);
187 ATH_MSG_WARNING(
"[ punchthrough ] more punch-through particle correlations are given, than punch-through particle types are registered (skipping the last ones)");
192 for (
unsigned int num = 0;
num < numCorrelations;
num++ )
200 if ( ! pdg2)
continue;
202 if (
registerCorrelation(pdg1, pdg2, minCorrEnergy, fullCorrEnergy) != StatusCode::SUCCESS )
204 ATH_MSG_ERROR(
"[ punchthrough ] unable to register punch-through particle correlation for pdg1=" << pdg1 <<
" pdg2=" << pdg2 );
214 found1=
false; found2=
false;
216 for (
size_t i=0;
i<rzCalo->size();++
i)
218 const double r_tempCalo = rzCalo->at(
i).first;
219 const double z_tempCalo = rzCalo->at(
i).second;
223 for (
size_t j=0; j<rzMS->size();++j)
225 const double r_tempMS =rzMS->at(j).first;
226 const double z_tempMS =rzMS->at(j).second;
228 if (r_tempCalo==r_tempMS && z_tempCalo==z_tempMS && found1==
false )
231 m_z1=std::fabs(z_tempMS);
235 else if (r_tempCalo==r_tempMS && z_tempCalo==z_tempMS && r_tempCalo!=
m_R1 && std::fabs(z_tempCalo)!=
m_z1)
238 m_z2=std::fabs(z_tempMS);
243 if (found1==
true && found2==
true)
break;
248 if (found1 ==
false)
ATH_MSG_ERROR (
"first coordinate of calo-MS border not found");
249 if (found2 ==
false)
ATH_MSG_ERROR (
"second coordinate of calo-MS border not found; first one is: R1 ="<<
m_R1<<
" z1 ="<<
m_z1);
252 double r_temp, z_temp;
262 ATH_MSG_INFO(
"punchthrough initialization is successful" );
263 return StatusCode::SUCCESS;
◆ initializeInverseCDF()
StatusCode ISF::PunchThroughTool::initializeInverseCDF |
( |
const std::string & |
quantileTransformerConfigFile | ) |
|
|
private |
Definition at line 885 of file PunchThroughTool.cxx.
886 std::map<double, double> variable0_inverse_cdf_row;
887 std::map<double, double> variable1_inverse_cdf_row;
888 std::map<double, double> variable2_inverse_cdf_row;
889 std::map<double, double> variable3_inverse_cdf_row;
890 std::map<double, double> variable4_inverse_cdf_row;
894 xmlDocPtr
doc = xmlParseFile( inverseCdfConfigFile.c_str() );
896 ATH_MSG_INFO(
"[ punchthrough ] Loading inverse CDF: " << inverseCdfConfigFile);
905 for( xmlNodePtr nodeRoot =
doc->children; nodeRoot !=
nullptr; nodeRoot = nodeRoot->next) {
906 if (xmlStrEqual( nodeRoot->name, BAD_CAST
"CDFMappings" )) {
907 for( xmlNodePtr typeMappings = nodeRoot->children; typeMappings !=
nullptr; typeMappings = typeMappings->next ) {
908 if (xmlStrEqual( typeMappings->name, BAD_CAST
m_xml_info_cdf[
i].at(
"name").c_str() )) {
909 if (typeMappings->children != NULL) {
910 for( xmlNodePtr nodeMappings = typeMappings->children; nodeMappings !=
nullptr; nodeMappings = nodeMappings->next) {
912 if (xmlStrEqual( nodeMappings->name, BAD_CAST
"variable0" )) {
915 else if (xmlStrEqual( nodeMappings->name, BAD_CAST
"variable1" )) {
918 else if (xmlStrEqual( nodeMappings->name, BAD_CAST
"variable2" )) {
921 else if (xmlStrEqual( nodeMappings->name, BAD_CAST
"variable3" )) {
924 else if (xmlStrEqual( nodeMappings->name, BAD_CAST
"variable4" )) {
941 return StatusCode::SUCCESS;
◆ initializeInversePCA()
StatusCode ISF::PunchThroughTool::initializeInversePCA |
( |
const std::string & |
inversePCAConfigFile | ) |
|
|
private |
Definition at line 830 of file PunchThroughTool.cxx.
832 xmlDocPtr
doc = xmlParseFile( inversePCAConfigFile.c_str() );
834 ATH_MSG_INFO(
"[ punchthrough ] Loading inversePCA: " << inversePCAConfigFile);
841 std::vector<std::vector<double>> PCA_matrix;
844 for( xmlNodePtr nodeRoot =
doc->children; nodeRoot !=
nullptr; nodeRoot = nodeRoot->next) {
845 if (xmlStrEqual( nodeRoot->name, BAD_CAST
"PCAinverse" )) {
846 for( xmlNodePtr nodePCAinverse = nodeRoot->children; nodePCAinverse !=
nullptr; nodePCAinverse = nodePCAinverse->next ) {
848 if (xmlStrEqual( nodePCAinverse->name, BAD_CAST
m_xml_info_pca[
i].at(
"name").c_str() )) {
849 if (nodePCAinverse->children != NULL) {
850 for( xmlNodePtr pcaNode = nodePCAinverse->children; pcaNode !=
nullptr; pcaNode = pcaNode->next) {
852 if (xmlStrEqual( pcaNode->name, BAD_CAST
"PCAmatrix" )) {
853 std::vector<double> PCA_matrix_row;
854 PCA_matrix_row.push_back(
atof( (
const char*) xmlGetProp( pcaNode, BAD_CAST
"comp_0" ) ) );
855 PCA_matrix_row.push_back(
atof( (
const char*) xmlGetProp( pcaNode, BAD_CAST
"comp_1" ) ) );
856 PCA_matrix_row.push_back(
atof( (
const char*) xmlGetProp( pcaNode, BAD_CAST
"comp_2" ) ) );
857 PCA_matrix_row.push_back(
atof( (
const char*) xmlGetProp( pcaNode, BAD_CAST
"comp_3" ) ) );
858 PCA_matrix_row.push_back(
atof( (
const char*) xmlGetProp( pcaNode, BAD_CAST
"comp_4" ) ) );
859 PCA_matrix.push_back(PCA_matrix_row);
861 else if (xmlStrEqual( pcaNode->name, BAD_CAST
"PCAmeans" )) {
862 std::vector<double> PCA_means_row;
863 PCA_means_row.push_back(
atof( (
const char*) xmlGetProp( pcaNode, BAD_CAST
"mean_0" ) ) );
864 PCA_means_row.push_back(
atof( (
const char*) xmlGetProp( pcaNode, BAD_CAST
"mean_1" ) ) );
865 PCA_means_row.push_back(
atof( (
const char*) xmlGetProp( pcaNode, BAD_CAST
"mean_2" ) ) );
866 PCA_means_row.push_back(
atof( (
const char*) xmlGetProp( pcaNode, BAD_CAST
"mean_3" ) ) );
867 PCA_means_row.push_back(
atof( (
const char*) xmlGetProp( pcaNode, BAD_CAST
"mean_4" ) ) );
882 return StatusCode::SUCCESS;
◆ interpolateEnergy()
double ISF::PunchThroughTool::interpolateEnergy |
( |
const double & |
energy, |
|
|
CLHEP::HepRandomEngine * |
rndmEngine |
|
) |
| const |
|
private |
Definition at line 977 of file PunchThroughTool.cxx.
981 std::string energyPointsString;
986 ATH_MSG_DEBUG(
"[ punchthrough ] available energy points: " << energyPointsString);
991 ATH_MSG_DEBUG(
"[ punchthrough ] incoming energy > largest energy point, returning greatest energy point: " <<
m_energyPoints.back());
995 ATH_MSG_DEBUG(
"[ punchthrough ] incoming energy < smallest energy point, returning smallest energy point: " << *upperEnergy);
999 ATH_MSG_DEBUG(
"[ punchthrough ] energy points upper_bound: "<< *upperEnergy);
1001 double randomShoot = CLHEP::RandFlat::shoot(rndmEngine);
1003 ATH_MSG_DEBUG(
"[ punchthrough ] Shooting random number: "<< randomShoot);
1005 double midPoint = *std::prev(upperEnergy)*M_SQRT2;
1009 double distance = std::abs(
energy - *std::prev(upperEnergy))/((midPoint) - *std::prev(upperEnergy));
1011 ATH_MSG_DEBUG(
"[ punchthrough ] incoming energy is closest to prev(upper_bound) in log(energy), distance: " <<
distance );
1014 ATH_MSG_DEBUG(
"[ punchthrough ] randomShoot < distance, returning upper_bound " << *upperEnergy );
1015 return *upperEnergy;
1017 ATH_MSG_DEBUG(
"[ punchthrough ] randomShoot > distance, returning prev(upper_bound) " << *std::prev(upperEnergy) );
1019 return *std::prev(upperEnergy);
1021 else if(
energy > midPoint){
1023 double distance = std::abs(
energy - *upperEnergy)/((*upperEnergy - midPoint));
1025 ATH_MSG_DEBUG(
"[ punchthrough ] incoming energy is closest to upper_bound in log(energy), distance: " <<
distance );
1028 ATH_MSG_DEBUG(
"[ punchthrough ] randomShoot < distance, returning prev(upper_bound) " << *std::prev(upperEnergy) );
1029 return *std::prev(upperEnergy);
1031 ATH_MSG_DEBUG(
"[ punchthrough ] randomShoot > distance, returning upper_bound " << *upperEnergy );
1032 return *upperEnergy;
1035 return *upperEnergy;
◆ interpolateEta()
double ISF::PunchThroughTool::interpolateEta |
( |
const double & |
eta, |
|
|
CLHEP::HepRandomEngine * |
rndmEngine |
|
) |
| const |
|
private |
Definition at line 1038 of file PunchThroughTool.cxx.
1040 double absEta = std::abs(eta);
1044 std::string etaPointsString;
1049 ATH_MSG_DEBUG(
"[ punchthrough ] available eta points: " << etaPointsString);
1054 ATH_MSG_DEBUG(
"[ punchthrough ] incoming abs(eta) > largest eta point, returning greatest eta point: " <<
m_etaPoints.back());
1059 ATH_MSG_DEBUG(
"[ punchthrough ] eta points upper_bound: "<< *upperEta);
1061 double randomShoot = CLHEP::RandFlat::shoot(rndmEngine);
1063 ATH_MSG_DEBUG(
"[ punchthrough ] Shooting random number: "<< randomShoot);
1065 if(std::abs(
absEta - *upperEta) < std::abs(
absEta - *std::prev(upperEta))){
1067 double distance = std::abs(
absEta - *upperEta)/((*upperEta - *std::prev(upperEta))/2);
1069 ATH_MSG_DEBUG(
"[ punchthrough ] abs(eta) is closer to eta points upper_bound, distance: " <<
distance );
1072 ATH_MSG_DEBUG(
"[ punchthrough ] randomShoot > distance, returning upper_bound " << *upperEta );
1076 ATH_MSG_DEBUG(
"[ punchthrough ] randomShoot < distance, returning prev(upper_bound) " << *std::prev(upperEta) );
1078 return *std::prev(upperEta);
1080 else if(std::abs(
absEta - *std::prev(upperEta)) < std::abs(
absEta - *upperEta)){
1083 ATH_MSG_DEBUG(
"[ punchthrough ] prev of upper bound is begin, returning that: " << *std::prev(upperEta) );
1084 return *std::prev(upperEta);
1087 double distance = std::abs(
absEta - *std::prev(upperEta))/((*std::prev(upperEta) - *std::prev(std::prev(upperEta)))/2);
1089 ATH_MSG_DEBUG(
"[ punchthrough ] abs(eta) is closer to eta points prev(upper_bound), distance: " <<
distance );
1092 ATH_MSG_DEBUG(
"[ punchthrough ] randomShoot > distance, returning prev(prev(upper_bound)) " << *std::prev(std::prev(upperEta)) );
1094 return *std::prev(std::prev(upperEta));
1096 ATH_MSG_DEBUG(
"[ punchthrough ] randomShoot < distance, returning prev(upper_bound) " << *std::prev(upperEta) );
1098 return *std::prev(upperEta);
1101 return *std::prev(upperEta);
◆ inverseCdfTransform()
double ISF::PunchThroughTool::inverseCdfTransform |
( |
double |
variable, |
|
|
const std::map< double, double > & |
inverse_cdf_map |
|
) |
| |
|
staticprivate |
Definition at line 962 of file PunchThroughTool.cxx.
966 auto upper = inverse_cdf_map.upper_bound(norm_cdf);
967 auto lower =
upper--;
969 double m = (
upper->second - lower->second)/(
upper->first - lower->first);
970 double c = lower->second -
m * lower->first;
971 double transformed =
m * norm_cdf +
c;
◆ inversePCA()
std::vector< double > ISF::PunchThroughTool::inversePCA |
( |
int |
pcaCdfIterator, |
|
|
std::vector< double > & |
variables |
|
) |
| const |
|
private |
Definition at line 821 of file PunchThroughTool.cxx.
825 std::transform (transformed_variables.begin(), transformed_variables.end(),
m_PCA_means[pcaCdfIterator].begin(), transformed_variables.begin(), std::plus<double>());
827 return transformed_variables;
◆ normal_cdf()
double ISF::PunchThroughTool::normal_cdf |
( |
double |
x | ) |
|
|
staticprivate |
◆ passedParamIterator()
int ISF::PunchThroughTool::passedParamIterator |
( |
int |
pid, |
|
|
double |
eta, |
|
|
const std::vector< std::map< std::string, std::string >> & |
mapvect |
|
) |
| const |
|
private |
Definition at line 764 of file PunchThroughTool.cxx.
767 int pidStrSingle = std::abs(
pid);
771 for (
unsigned int i = 0;
i < mapvect.size();
i++){
772 const std::string &pidStr = mapvect[
i].at(
"pidStr");
773 auto v = str_to_list<int>(pidStr);
774 if(
std::find(
v.begin(),
v.end(),pidStrSingle)==
v.end())
continue;
775 const std::string &etaMinsStr = mapvect[
i].at(
"etaMins");
776 const std::string &etaMaxsStr = mapvect[
i].at(
"etaMaxs");
777 std::vector<double> etaMinsVect = str_to_list<double>(etaMinsStr);
778 std::vector<double> etaMaxsVect = str_to_list<double>(etaMaxsStr);
779 assert(etaMaxsVect.size() == etaMinsVect.size());
780 for (
unsigned int j = 0; j < etaMinsVect.size(); j++){
781 double etaMinToCompare = etaMinsVect[j];
782 double etaMaxToCompare = etaMaxsVect[j];
783 if((eta >= etaMinToCompare) && (eta < etaMaxToCompare)){
◆ propagator()
Amg::Vector3D ISF::PunchThroughTool::propagator |
( |
double |
theta, |
|
|
double |
phi |
|
) |
| const |
|
private |
get particle through the calorimeter
Definition at line 1376 of file PunchThroughTool.cxx.
1390 if (theta >= 0 && theta < theta1)
1395 else if (theta >= theta1 && theta < theta2)
1400 else if (theta >= theta2 && theta < theta3)
1405 else if (theta >= theta3 && theta < (TMath::Pi()-theta3) )
1410 else if (theta >= (TMath::Pi()-theta3) && theta < (TMath::Pi()-theta2) )
1415 else if (theta >= (TMath::Pi()-theta2) && theta < (TMath::Pi()-theta1) )
1420 else if (theta >= (TMath::Pi()-theta1) && theta <= TMath::Pi() )
1429 ATH_MSG_WARNING (
"Given theta angle is incorrect, setting particle position to (0, 0, 0)");
1430 x = 0.0;
y = 0.0;
z = 0.0;
r = 0.0;
1437 ATH_MSG_DEBUG(
"position of produced punch-through particle: x = "<<
x <<
" y = "<<
y <<
" z = "<<
z<<
" r = "<<
pos.perp() <<
"std::sqrt(x^2+y^2) = "<< std::sqrt(
x*
x+
y*
y) );
◆ readLookuptablePDF()
std::unique_ptr< ISF::PDFcreator > ISF::PunchThroughTool::readLookuptablePDF |
( |
int |
pdgID, |
|
|
const std::string & |
folderName |
|
) |
| |
|
private |
reads out the lookuptable for the given type of particle
Definition at line 1242 of file PunchThroughTool.cxx.
1249 std::unique_ptr<ISF::PDFcreator>
pdf = std::make_unique<ISF::PDFcreator>();
1252 std::stringstream dirName;
1254 pdf->setName(dirName.str().c_str());
1266 TIter keyList(
dir->GetListOfKeys());
1269 while ((
key = (TKey*)keyList())) {
1272 TH1*
hist =
nullptr;
1275 if(strcmp(
key->GetClassName(),
"TH1F") == 0){
1288 const int energy = std::stoi(strEnergy);
1289 const int etaMin = std::stoi(strEtaMin);
1295 const double energyDbl =
static_cast<double>(
energy);
1296 const double etaDbl =
static_cast<double>(
etaMin)/100.;
◆ registerCorrelation()
StatusCode ISF::PunchThroughTool::registerCorrelation |
( |
int |
pdgID1, |
|
|
int |
pdgID2, |
|
|
double |
minCorrEnergy = 0. , |
|
|
double |
fullCorrEnergy = 0. |
|
) |
| |
|
private |
register a correlation for the two given types of punch-through particles with a given energy threshold above which we will have full correlation
Definition at line 1187 of file PunchThroughTool.cxx.
1196 return StatusCode::FAILURE;
1199 std::stringstream
name;
1200 name <<
"NumExitCorrelations/x_PDG" << std::abs(pdgID1) <<
"__y_PDG" << std::abs(pdgID2) <<
"__lowE";
1203 name <<
"NumExitCorrelations/x_PDG" << std::abs(pdgID1) <<
"__y_PDG" << std::abs(pdgID2) <<
"__highE";
1206 name <<
"NumExitCorrelations/x_PDG" << std::abs(pdgID2) <<
"__y_PDG" << std::abs(pdgID1) <<
"__lowE";
1209 name <<
"NumExitCorrelations/x_PDG" << std::abs(pdgID2) <<
"__y_PDG" << std::abs(pdgID1) <<
"__highE";
1212 if ( (!hist1_2_lowE) || (!hist2_1_lowE) || (!hist1_2_highE) || (!hist2_1_highE) )
1214 ATH_MSG_ERROR(
"[ punchthrough ] unable to retrieve the correlation data for PDG IDs " << pdgID1 <<
" and " << pdgID2);
1215 return StatusCode::FAILURE;
1227 m_particles[pdgID1]->setCorrelation(pdgID2, hist2_1_lowE, hist2_1_highE,
1228 minCorrEnergy, fullCorrEnergy,
1229 lowE, midE, upperE);
1231 m_particles[pdgID2]->setCorrelation(pdgID1, hist1_2_lowE, hist1_2_highE,
1232 minCorrEnergy, fullCorrEnergy,
1233 lowE, midE, upperE);
1234 return StatusCode::SUCCESS;
◆ registerParticle()
StatusCode ISF::PunchThroughTool::registerParticle |
( |
int |
pdgID, |
|
|
bool |
doAntiparticle = false , |
|
|
double |
minEnergy = 0. , |
|
|
int |
maxNumParticles = -1 , |
|
|
double |
numParticlesFactor = 1. , |
|
|
double |
energyFactor = 1. , |
|
|
double |
posAngleFactor = 1. , |
|
|
double |
momAngleFactor = 1. |
|
) |
| |
|
private |
registers a type of punch-through particles which will be simulated
Definition at line 1110 of file PunchThroughTool.cxx.
1118 if (!pdf_num )
return StatusCode::FAILURE;
1124 return StatusCode::FAILURE;
1132 return StatusCode::FAILURE;
1140 return StatusCode::FAILURE;
1147 return StatusCode::FAILURE;
1154 return StatusCode::FAILURE;
1158 PunchThroughParticle *
particle =
new PunchThroughParticle(pdg, doAntiparticle);
1159 particle->setNumParticlesPDF(std::move(pdf_num));
1160 particle->setPCA0PDF(std::move(pdf_pca0));
1161 particle->setPCA1PDF(std::move(pdf_pca1));
1162 particle->setPCA2PDF(std::move(pdf_pca2));
1163 particle->setPCA3PDF(std::move(pdf_pca3));
1164 particle->setPCA4PDF(std::move(pdf_pca4));
1168 minEnergy = ( minEnergy > restMass ) ? minEnergy : restMass;
1170 particle->setMaxNumParticles(maxNumParticles);
1171 particle->setNumParticlesFactor(numParticlesFactor);
1172 particle->setEnergyFactor(energyFactor);
1173 particle->setPosAngleFactor(posAngleFactor);
1174 particle->setMomAngleFactor(momAngleFactor);
1179 return StatusCode::SUCCESS;
◆ m_beamPipe
DoubleProperty ISF::PunchThroughTool::m_beamPipe {this, "BeamPipeRadius", 500.} |
|
private |
◆ m_correlatedParticle
IntegerArrayProperty ISF::PunchThroughTool::m_correlatedParticle {this, "CorrelatedParticle", {}, "holds the pdg of the correlated particle for each given pdg"} |
|
private |
◆ m_doAntiParticles
BooleanArrayProperty ISF::PunchThroughTool::m_doAntiParticles {this, "DoAntiParticles", {}, "vector of bools to determine if anti-particles are created for each punch-through particle type"} |
|
private |
◆ m_energyFactor
DoubleArrayProperty ISF::PunchThroughTool::m_energyFactor {this, "EnergyFactor", {}, "scale the energy of the punch-through particles"} |
|
private |
◆ m_energyPoints
std::vector<double> ISF::PunchThroughTool::m_energyPoints |
|
private |
◆ m_envDefSvc
◆ m_etaPoints
std::vector<double> ISF::PunchThroughTool::m_etaPoints |
|
private |
◆ m_fileLookupTable
TFile* ISF::PunchThroughTool::m_fileLookupTable {nullptr} |
|
private |
◆ m_filenameInverseCDF
StringProperty ISF::PunchThroughTool::m_filenameInverseCDF {this, "FilenameInverseCdf", "", "holds the filename of inverse quantile transformer config"} |
|
private |
◆ m_filenameInversePCA
StringProperty ISF::PunchThroughTool::m_filenameInversePCA {this, "FilenameInversePca", "", "holds the filename of inverse PCA config"} |
|
private |
◆ m_filenameLookupTable
StringProperty ISF::PunchThroughTool::m_filenameLookupTable {this, "FilenameLookupTable", "CaloPunchThroughParametrisation.root", "holds the filename of the lookup table"} |
|
private |
◆ m_fullCorrEnergy
DoubleArrayProperty ISF::PunchThroughTool::m_fullCorrEnergy {this, "FullCorrelationEnergy", {}, "holds the energy threshold above which a particle correlation is fully developed"} |
|
private |
◆ m_geoIDSvc
◆ m_initiatorsEtaRange
DoubleArrayProperty ISF::PunchThroughTool::m_initiatorsEtaRange {this, "InitiatorsEtaRange", {}, "vector of min and max abs eta range to allow punch through initiators"} |
|
private |
◆ m_initiatorsMinEnergy
IntegerArrayProperty ISF::PunchThroughTool::m_initiatorsMinEnergy {this, "InitiatorsMinEnergy", {}, "vector of punch-through initiator min energies to create punch through"} |
|
private |
◆ m_inverse_PCA_matrix
std::vector<std::vector<std::vector<double> > > ISF::PunchThroughTool::m_inverse_PCA_matrix |
|
private |
◆ m_maxNumParticles
IntegerArrayProperty ISF::PunchThroughTool::m_maxNumParticles {this, "MaxNumParticles", {}, "maximum number of punch-through particles for each particle type"} |
|
private |
◆ m_minCorrEnergy
DoubleArrayProperty ISF::PunchThroughTool::m_minCorrEnergy {this, "MinCorrelationEnergy", {}, "holds the energy threshold below which no particle correlation is computed"} |
|
private |
◆ m_minEnergy
DoubleArrayProperty ISF::PunchThroughTool::m_minEnergy {this, "MinEnergy", {}, "punch-through particles minimum energies"} |
|
private |
◆ m_momAngleFactor
DoubleArrayProperty ISF::PunchThroughTool::m_momAngleFactor {this, "ScaleMomDeflectionAngles", {}, "tuning parameter to scale the momentum deflection angles"} |
|
private |
◆ m_numParticlesFactor
DoubleArrayProperty ISF::PunchThroughTool::m_numParticlesFactor {this, "NumParticlesFactor", {}, "scale the number of punch-through particles"} |
|
private |
◆ m_particleDataTable
const HepPDT::ParticleDataTable* ISF::PunchThroughTool::m_particleDataTable {nullptr} |
|
private |
ParticleDataTable needed to get connection pdg_code <-> charge.
Definition at line 160 of file PunchThroughTool.h.
◆ m_particlePropSvc
ServiceHandle<IPartPropSvc> ISF::PunchThroughTool::m_particlePropSvc {this, "PartPropSvc", "PartPropSvc", "particle properties svc"} |
|
private |
◆ m_particles
needed to create punch-through particles with the right distributions
store all punch-through information for each particle id
Definition at line 166 of file PunchThroughTool.h.
◆ m_PCA_means
std::vector<std::vector<double> > ISF::PunchThroughTool::m_PCA_means |
|
private |
◆ m_pdgInitiators
IntegerArrayProperty ISF::PunchThroughTool::m_pdgInitiators {this, "PunchThroughInitiators", {}, "vector of punch-through initiator pgds"} |
|
private |
◆ m_posAngleFactor
DoubleArrayProperty ISF::PunchThroughTool::m_posAngleFactor {this, "ScalePosDeflectionAngles", {}, "tuning parameter to scale the position deflection angles"} |
|
private |
◆ m_punchThroughClassifier
PublicToolHandle<IPunchThroughClassifier> ISF::PunchThroughTool::m_punchThroughClassifier {this, "PunchThroughClassifier", "ISF_PunchThroughClassifier", ""} |
|
private |
◆ m_punchThroughParticles
IntegerArrayProperty ISF::PunchThroughTool::m_punchThroughParticles {this, "PunchThroughParticles", {}, "vector of pdgs of the particles produced in punch-throughs"} |
|
private |
◆ m_R1
double ISF::PunchThroughTool::m_R1 {0.} |
|
private |
◆ m_R2
double ISF::PunchThroughTool::m_R2 {0.} |
|
private |
◆ m_variable0_inverse_cdf
std::vector<std::map<double, double> > ISF::PunchThroughTool::m_variable0_inverse_cdf |
|
private |
◆ m_variable1_inverse_cdf
std::vector<std::map<double, double> > ISF::PunchThroughTool::m_variable1_inverse_cdf |
|
private |
◆ m_variable2_inverse_cdf
std::vector<std::map<double, double> > ISF::PunchThroughTool::m_variable2_inverse_cdf |
|
private |
◆ m_variable3_inverse_cdf
std::vector<std::map<double, double> > ISF::PunchThroughTool::m_variable3_inverse_cdf |
|
private |
◆ m_variable4_inverse_cdf
std::vector<std::map<double, double> > ISF::PunchThroughTool::m_variable4_inverse_cdf |
|
private |
◆ m_xml_info_cdf
std::vector<std::map<std::string, std::string> > ISF::PunchThroughTool::m_xml_info_cdf |
|
private |
◆ m_xml_info_pca
std::vector<std::map<std::string, std::string> > ISF::PunchThroughTool::m_xml_info_pca |
|
private |
◆ m_z1
double ISF::PunchThroughTool::m_z1 {0.} |
|
private |
◆ m_z2
double ISF::PunchThroughTool::m_z2 {0.} |
|
private |
The documentation for this class was generated from the following files:
JetConstituentVector::iterator iterator
constexpr ParticleHypothesis particle[PARTICLEHYPOTHESES]
the array of masses
void setNextGeoID(AtlasDetDescr::AtlasRegion geoID)
register the next AtlasDetDescr::AtlasRegion
std::string find(const std::string &s)
return a remapped string
std::vector< RZPair > RZPairVector
setSAddress setEtaMS setDirPhiMS setDirZMS setBarrelRadius setEndcapAlpha setEndcapRadius setInterceptInner setEtaMap setEtaBin setIsTgcFailure setDeltaPt deltaPhi
float round(const float toRound, const unsigned int decimals)
int pdgCode() const
PDG value.
#define ATH_MSG_VERBOSE(x)
def TH2F(name, title, nxbins, bins_par2, bins_par3, bins_par4, bins_par5=None, bins_par6=None, path='', **kwargs)
const Amg::Vector3D & position() const
The current position of the ISFParticle.
Amg::Vector3D transform(Amg::Vector3D &v, Amg::Transform3D &tr)
Transform a point from a Trasformation3D.
double atof(std::string_view str)
Converts a string into a double / float.
constexpr int UNDEFINED_ID
void name(const std::string &n)
constexpr int SIM_STATUS_THRESHOLD
Constant definiting the status threshold for simulated particles, eg. can be used to separate generat...
std::string to_string(const DetectorType &type)
const Amg::Vector3D & momentum() const
The current momentum vector of the ISFParticle.
double charge(const T &p)
Eigen::Matrix< double, 3, 1 > Vector3D
std::string PathResolverFindCalibFile(const std::string &logical_file_name)
#define ATH_MSG_WARNING(x)
const boost::regex ref(r_ef)
void setRThetaPhi(Amg::Vector3D &v, double r, double theta, double phi)
sets radius, the theta and phi angle of a vector.
bool absEta(const xAOD::TauJet &tau, double &out)
float distance(const Amg::Vector3D &p1, const Amg::Vector3D &p2)
calculates the distance between two point in 3D space
double mass() const
mass of the particle