ATLAS Offline Software
Loading...
Searching...
No Matches
ParticleSigStateImpl.h
Go to the documentation of this file.
1
2
3/*
4 Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
5*/
6
7// ParticleSigStateImpl.h
8// Header file for class ParticleSigStateImpl
9// Author : Pier-Olivier DeViveiros
10// Inspired by Sebastien Binet's ParticleImpl
11// Date : November 2009
13#ifndef PARTICLEEVENT_PARTICLESIGSTATEIMPL_H
14#define PARTICLEEVENT_PARTICLESIGSTATEIMPL_H 1
15
18
19// STL includes
20#include <ostream>
21
22// boost
23#include <any> // for navigable stuff
24
25#include "AthLinks/ElementLink.h"
26
27// EventKernel includes
30
31// Navigation includes
33
34// ParticleEvent includes
37
38template< class INavigable_t,
39 class I4Momentum_t,
40 class IParticle_t = ParticleEvent::Base >
42{
43
45 // Public typedefs:
47public:
48
51 typedef INavigable_t navigable_type;
52
55 typedef I4Momentum_t momentum_type;
56
59 typedef IParticle_t particle_type;
60
63 typedef ParticleSigStateImpl<INavigable_t,
64 I4Momentum_t,
65 IParticle_t> self_type;
66
68
70 // Public methods:
72public:
73
76 ParticleSigStateImpl( int nStates = 1 , state_t defaultState = state_t(0) );
77
81
85
89
91 // Const methods:
93
97
102
106
109 virtual
110 void fillToken( INavigationToken & thisToken ) const;
111 virtual
112 void fillToken( INavigationToken & thisToken,
113 const std::any& weight ) const;
114
119
122 //Comparing & Versioning Control
123 bool hasSameAthenaBarCode(const IAthenaBarCode &/*obj*/) const;
128 // std::ostream& dump(std::ostream& out) const;
129
132
135
140
142 virtual double px() const;
143 virtual double px(state_t s) const;
144
146 virtual double py() const;
147 virtual double py(state_t s) const;
148
150 virtual double pz() const;
151 virtual double pz(state_t s) const;
152
154 virtual double m() const;
155 virtual double m(state_t s) const;
156
158 virtual double m2() const;
159 virtual double m2(state_t s) const;
160
162 virtual double p() const;
163 virtual double p(state_t s) const;
164
166 virtual double p2() const;
167 virtual double p2(state_t s) const;
168
170 virtual double rapidity() const;
171 virtual double rapidity(state_t s) const;
172
174 virtual double eta() const;
175 virtual double eta(state_t s) const;
176
178 virtual double phi() const;
179 virtual double phi(state_t s) const;
180
182 virtual double e() const;
183 virtual double e(state_t s) const;
184
186 virtual double et() const;
187 virtual double et(state_t s) const;
188
190 virtual double pt() const;
191 virtual double pt(state_t s) const;
192
194 virtual double iPt() const;
195 virtual double iPt(state_t s) const;
196
198 virtual double cosPhi() const;
199 virtual double cosPhi(state_t s) const;
200
202 virtual double sinPhi() const;
203 virtual double sinPhi(state_t s) const;
204
206 virtual double tanTh() const;
207 virtual double tanTh(state_t s) const;
208
210 virtual double cosTh() const;
211 virtual double cosTh(state_t s) const;
212
214 virtual double sinTh() const;
215 virtual double sinTh(state_t s) const;
216
218 virtual double cotTh() const;
219 virtual double cotTh(state_t s) const;
220
222 virtual CLHEP::HepLorentzVector hlv() const;
223 virtual CLHEP::HepLorentzVector hlv(state_t s) const;
224
225 virtual const I4MomentumError* errors() const;
226 virtual const I4MomentumError* errors(state_t s) const;
227
229 virtual I4Momentum::Kind kind() const;
230
232 virtual std::ostream& dump( std::ostream& out ) const;
233
236
240 virtual
242
244 virtual
245 const Trk::RecVertex* origin() const;
246
248 virtual
250
252 virtual
253 bool hasCharge() const;
254
258 virtual
260
262 virtual
263 bool hasPdgId() const;
264
266 virtual
267 int pdgId() const;
268
271
273 // Non-const methods:
275
279
284
288
289
290 // Set functions (for I4Momentum)
291 virtual void set4Mom( const I4Momentum& p4 );
292 virtual void set4Mom( const I4Momentum * const p4 );
293 virtual void set4Mom( const CLHEP::HepLorentzVector& hlv );
294 virtual void set4Mom( const I4Momentum& p4, state_t s );
295 virtual void set4Mom( const I4Momentum * const p4, state_t s );
296 virtual void set4Mom( const CLHEP::HepLorentzVector& hlv, state_t s );
297
298 // Set functions (for IParticle)
300 virtual void set_charge( ChargeType x );
301 virtual void set_pdgId ( int x );
302 virtual void set_origin( const VxContainer* theContainer, int index );
303 virtual void set_origin( const VxContainer* theContainer,
304 const Trk::VxCandidate * vertex );
306
307 // ISignalState methods
308
310 virtual state_t signalState() const;
311
313 virtual bool hasSignalState(state_t s) const;
314
316 virtual bool isAtSignalState(state_t s) const;
317
319 // Protected accessors:
321 protected:
322
324 virtual bool setSignalState(state_t s);
325
327 virtual void resetSignalState();
328
330 std::vector<I4Momentum_t>& momentumVector(){return m_mom;}
331
333 int nStates(){return m_nStates;}
334 void setNStates(int n){m_nStates = n;}
335
337 // Private data:
339 private:
340
342 INavigable_t m_nav;
343
348 std::vector<I4Momentum_t> m_mom;
349
351 IParticle_t m_part;
352
355
358
359};
360
364
365template< class INavigable_t, class I4Momentum_t, class IParticle_t>
366inline
367ParticleSigStateImpl<INavigable_t,
368 I4Momentum_t,
369 IParticle_t>::ParticleSigStateImpl(int nStates, state_t defaultState) :
370 IAthenaBarCode ( ), // FIXME should be removed
371 INavigable ( ), // FIXME should be removed
372 I4Momentum ( ), // FIXME should be removed
373 INavigable4Momentum ( ), // FIXME should be removed
374 IParticle ( ),
375 ISignalState ( ),
376 m_nav ( ),
377 m_mom ( ),
378 m_part ( ),
379 m_nStates ( nStates ),
380 m_currentState( defaultState )
381
382{
383 // Need at least 1 Signal State!
384 if( m_nStates < 1 )
385 m_nStates = 1;
386 // Re-size the 4-vector holder
387 // Initialize it in the first SignalState
388 m_mom.resize(nStates);
389}
390
391template< class INavigable_t, class I4Momentum_t, class IParticle_t>
392inline ParticleSigStateImpl<INavigable_t,
393 I4Momentum_t,
395 IAthenaBarCode ( rhs ), // FIXME should be removed
396 INavigable ( rhs ), // FIXME should be removed
397 I4Momentum ( rhs ), // FIXME should be removed
398 INavigable4Momentum ( rhs ), // FIXME should be removed
399 IParticle ( rhs ),
400 ISignalState ( rhs ),
401 m_nav ( rhs.m_nav ),
402 m_mom ( rhs.m_mom ),
403 m_part ( rhs.m_part ),
404 m_nStates ( rhs.m_nStates ),
406{}
407
408template< class INavigable_t, class I4Momentum_t, class IParticle_t>
410ParticleSigStateImpl<INavigable_t,
411 I4Momentum_t,
412 IParticle_t>::operator=( const ParticleSigStateImpl& rhs )
413{
414 if ( this != &rhs ) {
415 IAthenaBarCode::operator=(rhs); // FIXME should be removed
416 INavigable::operator=(rhs); // FIXME should be removed
417 I4Momentum::operator=(rhs); // FIXME should be removed
418 INavigable4Momentum::operator=(rhs); // FIXME should be removed
419 IParticle::operator=( rhs );
420 m_nav = rhs.m_nav;
421 m_mom = rhs.m_mom;
422 m_part = rhs.m_part;
423 m_nStates = rhs.m_nStates;
424 m_currentState = rhs.m_currentState;
425 }
426 return *this;
427}
428
429template< class INavigable_t, class I4Momentum_t, class IParticle_t>
430//inline
431ParticleSigStateImpl<INavigable_t,
432 I4Momentum_t,
434{}
435
436template< class INavigable_t, class I4Momentum_t, class IParticle_t>
437inline const INavigable_t& ParticleSigStateImpl<INavigable_t,
438 I4Momentum_t,
439 IParticle_t>::navigableBase() const
440{
441 return m_nav;
442}
443
444template< class INavigable_t, class I4Momentum_t, class IParticle_t>
445inline const I4Momentum_t& ParticleSigStateImpl<INavigable_t,
446 I4Momentum_t,
447 IParticle_t>::momentumBase(state_t s) const
448{
449 if(hasSignalState(s))
450 return m_mom[int(s)];
451 else
452 return m_mom[0];
453}
454
455template< class INavigable_t, class I4Momentum_t, class IParticle_t>
456inline const I4Momentum_t& ParticleSigStateImpl<INavigable_t,
457 I4Momentum_t,
458 IParticle_t>::momentumBase() const
459{
461 return m_mom[int(m_currentState)];
462 else
463 return m_mom[0];
464}
465
466template< class INavigable_t, class I4Momentum_t, class IParticle_t>
467inline const IParticle_t& ParticleSigStateImpl<INavigable_t,
468 I4Momentum_t,
469 IParticle_t>::particleBase() const
470{
471 return m_part;
472}
473
474template< class INavigable_t, class I4Momentum_t, class IParticle_t>
475inline void ParticleSigStateImpl<INavigable_t,
476 I4Momentum_t,
477 IParticle_t>::fillToken( INavigationToken& thisToken ) const
478{
479 m_nav.fillToken( thisToken );
480}
481
482template< class INavigable_t, class I4Momentum_t, class IParticle_t>
483inline void ParticleSigStateImpl<INavigable_t,
484 I4Momentum_t,
485 IParticle_t>::fillToken( INavigationToken & thisToken,
486 const std::any& weight ) const
487{
488 m_nav.fillToken( thisToken, weight );
489}
490
491template< class INavigable_t, class I4Momentum_t, class IParticle_t>
492inline double ParticleSigStateImpl<INavigable_t,
493 I4Momentum_t,
494 IParticle_t>::px(state_t s) const
495{
496 return momentumBase(s).px();
497}
498
499template< class INavigable_t, class I4Momentum_t, class IParticle_t>
500inline double ParticleSigStateImpl<INavigable_t,
501 I4Momentum_t,
502 IParticle_t>::py(state_t s) const
503{
504 return momentumBase(s).py();
505}
506
507template< class INavigable_t, class I4Momentum_t, class IParticle_t>
508inline double ParticleSigStateImpl<INavigable_t,
509 I4Momentum_t,
510 IParticle_t>::pz(state_t s) const
511{
512 return momentumBase(s).pz();
513}
514
515template< class INavigable_t, class I4Momentum_t, class IParticle_t>
516inline double ParticleSigStateImpl<INavigable_t,
517 I4Momentum_t,
518 IParticle_t>::m(state_t s) const
519{
520 return momentumBase(s).m();
521}
522
523template< class INavigable_t, class I4Momentum_t, class IParticle_t>
524inline double ParticleSigStateImpl<INavigable_t,
525 I4Momentum_t,
526 IParticle_t>::m2(state_t s) const
527{
528 return momentumBase(s).m2();
529}
530
531template< class INavigable_t, class I4Momentum_t, class IParticle_t>
532inline double ParticleSigStateImpl<INavigable_t,
533 I4Momentum_t,
534 IParticle_t>::p(state_t s) const
535{
536 return momentumBase(s).p();
537}
538
539template< class INavigable_t, class I4Momentum_t, class IParticle_t>
540inline double ParticleSigStateImpl<INavigable_t,
541 I4Momentum_t,
542 IParticle_t>::p2(state_t s) const
543{
544 return momentumBase(s).p2();
545}
546
547template< class INavigable_t, class I4Momentum_t, class IParticle_t>
548inline double ParticleSigStateImpl<INavigable_t,
549 I4Momentum_t,
550 IParticle_t>::rapidity(state_t s) const
551{
552 return momentumBase(s).rapidity();
553}
554
555template< class INavigable_t, class I4Momentum_t, class IParticle_t>
556inline double ParticleSigStateImpl<INavigable_t,
557 I4Momentum_t,
558 IParticle_t>::eta(state_t s) const
559{
560 return momentumBase(s).eta();
561}
562
563template< class INavigable_t, class I4Momentum_t, class IParticle_t>
564inline double ParticleSigStateImpl<INavigable_t,
565 I4Momentum_t,
566 IParticle_t>::phi(state_t s) const
567{
568 return momentumBase(s).phi();
569}
570
571template< class INavigable_t, class I4Momentum_t, class IParticle_t>
572inline double ParticleSigStateImpl<INavigable_t,
573 I4Momentum_t,
574 IParticle_t>::e(state_t s) const
575{
576 return momentumBase(s).e();
577}
578
579template< class INavigable_t, class I4Momentum_t, class IParticle_t>
580inline double ParticleSigStateImpl<INavigable_t,
581 I4Momentum_t,
582 IParticle_t>::et(state_t s) const
583{
584 return momentumBase(s).et();
585}
586
587template< class INavigable_t, class I4Momentum_t, class IParticle_t>
588inline double ParticleSigStateImpl<INavigable_t,
589 I4Momentum_t,
590 IParticle_t>::pt(state_t s) const
591{
592 return momentumBase(s).pt();
593}
594
595template< class INavigable_t, class I4Momentum_t, class IParticle_t>
596inline double ParticleSigStateImpl<INavigable_t,
597 I4Momentum_t,
598 IParticle_t>::iPt(state_t s) const
599{
600 return momentumBase(s).iPt();
601}
602
603template< class INavigable_t, class I4Momentum_t, class IParticle_t>
604inline double ParticleSigStateImpl<INavigable_t,
605 I4Momentum_t,
606 IParticle_t>::cosPhi(state_t s) const
607{
608 return momentumBase(s).cosPhi();
609}
610
611template< class INavigable_t, class I4Momentum_t, class IParticle_t>
612inline double ParticleSigStateImpl<INavigable_t,
613 I4Momentum_t,
614 IParticle_t>::sinPhi(state_t s) const
615{
616 return momentumBase(s).sinPhi();
617}
618
619template< class INavigable_t, class I4Momentum_t, class IParticle_t>
620inline double ParticleSigStateImpl<INavigable_t,
621 I4Momentum_t,
622 IParticle_t>::tanTh(state_t s) const
623{
624 return momentumBase(s).tanTh();
625}
626
627template< class INavigable_t, class I4Momentum_t, class IParticle_t>
628inline double ParticleSigStateImpl<INavigable_t,
629 I4Momentum_t,
630 IParticle_t>::cosTh(state_t s) const
631{
632 return momentumBase(s).cosTh();
633}
634
635template< class INavigable_t, class I4Momentum_t, class IParticle_t>
636inline double ParticleSigStateImpl<INavigable_t,
637 I4Momentum_t,
638 IParticle_t>::sinTh(state_t s) const
639{
640 return momentumBase(s).sinTh();
641}
642
643template< class INavigable_t, class I4Momentum_t, class IParticle_t>
644inline double ParticleSigStateImpl<INavigable_t,
645 I4Momentum_t,
646 IParticle_t>::cotTh(state_t s) const
647{
648 return momentumBase(s).cotTh();
649}
650
651
652template< class INavigable_t, class I4Momentum_t, class IParticle_t>
653inline CLHEP::HepLorentzVector ParticleSigStateImpl<INavigable_t,
654 I4Momentum_t,
655 IParticle_t>::hlv(state_t s) const
656{
657 return momentumBase(s).hlv();
658}
659
660template< class INavigable_t, class I4Momentum_t, class IParticle_t>
661inline const I4MomentumError* ParticleSigStateImpl<INavigable_t,
662 I4Momentum_t,
663 IParticle_t>::errors(state_t s) const
664{
665 return momentumBase(s).errors();
666}
667
668template< class INavigable_t, class I4Momentum_t, class IParticle_t>
669inline double ParticleSigStateImpl<INavigable_t,
670 I4Momentum_t,
671 IParticle_t>::px() const
672{
673 return momentumBase().px();
674}
675
676template< class INavigable_t, class I4Momentum_t, class IParticle_t>
677inline double ParticleSigStateImpl<INavigable_t,
678 I4Momentum_t,
679 IParticle_t>::py() const
680{
681 return momentumBase().py();
682}
683
684template< class INavigable_t, class I4Momentum_t, class IParticle_t>
685inline double ParticleSigStateImpl<INavigable_t,
686 I4Momentum_t,
687 IParticle_t>::pz() const
688{
689 return momentumBase().pz();
690}
691
692template< class INavigable_t, class I4Momentum_t, class IParticle_t>
693inline double ParticleSigStateImpl<INavigable_t,
694 I4Momentum_t,
695 IParticle_t>::m() const
696{
697 return momentumBase().m();
698}
699
700template< class INavigable_t, class I4Momentum_t, class IParticle_t>
701inline double ParticleSigStateImpl<INavigable_t,
702 I4Momentum_t,
703 IParticle_t>::m2() const
704{
705 return momentumBase().m2();
706}
707
708template< class INavigable_t, class I4Momentum_t, class IParticle_t>
709inline double ParticleSigStateImpl<INavigable_t,
710 I4Momentum_t,
711 IParticle_t>::p() const
712{
713 return momentumBase().p();
714}
715
716template< class INavigable_t, class I4Momentum_t, class IParticle_t>
717inline double ParticleSigStateImpl<INavigable_t,
718 I4Momentum_t,
719 IParticle_t>::p2() const
720{
721 return momentumBase().p2();
722}
723
724template< class INavigable_t, class I4Momentum_t, class IParticle_t>
725inline double ParticleSigStateImpl<INavigable_t,
726 I4Momentum_t,
727 IParticle_t>::rapidity() const
728{
729 return momentumBase().rapidity();
730}
731
732template< class INavigable_t, class I4Momentum_t, class IParticle_t>
733inline double ParticleSigStateImpl<INavigable_t,
734 I4Momentum_t,
735 IParticle_t>::eta() const
736{
737 return momentumBase().eta();
738}
739
740template< class INavigable_t, class I4Momentum_t, class IParticle_t>
741inline double ParticleSigStateImpl<INavigable_t,
742 I4Momentum_t,
743 IParticle_t>::phi() const
744{
745 return momentumBase().phi();
746}
747
748template< class INavigable_t, class I4Momentum_t, class IParticle_t>
749inline double ParticleSigStateImpl<INavigable_t,
750 I4Momentum_t,
751 IParticle_t>::e() const
752{
753 return momentumBase().e();
754}
755
756template< class INavigable_t, class I4Momentum_t, class IParticle_t>
757inline double ParticleSigStateImpl<INavigable_t,
758 I4Momentum_t,
759 IParticle_t>::et() const
760{
761 return momentumBase().et();
762}
763
764template< class INavigable_t, class I4Momentum_t, class IParticle_t>
765inline double ParticleSigStateImpl<INavigable_t,
766 I4Momentum_t,
767 IParticle_t>::pt() const
768{
769 return momentumBase().pt();
770}
771
772template< class INavigable_t, class I4Momentum_t, class IParticle_t>
773inline double ParticleSigStateImpl<INavigable_t,
774 I4Momentum_t,
775 IParticle_t>::iPt() const
776{
777 return momentumBase().iPt();
778}
779
780template< class INavigable_t, class I4Momentum_t, class IParticle_t>
781inline double ParticleSigStateImpl<INavigable_t,
782 I4Momentum_t,
783 IParticle_t>::cosPhi() const
784{
785 return momentumBase().cosPhi();
786}
787
788template< class INavigable_t, class I4Momentum_t, class IParticle_t>
789inline double ParticleSigStateImpl<INavigable_t,
790 I4Momentum_t,
791 IParticle_t>::sinPhi() const
792{
793 return momentumBase().sinPhi();
794}
795
796template< class INavigable_t, class I4Momentum_t, class IParticle_t>
797inline double ParticleSigStateImpl<INavigable_t,
798 I4Momentum_t,
799 IParticle_t>::tanTh() const
800{
801 return momentumBase().tanTh();
802}
803
804template< class INavigable_t, class I4Momentum_t, class IParticle_t>
805inline double ParticleSigStateImpl<INavigable_t,
806 I4Momentum_t,
807 IParticle_t>::cosTh() const
808{
809 return momentumBase().cosTh();
810}
811
812template< class INavigable_t, class I4Momentum_t, class IParticle_t>
813inline double ParticleSigStateImpl<INavigable_t,
814 I4Momentum_t,
815 IParticle_t>::sinTh() const
816{
817 return momentumBase().sinTh();
818}
819
820template< class INavigable_t, class I4Momentum_t, class IParticle_t>
821inline double ParticleSigStateImpl<INavigable_t,
822 I4Momentum_t,
823 IParticle_t>::cotTh() const
824{
825 return momentumBase().cotTh();
826}
827
828
829template< class INavigable_t, class I4Momentum_t, class IParticle_t>
830inline CLHEP::HepLorentzVector ParticleSigStateImpl<INavigable_t,
831 I4Momentum_t,
832 IParticle_t>::hlv() const
833{
834 return momentumBase().hlv();
835}
836
837template< class INavigable_t, class I4Momentum_t, class IParticle_t>
838inline const I4MomentumError* ParticleSigStateImpl<INavigable_t,
839 I4Momentum_t,
840 IParticle_t>::errors() const
841{
842 return momentumBase().errors();
843}
844
845template< class INavigable_t, class I4Momentum_t, class IParticle_t>
846inline I4Momentum::Kind ParticleSigStateImpl<INavigable_t,
847 I4Momentum_t,
848 IParticle_t>::kind() const
849{
850 return momentumBase().kind();
851}
852
853template< class INavigable_t, class I4Momentum_t, class IParticle_t>
854inline std::ostream& ParticleSigStateImpl<INavigable_t,
855 I4Momentum_t,
856 IParticle_t>::dump( std::ostream& out ) const
857{
858 momentumBase().dump ( out );
859 out << "\n";
860 m_part.dump( out );
861 return out;
862}
863
864template< class INavigable_t, class I4Momentum_t, class IParticle_t>
866 I4Momentum_t,
867 IParticle_t>::dataType() const
868{
869 return m_part.dataType();
870}
871
872template< class INavigable_t, class I4Momentum_t, class IParticle_t>
873inline const Trk::RecVertex* ParticleSigStateImpl<INavigable_t,
874 I4Momentum_t,
875 IParticle_t>::origin() const
876{
877 return m_part.origin();
878}
879
880template< class INavigable_t, class I4Momentum_t, class IParticle_t>
881inline const ElementLink< VxContainer >& ParticleSigStateImpl<INavigable_t,
882 I4Momentum_t,
883 IParticle_t>::originLink() const
884{
885 return m_part.originLink();
886}
887
888template< class INavigable_t, class I4Momentum_t, class IParticle_t>
889inline bool ParticleSigStateImpl<INavigable_t,
890 I4Momentum_t,
891 IParticle_t>::hasCharge() const
892{
893 return m_part.hasCharge();
894}
895
896template< class INavigable_t, class I4Momentum_t, class IParticle_t>
897inline ChargeType ParticleSigStateImpl<INavigable_t,
898 I4Momentum_t,
899 IParticle_t>::charge() const
900{
901 return m_part.charge();
902}
903
904template< class INavigable_t, class I4Momentum_t, class IParticle_t>
905inline bool ParticleSigStateImpl<INavigable_t,
906 I4Momentum_t,
907 IParticle_t>::hasPdgId() const
908{
909 return m_part.hasPdgId();
910}
911
912template< class INavigable_t, class I4Momentum_t, class IParticle_t>
913inline int ParticleSigStateImpl<INavigable_t,
914 I4Momentum_t,
915 IParticle_t>::pdgId() const
916{
917 return m_part.pdgId();
918}
919
921// Passing all interface of IAthenaBarCode Here
922// Through particleBase()
924
925template< class INavigable_t, class I4Momentum_t, class IParticle_t>
926inline AthenaBarCode_t ParticleSigStateImpl<INavigable_t,
927 I4Momentum_t,
928 IParticle_t>::getAthenaBarCode() const
929{
930 return particleBase().getAthenaBarCodeImpl().getAthenaBarCode();
931}
932
933template< class INavigable_t, class I4Momentum_t, class IParticle_t>
934inline void ParticleSigStateImpl<INavigable_t,
935 I4Momentum_t,
937{
938 particleBase().getAthenaBarCodeImpl().setAthenaBarCode(id);
939}
940
941//Comparing & Versioning Control
942template< class INavigable_t, class I4Momentum_t, class IParticle_t>
943inline bool ParticleSigStateImpl<INavigable_t,
944 I4Momentum_t,
945 IParticle_t>::hasSameAthenaBarCode(const IAthenaBarCode &bc) const
946{
947 return particleBase().getAthenaBarCodeImpl().hasSameAthenaBarCode(bc);
948}
949
950template< class INavigable_t, class I4Momentum_t, class IParticle_t>
951inline bool ParticleSigStateImpl<INavigable_t,
952 I4Momentum_t,
954{
955 return particleBase().getAthenaBarCodeImpl().hasSameAthenaBarCodeExceptVersion(bc);
956}
957
958template< class INavigable_t, class I4Momentum_t, class IParticle_t>
960 I4Momentum_t,
961 IParticle_t>::getVersion() const
962{
963 return particleBase().getAthenaBarCodeImpl().getVersion();
964}
965
966template< class INavigable_t, class I4Momentum_t, class IParticle_t>
967inline void ParticleSigStateImpl<INavigable_t,
968 I4Momentum_t,
969 IParticle_t>::newVersion()
970{
971 particleBase().getAthenaBarCodeImpl().newVersion();
972}
973
974template< class INavigable_t, class I4Momentum_t, class IParticle_t>
975inline void ParticleSigStateImpl<INavigable_t,
976 I4Momentum_t,
977 IParticle_t>::setVersion(AthenaBarCodeVersion_t newversion)
978{
979 particleBase().getAthenaBarCodeImpl().setVersion(newversion);
980}
981
983// Finished Passing all interface of IAthenaBarCode
985
986// --------------------
987// non-const interface
988// --------------------
989
990template< class INavigable_t, class I4Momentum_t, class IParticle_t>
991inline INavigable_t& ParticleSigStateImpl<INavigable_t,
992 I4Momentum_t,
993 IParticle_t>::navigableBase()
994{
995 return m_nav;
996}
997
998template< class INavigable_t, class I4Momentum_t, class IParticle_t>
999inline I4Momentum_t& ParticleSigStateImpl<INavigable_t,
1000 I4Momentum_t,
1002{
1003 if(hasSignalState(s))
1004 return m_mom[int(s)];
1005 else
1006 return m_mom[0];
1007}
1008
1009template< class INavigable_t, class I4Momentum_t, class IParticle_t>
1010inline I4Momentum_t& ParticleSigStateImpl<INavigable_t,
1011 I4Momentum_t,
1012 IParticle_t>::momentumBase()
1013{
1015 return m_mom[int(m_currentState)];
1016 else
1017 return m_mom[0];
1018}
1019
1020template< class INavigable_t, class I4Momentum_t, class IParticle_t>
1021inline IParticle_t& ParticleSigStateImpl<INavigable_t,
1022 I4Momentum_t,
1023 IParticle_t>::particleBase()
1024{
1025 return m_part;
1026}
1027
1028
1029// setters
1030
1031template< class INavigable_t, class I4Momentum_t, class IParticle_t>
1032inline void ParticleSigStateImpl<INavigable_t,
1033 I4Momentum_t,
1034 IParticle_t>::set4Mom( const I4Momentum& p4, state_t s )
1035{
1036 return momentumBase(s).set4Mom( p4 );
1037}
1038
1039template< class INavigable_t, class I4Momentum_t, class IParticle_t>
1040inline void ParticleSigStateImpl<INavigable_t,
1041 I4Momentum_t,
1042 IParticle_t>::set4Mom( const I4Momentum * const p4, state_t s )
1043{
1044 return momentumBase(s).set4Mom( p4 );
1045}
1046
1047
1048template< class INavigable_t, class I4Momentum_t, class IParticle_t>
1049inline void ParticleSigStateImpl<INavigable_t,
1050 I4Momentum_t,
1051 IParticle_t>::set4Mom( const CLHEP::HepLorentzVector& hlv, state_t s )
1052{
1053 return momentumBase(s).set4Mom( hlv );
1054}
1055
1056template< class INavigable_t, class I4Momentum_t, class IParticle_t>
1057inline void ParticleSigStateImpl<INavigable_t,
1058 I4Momentum_t,
1059 IParticle_t>::set4Mom( const I4Momentum& p4 )
1060{
1061 return momentumBase().set4Mom( p4 );
1062}
1063
1064template< class INavigable_t, class I4Momentum_t, class IParticle_t>
1065inline void ParticleSigStateImpl<INavigable_t,
1066 I4Momentum_t,
1067 IParticle_t>::set4Mom( const I4Momentum * const p4 )
1068{
1069 return momentumBase().set4Mom( p4 );
1070}
1071
1072
1073template< class INavigable_t, class I4Momentum_t, class IParticle_t>
1074inline void ParticleSigStateImpl<INavigable_t,
1075 I4Momentum_t,
1076 IParticle_t>::set4Mom( const CLHEP::HepLorentzVector& hlv )
1077{
1078 return momentumBase().set4Mom( hlv );
1079}
1080
1081template< class INavigable_t, class I4Momentum_t, class IParticle_t>
1082inline void ParticleSigStateImpl<INavigable_t,
1083 I4Momentum_t,
1085{
1086 m_part.set_dataType(x);
1087}
1088
1089template< class INavigable_t, class I4Momentum_t, class IParticle_t>
1090inline void ParticleSigStateImpl<INavigable_t,
1091 I4Momentum_t,
1093{
1094 m_part.set_charge(x);
1095}
1096
1097template< class INavigable_t, class I4Momentum_t, class IParticle_t>
1098inline void ParticleSigStateImpl<INavigable_t,
1099 I4Momentum_t,
1100 IParticle_t>::set_pdgId( int x )
1101{
1102 m_part.set_pdgId(x);
1103}
1104
1105template< class INavigable_t, class I4Momentum_t, class IParticle_t>
1106inline void ParticleSigStateImpl<INavigable_t,
1107 I4Momentum_t,
1108 IParticle_t>::set_origin( const VxContainer* theContainer,
1109 int index )
1110{
1111 m_part.set_origin(theContainer, index);
1112}
1113
1114template< class INavigable_t, class I4Momentum_t, class IParticle_t>
1115inline void ParticleSigStateImpl<INavigable_t,
1116 I4Momentum_t,
1117 IParticle_t>::set_origin( const VxContainer* theContainer,
1118 const Trk::VxCandidate * vertex )
1119{
1120 m_part.set_origin(theContainer, vertex);
1121}
1122
1123template< class INavigable_t, class I4Momentum_t, class IParticle_t>
1124inline void ParticleSigStateImpl<INavigable_t,
1125 I4Momentum_t,
1127{
1128 m_part.set_origin(origin);
1129}
1130
1131template< class INavigable_t, class I4Momentum_t, class IParticle_t>
1132std::ostream& operator<< (std::ostream& out,
1133 const ParticleSigStateImpl<INavigable_t,
1134 I4Momentum_t,
1135 IParticle_t>& p4);
1136
1137template< class INavigable_t, class I4Momentum_t, class IParticle_t>
1138inline std::ostream& operator<< (std::ostream& out,
1139 const ParticleSigStateImpl<INavigable_t,
1140 I4Momentum_t,
1141 IParticle_t>& p4)
1142{
1143 return p4.dump( out );
1144}
1145
1146template< class INavigable_t, class I4Momentum_t, class IParticle_t>
1147inline P4SignalState::State ParticleSigStateImpl<INavigable_t,
1148 I4Momentum_t,
1149 IParticle_t>::signalState() const
1150{
1151 return m_currentState;
1152}
1153
1154template< class INavigable_t, class I4Momentum_t, class IParticle_t>
1155inline bool ParticleSigStateImpl<INavigable_t,
1156 I4Momentum_t,
1158{
1159 if(!hasSignalState(s))
1160 {
1161 return false;
1162 } else {
1163 m_currentState = s;
1164 return true;
1165 }
1166}
1167
1168template< class INavigable_t, class I4Momentum_t, class IParticle_t>
1169inline bool ParticleSigStateImpl<INavigable_t,
1170 I4Momentum_t,
1171 IParticle_t>::hasSignalState(state_t s) const
1172{
1173 // UNKNOWN is not an actual SignalState!
1174 if(int(s)<0)
1175 return false;
1176
1177 return (int(s) < m_nStates);
1178}
1179
1180template< class INavigable_t, class I4Momentum_t, class IParticle_t>
1181inline bool ParticleSigStateImpl<INavigable_t,
1182 I4Momentum_t,
1183 IParticle_t>::isAtSignalState(state_t s) const
1184{
1185 return (s == m_currentState);
1186}
1187
1188template< class INavigable_t, class I4Momentum_t, class IParticle_t>
1189inline void ParticleSigStateImpl<INavigable_t,
1190 I4Momentum_t,
1192{
1194}
1195
1196
1197
1198#endif //> PARTICLEEVENT_PARTICLEIMPL_H
Scalar eta() const
pseudorapidity method
Scalar phi() const
phi method
uint64_t AthenaBarCode_t
barcode for all INav4Mom classes
AthenaBarCode_t AthenaBarCodeVersion_t
double charge(const T &p)
Definition AtlasPID.h:997
double ChargeType
typedef ChargeType used to anticipate changes here
float et(const xAOD::jFexSRJetRoI *j)
std::ostream & operator<<(std::ostream &out, const ParticleSigStateImpl< INavigable_t, I4Momentum_t, IParticle_t > &p4)
#define x
Define macros for attributes used to control the static checker.
I4Momentum is an abstract base class providing 4-momentum behavior.
Definition I4Momentum.h:31
ISignalState is an abstract base class providing support for various Signal States to be associated w...
hub for various interface implementations
virtual double m2(state_t s) const
ParticleSigStateImpl & operator=(const ParticleSigStateImpl &rhs)
Assignment operator.
virtual void fillToken(INavigationToken &thisToken, const std::any &weight) const
virtual double m2() const
mass squared
virtual double cotTh() const
cottan theta
virtual I4Momentum::Kind kind() const
add Kind which tells what kind (P4XYZ) the underlying implementation has
momentum_type & momentumBase()
virtual double eta() const
pseudo rapidity
AthenaBarCode_t getAthenaBarCode() const
virtual bool setSignalState(state_t s)
set the current signal state
virtual void set4Mom(const CLHEP::HepLorentzVector &hlv)
set 4Momentum (will throw exception if cannot be implemented)
virtual double rapidity(state_t s) const
virtual double rapidity() const
rapidity
virtual double sinTh() const
sinus theta
virtual const I4MomentumError * errors(state_t s) const
IParticle_t particle_type
publish the type of the base class (ie: 'traits-itize' it)
particle_type & particleBase()
access to underlying base type (IParticle-like)
bool hasSameAthenaBarCodeExceptVersion(const IAthenaBarCode &) const
virtual double sinPhi() const
sinus phi
I4Momentum_t momentum_type
publish the type of the base class (ie: 'traits-itize' it)
virtual void set_origin(const VxContainer *theContainer, const Trk::VxCandidate *vertex)
virtual double phi() const
phi in [-pi,pi[
INavigable_t navigable_type
publish the type of the base class (ie: 'traits-itize' it)
std::vector< I4Momentum_t > & momentumVector()
access the vector of momentum
virtual bool isAtSignalState(state_t s) const
check if we are at the passed state
virtual double cotTh(state_t s) const
ParticleSigStateImpl(const ParticleSigStateImpl &rhs)
Copy constructor.
const momentum_type & momentumBase() const
virtual double py(state_t s) const
virtual double phi(state_t s) const
virtual double p() const
mass momentum magnitude
virtual double sinTh(state_t s) const
virtual bool hasPdgId() const
method to check if particle id information is available
virtual double px(state_t s) const
virtual double p2(state_t s) const
virtual double cosTh() const
cosinus theta
void setAthenaBarCode(AthenaBarCode_t)
virtual double m() const
mass
virtual bool hasSignalState(state_t s) const
check if signal state exists for current implementation
const particle_type & particleBase() const
access to underlying base type (IParticle-like)
virtual CLHEP::HepLorentzVector hlv(state_t s) const
obtain the CLHEP HepLorentzVector
virtual ParticleDataType::DataType dataType() const
Return enum indicating real data, fast, or full simulation Return Type has a DataType enum with the f...
virtual const Trk::RecVertex * origin() const
Return a RecVertex corresponding to particle Origin.
virtual state_t signalState() const
Retrieve current signal state.
virtual double pz() const
z component of momentum
navigable_type & navigableBase()
access to underlying base type (INavigable-like)
virtual void set4Mom(const I4Momentum *const p4, state_t s)
virtual ChargeType charge() const
returns charge as a typedef ChargeType currently Charge Type is a double for jets this may be changed...
virtual bool hasCharge() const
method to check if charge information is available
virtual double e() const
energy
virtual double py() const
y component of momentum
virtual double iPt(state_t s) const
virtual double pz(state_t s) const
virtual CLHEP::HepLorentzVector hlv() const
CLHEP HepLorentzVector.
ParticleSigStateImpl(int nStates=1, state_t defaultState=state_t(0))
Default constructor.
virtual void set_origin(const VxContainer *theContainer, int index)
virtual double et() const
transverse energy defined to be e*sin(theta)
virtual ~ParticleSigStateImpl()
Default destructor:
virtual double pt(state_t s) const
virtual double iPt() const
inverse of transverse momentum
ParticleSigStateImpl< INavigable_t, I4Momentum_t, IParticle_t > self_type
publish the type of the base class (ie: 'traits-itize' it)
virtual double pt() const
transverse momentum
virtual void set4Mom(const I4Momentum &p4, state_t s)
virtual void fillToken(INavigationToken &thisToken) const
const navigable_type & navigableBase() const
access to underlying base type (INavigable-like)
virtual double et(state_t s) const
bool hasSameAthenaBarCode(const IAthenaBarCode &) const
virtual double sinPhi(state_t s) const
virtual void set4Mom(const I4Momentum &p4)
set 4Momentum (will throw exception if cannot be implemented)
virtual double tanTh(state_t s) const
virtual double m(state_t s) const
virtual void set4Mom(const I4Momentum *const p4)
set 4Momentum (will throw exception if cannot be implemented)
virtual const ElementLink< VxContainer > & originLink() const
Return an ElementLink corresponding to particle's Origin.
virtual void set4Mom(const CLHEP::HepLorentzVector &hlv, state_t s)
const momentum_type & momentumBase(state_t s) const
access to underlying base type (I4Momentum-like)
virtual void set_pdgId(int x)
virtual double cosPhi(state_t s) const
virtual double cosTh(state_t s) const
virtual double eta(state_t s) const
momentum_type & momentumBase(state_t s)
access to underlying base type (I4Momentum-like)
virtual void set_origin(const ElementLink< VxContainer > &origin)
virtual const I4MomentumError * errors() const
Access to errors, if available; returns 0 if no errors.
virtual double cosPhi() const
cosinus phi
void setVersion(AthenaBarCodeVersion_t newversion)
virtual int pdgId() const
Return particle id.
virtual void set_dataType(ParticleDataType::DataType x)
virtual double p(state_t s) const
virtual void set_charge(ChargeType x)
virtual double p2() const
square of momentum magnitude
AthenaBarCodeVersion_t getVersion() const
virtual std::ostream & dump(std::ostream &out) const
Print I4Momentum content.
virtual double tanTh() const
tan theta
virtual void resetSignalState()
reset the signal state
virtual double e(state_t s) const
virtual double px() const
We re-define here extra class routines that will allow direct access to signal state kinematics witho...
Trk::RecVertex inherits from Trk::Vertex.
Definition RecVertex.h:44
Definition index.py:1