Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
FourMuonTool.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 // ****************************************************************************
6 // ----------------------------------------------------------------------------
7 // FourMuonTool header file
8 //
9 // James Catmore <James.Catmore@cern.ch>
10 
11 // ----------------------------------------------------------------------------
12 // ****************************************************************************
13 #ifndef BPHY4TOOL_H
14 #define BPHY4TOOL_H
16 #include "GaudiKernel/ToolHandle.h"
19 #include "xAODMuon/Muon.h"
20 #include "xAODMuon/MuonContainer.h"
21 
22 #include <vector>
23 #include <string>
25 
26 namespace Trk {
27  class IVertexFitter;
28  class TrkV0VertexFitter;
29  class ITrackSelectorTool;
30 }
31 
32 namespace DerivationFramework {
33 
34  // Struct and enum to associate muon pairs with track pairs
35  // and make the program flow more straightforward
36  struct Combination
37  {
38  std::vector<const xAOD::Muon*> muons;
39  std::vector<unsigned int> quadIndices;
40  std::pair<unsigned int, unsigned int> pairIndices;
41 
42  std::string combinationCharges() {
43  std::string chargeStr = "";
44  if (muons.at(0)->charge() > 0) {chargeStr += "+";}
45  else {chargeStr += "-";}
46  if (muons.at(1)->charge() > 0) {chargeStr += "+";}
47  else {chargeStr += "-";}
48  if (muons.size()==4) {
49  if (muons.at(2)->charge() > 0) {chargeStr += "+";}
50  else {chargeStr += "-";}
51  if (muons.at(3)->charge() > 0) {chargeStr += "+";}
52  else {chargeStr += "-";}
53  }
54  return chargeStr;
55  }
56 
57  std::string combinationIndices() {
58  std::string indexStr = "";
59  std::stringstream ss;
60  if (muons.size()==2) {
61  ss.str(""); ss.clear();
62  ss << pairIndices.first;
63  indexStr+=ss.str();
64  ss.str(""); ss.clear();
65  ss << pairIndices.second;
66  indexStr+=ss.str();
67  }
68  if (muons.size()==4) {
69  for (unsigned int i=0; i<4; ++i) {
70  ss.str(""); ss.clear();
71  ss << quadIndices[i];
72  indexStr+=ss.str();
73  }
74  }
75  return indexStr;
76  }
77 
79  auto& link = mu->inDetTrackParticleLink();
80  return link.isValid() ? *link : nullptr;
81  }
82 
83  std::vector<const xAOD::TrackParticle*> trackParticles(const std::string& specify) {
84  std::vector<const xAOD::TrackParticle*> theTracks;
85  bool oppCh(false);
86  if (muons.at(0)->charge()*muons.at(1)->charge() < 0) oppCh=true;
87  if (specify=="pair1") {
88  theTracks.push_back(GetMuonTrack(muons.at(0)));
89  theTracks.push_back(GetMuonTrack(muons.at(1)));
90  }
91  if (specify=="pair2") {
92  theTracks.push_back(GetMuonTrack(muons.at(2)));
93  theTracks.push_back(GetMuonTrack(muons.at(3)));
94  }
95  if (specify=="DC") {
96  if (oppCh) {
97  theTracks.push_back(GetMuonTrack(muons.at(0)));
98  theTracks.push_back(GetMuonTrack(muons.at(1)));
99  theTracks.push_back(GetMuonTrack(muons.at(2)));
100  theTracks.push_back(GetMuonTrack(muons.at(3)));
101  } else {
102  theTracks.push_back(GetMuonTrack(muons.at(0)));
103  theTracks.push_back(GetMuonTrack(muons.at(2)));
104  theTracks.push_back(GetMuonTrack(muons.at(1)));
105  theTracks.push_back(GetMuonTrack(muons.at(3)));
106  }
107  }
108  if (specify=="AC") {
109  theTracks.push_back(GetMuonTrack(muons.at(0)));
110  theTracks.push_back(GetMuonTrack(muons.at(3)));
111  theTracks.push_back(GetMuonTrack(muons.at(1)));
112  theTracks.push_back(GetMuonTrack(muons.at(2)));
113  }
114  if (specify=="SS") {
115  if (oppCh) {
116  theTracks.push_back(GetMuonTrack(muons.at(0)));
117  theTracks.push_back(GetMuonTrack(muons.at(2)));
118  theTracks.push_back(GetMuonTrack(muons.at(1)));
119  theTracks.push_back(GetMuonTrack(muons.at(3)));
120  } else {
121  theTracks.push_back(GetMuonTrack(muons.at(0)));
122  theTracks.push_back(GetMuonTrack(muons.at(1)));
123  theTracks.push_back(GetMuonTrack(muons.at(2)));
124  theTracks.push_back(GetMuonTrack(muons.at(3)));
125  }
126  }
127  return theTracks;
128  }
129 
130  };
131 
132  class FourMuonTool: public AthAlgTool
133  {
134  public:
135  FourMuonTool(const std::string& t, const std::string& n, const IInterface* p);
136  ~FourMuonTool();
138 
139  //-------------------------------------------------------------------------------------
140  //Doing Calculation and inline functions
141  StatusCode performSearch(xAOD::VertexContainer*& pairVxContainer, xAOD::VertexAuxContainer*& pairVxAuxContainer,
142  xAOD::VertexContainer*& quadVxContainer, xAOD::VertexAuxContainer*& quadVxAuxContainer, bool &acceptEvent) const;
143  xAOD::Vertex* fit(const std::vector<const xAOD::TrackParticle*>& ,const xAOD::TrackParticleContainer* importedTrackCollection, const Amg::Vector3D &beamSpot) const;
144  static std::vector<std::vector<unsigned int> > getQuadIndices(unsigned int length);
145  static std::vector<std::pair<unsigned int, unsigned int> > getPairIndices(unsigned int length);
146  static std::vector<std::vector<unsigned int> > mFromN(unsigned int m, unsigned int n);
147  static void combinatorics(unsigned int offset,
148  unsigned int k,
149  std::vector<unsigned int> &combination,
150  std::vector<unsigned int> &mainList,
151  std::vector<std::vector<unsigned int> > &allCombinations);
152  static void buildCombinations(const std::vector<const xAOD::Muon*> &muonsIn,
153  std::vector<Combination> &pairs,
154  std::vector<Combination> &quadruplets,
155  unsigned int nSelectedMuons);
156  static bool passesQuadSelection(const std::vector<const xAOD::Muon*> &muonsIn);
157  //-------------------------------------------------------------------------------------
158 
159  private:
160  double m_ptCut;
161  double m_etaCut;
165  ToolHandle < Trk::IVertexFitter > m_iVertexFitter;
166  ToolHandle < Trk::IVertexFitter > m_iV0VertexFitter;
167  ToolHandle < Trk::ITrackSelectorTool > m_trkSelector;
168  SG::ReadHandleKey<xAOD::EventInfo> m_eventInfo_key{this, "EventInfo", "EventInfo", "Input event information"};
169  SG::WriteDecorHandleKey<xAOD::MuonContainer> m_muonIndex{this, "muonIndexDec", "Muons.BPHY4MuonIndex"};
170 
171  };
172 } // end of namespace
173 #endif
SG::WriteDecorHandleKey
Property holding a SG store/key/clid/attr name from which a WriteDecorHandle is made.
Definition: StoreGate/StoreGate/WriteDecorHandleKey.h:89
xAOD::VertexAuxContainer_v1
Temporary container used until we have I/O for AuxStoreInternal.
Definition: VertexAuxContainer_v1.h:32
python.SystemOfUnits.m
int m
Definition: SystemOfUnits.py:91
PowhegControl_ttHplus_NLO.ss
ss
Definition: PowhegControl_ttHplus_NLO.py:83
DerivationFramework::FourMuonTool::m_ptCut
double m_ptCut
Definition: FourMuonTool.h:160
DerivationFramework::FourMuonTool::FourMuonTool
FourMuonTool(const std::string &t, const std::string &n, const IInterface *p)
Definition: FourMuonTool.cxx:65
DerivationFramework::FourMuonTool::m_muonCollectionKey
SG::ReadHandleKey< xAOD::MuonContainer > m_muonCollectionKey
Definition: FourMuonTool.h:163
Muon.h
DerivationFramework::FourMuonTool::m_useV0Fitter
bool m_useV0Fitter
Definition: FourMuonTool.h:162
DerivationFramework::FourMuonTool::m_iV0VertexFitter
ToolHandle< Trk::IVertexFitter > m_iV0VertexFitter
Definition: FourMuonTool.h:166
DerivationFramework::FourMuonTool::combinatorics
static void combinatorics(unsigned int offset, unsigned int k, std::vector< unsigned int > &combination, std::vector< unsigned int > &mainList, std::vector< std::vector< unsigned int > > &allCombinations)
Definition: FourMuonTool.cxx:314
DerivationFramework::FourMuonTool::passesQuadSelection
static bool passesQuadSelection(const std::vector< const xAOD::Muon * > &muonsIn)
Definition: FourMuonTool.cxx:398
DerivationFramework::FourMuonTool::mFromN
static std::vector< std::vector< unsigned int > > mFromN(unsigned int m, unsigned int n)
Definition: FourMuonTool.cxx:304
DerivationFramework::Combination::combinationIndices
std::string combinationIndices()
Definition: FourMuonTool.h:57
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
SG::ReadHandleKey< xAOD::MuonContainer >
DerivationFramework::FourMuonTool::fit
xAOD::Vertex * fit(const std::vector< const xAOD::TrackParticle * > &, const xAOD::TrackParticleContainer *importedTrackCollection, const Amg::Vector3D &beamSpot) const
Definition: FourMuonTool.cxx:258
xAOD::Muon_v1
Class describing a Muon.
Definition: Muon_v1.h:38
python.CreateTierZeroArgdict.pairs
pairs
Definition: CreateTierZeroArgdict.py:201
DerivationFramework::FourMuonTool::m_iVertexFitter
ToolHandle< Trk::IVertexFitter > m_iVertexFitter
Definition: FourMuonTool.h:165
DerivationFramework::FourMuonTool::m_muonIndex
SG::WriteDecorHandleKey< xAOD::MuonContainer > m_muonIndex
Definition: FourMuonTool.h:169
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:210
lumiFormat.i
int i
Definition: lumiFormat.py:85
beamspotman.n
n
Definition: beamspotman.py:731
DerivationFramework::FourMuonTool::performSearch
StatusCode performSearch(xAOD::VertexContainer *&pairVxContainer, xAOD::VertexAuxContainer *&pairVxAuxContainer, xAOD::VertexContainer *&quadVxContainer, xAOD::VertexAuxContainer *&quadVxAuxContainer, bool &acceptEvent) const
Definition: FourMuonTool.cxx:90
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
DerivationFramework::Combination::quadIndices
std::vector< unsigned int > quadIndices
Definition: FourMuonTool.h:39
AthAlgTool.h
DerivationFramework::FourMuonTool::m_eventInfo_key
SG::ReadHandleKey< xAOD::EventInfo > m_eventInfo_key
Definition: FourMuonTool.h:168
DerivationFramework
THE reconstruction tool.
Definition: ParticleSortingAlg.h:24
DerivationFramework::FourMuonTool::~FourMuonTool
~FourMuonTool()
Definition: FourMuonTool.cxx:85
DataVector
Derived DataVector<T>.
Definition: DataVector.h:794
DerivationFramework::FourMuonTool::m_trkSelector
ToolHandle< Trk::ITrackSelectorTool > m_trkSelector
Definition: FourMuonTool.h:167
DerivationFramework::FourMuonTool::m_etaCut
double m_etaCut
Definition: FourMuonTool.h:161
Trk
Ensure that the ATLAS eigen extensions are properly loaded.
Definition: FakeTrackBuilder.h:9
DerivationFramework::Combination::pairIndices
std::pair< unsigned int, unsigned int > pairIndices
Definition: FourMuonTool.h:40
DerivationFramework::FourMuonTool::buildCombinations
static void buildCombinations(const std::vector< const xAOD::Muon * > &muonsIn, std::vector< Combination > &pairs, std::vector< Combination > &quadruplets, unsigned int nSelectedMuons)
Definition: FourMuonTool.cxx:356
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
EventInfo.h
MuonContainer.h
DerivationFramework::FourMuonTool::m_TrkParticleCollection
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_TrkParticleCollection
Definition: FourMuonTool.h:164
DerivationFramework::Combination::muons
std::vector< const xAOD::Muon * > muons
Definition: FourMuonTool.h:38
xAOD::Vertex_v1
Class describing a Vertex.
Definition: Vertex_v1.h:42
DerivationFramework::Combination::GetMuonTrack
const xAOD::TrackParticle * GetMuonTrack(const xAOD::Muon *mu) const
Definition: FourMuonTool.h:78
convertTimingResiduals.offset
offset
Definition: convertTimingResiduals.py:71
DerivationFramework::FourMuonTool::getQuadIndices
static std::vector< std::vector< unsigned int > > getQuadIndices(unsigned int length)
Definition: FourMuonTool.cxx:292
InDetConversionFinderTools.h
python.BuildSignatureFlags.beamSpot
AthConfigFlags beamSpot(AthConfigFlags flags, str instanceName, str recoMode)
Definition: BuildSignatureFlags.py:455
DerivationFramework::Combination
Definition: FourMuonTool.h:37
DerivationFramework::FourMuonTool::initialize
StatusCode initialize()
Definition: FourMuonTool.cxx:32
xAOD::TrackParticle_v1
Class describing a TrackParticle.
Definition: TrackParticle_v1.h:43
DerivationFramework::Combination::combinationCharges
std::string combinationCharges()
Definition: FourMuonTool.h:42
AthAlgTool
Definition: AthAlgTool.h:26
CaloNoise_fillDB.mu
mu
Definition: CaloNoise_fillDB.py:53
DerivationFramework::FourMuonTool::getPairIndices
static std::vector< std::pair< unsigned int, unsigned int > > getPairIndices(unsigned int length)
Definition: FourMuonTool.cxx:336
DerivationFramework::Combination::trackParticles
std::vector< const xAOD::TrackParticle * > trackParticles(const std::string &specify)
Definition: FourMuonTool.h:83
length
double length(const pvec &v)
Definition: FPGATrackSimLLPDoubletHoughTransformTool.cxx:26
fitman.k
k
Definition: fitman.py:528
DerivationFramework::FourMuonTool
Definition: FourMuonTool.h:133