ATLAS Offline Software
Loading...
Searching...
No Matches
InDet::SiSpacePointsSeedMaker_BeamGas Class Referencefinal

Class for track candidates generation using space points information for standard Atlas geometry. More...

#include <SiSpacePointsSeedMaker_BeamGas.h>

Inheritance diagram for InDet::SiSpacePointsSeedMaker_BeamGas:
Collaboration diagram for InDet::SiSpacePointsSeedMaker_BeamGas:

Public Member Functions

Standard tool methods
 SiSpacePointsSeedMaker_BeamGas (const std::string &, const std::string &, const IInterface *)
virtual ~SiSpacePointsSeedMaker_BeamGas ()=default
virtual StatusCode initialize () override
virtual StatusCode finalize () override
Methods to initialize tool for new event or region
virtual void newEvent (const EventContext &ctx, EventData &data, int iteration) const override
virtual void newRegion (const EventContext &ctx, EventData &data, const std::vector< IdentifierHash > &vPixel, const std::vector< IdentifierHash > &vSCT) const override
virtual void newRegion (const EventContext &ctx, EventData &data, const std::vector< IdentifierHash > &vPixel, const std::vector< IdentifierHash > &vSCT, const IRoiDescriptor &iRD) const override
virtual void find2Sp (EventData &data, const std::list< Trk::Vertex > &lv) const override
virtual void find3Sp (const EventContext &ctx, EventData &data, const std::list< Trk::Vertex > &lv) const override
 with three space points with or without vertex constraint
virtual void find3Sp (const EventContext &ctx, EventData &data, const std::list< Trk::Vertex > &lv, const double *zVertex) const override
 with three space points with or without vertex constraint with information about min and max Z of the vertex
virtual void findVSp (const EventContext &ctx, EventData &data, const std::list< Trk::Vertex > &lv) const override
 with variable number space points with or without vertex constraint Variable means (2,3,4,....) any number space points
Iterator through seeds pseudo collection

produced accordingly methods find

virtual const SiSpacePointsSeednext (const EventContext &ctx, EventData &data) const override
virtual void writeNtuple (const SiSpacePointsSeed *seed, const Trk::Track *track, int seedType, long EventNumber) const override
virtual bool getWriteNtupleBoolProperty () const override

Private Attributes

Data handles
SG::ReadHandleKey< SpacePointContainerm_spacepointsSCT {this, "SpacePointsSCTName", "SCT_SpacePoints", "SCT space points container"}
SG::ReadHandleKey< SpacePointContainerm_spacepointsPixel {this, "SpacePointsPixelName", "PixelSpacePoints", "Pixel space points container"}
SG::ReadHandleKey< SpacePointOverlapCollectionm_spacepointsOverlap {this, "SpacePointsOverlapName", "OverlapSpacePoints"}
SG::ReadHandleKey< Trk::PRDtoTrackMapm_prdToTrackMap {this,"PRDtoTrackMap","","option PRD-to-track association"}
SG::ReadCondHandleKey< InDet::BeamSpotDatam_beamSpotKey {this, "BeamSpotKey", "BeamSpotData", "SG key for beam spot"}
Read handle for conditions object to get the field cache
SG::ReadCondHandleKey< AtlasFieldCacheCondObjm_fieldCondObjInputKey
Properties, which will not be changed after construction
BooleanProperty m_pixel {this, "usePixel", true}
BooleanProperty m_sct {this, "useSCT""useSCT", true}
BooleanProperty m_useOverlap {this, "useOverlapSpCollection", true}
IntegerProperty m_maxsize {this, "maxSize", 20000}
IntegerProperty m_maxsizeSP {this, "maxSizeSP", 1500}
IntegerProperty m_maxOneSize {this, "maxSeedsForSpacePoint", 5}
FloatProperty m_drmax {this, "maxdRadius", 270.}
FloatProperty m_zmin {this, "minZ", -5000.}
FloatProperty m_zmax {this, "maxZ", +5000.}
FloatProperty m_r_rmax {this, "radMax", 600.}
FloatProperty m_r_rstep {this, "radStep", 2.}
FloatProperty m_r1min {this, "minRadius1", 0.}
FloatProperty m_r1max {this, "maxRadius1", 450.}
FloatProperty m_r2min {this, "minRadius2", 0.}
FloatProperty m_r2max {this, "maxRadius2", 600.}
FloatProperty m_r3min {this, "minRadius3", 0.}
FloatProperty m_r3max {this, "maxRadius3", 600.}
FloatProperty m_drmin {this, "mindRadius", 10.}
FloatProperty m_diver {this, "maxdImpact", 10.}
FloatProperty m_diverpps {this, "maxdImpactPPS", 1.7}
Properties, which can be updated in buildFrameWork method which is called in initialize method
FloatProperty m_ptmin {this, "pTmin", 1000.}
FloatProperty m_etamax {this, "etaMax", 5.3}
FloatProperty m_fieldScale {this, "fieldScale", 1.}
Data members, which are updated in only initialize
bool m_initialized {false}
int m_outputlevel {0}
int m_r_size {0}
int m_fNmax {0}
int m_rfz_b [SizeRFZ] {}
int m_rfz_t [SizeRFZ] {}
int m_rfz_ib [SizeRFZ][SizeI] {}
int m_rfz_it [SizeRFZ][SizeI] {}
float m_dzdrmax {0.}
float m_dzdrmin {0.}
float m_COF {0.}
float m_ipt {0.}
float m_ipt2 {0.}
float m_sF {0.}

Print internal tool parameters and status

enum  Size { SizeRF =53 , SizeZ =11 , SizeRFZ =SizeRF*SizeZ , SizeI =12 }
 enum for array sizes More...
virtual MsgStream & dump (EventData &data, MsgStream &out) const override

Disallow default instantiation, copy, assignment

 SiSpacePointsSeedMaker_BeamGas ()=delete
 SiSpacePointsSeedMaker_BeamGas (const SiSpacePointsSeedMaker_BeamGas &)=delete
SiSpacePointsSeedMaker_BeamGasoperator= (const SiSpacePointsSeedMaker_BeamGas &)=delete
MsgStream & dumpConditions (EventData &data, MsgStream &out) const
void buildFrameWork ()
void buildBeamFrameWork (EventData &data) const
void newOneSeed (EventData &data, const Trk::SpacePoint *&, const Trk::SpacePoint *&, const Trk::SpacePoint *&, const float &, const float &) const
void fillLists (EventData &data) const
void production3Sp (EventData &data) const
void production3Sp (EventData &data, std::vector< InDet::SiSpacePointForSeed * >::iterator *, std::vector< InDet::SiSpacePointForSeed * >::iterator *, std::vector< InDet::SiSpacePointForSeed * >::iterator *, std::vector< InDet::SiSpacePointForSeed * >::iterator *, int, int, int &) const
void findNext (EventData &data) const
bool isZCompatible (float &) const
bool isUsed (const Trk::SpacePoint *sp, const Trk::PRDtoTrackMap &prd_to_track_map) const
void initializeEventData (EventData &data) const
static MsgStream & dumpEvent (EventData &data, MsgStream &out)
static SiSpacePointForSeednewSpacePoint (EventData &data, const Trk::SpacePoint *const &)
static void newSeed (EventData &data, const Trk::SpacePoint *&, const Trk::SpacePoint *&, const float &)
static void newSeed (EventData &data, const Trk::SpacePoint *&, const Trk::SpacePoint *&, const Trk::SpacePoint *&, const float &)
static void fillSeeds (EventData &data)
static void erase (EventData &data)
static void production2Sp (EventData &data)
static void convertToBeamFrameWork (EventData &data, const Trk::SpacePoint *const &sp, float *r)

Detailed Description

Class for track candidates generation using space points information for standard Atlas geometry.

In AthenaMT, event dependent cache inside SiSpacePointsSeedMaker_BeamGas is not preferred. SiSpacePointsSeedMakerEventData = EventData class holds event dependent data for SiSpacePointsSeedMaker_BeamGas. Its object is instantiated in SiSPSeededTrackFinder::execute.

Definition at line 54 of file SiSpacePointsSeedMaker_BeamGas.h.

Member Enumeration Documentation

◆ Size

Constructor & Destructor Documentation

◆ SiSpacePointsSeedMaker_BeamGas() [1/3]

InDet::SiSpacePointsSeedMaker_BeamGas::SiSpacePointsSeedMaker_BeamGas ( const std::string & t,
const std::string & n,
const IInterface * p )

Definition at line 27 of file SiSpacePointsSeedMaker_BeamGas.cxx.

29 : base_class(t, n, p)
30{
31}

◆ ~SiSpacePointsSeedMaker_BeamGas()

virtual InDet::SiSpacePointsSeedMaker_BeamGas::~SiSpacePointsSeedMaker_BeamGas ( )
virtualdefault

◆ SiSpacePointsSeedMaker_BeamGas() [2/3]

InDet::SiSpacePointsSeedMaker_BeamGas::SiSpacePointsSeedMaker_BeamGas ( )
privatedelete

◆ SiSpacePointsSeedMaker_BeamGas() [3/3]

InDet::SiSpacePointsSeedMaker_BeamGas::SiSpacePointsSeedMaker_BeamGas ( const SiSpacePointsSeedMaker_BeamGas & )
privatedelete

Member Function Documentation

◆ buildBeamFrameWork()

void InDet::SiSpacePointsSeedMaker_BeamGas::buildBeamFrameWork ( EventData & data) const
private

Definition at line 680 of file SiSpacePointsSeedMaker_BeamGas.cxx.

681{
682 SG::ReadCondHandle<InDet::BeamSpotData> beamSpotHandle { m_beamSpotKey };
683
684 const Amg::Vector3D &cb = beamSpotHandle->beamPos();
685 double tx = std::tan(beamSpotHandle->beamTilt(0));
686 double ty = std::tan(beamSpotHandle->beamTilt(1));
687
688 double ph = atan2(ty,tx);
689 double th = acos(1./sqrt(1.+tx*tx+ty*ty));
690 double sint = sin(th);
691 double cost = cos(th);
692 double sinp = sin(ph);
693 double cosp = cos(ph);
694
695 data.xbeam[0] = static_cast<float>(cb.x());
696 data.xbeam[1] = static_cast<float>(cost*cosp*cosp+sinp*sinp);
697 data.xbeam[2] = static_cast<float>(cost*sinp*cosp-sinp*cosp);
698 data.xbeam[3] =-static_cast<float>(sint*cosp );
699
700 data.ybeam[0] = static_cast<float>(cb.y());
701 data.ybeam[1] = static_cast<float>(cost*cosp*sinp-sinp*cosp);
702 data.ybeam[2] = static_cast<float>(cost*sinp*sinp+cosp*cosp);
703 data.ybeam[3] =-static_cast<float>(sint*sinp );
704
705 data.zbeam[0] = static_cast<float>(cb.z());
706 data.zbeam[1] = static_cast<float>(sint*cosp);
707 data.zbeam[2] = static_cast<float>(sint*sinp);
708 data.zbeam[3] = static_cast<float>(cost);
709}
char data[hepevt_bytes_allocation_ATLAS]
Definition HepEvt.cxx:11
SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey
int cost(std::vector< std::string > &files, node &n, const std::string &directory="", bool deleteref=false, bool relocate=false)
Definition hcg.cxx:922
Eigen::Matrix< double, 3, 1 > Vector3D

◆ buildFrameWork()

void InDet::SiSpacePointsSeedMaker_BeamGas::buildFrameWork ( )
private

Definition at line 589 of file SiSpacePointsSeedMaker_BeamGas.cxx.

590{
591 m_ptmin = std::max( std::abs(m_ptmin), float(300.*m_fieldScale));
592 m_etamax = std::abs(m_etamax);
593 m_dzdrmax = 1.f/std::tan(2.f*std::atan(std::exp(-m_etamax)));
595 m_COF = 134*.05*9.;
596 m_ipt = 1.f/std::abs(.9f*m_ptmin);
598
599 // Build radius sorted containers
600 //
601 m_r_size = static_cast<int>((m_r_rmax+.1)/m_r_rstep);
602
603 // Build radius-azimuthal sorted containers
604 //
605 constexpr float pi2 = 2.*M_PI;
606 const int NFmax = SizeRF;
607 const float sFmax = static_cast<float>(NFmax)/pi2;
608 const float sFmin = 100./60.;
609
610 m_sF = m_ptmin/m_fieldScale /60.f;
611 if (m_sF >sFmax ) m_sF = sFmax;
612 else if (m_sF < sFmin) m_sF = sFmin;
613 m_fNmax = static_cast<int>(pi2*m_sF);
614 if (m_fNmax >=NFmax) m_fNmax = NFmax-1;
615
616 // Build maps for radius-azimuthal-Z sorted collections
617 //
618 for (int f=0; f<=m_fNmax; ++f) {
619
620 int fb = f-1; if (fb<0 ) fb=m_fNmax;
621 int ft = f+1; if (ft>m_fNmax) ft=0;
622
623 // For each azimuthal region loop through all Z regions
624 //
625 for (int z=0; z<SizeZ; ++z) {
626
627 int a = f *SizeZ+z;
628 int b = fb*SizeZ+z;
629 int c = ft*SizeZ+z;
630 m_rfz_b [a] = 3; m_rfz_t [a] = 3;
631 m_rfz_ib[a][0] = a; m_rfz_it[a][0] = a;
632 m_rfz_ib[a][1] = b; m_rfz_it[a][1] = b;
633 m_rfz_ib[a][2] = c; m_rfz_it[a][2] = c;
634 if (z==5) {
635
636 m_rfz_t [a] = 9; m_rfz_b [a] = 9;
637 m_rfz_it[a][3] = a+1; m_rfz_ib[a][3] = a+1;
638 m_rfz_it[a][4] = b+1; m_rfz_ib[a][4] = b+1;
639 m_rfz_it[a][5] = c+1; m_rfz_ib[a][5] = c+1;
640 m_rfz_it[a][6] = a-1; m_rfz_ib[a][6] = a-1;
641 m_rfz_it[a][7] = b-1; m_rfz_ib[a][7] = b-1;
642 m_rfz_it[a][8] = c-1; m_rfz_ib[a][8] = c-1;
643 } else if (z> 5) {
644
645 m_rfz_b [a] = 6; m_rfz_t [a] = 6;
646 m_rfz_ib[a][3] = a-1; m_rfz_it[a][3] = a-1;
647 m_rfz_ib[a][4] = b-1; m_rfz_it[a][4] = b-1;
648 m_rfz_ib[a][5] = c-1; m_rfz_it[a][5] = c-1;
649
650 if (z<10) {
651
652 m_rfz_t [a] = 9; m_rfz_b [a] = 9;
653 m_rfz_it[a][6] = a+1; m_rfz_ib[a][6] = a+1;
654 m_rfz_it[a][7] = b+1; m_rfz_ib[a][7] = b+1;
655 m_rfz_it[a][8] = c+1; m_rfz_ib[a][8] = c+1;
656 }
657 } else {
658
659 m_rfz_b [a] = 6; m_rfz_t [a] = 6;
660 m_rfz_ib[a][3] = a+1; m_rfz_it[a][3] = a+1;
661 m_rfz_ib[a][4] = b+1; m_rfz_it[a][4] = b+1;
662 m_rfz_ib[a][5] = c+1; m_rfz_it[a][5] = c+1;
663
664 if (z>0) {
665
666 m_rfz_t [a] = 9; m_rfz_b [a] = 9;
667 m_rfz_it[a][6] = a-1; m_rfz_ib[a][6] = a-1;
668 m_rfz_it[a][7] = b-1; m_rfz_ib[a][7] = b-1;
669 m_rfz_it[a][8] = c-1; m_rfz_ib[a][8] = c-1;
670 }
671 }
672 }
673 }
674}
#define M_PI
static Double_t a
#define z

◆ convertToBeamFrameWork()

void InDet::SiSpacePointsSeedMaker_BeamGas::convertToBeamFrameWork ( EventData & data,
const Trk::SpacePoint *const & sp,
float * r )
staticprivate

Definition at line 715 of file SiSpacePointsSeedMaker_BeamGas.cxx.

717{
718 float x = static_cast<float>(sp->globalPosition().x())-data.xbeam[0];
719 float y = static_cast<float>(sp->globalPosition().y())-data.ybeam[0];
720 float z = static_cast<float>(sp->globalPosition().z())-data.zbeam[0];
721 r[0] = data.xbeam[1]*x+data.xbeam[2]*y+data.xbeam[3]*z;
722 r[1] = data.ybeam[1]*x+data.ybeam[2]*y+data.ybeam[3]*z;
723 r[2] = data.zbeam[1]*x+data.zbeam[2]*y+data.zbeam[3]*z;
724}
static Double_t sp
#define y
#define x
int r
Definition globals.cxx:22

◆ dump()

MsgStream & InDet::SiSpacePointsSeedMaker_BeamGas::dump ( EventData & data,
MsgStream & out ) const
overridevirtual

Definition at line 421 of file SiSpacePointsSeedMaker_BeamGas.cxx.

422{
423 if (not data.initialized) initializeEventData(data);
424
425 if (data.nprint) return dumpEvent(data, out);
426 return dumpConditions(data, out);
427}
static MsgStream & dumpEvent(EventData &data, MsgStream &out)
MsgStream & dumpConditions(EventData &data, MsgStream &out) const

◆ dumpConditions()

MsgStream & InDet::SiSpacePointsSeedMaker_BeamGas::dumpConditions ( EventData & data,
MsgStream & out ) const
private

Definition at line 433 of file SiSpacePointsSeedMaker_BeamGas.cxx.

434{
435 int n = 42-m_spacepointsPixel.key().size();
436 std::string s2; for (int i=0; i<n; ++i) s2.append(" "); s2.append("|");
437 n = 42-m_spacepointsSCT.key().size();
438 std::string s3; for (int i=0; i<n; ++i) s3.append(" "); s3.append("|");
439 n = 42-m_spacepointsOverlap.key().size();
440 std::string s4; for (int i=0; i<n; ++i) s4.append(" "); s4.append("|");
441 n = 42-m_beamSpotKey.key().size();
442 std::string s5; for (int i=0; i<n; ++i) s5.append(" "); s5.append("|");
443
444
445 out<<"|---------------------------------------------------------------------|"
446 <<endmsg;
447 out<<"| Pixel space points | "<<m_spacepointsPixel.key() <<s2
448 <<endmsg;
449 out<<"| SCT space points | "<<m_spacepointsSCT.key() <<s3
450 <<endmsg;
451 out<<"| Overlap space points | "<<m_spacepointsOverlap.key() <<s4
452 <<endmsg;
453 out<<"| BeamConditionsService | "<<m_beamSpotKey.key()<<s5
454 <<endmsg;
455 out<<"| usePixel | "
456 <<std::setw(12)<<m_pixel
457 <<" |"<<endmsg;
458 out<<"| useSCT | "
459 <<std::setw(12)<<m_sct
460 <<" |"<<endmsg;
461 out<<"| maxSize | "
462 <<std::setw(12)<<m_maxsize
463 <<" |"<<endmsg;
464 out<<"| maxSizeSP | "
465 <<std::setw(12)<<m_maxsizeSP
466 <<" |"<<endmsg;
467 out<<"| pTmin (mev) | "
468 <<std::setw(12)<<std::setprecision(5)<<m_ptmin
469 <<" |"<<endmsg;
470 out<<"| |eta| <= | "
471 <<std::setw(12)<<std::setprecision(5)<<m_etamax
472 <<" |"<<endmsg;
473 out<<"| max radius SP | "
474 <<std::setw(12)<<std::setprecision(5)<<m_r_rmax
475 <<" |"<<endmsg;
476 out<<"| radius step | "
477 <<std::setw(12)<<std::setprecision(5)<<m_r_rstep
478 <<" |"<<endmsg;
479 out<<"| min Z-vertex position | "
480 <<std::setw(12)<<std::setprecision(5)<<m_zmin
481 <<" |"<<endmsg;
482 out<<"| max Z-vertex position | "
483 <<std::setw(12)<<std::setprecision(5)<<m_zmax
484 <<" |"<<endmsg;
485 out<<"| min radius first SP(3) | "
486 <<std::setw(12)<<std::setprecision(5)<<m_r1min
487 <<" |"<<endmsg;
488 out<<"| min radius second SP(3) | "
489 <<std::setw(12)<<std::setprecision(5)<<m_r2min
490 <<" |"<<endmsg;
491 out<<"| min radius last SP(3) | "
492 <<std::setw(12)<<std::setprecision(5)<<m_r3min
493 <<" |"<<endmsg;
494 out<<"| max radius first SP(3) | "
495 <<std::setw(12)<<std::setprecision(4)<<m_r1max
496 <<" |"<<endmsg;
497 out<<"| max radius second SP(3) | "
498 <<std::setw(12)<<std::setprecision(5)<<m_r2max
499 <<" |"<<endmsg;
500 out<<"| max radius last SP(3) | "
501 <<std::setw(12)<<std::setprecision(5)<<m_r3max
502 <<" |"<<endmsg;
503 out<<"| min space points dR | "
504 <<std::setw(12)<<std::setprecision(5)<<m_drmin
505 <<" |"<<endmsg;
506 out<<"| max space points dR | "
507 <<std::setw(12)<<std::setprecision(5)<<m_drmax
508 <<" |"<<endmsg;
509 out<<"| max impact | "
510 <<std::setw(12)<<std::setprecision(5)<<m_diver
511 <<" |"<<endmsg;
512 out<<"| max impact pps | "
513 <<std::setw(12)<<std::setprecision(5)<<m_diverpps
514 <<" |"<<endmsg;
515 out<<"|---------------------------------------------------------------------|"
516 <<endmsg;
517 out<<"| Beam X center | "
518 <<std::setw(12)<<std::setprecision(5)<<data.xbeam[0]
519 <<" |"<<endmsg;
520 out<<"| Beam Y center | "
521 <<std::setw(12)<<std::setprecision(5)<<data.ybeam[0]
522 <<" |"<<endmsg;
523 out<<"| Beam Z center | "
524 <<std::setw(12)<<std::setprecision(5)<<data.zbeam[0]
525 <<" |"<<endmsg;
526 out<<"| Beam X-axis direction | "
527 <<std::setw(12)<<std::setprecision(5)<<data.xbeam[1]
528 <<std::setw(12)<<std::setprecision(5)<<data.xbeam[2]
529 <<std::setw(12)<<std::setprecision(5)<<data.xbeam[3]
530 <<" |"<<endmsg;
531 out<<"| Beam Y-axis direction | "
532 <<std::setw(12)<<std::setprecision(5)<<data.ybeam[1]
533 <<std::setw(12)<<std::setprecision(5)<<data.ybeam[2]
534 <<std::setw(12)<<std::setprecision(5)<<data.ybeam[3]
535 <<" |"<<endmsg;
536 out<<"| Beam Z-axis direction | "
537 <<std::setw(12)<<std::setprecision(5)<<data.zbeam[1]
538 <<std::setw(12)<<std::setprecision(5)<<data.zbeam[2]
539 <<std::setw(12)<<std::setprecision(5)<<data.zbeam[3]
540 <<" |"<<endmsg;
541 out<<"|---------------------------------------------------------------------|"
542 <<endmsg;
543 return out;
544}
#define endmsg
SG::ReadHandleKey< SpacePointContainer > m_spacepointsSCT
SG::ReadHandleKey< SpacePointContainer > m_spacepointsPixel
SG::ReadHandleKey< SpacePointOverlapCollection > m_spacepointsOverlap

◆ dumpEvent()

MsgStream & InDet::SiSpacePointsSeedMaker_BeamGas::dumpEvent ( EventData & data,
MsgStream & out )
staticprivate

Definition at line 550 of file SiSpacePointsSeedMaker_BeamGas.cxx.

551{
552 out<<"|---------------------------------------------------------------------|"
553 <<endmsg;
554 out<<"| ns | "
555 <<std::setw(12)<<data.ns
556 <<" |"<<endmsg;
557 out<<"| nsaz | "
558 <<std::setw(12)<<data.nsaz
559 <<" |"<<endmsg;
560 out<<"| seeds | "
561 <<std::setw(12)<<data.l_seeds.size()
562 <<" |"<<endmsg;
563 out<<"|---------------------------------------------------------------------|"
564 <<endmsg;
565 return out;
566}

◆ erase()

void InDet::SiSpacePointsSeedMaker_BeamGas::erase ( EventData & data)
staticprivate

Definition at line 779 of file SiSpacePointsSeedMaker_BeamGas.cxx.

780{
781 for (int i=0; i!=data.nr; ++i) {
782 int n = data.r_index[i];
783 data.r_map[n] = 0;
784 data.r_Sorted[n].erase(data.r_Sorted[n].begin(), data.r_Sorted[n].end());
785 }
786
787 for (int i=0; i!=data.nrf; ++i) {
788 int n = data.rf_index[i];
789 data.rf_map[n] = 0;
790 data.rf_Sorted[n].erase(data.rf_Sorted[n].begin(), data.rf_Sorted[n].end());
791 }
792
793 for (int i=0; i!=data.nrfz; ++i) {
794 int n = data.rfz_index[i];
795 data.rfz_map[n] = 0;
796 data.rfz_Sorted[n].erase(data.rfz_Sorted[n].begin(), data.rfz_Sorted[n].end());
797 }
798
799 data.state = 0;
800 data.ns = 0;
801 data.nsaz = 0;
802 data.nr = 0;
803 data.nrf = 0;
804 data.nrfz = 0;
805}

◆ fillLists()

void InDet::SiSpacePointsSeedMaker_BeamGas::fillLists ( EventData & data) const
private

Definition at line 730 of file SiSpacePointsSeedMaker_BeamGas.cxx.

731{
732 constexpr float pi2 = 2.*M_PI;
733
734 std::vector<InDet::SiSpacePointForSeed*>::iterator r;
735
736 for (int i=0; i!= m_r_size; ++i) {
737
738 if (!data.r_map[i]) continue;
739 r = data.r_Sorted[i].begin();
740
741 while (r!=data.r_Sorted[i].end()) {
742
743 // Azimuthal angle sort
744 //
745 float F = (*r)->phi(); if (F<0.) F+=pi2;
746
747 int f = static_cast<int>(F*m_sF);
748 if (f < 0) f = m_fNmax;
749 else if (f > m_fNmax) f = 0;
750
751 data.rf_Sorted[f].push_back(*r);
752 if (!data.rf_map[f]++) data.rf_index[data.nrf++] = f;
753
754 int z; float Z = (*r)->z();
755
756 // Azimuthal angle and Z-coordinate sort
757 //
758 if (Z>0.) {
759 Z< 250.?z=5:Z< 450.?z=6:Z< 925.?z=7:Z< 1400.?z=8:Z< 2500.?z=9:z=10;
760 } else {
761 Z>-250.?z=5:Z>-450.?z=4:Z>-925.?z=3:Z>-1400.?z=2:Z>-2500.?z=1:z= 0;
762 }
763 int n = f*SizeZ+z;
764 ++data.nsaz;
765 data.rfz_Sorted[n].push_back(*r);
766 if (!data.rfz_map[n]++) data.rfz_index[data.nrfz++] = n;
767 data.r_Sorted[i].erase(r++);
768 }
769 data.r_map[i] = 0;
770 }
771 data.nr = 0;
772 data.state = 0;
773}
#define F(x, y, z)
Definition MD5.cxx:112

◆ fillSeeds()

void InDet::SiSpacePointsSeedMaker_BeamGas::fillSeeds ( EventData & data)
staticprivate

Definition at line 1187 of file SiSpacePointsSeedMaker_BeamGas.cxx.

1188{
1189 std::multimap<float,InDet::SiSpacePointsSeed*>::iterator
1190 l = data.mapOneSeeds.begin(),
1191 le = data.mapOneSeeds.end ();
1192
1193 for (; l!=le; ++l) {
1194 if (data.i_seede!=data.l_seeds.end()) {
1195 InDet::SiSpacePointsSeed* s = &(*data.i_seede++);
1196 *s = *(*l).second;
1197 } else {
1198 data.l_seeds.emplace_back(*(*l).second);
1199 data.i_seede = data.l_seeds.end();
1200 }
1201 }
1202}
l
Printing final latex table to .tex output file.

◆ finalize()

StatusCode InDet::SiSpacePointsSeedMaker_BeamGas::finalize ( )
overridevirtual

Definition at line 77 of file SiSpacePointsSeedMaker_BeamGas.cxx.

78{
79 return AlgTool::finalize();
80}

◆ find2Sp()

void InDet::SiSpacePointsSeedMaker_BeamGas::find2Sp ( EventData & data,
const std::list< Trk::Vertex > & lv ) const
overridevirtual

Definition at line 324 of file SiSpacePointsSeedMaker_BeamGas.cxx.

325{
326 if (not data.initialized) initializeEventData(data);
327
328 int mode = 0;
329 if (lv.begin()!=lv.end()) mode = 1;
330
331 if (!data.state || data.nspoint!=2 || data.mode!=mode || data.nlist) {
332 data.i_seede = data.l_seeds.begin();
333 data.state = 1;
334 data.nspoint = 2;
335 data.nlist = 0;
336 data.mode = mode;
337 data.endlist = true;
338 data.fNmin = 0;
339 data.zMin = 0;
341 }
342 data.i_seed = data.l_seeds.begin();
343
344 if (m_outputlevel<=0) {
345 data.nprint=1;
346 dump(data, msg(MSG::DEBUG));
347 }
348}
virtual MsgStream & dump(EventData &data, MsgStream &out) const override
MsgStream & msg
Definition testRead.cxx:32

◆ find3Sp() [1/2]

void InDet::SiSpacePointsSeedMaker_BeamGas::find3Sp ( const EventContext & ctx,
EventData & data,
const std::list< Trk::Vertex > & lv ) const
overridevirtual

with three space points with or without vertex constraint

Definition at line 355 of file SiSpacePointsSeedMaker_BeamGas.cxx.

356{
357 if (not data.initialized) initializeEventData(data);
358
359 int mode = 2;
360 if (lv.begin()!=lv.end()) mode = 3;
361
362 if (!data.state || data.nspoint!=3 || data.mode!=mode || data.nlist) {
363 data.i_seede = data.l_seeds.begin();
364 data.state = 1;
365 data.nspoint = 3;
366 data.nlist = 0;
367 data.mode = mode;
368 data.endlist = true;
369 data.fNmin = 0;
370 data.zMin = 0;
372 }
373 data.i_seed = data.l_seeds.begin();
374
375 if (m_outputlevel<=0) {
376 data.nprint=1;
377 dump(data, msg(MSG::DEBUG));
378 }
379}

◆ find3Sp() [2/2]

void InDet::SiSpacePointsSeedMaker_BeamGas::find3Sp ( const EventContext & ctx,
EventData & data,
const std::list< Trk::Vertex > & lv,
const double * zVertex ) const
overridevirtual

with three space points with or without vertex constraint with information about min and max Z of the vertex

Definition at line 380 of file SiSpacePointsSeedMaker_BeamGas.cxx.

381{
382 find3Sp(ctx, data, lv);
383}
virtual void find3Sp(const EventContext &ctx, EventData &data, const std::list< Trk::Vertex > &lv) const override
with three space points with or without vertex constraint

◆ findNext()

void InDet::SiSpacePointsSeedMaker_BeamGas::findNext ( EventData & data) const
private

Definition at line 572 of file SiSpacePointsSeedMaker_BeamGas.cxx.

573{
574 if (data.endlist) return;
575
576 data.i_seede = data.l_seeds.begin();
577 if (data.mode==0 || data.mode==1) production2Sp(data);
578 else if (data.mode==2 || data.mode==3) production3Sp(data);
579 else if (data.mode==5 || data.mode==6) production3Sp(data);
580
581 data.i_seed = data.l_seeds.begin();
582 ++data.nlist;
583}

◆ findVSp()

void InDet::SiSpacePointsSeedMaker_BeamGas::findVSp ( const EventContext & ctx,
EventData & data,
const std::list< Trk::Vertex > & lv ) const
overridevirtual

with variable number space points with or without vertex constraint Variable means (2,3,4,....) any number space points

Definition at line 391 of file SiSpacePointsSeedMaker_BeamGas.cxx.

392{
393 if (not data.initialized) initializeEventData(data);
394
395 int mode = 5;
396 if (lv.begin()!=lv.end()) mode = 6;
397
398 if (!data.state || data.nspoint!=4 || data.mode!=mode || data.nlist) {
399 data.i_seede = data.l_seeds.begin();
400 data.state = 1;
401 data.nspoint = 4;
402 data.nlist = 0;
403 data.mode = mode;
404 data.endlist = true;
405 data.fNmin = 0;
406 data.zMin = 0;
408 }
409 data.i_seed = data.l_seeds.begin();
410
411 if (m_outputlevel<=0) {
412 data.nprint=1;
413 dump(data, msg(MSG::DEBUG));
414 }
415}

◆ getWriteNtupleBoolProperty()

bool InDet::SiSpacePointsSeedMaker_BeamGas::getWriteNtupleBoolProperty ( ) const
overridevirtual

Definition at line 1219 of file SiSpacePointsSeedMaker_BeamGas.cxx.

1219 {
1220 return false;
1221}

◆ initialize()

StatusCode InDet::SiSpacePointsSeedMaker_BeamGas::initialize ( )
overridevirtual

Definition at line 37 of file SiSpacePointsSeedMaker_BeamGas.cxx.

38{
39 StatusCode sc = AlgTool::initialize();
40
42 ATH_CHECK(m_spacepointsSCT.initialize(m_sct));
44
45 // Get beam geometry
46 //
47 ATH_CHECK(m_beamSpotKey.initialize());
48
49 ATH_CHECK( m_fieldCondObjInputKey.initialize() );
50
51 // PRD-to-track association (optional)
52 ATH_CHECK( m_prdToTrackMap.initialize( !m_prdToTrackMap.key().empty()));
53
54 // Build framework
55 //
57
58 // Get output print level
59 //
60 m_outputlevel = msg().level()-MSG::DEBUG;
61 if (m_outputlevel<=0) {
64 data.nprint=0;
65 dump(data, msg(MSG::DEBUG));
66 }
67
68 m_initialized = true;
69
70 return sc;
71}
#define ATH_CHECK
Evaluate an expression and check for errors.
static Double_t sc
SG::ReadCondHandleKey< AtlasFieldCacheCondObj > m_fieldCondObjInputKey
SG::ReadHandleKey< Trk::PRDtoTrackMap > m_prdToTrackMap
::StatusCode StatusCode
StatusCode definition for legacy code.

◆ initializeEventData()

void InDet::SiSpacePointsSeedMaker_BeamGas::initializeEventData ( EventData & data) const
private

Definition at line 1204 of file SiSpacePointsSeedMaker_BeamGas.cxx.

1204 {
1205 data.initialize(EventData::ToolType::BeamGas,
1208 0, // maxsize not used
1209 m_r_size,
1210 SizeRF,
1211 SizeRFZ,
1212 0, // sizeRFZV not used
1213 false); // checkEta not used
1214}

◆ isUsed()

bool InDet::SiSpacePointsSeedMaker_BeamGas::isUsed ( const Trk::SpacePoint * sp,
const Trk::PRDtoTrackMap & prd_to_track_map ) const
inlineprivate

Definition at line 258 of file SiSpacePointsSeedMaker_BeamGas.h.

259 {
260 const Trk::PrepRawData* d = sp->clusterList().first;
261 if (!d || !prd_to_track_map.isUsed(*d)) return false;
262
263 d = sp->clusterList().second;
264 if (!d || prd_to_track_map.isUsed(*d)) return true;
265
266 return false;
267 }
bool isUsed(const PrepRawData &prd) const
does this PRD belong to at least one track?

◆ isZCompatible()

bool InDet::SiSpacePointsSeedMaker_BeamGas::isZCompatible ( float & Zv) const
private

Definition at line 1111 of file SiSpacePointsSeedMaker_BeamGas.cxx.

1112{
1113 return Zv > m_zmin && Zv < m_zmax;
1114}

◆ newEvent()

void InDet::SiSpacePointsSeedMaker_BeamGas::newEvent ( const EventContext & ctx,
EventData & data,
int iteration ) const
overridevirtual

Definition at line 86 of file SiSpacePointsSeedMaker_BeamGas.cxx.

87{
88 if (!m_pixel && !m_sct) return;
89
90 if (not data.initialized) initializeEventData(data);
91
92 erase(data);
94
95 double f[3], gP[3] ={10.,10.,0.};
96
97 MagField::AtlasFieldCache fieldCache;
98 // Get field cache object
99 SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCondObjInputKey, ctx};
100 const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
101 if (fieldCondObj == nullptr) {
102 ATH_MSG_ERROR("SiSpacePointsSeedMaker_BeamGas: Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCondObjInputKey.key());
103 return;
104 }
105 fieldCondObj->getInitializedCache (fieldCache);
106
107 if (fieldCache.solenoidOn()) {
108 fieldCache.getFieldZR(gP,f);
109
110 data.K = 2./(300.*f[2]);
111 } else {
112 data.K = 2./(300.* 5. );
113 }
114
115 data.i_spforseed = data.l_spforseed.begin();
116
117 float irstep = 1.f/m_r_rstep;
118
119
120 SG::ReadHandle<Trk::PRDtoTrackMap> prd_to_track_map;
121 const Trk::PRDtoTrackMap *prd_to_track_map_cptr = nullptr;
122 if (!m_prdToTrackMap.key().empty()) {
123 prd_to_track_map=SG::ReadHandle<Trk::PRDtoTrackMap>(m_prdToTrackMap, ctx);
124 if (!prd_to_track_map.isValid()) {
125 ATH_MSG_ERROR("Failed to read PRD to track association map: " << m_prdToTrackMap.key());
126 }
127 prd_to_track_map_cptr = prd_to_track_map.cptr();
128 }
129
130 // Get pixels space points containers from store gate
131 //
132 if (m_pixel) {
133
134 SG::ReadHandle<SpacePointContainer> spacepointsPixel{m_spacepointsPixel, ctx};
135 if (spacepointsPixel.isValid()) {
136
137 for (const SpacePointCollection* spc: *spacepointsPixel) {
138 for (const Trk::SpacePoint* sp: *spc) {
139 float r = sp->r();
140 if (r<0. || r>=m_r_rmax) continue;
141 if (prd_to_track_map_cptr && isUsed(sp,*prd_to_track_map_cptr)) continue;
142
143 int ir = static_cast<int>(r*irstep);
144 InDet::SiSpacePointForSeed* sps = newSpacePoint(data, sp);
145 data.r_Sorted[ir].push_back(sps);
146 ++data.r_map[ir];
147 if (data.r_map[ir]==1) data.r_index[data.nr++] = ir;
148 ++data.ns;
149 }
150 }
151 }
152 }
153
154 // Get sct space points containers from store gate
155 //
156 if (m_sct) {
157
158 SG::ReadHandle<SpacePointContainer> spacepointsSCT{m_spacepointsSCT, ctx};
159 if (spacepointsSCT.isValid()) {
160
161 for (const SpacePointCollection* spc: *spacepointsSCT) {
162 for (const Trk::SpacePoint* sp: *spc) {
163 float r = sp->r();
164 if (r<0. || r>=m_r_rmax) continue;
165 if (prd_to_track_map_cptr && isUsed(sp,*prd_to_track_map_cptr)) continue;
166
167 int ir = static_cast<int>(r*irstep);
168 InDet::SiSpacePointForSeed* sps = newSpacePoint(data, sp);
169 data.r_Sorted[ir].push_back(sps);
170 ++data.r_map[ir];
171 if (data.r_map[ir]==1) data.r_index[data.nr++] = ir;
172 ++data.ns;
173 }
174 }
175 }
176
177 // Get sct overlap space points containers from store gate
178 //
179 if (m_useOverlap) {
180
181 SG::ReadHandle<SpacePointOverlapCollection> spacepointsOverlap{m_spacepointsOverlap, ctx};
182 if (spacepointsOverlap.isValid()) {
183
184 for (const Trk::SpacePoint* sp: *spacepointsOverlap) {
185
186 float r = sp->r();
187 if (r<0. || r>=m_r_rmax) continue;
188 if (prd_to_track_map_cptr && isUsed(sp,*prd_to_track_map_cptr)) continue;
189
190 int ir = static_cast<int>(r*irstep);
191 InDet::SiSpacePointForSeed* sps = newSpacePoint(data, sp);
192 data.r_Sorted[ir].push_back(sps);
193 ++data.r_map[ir];
194 if (data.r_map[ir]==1) data.r_index[data.nr++] = ir;
195 ++data.ns;
196 }
197 }
198 }
199 }
201}
#define ATH_MSG_ERROR(x)
void getInitializedCache(MagField::AtlasFieldCache &cache) const
get B field cache for evaluation as a function of 2-d or 3-d position.
static SiSpacePointForSeed * newSpacePoint(EventData &data, const Trk::SpacePoint *const &)
bool isUsed(const Trk::SpacePoint *sp, const Trk::PRDtoTrackMap &prd_to_track_map) const
bool solenoidOn() const
status of the magnets
void getFieldZR(const double *ATH_RESTRICT xyz, double *ATH_RESTRICT bxyz, double *ATH_RESTRICT deriv=nullptr)
get B field valaue on the z-r plane at given position works only inside the solenoid.
virtual bool isValid() override final
Can the handle be successfully dereferenced?
const_pointer_type cptr()
Dereference the pointer.
int ir
counter of the current depth
Definition fastadd.cxx:49

◆ newOneSeed()

void InDet::SiSpacePointsSeedMaker_BeamGas::newOneSeed ( EventData & data,
const Trk::SpacePoint *& p1,
const Trk::SpacePoint *& p2,
const Trk::SpacePoint *& p3,
const float & z,
const float & q ) const
private

Definition at line 1064 of file SiSpacePointsSeedMaker_BeamGas.cxx.

1068{
1069 if (data.nOneSeeds < m_maxOneSize) {
1070 data.OneSeeds[data.nOneSeeds].erase();
1071 data.OneSeeds[data.nOneSeeds].add(p1);
1072 data.OneSeeds[data.nOneSeeds].add(p2);
1073 data.OneSeeds[data.nOneSeeds].add(p3);
1074 data.OneSeeds[data.nOneSeeds].setZVertex(static_cast<double>(z));
1075 data.mapOneSeeds.insert(std::make_pair(q, &(data.OneSeeds[data.nOneSeeds])));
1076 ++data.nOneSeeds;
1077 } else {
1078 std::multimap<float,InDet::SiSpacePointsSeed*>::reverse_iterator
1079 l = data.mapOneSeeds.rbegin();
1080 if ((*l).first <= q) return;
1081 InDet::SiSpacePointsSeed* s = (*l).second;
1082 s->erase();
1083 s->add(p1);
1084 s->add(p2);
1085 s->add(p3);
1086 s->setZVertex(static_cast<double>(z));
1087 std::multimap<float,InDet::SiSpacePointsSeed*>::iterator
1088 i = data.mapOneSeeds.insert(std::make_pair(q, s));
1089
1090 for (++i; i!=data.mapOneSeeds.end(); ++i) {
1091 if ((*i).second==s) {
1092 data.mapOneSeeds.erase(i);
1093 return;
1094 }
1095 }
1096 }
1097}

◆ newRegion() [1/2]

void InDet::SiSpacePointsSeedMaker_BeamGas::newRegion ( const EventContext & ctx,
EventData & data,
const std::vector< IdentifierHash > & vPixel,
const std::vector< IdentifierHash > & vSCT ) const
overridevirtual

Definition at line 207 of file SiSpacePointsSeedMaker_BeamGas.cxx.

210{
211 if (!m_pixel && !m_sct) return;
212
213 if (not data.initialized) initializeEventData(data);
214
215 erase(data);
217
218 double f[3], gP[3] ={10.,10.,0.};
219
220 MagField::AtlasFieldCache fieldCache;
221 // Get field cache object
222 SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCondObjInputKey, ctx};
223 const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
224 if (fieldCondObj == nullptr) {
225 ATH_MSG_ERROR("SiSpacePointsSeedMaker_BeamGas: Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCondObjInputKey.key());
226 return;
227 }
228 fieldCondObj->getInitializedCache (fieldCache);
229
230 if (fieldCache.solenoidOn()) {
231 fieldCache.getFieldZR(gP,f);
232
233 data.K = 2./(300.*f[2]);
234 } else {
235 data.K = 2./(300.* 5. );
236 }
237
238 data.i_spforseed = data.l_spforseed.begin();
239
240 float irstep = 1.f/m_r_rstep;
241
242 SG::ReadHandle<Trk::PRDtoTrackMap> prd_to_track_map;
243 const Trk::PRDtoTrackMap *prd_to_track_map_cptr = nullptr;
244 if (!m_prdToTrackMap.key().empty()) {
245 prd_to_track_map=SG::ReadHandle<Trk::PRDtoTrackMap>(m_prdToTrackMap, ctx);
246 if (!prd_to_track_map.isValid()) {
247 ATH_MSG_ERROR("Failed to read PRD to track association map: " << m_prdToTrackMap.key());
248 }
249 prd_to_track_map_cptr = prd_to_track_map.cptr();
250 }
251
252 // Get pixels space points containers from store gate
253 //
254 if (m_pixel && !vPixel.empty()) {
255
256 SG::ReadHandle<SpacePointContainer> spacepointsPixel{m_spacepointsPixel, ctx};
257 if (spacepointsPixel.isValid()) {
258
259 // Loop through all trigger collections
260 //
261 for (const IdentifierHash& l: vPixel) {
262 const auto *w = spacepointsPixel->indexFindPtr(l);
263 if (w==nullptr) continue;
264 for (const Trk::SpacePoint* sp: *w) {
265 float r = sp->r();
266 if (r<0. || r>=m_r_rmax) continue;
267 if (prd_to_track_map_cptr && isUsed(sp, *prd_to_track_map_cptr)) continue;
268 int ir = static_cast<int>(r*irstep);
269 InDet::SiSpacePointForSeed* sps = newSpacePoint(data, sp);
270 data.r_Sorted[ir].push_back(sps);
271 ++data.r_map[ir];
272 if (data.r_map[ir]==1) data.r_index[data.nr++] = ir;
273 ++data.ns;
274 }
275 }
276 }
277 }
278
279 // Get sct space points containers from store gate
280 //
281 if (m_sct && !vSCT.empty()) {
282
283 SG::ReadHandle<SpacePointContainer> spacepointsSCT{m_spacepointsSCT, ctx};
284 if (spacepointsSCT.isValid()) {
285 // Loop through all trigger collections
286 //
287 for (const IdentifierHash& l: vPixel) {
288 const auto *w = spacepointsSCT->indexFindPtr(l);
289 if (w==nullptr) continue;
290 for (const Trk::SpacePoint* sp: *w) {
291 float r = sp->r();
292 if (r<0. || r>=m_r_rmax) continue;
293 if (prd_to_track_map_cptr && isUsed(sp,*prd_to_track_map_cptr)) continue;
294 int ir = static_cast<int>(r*irstep);
295 InDet::SiSpacePointForSeed* sps = newSpacePoint(data, sp);
296 data.r_Sorted[ir].push_back(sps);
297 ++data.r_map[ir];
298 if (data.r_map[ir]==1) data.r_index[data.nr++] = ir;
299 ++data.ns;
300 }
301 }
302 }
303 }
305}

◆ newRegion() [2/2]

void InDet::SiSpacePointsSeedMaker_BeamGas::newRegion ( const EventContext & ctx,
EventData & data,
const std::vector< IdentifierHash > & vPixel,
const std::vector< IdentifierHash > & vSCT,
const IRoiDescriptor & iRD ) const
overridevirtual

Definition at line 312 of file SiSpacePointsSeedMaker_BeamGas.cxx.

315{
316 newRegion(ctx, data, vPixel, vSCT);
317}
virtual void newRegion(const EventContext &ctx, EventData &data, const std::vector< IdentifierHash > &vPixel, const std::vector< IdentifierHash > &vSCT) const override

◆ newSeed() [1/2]

void InDet::SiSpacePointsSeedMaker_BeamGas::newSeed ( EventData & data,
const Trk::SpacePoint *& p1,
const Trk::SpacePoint *& p2,
const float & z )
staticprivate

Definition at line 1144 of file SiSpacePointsSeedMaker_BeamGas.cxx.

1148{
1149 if (data.i_seede!=data.l_seeds.end()) {
1150 InDet::SiSpacePointsSeed* s = &(*data.i_seede++);
1151 s->erase ( );
1152 s->add (p1);
1153 s->add (p2);
1154 s->setZVertex(static_cast<double>(z));
1155 } else {
1156 data.l_seeds.emplace_back(p1, p2, z);
1157 data.i_seede = data.l_seeds.end();
1158 }
1159}

◆ newSeed() [2/2]

void InDet::SiSpacePointsSeedMaker_BeamGas::newSeed ( EventData & data,
const Trk::SpacePoint *& p1,
const Trk::SpacePoint *& p2,
const Trk::SpacePoint *& p3,
const float & z )
staticprivate

Definition at line 1165 of file SiSpacePointsSeedMaker_BeamGas.cxx.

1169{
1170 if (data.i_seede!=data.l_seeds.end()) {
1171 InDet::SiSpacePointsSeed* s = &(*data.i_seede++);
1172 s->erase ( );
1173 s->add (p1);
1174 s->add (p2);
1175 s->add (p3);
1176 s->setZVertex(static_cast<double>(z));
1177 } else {
1178 data.l_seeds.emplace_back(p1, p2, p3, z);
1179 data.i_seede = data.l_seeds.end();
1180 }
1181}

◆ newSpacePoint()

InDet::SiSpacePointForSeed * InDet::SiSpacePointsSeedMaker_BeamGas::newSpacePoint ( EventData & data,
const Trk::SpacePoint *const & sp )
staticprivate

Definition at line 1120 of file SiSpacePointsSeedMaker_BeamGas.cxx.

1122{
1123 InDet::SiSpacePointForSeed* sps = nullptr;
1124
1125 float r[3];
1127
1128 if (data.i_spforseed!=data.l_spforseed.end()) {
1129 sps = &(*data.i_spforseed++);
1130 sps->set(sp, r);
1131 } else {
1132 data.l_spforseed.emplace_back(sp, r);
1133 sps = &(data.l_spforseed.back());
1134 data.i_spforseed = data.l_spforseed.end();
1135 }
1136
1137 return sps;
1138}
void set(const Trk::SpacePoint *, std::span< float const, 3 >)
static void convertToBeamFrameWork(EventData &data, const Trk::SpacePoint *const &sp, float *r)

◆ next()

const InDet::SiSpacePointsSeed * InDet::SiSpacePointsSeedMaker_BeamGas::next ( const EventContext & ctx,
EventData & data ) const
overridevirtual

Definition at line 1099 of file SiSpacePointsSeedMaker_BeamGas.cxx.

1100{
1101 if (not data.initialized) initializeEventData(data);
1102
1103 if (data.i_seed==data.i_seede) {
1104 findNext(data);
1105 //cppcheck-suppress identicalInnerCondition
1106 if (data.i_seed==data.i_seede) return nullptr;
1107 }
1108 return &(*data.i_seed++);
1109}

◆ operator=()

SiSpacePointsSeedMaker_BeamGas & InDet::SiSpacePointsSeedMaker_BeamGas::operator= ( const SiSpacePointsSeedMaker_BeamGas & )
privatedelete

◆ production2Sp()

void InDet::SiSpacePointsSeedMaker_BeamGas::production2Sp ( EventData & data)
staticprivate

Definition at line 811 of file SiSpacePointsSeedMaker_BeamGas.cxx.

812{
813 data.endlist = true;
814}

◆ production3Sp() [1/2]

void InDet::SiSpacePointsSeedMaker_BeamGas::production3Sp ( EventData & data) const
private

Definition at line 820 of file SiSpacePointsSeedMaker_BeamGas.cxx.

821{
822 if (data.nsaz<3) return;
823
824 const int ZI[SizeZ]= {5,6,7,8,9,10,4,3,2,1,0};
825 std::vector<InDet::SiSpacePointForSeed*>::iterator rt[9],rte[9],rb[9],rbe[9];
826 int nseed = 0;
827
828 // Loop thorugh all azimuthal regions
829 //
830 for (int f=data.fNmin; f<=m_fNmax; ++f) {
831
832 // For each azimuthal region loop through all Z regions
833 //
834 int z = 0;
835 if (!data.endlist) z = data.zMin;
836
837 for (; z!=SizeZ; ++z) {
838
839 int a = f *SizeZ+ZI[z]; if (!data.rfz_map[a]) continue;
840 int NB = 0, NT = 0;
841 for (int i=0; i!=m_rfz_b[a]; ++i) {
842
843 int an = m_rfz_ib[a][i];
844 if (!data.rfz_map[an]) continue;
845 rb [NB] = data.rfz_Sorted[an].begin();
846 rbe[NB++] = data.rfz_Sorted[an].end();
847 }
848 for (int i=0; i!=m_rfz_t[a]; ++i) {
849
850 int an = m_rfz_it[a][i];
851 if (!data.rfz_map[an]) continue;
852 rt [NT] = data.rfz_Sorted[an].begin();
853 rte[NT++] = data.rfz_Sorted[an].end();
854 }
855 production3Sp(data, rb, rbe, rt, rte, NB, NT, nseed);
856 if (!data.endlist) {
857 data.fNmin = f;
858 data.zMin = z; return;
859 }
860 }
861 }
862 data.endlist = true;
863}

◆ production3Sp() [2/2]

void InDet::SiSpacePointsSeedMaker_BeamGas::production3Sp ( EventData & data,
std::vector< InDet::SiSpacePointForSeed * >::iterator * rb,
std::vector< InDet::SiSpacePointForSeed * >::iterator * rbe,
std::vector< InDet::SiSpacePointForSeed * >::iterator * rt,
std::vector< InDet::SiSpacePointForSeed * >::iterator * rte,
int NB,
int NT,
int & nseed ) const
private

Definition at line 869 of file SiSpacePointsSeedMaker_BeamGas.cxx.

876{
877 std::vector<InDet::SiSpacePointForSeed*>::iterator r0=rb[0],r;
878 if (!data.endlist) {
879 r0 = data.rMin;
880 data.endlist = true;
881 }
882
883 // Loop through all trigger space points
884 //
885 for (; r0!=rbe[0]; ++r0) {
886
887 data.nOneSeeds = 0;
888 data.mapOneSeeds.erase(data.mapOneSeeds.begin(), data.mapOneSeeds.end());
889
890 float R = (*r0)->radius();
891 if (R<m_r2min) continue;
892 if (R>m_r2max) break;
893
894 const Trk::SpacePoint* SP0 = (*r0)->spacepoint;
895
896 bool pix = true;
897 if (SP0->clusterList().second) pix = false;
898 const Trk::Surface* sur0 = (*r0)->sur();
899 float X = (*r0)->x();
900 float Y = (*r0)->y();
901 float Z = (*r0)->z();
902 int Nb = 0;
903
904 // Bottom links production
905 //
906 for (int i=0; i!=NB; ++i) {
907
908 for (r=rb[i]; r!=rbe[i]; ++r) {
909
910 float Rb =(*r)->radius();
911 if (Rb<m_r1min) {rb[i]=r; continue;}
912 if (Rb>m_r1max) break;
913
914 float dR = R-Rb;
915 if (dR<m_drmin) break;
916
917 if (dR > m_drmax || (*r)->sur()==sur0) continue;
918
919 if ( !pix && !(*r)->spacepoint->clusterList().second) continue;
920
921 float Tz = (Z-(*r)->z())/dR;
922
923 if (Tz < m_dzdrmin || Tz > m_dzdrmax) continue;
924
925 // Comparison with vertices Z coordinates
926 //
927 if (pix) {
928 float Zo = Z-R*Tz;
929 if (!isZCompatible(Zo)) continue;
930 }
931 data.SP[Nb] = (*r); if (++Nb==m_maxsizeSP) goto breakb;
932 }
933 }
934 breakb:
935 if (!Nb || Nb==m_maxsizeSP) continue;
936 int Nt = Nb;
937
938 // Top links production
939 //
940 for (int i=0; i!=NT; ++i) {
941
942 for (r=rt[i]; r!=rte[i]; ++r) {
943
944 float Rt =(*r)->radius();
945 float dR = Rt-R;
946 if (dR<m_drmin || Rt<m_r3min) {rt[i]=r; continue;}
947 if (Rt>m_r3max || dR>m_drmax) break;
948
949 if ( (*r)->sur()==sur0) continue;
950
951 float Tz = ((*r)->z()-Z)/dR;
952
953 if (Tz < m_dzdrmin || Tz > m_dzdrmax) continue;
954
955 // Comparison with vertices Z coordinates
956 //
957 if (pix) {
958 float Zo = Z-R*Tz; if (!isZCompatible(Zo)) continue;
959 }
960 data.SP[Nt] = (*r); if (++Nt==m_maxsizeSP) goto breakt;
961 }
962 }
963
964 breakt:
965 if (!(Nt-Nb)) continue;
966
967 float covr0 = (*r0)->covr();
968 float covz0 = (*r0)->covz();
969
970 float ax = X/R;
971 float ay = Y/R;
972
973 for (int i=0; i!=Nt; ++i) {
974
975 InDet::SiSpacePointForSeed* sp = data.SP[i];
976
977 float dx = sp->x()-X;
978 float dy = sp->y()-Y;
979 float dz = sp->z()-Z;
980 float x = dx*ax+dy*ay;
981 float y =-dx*ay+dy*ax;
982 float r2 = 1.f/(x*x+y*y);
983 float dr = std::sqrt(r2);
984 float tz = dz*dr; if (i < Nb) tz = -tz;
985
986 data.Tz[i] = tz;
987 data.Zo[i] = Z-R*tz;
988 data.R [i] = dr;
989 data.U [i] = x*r2;
990 data.V [i] = y*r2;
991 data.Er[i] = (covz0+sp->covz()+tz*tz*(covr0+sp->covr()))*r2;
992 }
993
994 float imc = m_diver;
995 float imcs = m_diverpps;
996 float ipt2 = m_ipt2;
997 float K = data.K;
998 float K2 = K*K;
999 float COF = m_COF;
1000 float ipt2K = ipt2/K2;
1001 float ipt2C = ipt2*COF;
1002 float COFK = COF*K2;
1003 covr0 *= 2.;
1004 covz0 *= 2.;
1005
1006 // Three space points comparison
1007 //
1008 for (int b=0; b!=Nb; ++b) {
1009
1010 const Trk::SpacePoint* SPb = data.SP[b]->spacepoint;
1011
1012 float Zob = data.Zo[b];
1013 float Tzb = data.Tz[b];
1014 float Rb2r = data.R [b]*covr0;
1015 float Rb2z = data.R [b]*covz0;
1016 float Erb = data.Er[b];
1017 float Vb = data.V [b];
1018 float Ub = data.U [b];
1019 float Tzb2 = (1.f+Tzb*Tzb);
1020 float CSA = Tzb2*COFK;
1021 float ICSA = Tzb2*ipt2C;
1022
1023 for (int t=Nb; t!=Nt; ++t) {
1024
1025 float Ts = .5f*(Tzb+data.Tz[t]);
1026 float dt = Tzb-data.Tz[t];
1027 float dT = dt*dt-Erb-data.Er[t]-data.R[t]*(Ts*Ts*Rb2r+Rb2z);
1028 if ( dT > ICSA) continue;
1029 float dU = data.U[t]-Ub; if (dU == 0. ) continue;
1030 float A = (data.V[t]-Vb)/dU;
1031 float S2 = 1.f+A*A;
1032 float B = Vb-A*Ub;
1033 float B2 = B*B;
1034 if (B2 > ipt2K*S2 || dT*S2 > B2*CSA) continue;
1035 float Im = std::abs((A-B*R)*R);
1036
1037 if (pix) {
1038 if ( Im > imc ) continue;
1039 if (data.SP[t]->spacepoint->clusterList().second && Im > imcs) continue;
1040 }
1041 newOneSeed(data, SPb, SP0, data.SP[t]->spacepoint, Zob, Im);
1042 }
1043 }
1044 nseed += data.mapOneSeeds.size();
1045 fillSeeds(data);
1046 if (nseed>=m_maxsize) {
1047 data.endlist=false;
1048 ++r0;
1049 data.rMin = r0;
1050 return;
1051 }
1052 }
1053}
struct TBPatternUnitContext S2
void newOneSeed(EventData &data, const Trk::SpacePoint *&, const Trk::SpacePoint *&, const Trk::SpacePoint *&, const float &, const float &) const
const std::pair< const PrepRawData *, const PrepRawData * > & clusterList() const
return the pair of cluster pointers by reference
double R(const INavigable4Momentum *p1, const double v_eta, const double v_phi)
const double r0
electron radius{cm}

◆ writeNtuple()

void InDet::SiSpacePointsSeedMaker_BeamGas::writeNtuple ( const SiSpacePointsSeed * seed,
const Trk::Track * track,
int seedType,
long EventNumber ) const
overridevirtual

Definition at line 1216 of file SiSpacePointsSeedMaker_BeamGas.cxx.

1216 {
1217}

Member Data Documentation

◆ m_beamSpotKey

SG::ReadCondHandleKey<InDet::BeamSpotData> InDet::SiSpacePointsSeedMaker_BeamGas::m_beamSpotKey {this, "BeamSpotKey", "BeamSpotData", "SG key for beam spot"}
private

Definition at line 142 of file SiSpacePointsSeedMaker_BeamGas.h.

142{this, "BeamSpotKey", "BeamSpotData", "SG key for beam spot"};

◆ m_COF

float InDet::SiSpacePointsSeedMaker_BeamGas::m_COF {0.}
private

Definition at line 193 of file SiSpacePointsSeedMaker_BeamGas.h.

193{0.};

◆ m_diver

FloatProperty InDet::SiSpacePointsSeedMaker_BeamGas::m_diver {this, "maxdImpact", 10.}
private

Definition at line 170 of file SiSpacePointsSeedMaker_BeamGas.h.

170{this, "maxdImpact", 10.};

◆ m_diverpps

FloatProperty InDet::SiSpacePointsSeedMaker_BeamGas::m_diverpps {this, "maxdImpactPPS", 1.7}
private

Definition at line 171 of file SiSpacePointsSeedMaker_BeamGas.h.

171{this, "maxdImpactPPS", 1.7};

◆ m_drmax

FloatProperty InDet::SiSpacePointsSeedMaker_BeamGas::m_drmax {this, "maxdRadius", 270.}
private

Definition at line 158 of file SiSpacePointsSeedMaker_BeamGas.h.

158{this, "maxdRadius", 270.};

◆ m_drmin

FloatProperty InDet::SiSpacePointsSeedMaker_BeamGas::m_drmin {this, "mindRadius", 10.}
private

Definition at line 169 of file SiSpacePointsSeedMaker_BeamGas.h.

169{this, "mindRadius", 10.};

◆ m_dzdrmax

float InDet::SiSpacePointsSeedMaker_BeamGas::m_dzdrmax {0.}
private

Definition at line 191 of file SiSpacePointsSeedMaker_BeamGas.h.

191{0.};

◆ m_dzdrmin

float InDet::SiSpacePointsSeedMaker_BeamGas::m_dzdrmin {0.}
private

Definition at line 192 of file SiSpacePointsSeedMaker_BeamGas.h.

192{0.};

◆ m_etamax

FloatProperty InDet::SiSpacePointsSeedMaker_BeamGas::m_etamax {this, "etaMax", 5.3}
private

Definition at line 177 of file SiSpacePointsSeedMaker_BeamGas.h.

177{this, "etaMax", 5.3};

◆ m_fieldCondObjInputKey

SG::ReadCondHandleKey<AtlasFieldCacheCondObj> InDet::SiSpacePointsSeedMaker_BeamGas::m_fieldCondObjInputKey
private
Initial value:
{this, "AtlasFieldCacheCondObj", "fieldCondObj",
"Name of the Magnetic Field conditions object key"}

Definition at line 147 of file SiSpacePointsSeedMaker_BeamGas.h.

147 {this, "AtlasFieldCacheCondObj", "fieldCondObj",
148 "Name of the Magnetic Field conditions object key"};

◆ m_fieldScale

FloatProperty InDet::SiSpacePointsSeedMaker_BeamGas::m_fieldScale {this, "fieldScale", 1.}
private

Definition at line 178 of file SiSpacePointsSeedMaker_BeamGas.h.

178{this, "fieldScale", 1.};

◆ m_fNmax

int InDet::SiSpacePointsSeedMaker_BeamGas::m_fNmax {0}
private

Definition at line 186 of file SiSpacePointsSeedMaker_BeamGas.h.

186{0};

◆ m_initialized

bool InDet::SiSpacePointsSeedMaker_BeamGas::m_initialized {false}
private

Definition at line 183 of file SiSpacePointsSeedMaker_BeamGas.h.

183{false};

◆ m_ipt

float InDet::SiSpacePointsSeedMaker_BeamGas::m_ipt {0.}
private

Definition at line 194 of file SiSpacePointsSeedMaker_BeamGas.h.

194{0.};

◆ m_ipt2

float InDet::SiSpacePointsSeedMaker_BeamGas::m_ipt2 {0.}
private

Definition at line 195 of file SiSpacePointsSeedMaker_BeamGas.h.

195{0.};

◆ m_maxOneSize

IntegerProperty InDet::SiSpacePointsSeedMaker_BeamGas::m_maxOneSize {this, "maxSeedsForSpacePoint", 5}
private

Definition at line 157 of file SiSpacePointsSeedMaker_BeamGas.h.

157{this, "maxSeedsForSpacePoint", 5};

◆ m_maxsize

IntegerProperty InDet::SiSpacePointsSeedMaker_BeamGas::m_maxsize {this, "maxSize", 20000}
private

Definition at line 155 of file SiSpacePointsSeedMaker_BeamGas.h.

155{this, "maxSize", 20000};

◆ m_maxsizeSP

IntegerProperty InDet::SiSpacePointsSeedMaker_BeamGas::m_maxsizeSP {this, "maxSizeSP", 1500}
private

Definition at line 156 of file SiSpacePointsSeedMaker_BeamGas.h.

156{this, "maxSizeSP", 1500};

◆ m_outputlevel

int InDet::SiSpacePointsSeedMaker_BeamGas::m_outputlevel {0}
private

Definition at line 184 of file SiSpacePointsSeedMaker_BeamGas.h.

184{0};

◆ m_pixel

BooleanProperty InDet::SiSpacePointsSeedMaker_BeamGas::m_pixel {this, "usePixel", true}
private

Definition at line 152 of file SiSpacePointsSeedMaker_BeamGas.h.

152{this, "usePixel", true};

◆ m_prdToTrackMap

SG::ReadHandleKey<Trk::PRDtoTrackMap> InDet::SiSpacePointsSeedMaker_BeamGas::m_prdToTrackMap {this,"PRDtoTrackMap","","option PRD-to-track association"}
private

Definition at line 141 of file SiSpacePointsSeedMaker_BeamGas.h.

141{this,"PRDtoTrackMap","","option PRD-to-track association"};

◆ m_ptmin

FloatProperty InDet::SiSpacePointsSeedMaker_BeamGas::m_ptmin {this, "pTmin", 1000.}
private

Definition at line 176 of file SiSpacePointsSeedMaker_BeamGas.h.

176{this, "pTmin", 1000.};

◆ m_r1max

FloatProperty InDet::SiSpacePointsSeedMaker_BeamGas::m_r1max {this, "maxRadius1", 450.}
private

Definition at line 164 of file SiSpacePointsSeedMaker_BeamGas.h.

164{this, "maxRadius1", 450.};

◆ m_r1min

FloatProperty InDet::SiSpacePointsSeedMaker_BeamGas::m_r1min {this, "minRadius1", 0.}
private

Definition at line 163 of file SiSpacePointsSeedMaker_BeamGas.h.

163{this, "minRadius1", 0.};

◆ m_r2max

FloatProperty InDet::SiSpacePointsSeedMaker_BeamGas::m_r2max {this, "maxRadius2", 600.}
private

Definition at line 166 of file SiSpacePointsSeedMaker_BeamGas.h.

166{this, "maxRadius2", 600.};

◆ m_r2min

FloatProperty InDet::SiSpacePointsSeedMaker_BeamGas::m_r2min {this, "minRadius2", 0.}
private

Definition at line 165 of file SiSpacePointsSeedMaker_BeamGas.h.

165{this, "minRadius2", 0.};

◆ m_r3max

FloatProperty InDet::SiSpacePointsSeedMaker_BeamGas::m_r3max {this, "maxRadius3", 600.}
private

Definition at line 168 of file SiSpacePointsSeedMaker_BeamGas.h.

168{this, "maxRadius3", 600.};

◆ m_r3min

FloatProperty InDet::SiSpacePointsSeedMaker_BeamGas::m_r3min {this, "minRadius3", 0.}
private

Definition at line 167 of file SiSpacePointsSeedMaker_BeamGas.h.

167{this, "minRadius3", 0.};

◆ m_r_rmax

FloatProperty InDet::SiSpacePointsSeedMaker_BeamGas::m_r_rmax {this, "radMax", 600.}
private

Definition at line 161 of file SiSpacePointsSeedMaker_BeamGas.h.

161{this, "radMax", 600.};

◆ m_r_rstep

FloatProperty InDet::SiSpacePointsSeedMaker_BeamGas::m_r_rstep {this, "radStep", 2.}
private

Definition at line 162 of file SiSpacePointsSeedMaker_BeamGas.h.

162{this, "radStep", 2.};

◆ m_r_size

int InDet::SiSpacePointsSeedMaker_BeamGas::m_r_size {0}
private

Definition at line 185 of file SiSpacePointsSeedMaker_BeamGas.h.

185{0};

◆ m_rfz_b

int InDet::SiSpacePointsSeedMaker_BeamGas::m_rfz_b[SizeRFZ] {}
private

Definition at line 187 of file SiSpacePointsSeedMaker_BeamGas.h.

187{};

◆ m_rfz_ib

int InDet::SiSpacePointsSeedMaker_BeamGas::m_rfz_ib[SizeRFZ][SizeI] {}
private

Definition at line 189 of file SiSpacePointsSeedMaker_BeamGas.h.

189{};

◆ m_rfz_it

int InDet::SiSpacePointsSeedMaker_BeamGas::m_rfz_it[SizeRFZ][SizeI] {}
private

Definition at line 190 of file SiSpacePointsSeedMaker_BeamGas.h.

190{};

◆ m_rfz_t

int InDet::SiSpacePointsSeedMaker_BeamGas::m_rfz_t[SizeRFZ] {}
private

Definition at line 188 of file SiSpacePointsSeedMaker_BeamGas.h.

188{};

◆ m_sct

BooleanProperty InDet::SiSpacePointsSeedMaker_BeamGas::m_sct {this, "useSCT""useSCT", true}
private

Definition at line 153 of file SiSpacePointsSeedMaker_BeamGas.h.

153{this, "useSCT""useSCT", true};

◆ m_sF

float InDet::SiSpacePointsSeedMaker_BeamGas::m_sF {0.}
private

Definition at line 196 of file SiSpacePointsSeedMaker_BeamGas.h.

196{0.};

◆ m_spacepointsOverlap

SG::ReadHandleKey<SpacePointOverlapCollection> InDet::SiSpacePointsSeedMaker_BeamGas::m_spacepointsOverlap {this, "SpacePointsOverlapName", "OverlapSpacePoints"}
private

Definition at line 140 of file SiSpacePointsSeedMaker_BeamGas.h.

140{this, "SpacePointsOverlapName", "OverlapSpacePoints"};

◆ m_spacepointsPixel

SG::ReadHandleKey<SpacePointContainer> InDet::SiSpacePointsSeedMaker_BeamGas::m_spacepointsPixel {this, "SpacePointsPixelName", "PixelSpacePoints", "Pixel space points container"}
private

Definition at line 139 of file SiSpacePointsSeedMaker_BeamGas.h.

139{this, "SpacePointsPixelName", "PixelSpacePoints", "Pixel space points container"};

◆ m_spacepointsSCT

SG::ReadHandleKey<SpacePointContainer> InDet::SiSpacePointsSeedMaker_BeamGas::m_spacepointsSCT {this, "SpacePointsSCTName", "SCT_SpacePoints", "SCT space points container"}
private

Definition at line 138 of file SiSpacePointsSeedMaker_BeamGas.h.

138{this, "SpacePointsSCTName", "SCT_SpacePoints", "SCT space points container"};

◆ m_useOverlap

BooleanProperty InDet::SiSpacePointsSeedMaker_BeamGas::m_useOverlap {this, "useOverlapSpCollection", true}
private

Definition at line 154 of file SiSpacePointsSeedMaker_BeamGas.h.

154{this, "useOverlapSpCollection", true};

◆ m_zmax

FloatProperty InDet::SiSpacePointsSeedMaker_BeamGas::m_zmax {this, "maxZ", +5000.}
private

Definition at line 160 of file SiSpacePointsSeedMaker_BeamGas.h.

160{this, "maxZ", +5000.};

◆ m_zmin

FloatProperty InDet::SiSpacePointsSeedMaker_BeamGas::m_zmin {this, "minZ", -5000.}
private

Definition at line 159 of file SiSpacePointsSeedMaker_BeamGas.h.

159{this, "minZ", -5000.};

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