Go to the documentation of this file.00001 #include "DataFormats/MuonDetId/interface/DTChamberId.h"
00002 #include <DataFormats/MuonDetId/interface/MuonSubdetId.h>
00003 #include "DataFormats/MuonDetId/interface/CSCDetId.h"
00004 #include "DataFormats/MuonDetId/interface/RPCDetId.h"
00005 #include "DataFormats/MuonReco/interface/MuonChamberMatch.h"
00006 #include <cmath>
00007 using namespace reco;
00008
00009 int MuonChamberMatch::station() const {
00010 if( detector() == MuonSubdetId::DT ) {
00011 DTChamberId segId(id.rawId());
00012 return segId.station();
00013 }
00014 if( detector() == MuonSubdetId::CSC ) {
00015 CSCDetId segId(id.rawId());
00016 return segId.station();
00017 }
00018 if( detector() == MuonSubdetId::RPC ) {
00019 RPCDetId segId(id.rawId());
00020 return segId.station();
00021 }
00022 return -1;
00023 }
00024
00025 std::pair<float,float>
00026 MuonChamberMatch::getDistancePair(float edgeX, float edgeY, float xErr, float yErr) const
00027 {
00028 if(edgeX>9E5&&edgeY>9E5&&xErr>9E5&&yErr>9E5)
00029 return std::make_pair(999999, 999999);
00030
00031 float distance = 999999;
00032 float error = 999999;
00033
00034 if(edgeX<0 && edgeY<0) {
00035 if(edgeX<edgeY) { distance = edgeY; error = yErr; }
00036 else { distance = edgeX; error = xErr; }
00037 }
00038 if(edgeX<0 && edgeY>0) { distance = edgeY; error = yErr; }
00039 if(edgeX>0 && edgeY<0) { distance = edgeX; error = xErr; }
00040 if(edgeX>0 && edgeY>0) { distance = sqrt(edgeX*edgeX+edgeY*edgeY); error = distance ? sqrt(edgeX*edgeX*xErr*xErr+edgeY*edgeY*yErr*yErr)/fabs(distance) : 0; }
00041
00042 return std::make_pair(distance, error);
00043 }