ATLAS Offline Software
Loading...
Searching...
No Matches
TGCTrackSelector.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3*/
4
9
10
11namespace LVL1TGCTrigger {
12
13
17 m_sectorLogic(sL) {
18 for(int i_track=0; i_track!=MaxNumber_of_TrackCandidate_in; i_track++){
19 m_trackPriorityRank[i_track] = 0;
20 }
21}
22
26
27
31
32 for(int i_track=0;i_track!=MaxNumber_of_TrackCandidate_in;i_track++){
33 m_trackPriorityRank[i_track]=0;
34 }
35}
36
37
39 if(rPhiOut!=0){
40 if(rPhiOut->getpT()!=0){
43 }
44 }
45}
46
47
48bool TGCTrackSelector::select(std::shared_ptr<TGCTrackSelectorOut> TrackcandidateOut){
49
50 if(m_numberOfCandidate_In==0){return false;}
51
52
56 for(int track1=0;track1!=m_numberOfCandidate_In-1 && m_numberOfCandidate_In!=0;track1++){
57 for(int track2=track1+1;track2!=m_numberOfCandidate_In;track2++){
58 bool compare_result=compare(m_coincidenceIn[track1].get(),m_coincidenceIn[track2].get()); //1>2 true:1 1<2 false:0
59
60 //TrackPriorityRank : Smaller value is high priority.
61 m_trackPriorityRank[track1]+=(int)!compare_result;
62 m_trackPriorityRank[track2]+=(int)compare_result;
63 }
64 }
65
69 for(int track=0;track!=m_numberOfCandidate_In;track++){
70 if(m_trackPriorityRank[track]<=3){
71
72 int R= 2*m_coincidenceIn[track]->getIdSSC()+m_coincidenceIn[track]->getR() - (m_sectorLogic->getRegion()==TGCRegionType::ENDCAP ? 1 : 0);
73 TrackcandidateOut->setR(m_numberOfCandidate_Out,R);
74 TrackcandidateOut->setPhi(m_numberOfCandidate_Out,m_coincidenceIn[track]->getPhi());
75 TrackcandidateOut->setPtLevel(m_numberOfCandidate_Out,m_coincidenceIn[track]->getpT());
76 TrackcandidateOut->setDR(m_numberOfCandidate_Out,2*m_coincidenceIn[track]->getDR());
77 TrackcandidateOut->setDPhi(m_numberOfCandidate_Out,m_coincidenceIn[track]->getDPhi());
78 TrackcandidateOut->setInnerVeto(m_numberOfCandidate_Out,m_coincidenceIn[track]->getInnerVeto());
79 TrackcandidateOut->setCharge(m_numberOfCandidate_Out,m_coincidenceIn[track]->getCharge());
80 TrackcandidateOut->setCoincidenceType(m_numberOfCandidate_Out,m_coincidenceIn[track]->getCoincidenceType());
81 TrackcandidateOut->setGoodMFFlag(m_numberOfCandidate_Out,m_coincidenceIn[track]->getGoodMFFlag());
82 TrackcandidateOut->setInnerCoincidenceFlag(m_numberOfCandidate_Out,m_coincidenceIn[track]->getInnerCoincidenceFlag());
84 }
85 }
86
87 reset();
88
89 return true;
90}
91
93 // The definition of priority is not fixed. This function wiil be updated.
94 if(track1->getpT() > track2->getpT()){return true;}
95 if(track1->getpT() < track2->getpT()){return false;}
96 else{
97 // when the pt level of 2 tracks are same, track with large R is selected.
98 if(track1->getIdSSC()<track2->getIdSSC()){return true;}
99 if(track1->getIdSSC()>track2->getIdSSC()){return false;}
100 }
101 return true;
102}
103
104
105} // end of namespace
void input(TGCRPhiCoincidenceOut *rPhiOut)
bool compare(TGCRPhiCoincidenceOut *track1, TGCRPhiCoincidenceOut *track2)
TGCTrackSelector(const TGCSectorLogic *sL=0)
bool select(std::shared_ptr< TGCTrackSelectorOut > TrackcandidateOut)
const TGCSectorLogic * m_sectorLogic
int m_trackPriorityRank[MaxNumber_of_TrackCandidate_in]
std::unique_ptr< TGCRPhiCoincidenceOut > m_coincidenceIn[MaxNumber_of_TrackCandidate_in]
T * get(TKey *tobj)
get a TObject* from a TKey* (why can't a TObject be a TKey?)
Definition hcg.cxx:130