00001 #ifndef MAPSTRACK_HH_
00002 #define MAPSTRACK_HH_
00003 #include <map>
00004 #include <iostream>
00005 #include <vector>
00006 #include "ToString.h"
00007 #include "MapsSensor.hh"
00008 #include "MapsException.hh"
00009 #include "Operators.h"
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 class MapsTrack {
00028 public:
00029 typedef std::pair<int, int> coord;
00030 typedef std::pair<double, double> physXY;
00031
00032 MapsTrack() :
00033 myT(0), myFourthThresh(0) {
00034 }
00035 ;
00036
00037
00038 MapsTrack(unsigned bx, std::map<MapsSensor*, MapsTrack::coord> hits,
00039 MapsSensor* fourthSensor = 0, unsigned fourthThreshold = 0) :
00040 myT(bx), myFourthThresh(fourthThreshold),
00041 myFourthSensor(fourthSensor), myHits(hits), myTrackError(std::pair<double, double>(0.1, 0.1)), myPixelPitch(0.05) {
00042 }
00043 ;
00044
00045 virtual ~MapsTrack();
00046
00047
00048 inline unsigned timeStamp() const {
00049 return myT;
00050 }
00051 ;
00052
00053 const std::map<MapsSensor*, coord>& getHits();
00054
00055
00056 double sigmaX() const;
00057
00058
00059 double sigmaY() const;
00060
00061
00062 double meanX() const;
00063
00064
00065 double meanY() const;
00066
00067 inline double pixelPitch() const {
00068 return myPixelPitch;
00069 }
00070 ;
00071
00072 inline std::pair<double, double> trackError() const {
00073 return myTrackError;
00074 }
00075 ;
00076
00077
00078
00079
00080 void setPixelPitch(const double& pitch);
00081
00082
00083
00084
00085 void setTrackError(const std::pair<double, double>& error);
00086
00087
00088
00089
00090 MapsSensor* fourthSensor() const;
00091
00092
00093
00094
00095 inline unsigned fourthSensorThresh() const {
00096 return myFourthThresh;
00097 }
00098 ;
00099
00100
00101
00102 void setFourthSensorThresh(const unsigned& threshold);
00103
00104
00105
00106
00107
00108 MapsSensor* missingSensor(std::vector<MapsSensor*> sensors) const;
00109
00110
00111
00112
00113
00114
00115
00116 std::pair<double, double> simpleResidual(MapsSensor* s) const
00117 throw(MapsException);
00118
00119
00120
00121
00122 std::map<MapsSensor*, std::pair<double, double> > allResiduals();
00123
00124
00125
00126
00127 void tellSensorsOfResiduals();
00128
00129
00130
00131
00132
00133 void tellSensorsOfResiduals(const MapsSensor* const requiredLeft,
00134 const MapsSensor* const requiredRight);
00135
00136
00137
00138
00139 void tellSensorsOfHits();
00140
00141
00142
00143
00144
00145 double theta() const;
00146
00147
00148
00149
00150
00151 double chiSqProb(const unsigned& dimension) const;
00152
00153
00154
00155
00156 void setHits(std::map<MapsSensor*, coord> hits);
00157
00158
00159
00160
00161 friend std::ostream& operator<<(std::ostream& s, const MapsTrack& mt);
00162
00163
00164
00165
00166 friend std::ostream& diagnose(std::ostream& s, const MapsTrack& mt);
00167
00168
00169
00170
00171 std::ostream& printCoords(std::ostream& s) const;
00172
00173
00174
00175
00176
00177
00178 MapsSensor* leftExtrapPoint(MapsSensor*) const;
00179
00180
00181
00182
00183
00184 MapsSensor* rightExtrapPoint(MapsSensor*) const;
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196 std::pair<double, double> fitParameters(const unsigned& dimension) const;
00197
00198
00199
00200
00201
00202
00203
00204 double chiSq(const unsigned& dimension) const;
00205
00206
00207
00208
00209
00210 void make3HitTrack(MapsTrack& mt);
00211
00212
00213
00214
00215
00216
00217 unsigned getFourthHitResidual(const MapsTrack& threeHitTrack,
00218 std::pair<double, double>& answer);
00219
00220
00221
00222
00223 std::pair<double, double> findXYPrediction(const double& zpos) const;
00224
00225 const std::map<MapsSensor*, physXY >& getGlobalHits() const;
00226
00227 void eraseGlobalHits();
00228
00229 protected:
00230
00231 MapsTrack& operator=(MapsTrack& mt) {
00232 return *this;
00233 }
00234
00235
00236 private:
00237
00238
00239 MapsSensor* leftSensor() const;
00240
00241 MapsSensor* rightSensor() const;
00242
00243 MapsTrack(MapsTrack& mt);
00244
00245 unsigned myT;
00246 unsigned myFourthThresh;
00247 MapsSensor* myFourthSensor;
00248 std::map<MapsSensor*, coord> myHits;
00249
00250
00251
00252 mutable std::map<MapsSensor*, physXY > myGlobalHits;
00253
00254 std::pair<double, double> myTrackError;
00255 double myPixelPitch;
00256
00257
00258 bool myToldSensorsResids;
00259 bool myToldSensorsHits;
00260
00261 };
00262
00263
00264
00265
00266
00267 std::ostream& operator<<(std::ostream& s, const MapsTrack& mt);
00268
00269 std::ostream& diagnose(std::ostream& s, const MapsTrack& mt);
00270
00271
00272 #endif
00273