File indexing completed on 2024-04-06 12:04:48
0001 #include "DataFormats/MuonDetId/interface/DTChamberId.h"
0002 #include <DataFormats/MuonDetId/interface/MuonSubdetId.h>
0003 #include "DataFormats/MuonDetId/interface/CSCDetId.h"
0004 #include "DataFormats/MuonDetId/interface/RPCDetId.h"
0005 #include "DataFormats/MuonDetId/interface/GEMDetId.h"
0006 #include "DataFormats/MuonDetId/interface/ME0DetId.h"
0007 #include "DataFormats/MuonReco/interface/MuonChamberMatch.h"
0008 #include <cmath>
0009 using namespace reco;
0010
0011 int MuonChamberMatch::station() const {
0012 if (detector() == MuonSubdetId::DT) {
0013 DTChamberId segId(id.rawId());
0014 return segId.station();
0015 }
0016 if (detector() == MuonSubdetId::CSC) {
0017 CSCDetId segId(id.rawId());
0018 return segId.station();
0019 }
0020 if (detector() == MuonSubdetId::RPC) {
0021 RPCDetId segId(id.rawId());
0022 return segId.station();
0023 }
0024 if (detector() == MuonSubdetId::GEM) {
0025 GEMDetId segId(id.rawId());
0026 return segId.station();
0027 }
0028 if (detector() == MuonSubdetId::ME0) {
0029 ME0DetId segId(id.rawId());
0030 return segId.station();
0031 }
0032 return -1;
0033 }
0034
0035 std::pair<float, float> MuonChamberMatch::getDistancePair(float edgeX, float edgeY, float xErr, float yErr) const {
0036 if (edgeX > 9E5 && edgeY > 9E5 && xErr > 9E5 && yErr > 9E5)
0037 return std::make_pair(999999, 999999);
0038
0039 float distance = 999999;
0040 float error = 999999;
0041
0042 if (edgeX < 0 && edgeY < 0) {
0043 if (edgeX < edgeY) {
0044 distance = edgeY;
0045 error = yErr;
0046 } else {
0047 distance = edgeX;
0048 error = xErr;
0049 }
0050 }
0051 if (edgeX < 0 && edgeY > 0) {
0052 distance = edgeY;
0053 error = yErr;
0054 }
0055 if (edgeX > 0 && edgeY < 0) {
0056 distance = edgeX;
0057 error = xErr;
0058 }
0059 if (edgeX > 0 && edgeY > 0) {
0060 distance = sqrt(edgeX * edgeX + edgeY * edgeY);
0061 error = distance ? sqrt(edgeX * edgeX * xErr * xErr + edgeY * edgeY * yErr * yErr) / fabs(distance) : 0;
0062 }
0063
0064 return std::make_pair(distance, error);
0065 }