Go to the documentation of this file.00001 #ifndef GeometricSearchDetMeasurements_H
00002 #define GeometricSearchDetMeasurements_H
00003
00004 #include "TrackingTools/DetLayers/interface/GeometricSearchDet.h"
00005 #include "TrackingTools/PatternTools/interface/TrajMeasLessEstim.h"
00006 #include "TrackingTools/GeomPropagators/interface/Propagator.h"
00007 #include "TrackingTools/MeasurementDet/interface/MeasurementDetException.h"
00008 #include "TrackingTools/MeasurementDet/interface/MeasurementDetSystem.h"
00009 #include "TrackingTools/MeasurementDet/interface/MeasurementDet.h"
00010 #include "TrackingTools/MeasurementDet/interface/TrajectoryMeasurementGroup.h"
00011
00012 #include <algorithm>
00013
00019 class GeometricSearchDetMeasurements {
00020 public:
00021
00022 typedef GeometricSearchDet::DetWithState DetWithState;
00023 typedef TrajectoryStateOnSurface TSOS;
00024 typedef TrajectoryMeasurement TM;
00025 typedef TrajectoryMeasurementGroup TMG;
00026
00027 GeometricSearchDetMeasurements( const MeasurementDetSystem* detSysytem) :
00028 theDetSystem(detSysytem) {}
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00089 template <class TrajectoryState>
00090 std::vector<TrajectoryMeasurement> get( const GeometricSearchDet& det,
00091 const std::vector<DetWithState>& compatDets,
00092 const TrajectoryState& ts,
00093 const Propagator& prop,
00094 const MeasurementEstimator& est) const;
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117 private:
00118
00119 const MeasurementDetSystem* theDetSystem;
00120
00121 };
00122
00123
00124 template <class TrajectoryState>
00125 std::vector<TrajectoryMeasurement>
00126 GeometricSearchDetMeasurements::get( const GeometricSearchDet& det,
00127 const std::vector<DetWithState>& compatDets,
00128 const TrajectoryState& ts,
00129 const Propagator& prop,
00130 const MeasurementEstimator& est) const
00131 {
00132 std::vector<TrajectoryMeasurement> result;
00133 if (!compatDets.empty()) {
00134 for ( std::vector<DetWithState>::const_iterator i=compatDets.begin();
00135 i != compatDets.end(); i++) {
00136 const MeasurementDet* mdet = theDetSystem->idToDet(i->first->geographicalId());
00137 if (mdet == 0) {
00138 throw MeasurementDetException( "MeasurementDet not found");
00139 }
00140
00141 std::vector<TM> tmp = mdet->fastMeasurements( i->second, ts, prop, est);
00142 if ( !tmp.empty()) {
00143
00144 std::vector<TM>::iterator end = (tmp.back().recHit()->isValid() ? tmp.end() : tmp.end()-1);
00145 result.insert( result.end(), tmp.begin(), end);
00146 }
00147 }
00148
00149 if ( result.size() > 1) {
00150 sort( result.begin(), result.end(), TrajMeasLessEstim());
00151 }
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164 }
00165 else {
00166
00167 throw MeasurementDetException("GeometricSearchDetMeasurements::get called with empty std::vector<DetWithState>");
00168 }
00169 return result;
00170 }
00171
00172
00173 #endif