TrigMultiTrkHypo.h 3.55 KB
Newer Older
1
/*
2
  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
3
4
5
6
*/

/**************************************************************************
 **
7
 **   File: Trigger/TrigHypothesis/TrigBphysHypo/TrigMultiTrkHypo.h
8
 **
9
 **   Description: multi-track hypothesis algorithm
10
 **
11
 **   Author: Heather Russell
12
 **
13
 **************************************************************************/
14

15
16
#ifndef TRIG_TrigMultiTrkHypo_H
#define TRIG_TrigMultiTrkHypo_H
17
18

#include <string>
19
20
21
22
23
#include <vector>
#include <utility>

#include "GaudiKernel/Property.h"
#include "xAODTracking/TrackParticleContainer.h"
24
#include "xAODMuon/MuonContainer.h"
25
#include "xAODTrigBphys/TrigBphysContainer.h"
26

27
28
29
#include "StoreGate/ReadHandleKey.h"
#include "StoreGate/WriteHandleKey.h"

30
#include "TrigCompositeUtils/TrigCompositeUtils.h"
31
32
#include "DecisionHandling/HypoBase.h"

33
34
35
#include "TrkVKalVrtFitter/TrkVKalVrtFitter.h"
#include "InDetConversionFinderTools/VertexPointEstimator.h"

36
37
#include "AthenaMonitoringKernel/Monitored.h"
#include "AthenaMonitoringKernel/GenericMonitoringTool.h"
38

39
#include "TrigMultiTrkHypoTool.h"
40

41

42
43
44
45
class TrigMultiTrkHypo: public ::HypoBase {
 public:
  TrigMultiTrkHypo(const std::string& name, ISvcLocator* pSvcLocator);
  TrigMultiTrkHypo() = delete;
46

47
48
49
  virtual StatusCode initialize() override;
  virtual StatusCode execute(const EventContext& context) const override;
  virtual StatusCode finalize() override;
50

51
52
53
 protected:
  // the vertexing tool is not reentrant so this algorithm cannot be used reentrantly
  bool isReEntrant() const override { return false; }
54

55
 private:
56

57
  xAOD::TrigBphys* fit(const std::vector<ElementLink<xAOD::TrackParticleContainer>>& tracklist) const;
58
59
  bool isIdenticalTracks(const xAOD::TrackParticle* lhs, const xAOD::TrackParticle* rhs) const;
  bool isInMassRange(double mass) const;
60

61
62
  SG::ReadHandleKey<xAOD::TrackParticleContainer>
    m_trackParticleContainerKey {this, "TrackCollectionKey", "Tracks", "input TrackParticle container name"};
63

64

65
66
  SG::ReadHandleKey<xAOD::MuonContainer>
    m_muonContainerKey {this, "MuonCollectionKey", "CBCombinedMuon", "input EF Muon container name"};
67

68
69
  SG::WriteHandleKey<xAOD::TrigBphysContainer>
    m_trigBphysContainerKey {this, "TrigBphysCollectionKey", "TrigBphysContainer", "output TrigBphysContainer name"};
70

71
72
73
74
75
  Gaudi::Property<unsigned int> m_nTrk {this, "nTracks", 2, "number of tracks in the vertex"};
  Gaudi::Property<std::vector<double>> m_trkMass {this, "trackMasses", {105.6583745, 105.6583745}, "track masses for vertex reco (one per track)"};
  Gaudi::Property<std::vector<float>> m_trkPt {this, "trkPtThresholds", {3650., 3650.} ,"minimum track pTs (one per track, sorted descending)"};
  Gaudi::Property<std::vector<std::pair<double, double>>> m_massRange {this, "massRanges", { {0., 100000.} }, "mass ranges"};
  Gaudi::Property<float> m_deltaR {this, "deltaR", 0.01, "minimum deltaR between same-sign tracks (overlap removal)"};
76

77
78
  Gaudi::Property<std::string> m_trigLevelString {this, "trigLevel", "", "trigger Level to set for created TrigBphys objects"};
  xAOD::TrigBphys::levelType m_trigLevel;
79

80
81
  ToolHandle<InDet::VertexPointEstimator> m_vertexPointEstimator {this, "VertexPointEstimator", "", "tool to find starting point for the vertex fitter"};
  ToolHandle<Trk::TrkVKalVrtFitter> m_vertexFitter {this, "VertexFitter", "", "VKalVrtFitter tool to fit tracks into the common vertex"};
82

83
84
  ToolHandleArray<TrigMultiTrkHypoTool> m_hypoTools {this, "HypoTools", {}, "tools to perform selection"};
  ToolHandle<GenericMonitoringTool> m_monTool {this, "MonTool", "", "monitoring tool"};
85
86
87

};

88
#endif  // TRIG_TrigMultiTrkHypo_H