28 m_trigDec.setTypeAndName(
"Trig::TrigDecisionTool/TrigDecisionTool");
29 m_matchingTool.setTypeAndName(
"Trig::R3MatchingTool/R3MatchingTool");
35 m_tree.addBranch(std::make_unique<MuonVal::EventInfoBranch>(
m_tree, 0));
48 m_portal = std::make_shared<MuonVal::IParticleFourMomBranch>(
m_tree,
"portal");
53 m_llp = std::make_shared<MuonVal::IParticleFourMomBranch>(
m_tree,
"llp");
62 m_muon = std::make_shared<MuonVal::IParticleFourMomBranch>(
m_tree,
"muon");
66 m_jet = std::make_shared<MuonVal::IParticleFourMomBranch>(
m_tree,
"jet");
77 auto h_LLP1LLP2dR = std::make_unique<TH1F>(
"h_LLP1LLP2dR",
"h_LLP1LLP2dR; #Delta R(LLP1, LLP2); Count / bin",50,0,4);
79 ATH_CHECK(
histSvc()->regHist(
"/MSVtxValidation/h_LLP1LLP2dR", std::move(h_LLP1LLP2dR)));
81 auto h_diLLPMass = std::make_unique<TH1F>(
"h_diLLPMass",
"h_diLLPMass; m_{LL1, LLP2} [GeV]; Count / bin",50,0,1000);
83 ATH_CHECK(
histSvc()->regHist(
"/MSVtxValidation/h_diLLPMass", std::move(h_diLLPMass)));
86 auto h_leadLLPLxy = std::make_unique<TH1F>(
"h_leadLLPLxy",
"h_leadLLPLxy; lead LLP L_{xy} [mm]; Count / bin",50,0,10000);
88 ATH_CHECK(
histSvc()->regHist(
"/MSVtxValidation/h_leadLLPLxy", std::move(h_leadLLPLxy)));
90 auto h_leadLLPLz = std::make_unique<TH1F>(
"h_leadLLPLz",
"h_leadLLPLz; lead LLP L_{z} [mm]; Count / bin",50,0,14000);
92 ATH_CHECK(
histSvc()->regHist(
"/MSVtxValidation/h_leadLLPLz", std::move(h_leadLLPLz)));
94 auto h_leadLLPctau = std::make_unique<TH1F>(
"h_leadLLPctau",
"h_leadLLPctau; lead LLP c#tau [mm]; Count / bin",50,0,2000);
96 ATH_CHECK(
histSvc()->regHist(
"/MSVtxValidation/h_leadLLPctau", std::move(h_leadLLPctau)));
98 auto h_leadLLPpt = std::make_unique<TH1F>(
"h_leadLLPpt",
"h_leadLLPpt; lead LLP p_{T} [GeV]; Count / bin",50,0,400);
100 ATH_CHECK(
histSvc()->regHist(
"/MSVtxValidation/h_leadLLPpt", std::move(h_leadLLPpt)));
103 auto h_subleadLLPLxy = std::make_unique<TH1F>(
"h_subleadLLPLxy",
"h_subleadLLPLxy; sublead LLP L_{xy} [mm]; Count / bin",50,0,10000);
105 ATH_CHECK(
histSvc()->regHist(
"/MSVtxValidation/h_subleadLLPLxy", std::move(h_subleadLLPLxy)));
107 auto h_subleadLLPLz = std::make_unique<TH1F>(
"h_subleadLLPLz",
"h_subleadLLPLz; sublead LLP L_{z} [mm]; Count / bin",50,0,10000);
109 ATH_CHECK(
histSvc()->regHist(
"/MSVtxValidation/h_subleadLLPLz", std::move(h_subleadLLPLz)));
111 auto h_subleadLLPctau = std::make_unique<TH1F>(
"h_subleadLLPctau",
"h_subleadLLPctau; sublead LLP c#tau [mm]; Count / bin",50,0,2000);
113 ATH_CHECK(
histSvc()->regHist(
"/MSVtxValidation/h_subleadLLPctau", std::move(h_subleadLLPctau)));
115 auto h_subleadLLPpt = std::make_unique<TH1F>(
"h_subleadLLPpt",
"h_subleadLLPpt; sublead LLP p_{T} [GeV]; Count / bin",50,0,400);
117 ATH_CHECK(
histSvc()->regHist(
"/MSVtxValidation/h_subleadLLPpt", std::move(h_subleadLLPpt)));
119 return StatusCode::SUCCESS;
127 return StatusCode::SUCCESS;
137 std::vector<const xAOD::TruthParticle*> portals{}, llps{};
150 bool selfdecay =
false;
151 for (
size_t p = 0; p < tp->production_vertex()->nIncomingParticles(); ++p)
if (tp->parent(p)->pdgId() == tp->pdgId()) { selfdecay =
true;
break;}
152 if (!selfdecay) portals.push_back(tp);
156 if(std::abs(tp->pdgId()) ==
m_pdgId_llp) llps.push_back(tp);
166 return StatusCode::SUCCESS;
180 m_llp->push_back(llp);
182 if(llp->hasDecayVtx()){
192 if(llp->hasDecayVtx()){
203 if(llp->hasDecayVtx()){
213 TLorentzVector llpSum = subleadLLP->
p4()+leadLLP->
p4();
219 if (llp->hasDecayVtx() && llp->nChildren()>0 && !llp->isGenStable()) {
222 int nChargedChildren = 0;
224 if (child->charge() != 0) ++nChargedChildren;
242 return StatusCode::SUCCESS;
257 int interactionType = -1;
259 else if (
m_emProcessEnum.count(vtx->status() - 1000)) interactionType = 1;
265 int nChildrenCharged = 0;
267 std::vector<const xAOD::TruthParticle*> stableChildren =
getStableChildren(child,
false);
268 nChildren += stableChildren.size();
270 if (stableChild->charge() != 0) ++nChildrenCharged;
287 return StatusCode::SUCCESS;
311 return StatusCode::SUCCESS;
318 std::vector<std::string> triggerNames = chain->getListOfTriggers();
320 std::vector<bool> triggerPassed;
321 for (
const std::string& triggerName : triggerNames) {
322 if (
m_trigDec->isPassed(triggerName)) triggerPassed.push_back(
true);
323 else triggerPassed.push_back(
false);
326 return {triggerString, triggerNames, triggerPassed};
333 bool firedTrigger =
false;
334 for (
size_t i = 0; i < triggerInfo.
passed.size(); ++i) {
335 if (!triggerInfo.
passed[i])
continue;
352 if (!actVertices.size()){
354 return StatusCode::SUCCESS;
358 if (!actVtx.vtx)
continue;
367 m_actVtx_pT.push_back(actVtx.vtxPt/Gaudi::Units::GeV);
378 for (
auto tpLink : actVtx.vtx->outgoingParticleLinks()) {
379 if (!tpLink)
continue;
386 return StatusCode::SUCCESS;
394 m_met = (*MET)[
"Final"]->met()/Gaudi::Units::GeV;
395 m_met_x = (*MET)[
"Final"]->mpx()/Gaudi::Units::GeV;
396 m_met_y = (*MET)[
"Final"]->mpy()/Gaudi::Units::GeV;
398 m_sumEt = (*MET)[
"Final"]->sumet()/Gaudi::Units::GeV;
400 return StatusCode::SUCCESS;
410 return StatusCode::SUCCESS;
430 const Trk::Perigee &tkl_perigee = mstrklet->perigeeParameters();
439 return StatusCode::SUCCESS;
483 size_t nTrk = msVtx->nTrackParticles();
486 for(
size_t j=0; j<nTrk; ++j){
488 if (!consti)
continue;
496 return StatusCode::SUCCESS;
516 return StatusCode::SUCCESS;
523 const EventContext& ctx = Gaudi::Hive::currentContext();
540 return StatusCode::SUCCESS;
548 return StatusCode::SUCCESS;
#define ATH_CHECK
Evaluate an expression and check for errors.
const ServiceHandle< ITHistSvc > & histSvc() const
The standard THistSvc (for writing histograms and TTrees and more to a root file) Returns (kind of) a...
size_type size() const noexcept
Returns the number of elements in the collection.
MuonVal::VectorBranch< int > & m_msVtx_nTGC_M
Gaudi::Property< bool > m_fillMET
MuonVal::VectorBranch< int > & m_trklet_vtxLink
MuonVal::VectorBranch< float > & m_trklet_qOverP
Gaudi::Property< bool > m_dumpTruthVertices
MuonVal::VectorBranch< float > & m_trklet_theta
Gaudi::Property< bool > m_fillJets
MuonVal::ScalarBranch< float > & m_met
MuonVal::MatrixBranch< int > & m_llpVtx_truthParticle_link
MuonVal::ThreeVectorBranch m_llpVtx_pos
MuonVal::MatrixBranch< int > & m_jet_actVtx_link
MuonVal::VectorBranch< float > & m_msVtx_chi2
std::shared_ptr< MuonPRDTest::SegmentVariables > m_muonSeg
MuonVal::VectorBranch< float > & m_llpVtx_Lxy
MuonVal::VectorBranch< int > & m_jet_triggers
StatusCode fillActiveVertices(const EventContext &ctx, const xAOD::Jet *jet)
SG::ReadHandleKey< xAOD::VertexContainer > m_MSVtxKey
MuonVal::VectorBranch< float > & m_msVtx_isoTracks_pTsum
SG::ReadHandleKey< xAOD::TruthParticleContainer > m_TruthParticleKey
MuonVal::VectorBranch< float > & m_trklet_z0
MuonVal::VectorBranch< int > & m_msVtx_nTGC_I
MuonVal::ThreeVectorBranch m_actVtx_pos
TH1F * m_h_subleadLLPctau
MuonVal::VectorBranch< float > & m_msVtx_isoTracks_mindR
Gaudi::Property< float > m_jetIso_pT
MuonVal::ThreeVectorBranch m_trklet_pos
std::unique_ptr< std::vector< int > > m_truthParticle_actVtx_link_tmp
MuonVal::VectorBranch< int > & m_msVtx_nMDT_I
bool getTriggerMatchingDecision(const T *object, TriggerInfo &triggerInfo, float dRmatching)
MuonVal::ScalarBranch< int > & m_msVtx_N
MuonVal::MatrixBranch< int > & m_truthVtx_truthParticle_link
std::unique_ptr< std::vector< int > > m_truthParticle_llpVtx_link_tmp
virtual StatusCode initialize() override final
SG::ReadHandleKey< xAOD::MuonContainer > m_MuonKey
Gaudi::Property< bool > m_dumpTruthParticles
MuonVal::VectorBranch< int > & m_msVtx_nRPC_E
ParticleBranchPtr_t m_portal
StatusCode fillTruthVertex(const EventContext &ctx)
MuonVal::VectorBranch< float > & m_actVtx_pT
StatusCode fillMSVtx(const EventContext &ctx)
SG::ReadHandleKey< xAOD::EventInfo > m_evtKey
MuonVal::ScalarBranch< float > & m_met_x
Gaudi::Property< float > m_jetTriggerMatchingDR
MuonVal::VectorBranch< int > & m_msVtx_nRPC_inwards
MuonVal::VectorBranch< int > & m_msVtx_nTGC_O
Gaudi::Property< bool > m_computeActiveVertices
ParticleBranchPtr_t m_truthParticle
MuonVal::VectorBranch< int > & m_msVtx_nMDT_inwards
Gaudi::Property< float > m_jetIso_LogRatio
Gaudi::Property< int > m_pdgId_portal
PublicToolHandle< Trig::R3MatchingTool > m_matchingTool
MuonVal::VectorBranch< int > & m_truthParticle_llpVtx_link
MuonVal::VectorBranch< float > & m_actVtx_energy
MuonVal::VectorBranch< int > & m_llp_NchildrenCharged
MuonVal::MuonTesterTree m_tree
MuonVal::ScalarBranch< int > & m_trklet_N
virtual StatusCode finalize() override final
Gaudi::Property< bool > m_llp_genStableChildren
SG::ReadHandleKey< xAOD::JetContainer > m_JetKey
MuonVal::VectorBranch< float > & m_actVtx_jet_dEta
std::unordered_set< int > m_emProcessEnum
MuonVal::VectorBranch< int > & m_truthParticle_truthVtx_link
MuonVal::ThreeVectorBranch m_msVtx_pos
virtual StatusCode execute() override final
StatusCode fillMSVtxIsolation(const xAOD::Vertex *msVtx, const xAOD::TrackParticleContainer *tracks, const xAOD::JetContainer *jets)
MuonVal::VectorBranch< int > & m_msVtx_nMDT_M
MuonVal::VectorBranch< int > & m_msVtx_nMDT
MuonVal::VectorBranch< int > & m_msVtx_nDoF
std::unordered_set< int > m_hadronicProcessEnum
MuonVal::ScalarBranch< int > & m_jet_N
MuonVal::VectorBranch< int > & m_msVtx_nRPC_I
MuonVal::ScalarBranch< float > & m_sumEt
MuonVal::VectorBranch< int > & m_msVtx_Ntrklet
StatusCode fillMet(const EventContext &ctx)
MuonVal::VectorBranch< int > & m_msVtx_nRPC_O
MuonVal::VectorBranch< int > & m_truthVtx_status
MuonVal::VectorBranch< float > & m_msVtx_isoJets_mindR
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_TrackletKey
TriggerInfo getTriggerDecisions(std::string triggerString)
StatusCode fillMuons(const EventContext &ctx)
StatusCode fillTruth(const EventContext &ctx)
MuonVal::VectorBranch< int > & m_msVtx_nRPC
SG::ReadHandleKey< xAOD::TruthVertexContainer > m_TruthVertexKey
MuonVal::VectorBranch< int > & m_truthVtx_NchildrenCharged
MuonVal::ScalarBranch< float > & m_met_phi
MuonVal::ScalarBranch< int > & m_llp_N
Gaudi::Property< bool > m_computeVertexIso
Gaudi::Property< float > m_softTrackIso_R
ParticleBranchPtr_t m_muon
MuonVal::VectorBranch< int > & m_truthParticle_actVtx_link
StatusCode fillLLP(std::vector< const xAOD::TruthParticle * > &llps)
SG::ReadHandleKey< xAOD::MissingETContainer > m_MetKey
MuonVal::VectorBranch< int > & m_msVtx_nMDT_E
MuonVal::VectorBranch< int > & m_msVtx_nTGC_inwards
MuonVal::ThreeVectorBranch m_trklet_mom
MuonVal::MatrixBranch< int > & m_actVtx_truthParticle_link
MuonVal::VectorBranch< float > & m_trklet_phi
Gaudi::Property< float > m_trackIso_pT
MuonVal::VectorBranch< float > & m_trklet_q
MuonVal::VectorBranch< float > & m_llpVtx_ctau
MuonVal::VectorBranch< int > & m_jet_NactVtx
MuonVal::ScalarBranch< int > & m_llpVtx_N
MuonVal::ScalarBranch< int > & m_portal_N
MuonVal::ThreeVectorBranch m_truthVtx_pos
MuonVal::ScalarBranch< float > & m_met_y
StatusCode fillJet(const EventContext &ctx)
ParticleBranchPtr_t m_llp
MuonVal::VectorBranch< float > & m_actVtx_mass
MuonVal::VectorBranch< float > & m_actVtx_jet_dPhi
MuonVal::VectorBranch< int > & m_msVtx_nTGC_E
SG::ReadHandleKey< xAOD::MuonSegmentContainer > m_MuonSegKey
MuonVal::VectorBranch< int > & m_actVtx_chainDepth
PublicToolHandle< Trig::TrigDecisionTool > m_trigDec
Gaudi::Property< int > m_pdgId_llp
void fillHits(const xAOD::Vertex *vtx, const std::string &decorator_str, MuonVal::VectorBranch< int > &branch)
Gaudi::Property< bool > m_isMC
Gaudi::Property< std::string > m_triggerStringJets
StatusCode fillTracklets(const EventContext &ctx)
MuonVal::VectorBranch< int > & m_msVtx_nMDT_O
MuonVal::VectorBranch< int > & m_msVtx_nRPC_M
MuonVal::VectorBranch< int > & m_msVtx_nTGC
MuonVal::VectorBranch< int > & m_actVtx_NChildren
Gaudi::Property< bool > m_readTriggers
StatusCode fillTruthParticle(const EventContext &ctx)
MuonVal::VectorBranch< int > & m_truthVtx_Nchildren
MuonVal::VectorBranch< int > & m_truthVtx_NchildrenDirect
std::unique_ptr< std::vector< int > > m_truthParticle_truthVtx_link_tmp
MuonVal::VectorBranch< int > & m_llp_Nchildren
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_TrackParticleKey
MuonVal::VectorBranch< int > & m_truthVtx_interactionType
MuonVal::VectorBranch< int > & m_actVtx_jet_link
MuonVal::VectorBranch< float > & m_trklet_eta
MuonVal::VectorBranch< float > & m_actVtx_scalarPtSum
ParticleBranchPtr_t m_jet
MuonVal::VectorBranch< float > & m_trklet_d0
void push_back(const T &value)
Adds a new element at the end of the vector.
SG::Accessor< T, ALLOC > Accessor
size_t index() const
Return the index of this element within its container.
bool isAvailable(const ELT &e) const
Test to see if this variable exists in the store.
const Amg::Vector3D & momentum() const
Access method for the momentum.
const Amg::Vector3D & position() const
Access method for the position.
uint32_t runNumber() const
The current event's run number.
uint64_t eventNumber() const
The current event's event number.
virtual FourMom_t p4() const override final
The full 4-momentum of the particle.
float z() const
Vertex longitudinal distance along the beam line form the origin.
FourVec_t v4() const
The full 4-vector of the vertex.
float perp() const
Vertex transverse distance from the beam line.
Eigen::Matrix< double, 3, 1 > Vector3D
std::vector< const xAOD::TruthParticle * > getStableChildren(const xAOD::TruthParticle *particle, bool findOnlyGenStable)
double getCTau(const xAOD::TruthVertex *decVtx)
VtxIso getIso(const xAOD::Vertex *vtx, const xAOD::TrackParticleContainer &Tracks, const xAOD::JetContainer &Jets, double trackIso_pT, double softTrackIso_R, double jetIso_pT, double jetIso_LogRatio)
std::vector< ActiveVertex > getActiveVertices(const xAOD::Jet *jet, const xAOD::TruthParticleContainer &truthParticles)
bool comparePt(const xAOD::TruthParticle *part1, const xAOD::TruthParticle *part2)
const T * get(const ReadCondHandleKey< T > &key, const EventContext &ctx)
Convenience function to retrieve an object given a ReadCondHandleKey.
ParametersT< TrackParametersDim, Charged, PerigeeSurface > Perigee
void sort(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end)
Specialization of sort for DataVector/List.
Jet_v1 Jet
Definition of the current "jet version".
EventInfo_v1 EventInfo
Definition of the latest event info version.
TruthVertex_v1 TruthVertex
Typedef to implementation.
TrackParticle_v1 TrackParticle
Reference the current persistent version:
TruthVertexContainer_v1 TruthVertexContainer
Declare the latest version of the truth vertex container.
VertexContainer_v1 VertexContainer
Definition of the current "Vertex container version".
Vertex_v1 Vertex
Define the latest version of the vertex class.
MissingETContainer_v1 MissingETContainer
TruthParticle_v1 TruthParticle
Typedef to implementation.
TrackParticleContainer_v1 TrackParticleContainer
Definition of the current "TrackParticle container version".
Muon_v1 Muon
Reference the current persistent version:
JetContainer_v1 JetContainer
Definition of the current "jet container version".
MuonContainer_v1 MuonContainer
Definition of the current "Muon container version".
TruthParticleContainer_v1 TruthParticleContainer
Declare the latest version of the truth particle container.
std::vector< std::string > names
std::vector< bool > passed