a Code for the Combination of Indirect and Direct Constraints on High Energy Physics Models Logo
MassEigenstate.hpp
Go to the documentation of this file.
1/*
2 * MassEigenstate.hpp
3 *
4 * Created on: Jan 8, 2012
5 * Author: Ben O'Leary (benjamin.oleary@gmail.com)
6 * Copyright 2012 Ben O'Leary
7 *
8 * This file is part of LesHouchesParserClasses, released under the
9 * GNU General Public License. Please see the accompanying
10 * README.LHPC_CPP.txt file for a full list of files, brief documentation
11 * on how to use these classes, and further details on the license.
12 */
13
14#ifndef MASSEIGENSTATE_HPP_
15#define MASSEIGENSTATE_HPP_
16
17#include <map>
18#include <iostream>
20#include "ExtendedMass.hpp"
21#include "PointersWithValue.hpp"
23
24namespace LHPC
25{
26 /* this is a class to hold the relevant properties of a particle mass
27 * eigenstate as far as the SLHA format is concerned: masses, decay width,
28 * branching ratios.
29 * charge conjugate pairs are kept separate, but linked.
30 */
32 {
33 public:
34 typedef
36 typedef std::map< int, MassEigenstate* > MassEigenstateCodeMap;
37 typedef
40 typedef std::vector< MassEigenstate* > MassEigenstateVector;
41
42 static MassEigenstate*
43 findPointerWithCode( int pdgCode,
44 MassEigenstateCodeMap const& codeMap );
45 static bool
46 pointerHasCode( MassEigenstate const* const massEigenstatePointer,
47 int const pdgCode );
48
49 MassEigenstate( int const pdgCode,
50 MassEigenstateMapVectorBools& mapAndVectorAndBools,
51 bool const isSelfConjugate,
52 std::string const& asciiName,
53 std::string const& latexName,
56 MassEigenstate( int const firstPdgCode,
57 int const secondPdgCode,
58 MassEigenstateMapVectorBools& mapAndVectorAndBools,
59 bool const isSelfConjugate,
60 std::string const& asciiName,
61 std::string const& latexName,
64 MassEigenstate( std::vector< int > const& pdgCodes,
65 MassEigenstateMapVectorBools& mapAndVectorAndBools,
66 bool const isSelfConjugate,
67 std::string const& asciiName,
68 std::string const& latexName,
71 MassEigenstate( MassEigenstate const& copySource,
72 MassEigenstateMapVectorBools& mapAndVectorAndBools );
73 // this last version copies as the charge conjugate of copySource:
74 MassEigenstate( MassEigenstate& copySource,
75 std::string const& asciiName,
76 std::string const& latexName );
78
79 bool
80 isSelfConjugate() const;
83 MassEigenstate const&
84 getChargeConjugate() const;
85 void
87 void
89 void
91 bool
92 hasCode( int const pdgCode ) const;
93 int
94 getCode() const;
95 std::vector< int > const&
96 getAllCodes() const;
98 addCode( int extraCode );
99 bool
100 hasMassBeenRecorded() const;
101 double
102 getSignedMass() const;
103 // this defaults to the pole mass, if available.
104 double
105 getAbsoluteMass() const;
106 // this defaults to the pole mass, if available.
107 ExtendedMass const&
108 getExtendedMass() const;
109 // this only returns the 1st of the extended masses.
110 std::vector< ExtendedMass* > const&
111 getAllRecordedMasses() const;
112 void
113 recordMass( double const massValue,
114 double const minusUncertainty = 0.0,
115 double const plusUncertainty = 0.0,
116 int const schemeType = 0,
117 double const evaluationScale = 0.0 );
118 void
119 recordMassError( double const minusUncertainty,
120 double const plusUncertainty,
121 int const schemeType,
122 double const evaluationScale );
123 bool
125 double
126 getDecayWidth() const;
127 std::vector< MassEigenstatesPairedWithBr* >&
128 getDecaySet();
129 std::vector< MassEigenstatesPairedWithBr* > const&
130 getDecaySet() const;
132 getDecay( int const whichDecay );
134 getDecay( int const whichDecay ) const;
135 void
136 setDecayWidth( double const decayWidth );
139 void
140 recordDecay( MassEigenstatesPairedWithBr const& decayToRecord );
141 void
143 MassEigenstatesPairedWithBr const& decayToRecord );
144 void
146 void
148 MassEigenstatesPairedWithBr const& decayToRecord );
149 double
150 getExactMatchBranchingRatio( MassEigenstate const& firstProduct,
151 MassEigenstate const& secondProduct ) const;
152 double
153 getExactMatchBranchingRatio( MassEigenstate const& firstProduct,
154 MassEigenstate const& secondProduct,
155 MassEigenstate const& thirdProduct ) const;
156 double
158 std::list< MassEigenstate const* > const& sortedProductList ) const;
159 double
161 std::list< MassEigenstate const* >& productList ) const;
162 double
164 std::vector< MassEigenstate const* > const& productList ) const;
165 double
167 std::list< MassEigenstate const* > const& soughtList,
168 std::list< MassEigenstate const* > const& vetoedList ) const;
169 double
171 std::list< MassEigenstate const* >& soughtList,
172 std::list< MassEigenstate const* >& vetoedList ) const;
173 double
175 std::vector< MassEigenstate const* > const& soughtVector,
176 std::vector< MassEigenstate const* > const& vetoedVector ) const;
177 double
178 getExactMatchBranchingRatio( int const firstProductCode,
179 int const secondProductCode ) const;
180 double
181 getExactMatchBranchingRatio( int const firstProductCode,
182 int const secondProductCode,
183 int const thirdProductCode ) const;
184 double
186 std::list< int > const& productCodeList ) const;
187 double
189 std::vector< int > const& productCodeList ) const;
190 double
191 getSubsetMatchBranchingRatio( std::list< int > const& soughtCodeList,
192 std::list< int > const& vetoedCodeList ) const;
193 double
194 getSubsetMatchBranchingRatio( std::vector< int > const& soughtCodeVector,
195 std::vector< int > const& vetoedCodeVector ) const;
196 std::string const&
197 getAsciiName() const;
199 setAsciiName( std::string const& asciiName );
200 std::string const&
201 getLatexName() const;
203 setLatexName( std::string const& latexName );
204 std::vector< bool > const&
205 getFlags() const;
207 setFlags( std::vector< bool > const* const flagBools );
209 findPointerWithCode( int const pdgCode );
210 MassEigenstate const*
211 findPointerWithCode( int const pdgCode ) const;
212 bool
213 getVerbosity() const;
214
215
216 protected:
219 std::vector< int > identifyingPdgCodes;
221 std::pair< int, MassEigenstate* > mapFiller;
223 double const defaultResetMass;
225 // this defaults to the pole mass, if available.
227 // this defaults to the pole mass, if available.
229 std::vector< ExtendedMass* > runningMassesAsVector;
231 double const defaultDecayWidth;
235 std::vector< MassEigenstatesPairedWithBr* > decaySetAsVector;
236 std::string asciiName;
237 std::string latexName;
238 bool const isVerbose;
239 std::vector< bool > const* flagBools;
241
242 void
244 void
245 addToCodeMap( int const positiveExtraCode );
246 void
248 };
249 typedef
251 typedef std::map< int, MassEigenstate* > MassEigenstateCodeToPointerMap;
252
253
254
255 inline bool
257 MassEigenstate const* const massEigenstatePointer,
258 int const pdgCode )
259 {
260 return massEigenstatePointer->hasCode( pdgCode );
261 }
262
263
264 inline bool
266 {
267 return isSelfConjugateFlag;
268 }
269
270 inline MassEigenstate&
272 {
273 return *chargeConjugate;
274 }
275
276 inline MassEigenstate const&
278 {
279 return *chargeConjugate;
280 }
281
282 inline void
284 {
285 this->chargeConjugate = chargeConjugate;
286 }
287
288 inline void
290 {
291 chargeConjugate = this;
292 /* not only does this need to set its chargeConjugate pointer back to
293 * itself, but the codes need to be set to positive & pdgCodeMap needs to
294 * only look for this instance rather than its old chargeConjugate.
295 */
296 for( int codeIndex( identifyingPdgCodes.size() - 1 );
297 0 <= codeIndex;
298 --codeIndex )
299 {
300 MassEigenstateCodeMap::iterator codeFinder;
301 if( 0 > identifyingPdgCodes[ codeIndex ] )
302 {
303 identifyingPdgCodes[ codeIndex ] = -identifyingPdgCodes[ codeIndex ];
304 codeFinder = pdgCodeMap.find( identifyingPdgCodes[ codeIndex ] );
305 if( pdgCodeMap.end() != codeFinder )
306 {
307 codeFinder->second = this;
308 }
309 }
310 }
311 }
312
313 inline bool
314 MassEigenstate::hasCode( int const pdgCode ) const
315 {
316 bool returnBool( false );
317 for( int codeSeeker( identifyingPdgCodes.size() - 1 );
318 0 <= codeSeeker;
319 --codeSeeker )
320 {
321 if( pdgCode == identifyingPdgCodes[ codeSeeker ] )
322 {
323 returnBool = true;
324 codeSeeker = -1;
325 }
326 }
327 return returnBool;
328 }
329
330 inline int
332 {
333 return identifyingPdgCodes.front();
334 }
335
336 inline std::vector< int > const&
338 {
339 return identifyingPdgCodes;
340 }
341
342 inline bool
344 {
345 return massRecorded;
346 }
347
348 inline double
350 // this defaults to the pole mass, if available.
351 {
352 return signedDefaultMass;
353 }
354
355 inline double
357 // this defaults to the pole mass, if available.
358 {
359 return absoluteDefaultMass;
360 }
361
362 inline ExtendedMass const&
364 // this only returns the 1st of the extended masses.
365 {
366 return runningMasses.getFront();
367 }
368
369 inline std::vector< ExtendedMass* > const&
371 {
373 }
374
375 inline void
376 MassEigenstate::recordMassError( double const minusUncertainty,
377 double const plusUncertainty,
378 int const schemeType,
379 double const evaluationScale )
380 {
381 for( int whichMass( runningMasses.getLastIndex() );
382 0 <= whichMass;
383 --whichMass )
384 {
385 if( ( schemeType == runningMasses[ whichMass ].getScheme() )
386 &&
387 ( evaluationScale == runningMasses[ whichMass ].getScale() ) )
388 {
389 runningMasses[ whichMass ].setUncertainties( minusUncertainty,
390 plusUncertainty );
391 whichMass = -1;
392 }
393 }
394 }
395
396 inline bool
398 {
399 return decaysRecorded;
400 }
401
402 inline double
404 {
405 return decayWidth;
406 }
407
408 inline void
409 MassEigenstate::setDecayWidth( double const decayWidth )
410 {
411 this->decayWidth = decayWidth;
412 decaysRecorded = true;
413 // I don't think that I want to set up an elaborate check that a width
414 // & 100% sum of BRs have been recorded to set decaysRecorded.
415 }
416
417 inline std::vector< MassEigenstate::MassEigenstatesPairedWithBr* >&
419 {
420 return decaySetAsVector;
421 }
422
423 inline std::vector< MassEigenstate::MassEigenstatesPairedWithBr* > const&
425 {
426 return decaySetAsVector;
427 }
428
430 MassEigenstate::getDecay( int const whichDecay )
431 {
432 return *(decaySetAsVector[ whichDecay ]);
433 }
434
436 MassEigenstate::getDecay( int const whichDecay ) const
437 {
438 return *(decaySetAsVector[ whichDecay ]);
439 }
440
441 inline MassEigenstate*
443 {
444 runningMasses.clearEntries();
445 runningMassesAsVector.clear();
448 if( 0.0 > absoluteDefaultMass )
449 {
451 }
452 massRecorded = false;
453 decaySet.becomeCopyOf( defaultDecaySet );
454 decaySetAsVector.clear();
455 for( int whichDecay( 0 );
456 decaySet.getSize() > whichDecay;
457 ++whichDecay )
458 {
459 decaySetAsVector.push_back( decaySet.getPointer( whichDecay ) );
460 }
462 decaysRecorded = false;
463 return this;
464 }
465
466 inline void
468 MassEigenstatesPairedWithBr const& decayToRecord )
469 {
471 decaySetAsVector.push_back( decaySet.newEnd().copyAndReturnPointer(
472 decayToRecord ) );
473 // I decided to keep a separate std::vector in parallel rather than
474 // constantly converting decaySet with getAsVector(...).
475 }
476
477 inline void
479 MassEigenstatesPairedWithBr const& decayToRecord )
480 {
482 MassEigenstatesPairedWithBr& decayRecorder( decaySet.newEnd() );
483 decaySetAsVector.push_back( &decayRecorder );
484 // I decided to keep a separate std::vector in parallel rather than
485 // constantly converting decaySet with getAsVector(...).
486 decayRecorder.clearPointers();
487 for( std::list< MassEigenstate const* >::const_iterator
488 productIterator( decayToRecord.getPointerList().begin() );
489 decayToRecord.getPointerList().end() != productIterator;
490 ++productIterator )
491 {
492 decayRecorder.addPointer( &((*productIterator)->getChargeConjugate()) );
493 }
494 decayRecorder.setPairedValueAndSortPointers(
495 decayToRecord.getPairedValue() );
496 }
497
498 inline void
500 MassEigenstatesPairedWithBr const& decayToRecord )
501 {
502 defaultDecaySet.newEnd().becomeCopyOf( decayToRecord );
503 }
504
505 inline void
507 MassEigenstatesPairedWithBr const& decayToRecord )
508 {
509 MassEigenstatesPairedWithBr& decayRecorder( defaultDecaySet.newEnd() );
510 decayRecorder.clearPointers();
511 for( std::list< MassEigenstate const* >::const_iterator
512 productIterator( decayToRecord.getPointerList().begin() );
513 decayToRecord.getPointerList().end() != productIterator;
514 ++productIterator )
515 {
516 decayRecorder.addPointer( &((*productIterator)->getChargeConjugate()) );
517 }
518 decayRecorder.setPairedValueAndSortPointers(
519 decayToRecord.getPairedValue() );
520 }
521
522 inline double
524 MassEigenstate const& firstProduct,
525 MassEigenstate const& secondProduct ) const
526 {
527 double returnValue( 0.0 );
528 for( int whichDecay( decaySet.getLastIndex() );
529 0 <= whichDecay;
530 --whichDecay )
531 {
532 if( decaySet[ whichDecay ].matchesExactly( &firstProduct,
533 &secondProduct ) )
534 {
535 returnValue = decaySet[ whichDecay ].getPairedValue();
536 whichDecay = -1;
537 }
538 }
539 return returnValue;
540 }
541
542 inline double
544 MassEigenstate const& firstProduct,
545 MassEigenstate const& secondProduct,
546 MassEigenstate const& thirdProduct ) const
547 {
548 std::list< MassEigenstate const* > comparisonList( 1,
549 &firstProduct );
550 comparisonList.push_back( &secondProduct );
551 comparisonList.push_back( &thirdProduct );
552 return getExactMatchBranchingRatio( comparisonList );
553 }
554
555 inline double
557 std::list< MassEigenstate const* > const& sortedProductList ) const
558 {
559 double returnValue( 0.0 );
560 for( int whichDecay( decaySet.getLastIndex() );
561 0 <= whichDecay;
562 --whichDecay )
563 {
564 if( decaySet[ whichDecay ].matchesExactly( sortedProductList ) )
565 {
566 returnValue = decaySet[ whichDecay ].getPairedValue();
567 whichDecay = -1;
568 }
569 }
570 return returnValue;
571 }
572
573 inline double
575 std::list< MassEigenstate const* >& productList ) const
576 {
577 productList.sort();
578 return getExactMatchBranchingRatioWithSortedList( productList );
579 }
580
581 inline double
583 std::vector< MassEigenstate const* > const& productList ) const
584 {
585 std::list< MassEigenstate const* > comparisonList( productList.begin(),
586 productList.end() );
587 comparisonList.sort();
588 return getExactMatchBranchingRatioWithSortedList( comparisonList );
589 }
590
591 inline double
593 std::list< MassEigenstate const* > const& sortedSoughtList,
594 std::list< MassEigenstate const* > const& sortedVetoedList ) const
595 {
596 double returnValue( 0.0 );
597 for( int whichDecay( decaySet.getLastIndex() );
598 0 <= whichDecay;
599 --whichDecay )
600 {
601 if( decaySet[ whichDecay ].containsAllAsSubset( sortedSoughtList )
602 &&
603 !(decaySet[ whichDecay ].containsAnyAsSubset( sortedVetoedList )) )
604 {
605 returnValue += decaySet[ whichDecay ].getPairedValue();
606 }
607 }
608 return returnValue;
609 }
610
611 inline double
613 std::list< MassEigenstate const* >& soughtList,
614 std::list< MassEigenstate const* >& vetoedList ) const
615 {
616 soughtList.sort();
617 vetoedList.sort();
619 vetoedList );
620 }
621
622 inline double
624 std::vector< MassEigenstate const* > const& soughtVector,
625 std::vector< MassEigenstate const* > const& vetoedVector ) const
626 {
627 std::list< MassEigenstate const* > soughtList( soughtVector.begin(),
628 soughtVector.end() );
629 std::list< MassEigenstate const* > vetoedList( vetoedVector.begin(),
630 vetoedVector.end() );
631 return getSubsetMatchBranchingRatio( soughtList,
632 vetoedList );
633 }
634
635 inline double
637 int const secondProductCode ) const
638 {
639 double returnValue( 0.0 );
640 for( int whichDecay( decaySet.getLastIndex() );
641 0 <= whichDecay;
642 --whichDecay )
643 {
644 if( decaySet[ whichDecay ].matchesExactly( firstProductCode,
645 secondProductCode,
646 &pointerHasCode ) )
647 {
648 returnValue = decaySet[ whichDecay ].getPairedValue();
649 whichDecay = -1;
650 }
651 }
652 return returnValue;
653 }
654
655 inline double
657 int const secondProductCode,
658 int const thirdProductCode ) const
659 {
660 std::list< MassEigenstate const* > comparisonList( 1,
661 findPointerWithCode( firstProductCode ) );
662 comparisonList.push_back( findPointerWithCode( secondProductCode ) );
663 comparisonList.push_back( findPointerWithCode( thirdProductCode ) );
664 return getExactMatchBranchingRatio( comparisonList );
665 }
666
667 inline double
669 std::list< int > const& productCodeList ) const
670 {
671 std::list< MassEigenstate const* > comparisonList;
672 for( std::list< int >::const_iterator
673 codeIterator( productCodeList.begin() );
674 productCodeList.end() != codeIterator;
675 ++codeIterator )
676 {
677 comparisonList.push_back( findPointerWithCode( *codeIterator ) );
678 }
679 return getExactMatchBranchingRatio( comparisonList );
680 }
681
682 inline double
684 std::vector< int > const& productCodeList ) const
685 {
686 std::list< MassEigenstate const* > comparisonList;
687 for( int codeIndex( productCodeList.size() - 1 );
688 0 <= codeIndex;
689 --codeIndex )
690 {
691 comparisonList.push_back( findPointerWithCode(
692 productCodeList[ codeIndex ] ) );
693 }
694 return getExactMatchBranchingRatio( comparisonList );
695 }
696
697 inline double
699 std::list< int > const& soughtCodeList,
700 std::list< int > const& vetoedCodeList ) const
701 {
702 std::list< MassEigenstate const* > soughtPointerList;
703 for( std::list< int >::const_iterator
704 codeIterator( soughtCodeList.begin() );
705 soughtCodeList.end() != codeIterator;
706 ++codeIterator )
707 {
708 soughtPointerList.push_back( findPointerWithCode( *codeIterator ) );
709 }
710 std::list< MassEigenstate const* > vetoedPointerList;
711 for( std::list< int >::const_iterator
712 codeIterator( vetoedCodeList.begin() );
713 vetoedCodeList.end() != codeIterator;
714 ++codeIterator )
715 {
716 vetoedPointerList.push_back( findPointerWithCode( *codeIterator ) );
717 }
718 return getSubsetMatchBranchingRatio( soughtPointerList,
719 vetoedPointerList );
720 }
721
722 inline double
724 std::vector< int > const& soughtCodeList,
725 std::vector< int > const& vetoedCodeList ) const
726 {
727 std::list< MassEigenstate const* > soughtPointerList;
728 for( int codeIndex( soughtCodeList.size() - 1 );
729 0 <= codeIndex;
730 --codeIndex )
731 {
732 soughtPointerList.push_back( findPointerWithCode(
733 soughtCodeList[ codeIndex ] ) );
734 }
735 std::list< MassEigenstate const* > vetoedPointerList;
736 for( int codeIndex( vetoedCodeList.size() - 1 );
737 0 <= codeIndex;
738 --codeIndex )
739 {
740 vetoedPointerList.push_back( findPointerWithCode(
741 vetoedCodeList[ codeIndex ] ) );
742 }
743 return getSubsetMatchBranchingRatio( soughtPointerList,
744 vetoedPointerList );
745 }
746
747 inline std::string const&
749 {
750 return asciiName;
751 }
752
753 inline MassEigenstate&
754 MassEigenstate::setAsciiName( std::string const& asciiName )
755 {
756 this->asciiName.assign( asciiName );
757 return *this;
758 }
759
760 inline std::string const&
762 {
763 return latexName;
764 }
765
766 inline MassEigenstate&
767 MassEigenstate::setLatexName( std::string const& latexName )
768 {
769 this->latexName.assign( latexName );
770 return *this;
771 }
772
773 inline std::vector< bool > const&
775 {
776 return *flagBools;
777 }
778
779 inline MassEigenstate&
780 MassEigenstate::setFlags( std::vector< bool > const* const flagBools )
781 {
782 this->flagBools = flagBools;
783 return *this;
784 }
785
786 inline MassEigenstate*
788 {
789 return findPointerWithCode( pdgCode,
790 pdgCodeMap );
791 }
792
793 inline MassEigenstate const*
794 MassEigenstate::findPointerWithCode( int const pdgCode ) const
795 {
796 return findPointerWithCode( pdgCode,
797 pdgCodeMap );
798 }
799
800 inline bool
802 {
803 return isVerbose;
804 }
805
806 inline void
807 MassEigenstate::addToCodeMap( int const positiveExtraCode )
808 {
809 mapFiller.first = positiveExtraCode;
810 mapFiller.second = this;
811 pdgCodeMap.insert( mapFiller );
812 }
813
814 inline void
816 {
817 if( !decaysRecorded )
818 {
819 // this ensures that any present default decays are wiped if any decays
820 // are recorded.
821 decaySet.clearEntries();
822 decaySetAsVector.clear();
823 decaysRecorded = true;
824 }
825 }
826
827}
828
829#endif /* MASSEIGENSTATE_HPP_ */
static double const notANumber
Definition: UsefulStuff.hpp:28
MassEigenstatesPairedWithBr & getDecay(int const whichDecay)
void setToBeChargeConjugate(MassEigenstate *const chargeConjugate)
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
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
void recordMassError(double const minusUncertainty, double const plusUncertainty, int const schemeType, double const evaluationScale)
MassEigenstate & getChargeConjugate()
MassEigenstateVector & setOfPointersOfMassEigenstateGroup
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