CMS 3D CMS Logo

TotemRPLocalTrackFitter.cc
Go to the documentation of this file.
1 /****************************************************************************
2 *
3 * This is a part of TOTEM offline software.
4 * Authors:
5 * Hubert Niewiadomski
6 * Jan Kašpar (jan.kaspar@gmail.com)
7 *
8 ****************************************************************************/
9 
11 
19 
24 
27 
29 
30 //----------------------------------------------------------------------------------------------------
31 
36 public:
37  explicit TotemRPLocalTrackFitter(const edm::ParameterSet &conf);
38 
39  ~TotemRPLocalTrackFitter() override {}
40 
41  void produce(edm::Event &e, const edm::EventSetup &c) override;
43 
44 private:
46 
49 
52 
55 
58 };
59 
60 //----------------------------------------------------------------------------------------------------
61 //----------------------------------------------------------------------------------------------------
62 
63 using namespace std;
64 using namespace edm;
65 
66 //----------------------------------------------------------------------------------------------------
67 
69  : verbosity_(conf.getParameter<int>("verbosity")), fitter_(conf) {
70  tagUVPattern = conf.getParameter<edm::InputTag>("tagUVPattern");
71  patternCollectionToken = consumes<DetSetVector<TotemRPUVPattern>>(tagUVPattern);
72  geometryToken = esConsumes<CTPPSGeometry, VeryForwardRealGeometryRecord>();
73 
74  produces<DetSetVector<TotemRPLocalTrack>>();
75 }
76 
77 //----------------------------------------------------------------------------------------------------
78 
80  if (verbosity_ > 5)
81  LogVerbatim("TotemRPLocalTrackFitter") << ">> TotemRPLocalTrackFitter::produce";
82 
83  // get geometry
85 
87  fitter_.reset();
88 
89  // get input
91  e.getByToken(patternCollectionToken, input);
92 
93  // run fit for each RP
95 
96  for (const auto &rpv : *input) {
97  CTPPSDetId rpId(rpv.detId());
98 
99  // is U-V association unique?
100  unsigned int n_U = 0, n_V = 0;
101  unsigned int idx_U = 0, idx_V = 0;
102  for (unsigned int pi = 0; pi < rpv.size(); pi++) {
103  const TotemRPUVPattern &pattern = rpv[pi];
104 
105  // here it would make sense to skip non-fittable patterns, but to keep the logic
106  // equivalent to version 7_0_4, nothing is skipped
107  /*
108  if (pattern.fittable() == false)
109  continue;
110  */
111 
112  switch (pattern.projection()) {
114  n_U++;
115  idx_U = pi;
116  break;
117 
119  n_V++;
120  idx_V = pi;
121  break;
122 
123  default:
124  break;
125  }
126  }
127 
128  if (n_U != 1 || n_V != 1) {
129  if (verbosity_)
130  LogVerbatim("TotemRPLocalTrackFitter")
131  << ">> TotemRPLocalTrackFitter::produce > Impossible to combine U and V patterns in RP " << rpId
132  << " (n_U=" << n_U << ", n_V=" << n_V << ").";
133 
134  continue;
135  }
136 
137  // again, to follow the logic from version 7_0_4, skip the non-fittable patterns here
138  if (!rpv[idx_U].fittable() || !rpv[idx_V].fittable())
139  continue;
140 
141  // combine U and V hits
143  for (auto &ids : rpv[idx_U].hits()) {
144  auto &ods = hits.find_or_insert(ids.detId());
145  for (auto &h : ids)
146  ods.push_back(h);
147  }
148 
149  for (auto &ids : rpv[idx_V].hits()) {
150  auto &ods = hits.find_or_insert(ids.detId());
151  for (auto &h : ids)
152  ods.push_back(h);
153  }
154 
155  // run fit
156  double z0 = geometry->rpTranslation(rpId).z();
157 
160 
161  DetSet<TotemRPLocalTrack> &ds = output.find_or_insert(rpId);
162  ds.push_back(track);
163 
164  if (verbosity_ > 5) {
165  unsigned int n_hits = 0;
166  for (auto &hds : track.hits())
167  n_hits += hds.size();
168 
169  LogVerbatim("TotemRPLocalTrackFitter")
170  << " track in RP " << rpId << ": valid = " << track.isValid() << ", hits = " << n_hits;
171  }
172  }
173 
174  // save results
175  e.put(make_unique<DetSetVector<TotemRPLocalTrack>>(output));
176 }
177 
178 //----------------------------------------------------------------------------------------------------
179 
182 
183  desc.add<edm::InputTag>("tagUVPattern", edm::InputTag("totemRPUVPatternFinder"))
184  ->setComment("input U-V patterns collection to retrieve");
185  desc.add<int>("verbosity", 0);
186 
187  descr.add("totemRPLocalTrackFitter", desc);
188 }
189 
190 //----------------------------------------------------------------------------------------------------
191 
TotemRPUVPattern::projV
Definition: TotemRPUVPattern.h:34
edm::ESWatcher::check
bool check(const edm::EventSetup &iSetup)
Definition: ESWatcher.h:52
edm::DetSet::push_back
void push_back(const T &t)
Definition: DetSet.h:66
edm::DetSetVector
Definition: DetSetVector.h:61
HLT_FULL_cff.track
track
Definition: HLT_FULL_cff.py:11779
input
static const std::string input
Definition: EdmProvDump.cc:48
hfClusterShapes_cfi.hits
hits
Definition: hfClusterShapes_cfi.py:5
edm::ESWatcher< VeryForwardRealGeometryRecord >
ESHandle.h
TotemRPLocalTrackFitter::~TotemRPLocalTrackFitter
~TotemRPLocalTrackFitter() override
Definition: TotemRPLocalTrackFitter.cc:45
edm::DetSet
Definition: DetSet.h:23
convertSQLitetoXML_cfg.output
output
Definition: convertSQLitetoXML_cfg.py:72
edm::EDGetTokenT
Definition: EDGetToken.h:33
edm
HLT enums.
Definition: AlignableModifier.h:19
TotemRPLocalTrackFitterAlgorithm::fitTrack
bool fitTrack(const edm::DetSetVector< TotemRPRecHit > &hits, double z_0, const CTPPSGeometry &tot_geom, TotemRPLocalTrack &fitted_track)
performs the track fit, returns true if successful
Definition: TotemRPLocalTrackFitterAlgorithm.cc:63
geometry
Definition: geometry.py:1
HLT_FULL_cff.InputTag
InputTag
Definition: HLT_FULL_cff.py:89353
TotemRPLocalTrackFitterAlgorithm
Algorithm for fitting tracks through a single RP.
Definition: TotemRPLocalTrackFitterAlgorithm.h:31
edm::ParameterSetDescription
Definition: ParameterSetDescription.h:52
EDProducer.h
TotemRPRecHit.h
year_2016_postTS2_cff.rpId
rpId
Definition: year_2016_postTS2_cff.py:23
edm::Handle
Definition: AssociativeIterator.h:50
TotemRPLocalTrackFitter::produce
void produce(edm::Event &e, const edm::EventSetup &c) override
Definition: TotemRPLocalTrackFitter.cc:79
ESGetToken.h
TotemRPLocalTrackFitter::geometryWatcher
edm::ESWatcher< VeryForwardRealGeometryRecord > geometryWatcher
A watcher to detect geometry changes.
Definition: TotemRPLocalTrackFitter.cc:60
singleTopDQM_cfi.setup
setup
Definition: singleTopDQM_cfi.py:37
CTPPSGeometry.h
MakerMacros.h
h
DEFINE_FWK_MODULE
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
edm::ConfigurationDescriptions::add
void add(std::string const &label, ParameterSetDescription const &psetDescription)
Definition: ConfigurationDescriptions.cc:57
TotemRPLocalTrackFitter
Fits tracks trough a single RP.
Definition: TotemRPLocalTrackFitter.cc:35
edm::ESHandle< CTPPSGeometry >
TotemRPLocalTrackFitterAlgorithm::reset
void reset()
Resets the reconstruction-data cache.
Definition: TotemRPLocalTrackFitterAlgorithm.cc:26
HLTMuonOfflineAnalyzer_cfi.z0
z0
Definition: HLTMuonOfflineAnalyzer_cfi.py:98
edm::ConfigurationDescriptions
Definition: ConfigurationDescriptions.h:28
TotemRPUVPattern
A linear pattern in U or V projection. The intercept b is taken at the middle of a RP: (geometry->Get...
Definition: TotemRPUVPattern.h:22
edm::ParameterSet
Definition: ParameterSet.h:47
TotemRPLocalTrackFitter::geometryToken
edm::ESGetToken< CTPPSGeometry, VeryForwardRealGeometryRecord > geometryToken
Definition: TotemRPLocalTrackFitter.cc:57
Event.h
CTPPSDetId
Base class for CTPPS detector IDs.
Definition: CTPPSDetId.h:31
createfilelist.int
int
Definition: createfilelist.py:10
topSingleLeptonDQM_PU_cfi.pattern
pattern
Definition: topSingleLeptonDQM_PU_cfi.py:39
edm::stream::EDProducer
Definition: EDProducer.h:38
TotemRPLocalTrackFitter::fillDescriptions
static void fillDescriptions(edm::ConfigurationDescriptions &)
Definition: TotemRPLocalTrackFitter.cc:180
edm::EventSetup
Definition: EventSetup.h:57
DetSetVector.h
HltBtagPostValidation_cff.c
c
Definition: HltBtagPostValidation_cff.py:31
VeryForwardRealGeometryRecord.h
edm::ESGetToken< CTPPSGeometry, VeryForwardRealGeometryRecord >
TotemRPLocalTrackFitter::fitter_
TotemRPLocalTrackFitterAlgorithm fitter_
The instance of the fitter module.
Definition: TotemRPLocalTrackFitter.cc:63
TotemRPLocalTrackFitter::tagUVPattern
edm::InputTag tagUVPattern
Selection of the pattern-recognition module.
Definition: TotemRPLocalTrackFitter.cc:54
submitPVResolutionJobs.desc
string desc
Definition: submitPVResolutionJobs.py:251
std
Definition: JetResolutionObject.h:76
ESWatcher.h
edm::LogVerbatim
Log< level::Info, true > LogVerbatim
Definition: MessageLogger.h:128
TotemRPLocalTrack
A track fit through a single RP.
Definition: TotemRPLocalTrack.h:30
EventSetup.h
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
TotemRPUVPattern::projU
Definition: TotemRPUVPattern.h:34
TotemRPUVPattern.h
pi
const Double_t pi
Definition: trackSplitPlot.h:36
TotemRPLocalTrackFitter::TotemRPLocalTrackFitter
TotemRPLocalTrackFitter(const edm::ParameterSet &conf)
Definition: TotemRPLocalTrackFitter.cc:68
ParameterSet.h
TotemRPLocalTrack.h
TotemRPLocalTrackFitter::patternCollectionToken
edm::EDGetTokenT< edm::DetSetVector< TotemRPUVPattern > > patternCollectionToken
Definition: TotemRPLocalTrackFitter.cc:56
edm::Event
Definition: Event.h:73
edm::InputTag
Definition: InputTag.h:15
TotemRPLocalTrackFitter::verbosity_
int verbosity_
Definition: TotemRPLocalTrackFitter.cc:51
TotemRPLocalTrackFitterAlgorithm.h
MillePedeFileConverter_cfg.e
e
Definition: MillePedeFileConverter_cfg.py:37