14#ifndef MASSEIGENSTATE_HPP_
15#define MASSEIGENSTATE_HPP_
57 int const secondPdgCode,
92 hasCode(
int const pdgCode )
const;
95 std::vector< int >
const&
110 std::vector< ExtendedMass* >
const&
114 double const minusUncertainty = 0.0,
115 double const plusUncertainty = 0.0,
116 int const schemeType = 0,
117 double const evaluationScale = 0.0 );
120 double const plusUncertainty,
121 int const schemeType,
122 double const evaluationScale );
127 std::vector< MassEigenstatesPairedWithBr* >&
129 std::vector< MassEigenstatesPairedWithBr* >
const&
134 getDecay(
int const whichDecay )
const;
158 std::list< MassEigenstate const* >
const& sortedProductList )
const;
161 std::list< MassEigenstate const* >& productList )
const;
164 std::vector< MassEigenstate const* >
const& productList )
const;
167 std::list< MassEigenstate const* >
const& soughtList,
168 std::list< MassEigenstate const* >
const& vetoedList )
const;
171 std::list< MassEigenstate const* >& soughtList,
172 std::list< MassEigenstate const* >& vetoedList )
const;
175 std::vector< MassEigenstate const* >
const& soughtVector,
176 std::vector< MassEigenstate const* >
const& vetoedVector )
const;
179 int const secondProductCode )
const;
182 int const secondProductCode,
183 int const thirdProductCode )
const;
186 std::list< int >
const& productCodeList )
const;
189 std::vector< int >
const& productCodeList )
const;
192 std::list< int >
const& vetoedCodeList )
const;
195 std::vector< int >
const& vetoedCodeVector )
const;
204 std::vector< bool >
const&
260 return massEigenstatePointer->
hasCode( pdgCode );
300 MassEigenstateCodeMap::iterator codeFinder;
307 codeFinder->second =
this;
316 bool returnBool(
false );
336 inline std::vector< int >
const&
369 inline std::vector< ExtendedMass* >
const&
377 double const plusUncertainty,
378 int const schemeType,
379 double const evaluationScale )
387 ( evaluationScale ==
runningMasses[ whichMass ].getScale() ) )
389 runningMasses[ whichMass ].setUncertainties( minusUncertainty,
417 inline std::vector< MassEigenstate::MassEigenstatesPairedWithBr* >&
423 inline std::vector< MassEigenstate::MassEigenstatesPairedWithBr* >
const&
455 for(
int whichDecay( 0 );
487 for( std::list< MassEigenstate const* >::const_iterator
492 decayRecorder.
addPointer( &((*productIterator)->getChargeConjugate()) );
511 for( std::list< MassEigenstate const* >::const_iterator
516 decayRecorder.
addPointer( &((*productIterator)->getChargeConjugate()) );
527 double returnValue( 0.0 );
528 for(
int whichDecay(
decaySet.getLastIndex() );
532 if(
decaySet[ whichDecay ].matchesExactly( &firstProduct,
535 returnValue =
decaySet[ whichDecay ].getPairedValue();
548 std::list< MassEigenstate const* > comparisonList( 1,
550 comparisonList.push_back( &secondProduct );
551 comparisonList.push_back( &thirdProduct );
557 std::list< MassEigenstate const* >
const& sortedProductList )
const
559 double returnValue( 0.0 );
560 for(
int whichDecay(
decaySet.getLastIndex() );
564 if(
decaySet[ whichDecay ].matchesExactly( sortedProductList ) )
566 returnValue =
decaySet[ whichDecay ].getPairedValue();
575 std::list< MassEigenstate const* >& productList )
const
583 std::vector< MassEigenstate const* >
const& productList )
const
585 std::list< MassEigenstate const* > comparisonList( productList.begin(),
587 comparisonList.sort();
593 std::list< MassEigenstate const* >
const& sortedSoughtList,
594 std::list< MassEigenstate const* >
const& sortedVetoedList )
const
596 double returnValue( 0.0 );
597 for(
int whichDecay(
decaySet.getLastIndex() );
601 if(
decaySet[ whichDecay ].containsAllAsSubset( sortedSoughtList )
603 !(
decaySet[ whichDecay ].containsAnyAsSubset( sortedVetoedList )) )
605 returnValue +=
decaySet[ whichDecay ].getPairedValue();
613 std::list< MassEigenstate const* >& soughtList,
614 std::list< MassEigenstate const* >& vetoedList )
const
624 std::vector< MassEigenstate const* >
const& soughtVector,
625 std::vector< MassEigenstate const* >
const& vetoedVector )
const
627 std::list< MassEigenstate const* > soughtList( soughtVector.begin(),
628 soughtVector.end() );
629 std::list< MassEigenstate const* > vetoedList( vetoedVector.begin(),
630 vetoedVector.end() );
637 int const secondProductCode )
const
639 double returnValue( 0.0 );
640 for(
int whichDecay(
decaySet.getLastIndex() );
644 if(
decaySet[ whichDecay ].matchesExactly( firstProductCode,
648 returnValue =
decaySet[ whichDecay ].getPairedValue();
657 int const secondProductCode,
658 int const thirdProductCode )
const
660 std::list< MassEigenstate const* > comparisonList( 1,
669 std::list< int >
const& productCodeList )
const
671 std::list< MassEigenstate const* > comparisonList;
672 for( std::list< int >::const_iterator
673 codeIterator( productCodeList.begin() );
674 productCodeList.end() != codeIterator;
684 std::vector< int >
const& productCodeList )
const
686 std::list< MassEigenstate const* > comparisonList;
687 for(
int codeIndex( productCodeList.size() - 1 );
692 productCodeList[ codeIndex ] ) );
699 std::list< int >
const& soughtCodeList,
700 std::list< int >
const& vetoedCodeList )
const
702 std::list< MassEigenstate const* > soughtPointerList;
703 for( std::list< int >::const_iterator
704 codeIterator( soughtCodeList.begin() );
705 soughtCodeList.end() != codeIterator;
710 std::list< MassEigenstate const* > vetoedPointerList;
711 for( std::list< int >::const_iterator
712 codeIterator( vetoedCodeList.begin() );
713 vetoedCodeList.end() != codeIterator;
724 std::vector< int >
const& soughtCodeList,
725 std::vector< int >
const& vetoedCodeList )
const
727 std::list< MassEigenstate const* > soughtPointerList;
728 for(
int codeIndex( soughtCodeList.size() - 1 );
733 soughtCodeList[ codeIndex ] ) );
735 std::list< MassEigenstate const* > vetoedPointerList;
736 for(
int codeIndex( vetoedCodeList.size() - 1 );
741 vetoedCodeList[ codeIndex ] ) );
747 inline std::string
const&
760 inline std::string
const&
773 inline std::vector< bool >
const&
static double const notANumber
MassEigenstatesPairedWithBr & getDecay(int const whichDecay)
void setToBeChargeConjugate(MassEigenstate *const chargeConjugate)
double absoluteDefaultMass
void setToBeSelfConjugate()
BOL::VectorlikeArray< MassEigenstatesPairedWithBr > defaultDecaySet
BOL::VectorlikeArray< MassEigenstatesPairedWithBr > decaySet
std::vector< MassEigenstatesPairedWithBr * > & getDecaySet()
MassEigenstate & setFlags(std::vector< bool > const *const flagBools)
bool hasMassBeenRecorded() const
std::map< int, MassEigenstate * > MassEigenstateCodeMap
bool hasCode(int const pdgCode) const
ExtendedMass const & getExtendedMass() const
std::string const & getLatexName() const
std::vector< ExtendedMass * > runningMassesAsVector
MassEigenstate(int const pdgCode, MassEigenstateMapVectorBools &mapAndVectorAndBools, bool const isSelfConjugate, std::string const &asciiName, std::string const &latexName, double const defaultResetMass=BOL::UsefulStuff::notANumber, double const defaultDecayWidth=BOL::UsefulStuff::notANumber)
void recordMass(double const massValue, double const minusUncertainty=0.0, double const plusUncertainty=0.0, int const schemeType=0, double const evaluationScale=0.0)
MassEigenstate * clearMassesAndDecays()
void recordDecay(MassEigenstatesPairedWithBr const &decayToRecord)
MassEigenstate * chargeConjugate
void recordChargeConjugateOfDecay(MassEigenstatesPairedWithBr const &decayToRecord)
std::vector< MassEigenstate * > MassEigenstateVector
std::string const & getAsciiName() const
std::vector< bool > const & getFlags() const
void constructorBodyFunction()
MassEigenstate & setAsciiName(std::string const &asciiName)
std::vector< bool > const * flagBools
void setChargeConjugate(MassEigenstate *const chargeConjugate)
std::vector< MassEigenstatesPairedWithBr * > decaySetAsVector
double const defaultResetMass
double getExactMatchBranchingRatioWithSortedList(std::list< MassEigenstate const * > const &sortedProductList) const
BOL::VectorlikeArray< ExtendedMass > runningMasses
std::vector< ExtendedMass * > const & getAllRecordedMasses() const
MassEigenstate & setLatexName(std::string const &latexName)
void setDecayWidth(double const decayWidth)
MapAndVectorAndBools< MassEigenstate * > MassEigenstateMapVectorBools
bool getVerbosity() const
void recordMassError(double const minusUncertainty, double const plusUncertainty, int const schemeType, double const evaluationScale)
MassEigenstate & getChargeConjugate()
MassEigenstateVector & setOfPointersOfMassEigenstateGroup
void prepareToRecordDecay()
static MassEigenstate * findPointerWithCode(int pdgCode, MassEigenstateCodeMap const &codeMap)
double getAbsoluteMass() const
void recordDecayAsDefault(MassEigenstatesPairedWithBr const &decayToRecord)
void recordChargeConjugateOfDecayAsDefault(MassEigenstatesPairedWithBr const &decayToRecord)
std::pair< int, MassEigenstate * > mapFiller
MassEigenstate & addCode(int extraCode)
bool isSelfConjugate() const
double getSubsetMatchBranchingRatio(std::list< MassEigenstate const * > &soughtList, std::list< MassEigenstate const * > &vetoedList) const
double getSubsetMatchBranchingRatioWithSortedLists(std::list< MassEigenstate const * > const &soughtList, std::list< MassEigenstate const * > const &vetoedList) const
bool haveDecaysBeenRecorded() const
void addToCodeMap(int const positiveExtraCode)
MassEigenstateCodeMap & pdgCodeMap
double getExactMatchBranchingRatio(MassEigenstate const &firstProduct, MassEigenstate const &secondProduct) const
double getSignedMass() const
PointersWithValue< MassEigenstate const *, double > MassEigenstatesPairedWithBr
double const defaultDecayWidth
std::vector< int > const & getAllCodes() const
std::vector< int > identifyingPdgCodes
static bool pointerHasCode(MassEigenstate const *const massEigenstatePointer, int const pdgCode)
double getDecayWidth() const
void addPointer(PointerClass const pointerToAdd)
std::list< PointerClass > & getPointerList()
void setPairedValueAndSortPointers(ValueClass const pairedValue)
ValueClass getPairedValue() const
std::map< int, MassEigenstate * > MassEigenstateCodeToPointerMap
MapAndVectorAndBools< MassEigenstate * > MassEigenstateMapAndVectorAndBools