Main Page
Namespaces
Classes
Package Documentation
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Properties
Friends
Macros
Groups
Pages
RecoTracker
SiTrackerMRHTools
src
MeasurementByLayerGrouper.cc
Go to the documentation of this file.
1
#include "
RecoTracker/SiTrackerMRHTools/interface/MeasurementByLayerGrouper.h
"
2
#include "
TrackingTools/DetLayers/interface/DetLayer.h
"
3
#include "
TrackingTools/PatternTools/interface/TrajectoryMeasurement.h
"
4
#include "
RecoTracker/TkDetLayers/interface/GeometricSearchTracker.h
"
5
#include "
FWCore/Utilities/interface/Exception.h
"
6
#include "
FWCore/MessageLogger/interface/MessageLogger.h
"
7
8
using namespace
std;
9
10
vector<pair<const DetLayer*, vector<TrajectoryMeasurement> > >
MeasurementByLayerGrouper::operator()
(
11
const
vector<TM>& vtm)
const
{
12
if
(vtm.empty())
13
return
vector
<pair<
const
DetLayer
*, vector<TM> > >();
14
15
vector<pair<const DetLayer*, vector<TM> > >
result
;
16
result.reserve(vtm.size());
17
18
vector<TM>::const_iterator
start
= vtm.begin();
19
//here we assume that the TM on the same detLayer are consecutive (as it should)
20
while
(start != vtm.end()) {
21
vector<TM>::const_iterator ipart =
start
;
22
do
{
23
ipart++;
24
}
while
(ipart != vtm.end() &&
getDetLayer
(*start) ==
getDetLayer
(*ipart) &&
25
getDetLayer
(*start) !=
nullptr
//the returned pointer will be 0 in case
26
//the measurement contains an invalid hit with no associated detid.
27
//This kind of hits are at most one per layer.
28
//this last condition avoids that 2 consecutive measurements of this kind
29
//are grouped in the same layer.
30
//it would be useful if invalid hit out of the active area were
31
//given the detid reserved for the whole layer instead of 0
32
);
33
34
vector<TM>
group
(start, ipart);
35
result.push_back(pair<
const
DetLayer
*, vector<TM> >(
getDetLayer
(*start), group));
36
start = ipart;
37
}
38
#ifdef debug_MeasurementByLayerGrouper_
39
for
(
vector
<pair<
const
DetLayer
*, vector<TM> > >::const_iterator iter = result.begin(); iter != result.end();
40
iter++) {
41
LogTrace
(
"MeasurementByLayerGrouper|SiTrackerMultiRecHitUpdator"
)
42
<<
"DetLayer "
<< iter->first <<
" has "
<< iter->second.size() <<
" measurements"
;
43
}
44
#endif
45
46
return
result
;
47
}
48
49
const
DetLayer
*
MeasurementByLayerGrouper::getDetLayer
(
const
TM
& tm)
const
{
50
// if the DetLayer is set in the TM...
51
if
(tm.
layer
())
52
return
tm.
layer
();
53
54
//if it corresponds to an invalid hit with no geomdet associated
55
//we can't retrieve the DetLayer
56
//because unfortunately the detlayer is not set in these cases
57
//returns 0 for the moment
58
//to be revisited
59
60
if
(tm.
recHit
()->det() ==
nullptr
) {
61
LogDebug
(
"MeasurementByLayerGrouper"
) <<
"This hit has no geomdet associated skipping... "
;
62
return
nullptr
;
63
}
64
65
//now the cases in which the detid is set
66
67
if
(!theGeomSearch) {
68
throw
cms::Exception
(
"MeasurementByLayerGrouper"
) <<
"Impossible to retrieve the det layer because it's not set in "
69
"the TM and the pointer to the GeometricSearchTracker is 0 "
;
70
return
nullptr
;
71
}
72
73
return
theGeomSearch->detLayer(tm.
recHit
()->det()->geographicalId());
74
}
TrajectoryMeasurement::recHit
ConstRecHitPointer const & recHit() const
Definition:
TrajectoryMeasurement.h:190
getDetLayer
DetLayer getDetLayer(DetId detId, const TrackerTopology *tTopo)
Definition:
TrackQuality.cc:92
TrajectoryMeasurement.h
Exception
Definition:
hltDiff.cc:245
MessageLogger.h
LogTrace
#define LogTrace(id)
Definition:
MessageLogger.h:234
mps_fire.result
tuple result
Definition:
mps_fire.py:311
command_line.start
start
Definition:
command_line.py:165
MeasurementByLayerGrouper.h
TrajectoryMeasurement::layer
const DetLayer * layer() const
Definition:
TrajectoryMeasurement.h:194
DetLayer
Definition:
DetLayer.h:21
MeasurementByLayerGrouper::operator()
std::vector< std::pair< const DetLayer *, std::vector< TM > > > operator()(const std::vector< TM > &) const
Definition:
MeasurementByLayerGrouper.cc:10
watchdog.group
tuple group
Definition:
watchdog.py:82
Exception.h
TrajectoryMeasurement
Definition:
TrajectoryMeasurement.h:25
GeometricSearchTracker.h
trackerHitRTTI::vector
Definition:
trackerHitRTTI.h:21
MeasurementByLayerGrouper::getDetLayer
const DetLayer * getDetLayer(const TM &tm) const
Definition:
MeasurementByLayerGrouper.cc:49
DetLayer.h
LogDebug
#define LogDebug(id)
Definition:
MessageLogger.h:233
Generated for CMSSW Reference Manual by
1.8.5