File indexing completed on 2024-04-06 11:57:07
0001 #include <iostream>
0002 #include "ResidualRefitting.h"
0003 #include <iomanip>
0004
0005
0006 #include "DataFormats/MuonDetId/interface/MuonSubdetId.h"
0007 #include "DataFormats/MuonDetId/interface/DTWireId.h"
0008 #include "DataFormats/MuonDetId/interface/CSCDetId.h"
0009 #include "DataFormats/MuonDetId/interface/RPCDetId.h"
0010 #include "DataFormats/TrackerCommon/interface/TrackerTopology.h"
0011 #include "Geometry/Records/interface/TrackerTopologyRcd.h"
0012
0013 #include "FWCore/Framework/interface/ConsumesCollector.h"
0014 #include "FWCore/Framework/interface/Event.h"
0015 #include "FWCore/Framework/interface/EventSetup.h"
0016 #include "FWCore/Utilities/interface/EDMException.h"
0017 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0018 #include "FWCore/Framework/interface/MakerMacros.h"
0019
0020 #include "Geometry/CommonDetUnit/interface/GlobalTrackingGeometry.h"
0021 #include "Geometry/CommonDetUnit/interface/GeomDet.h"
0022 #include "Geometry/CommonDetUnit/interface/GeomDetEnumerators.h"
0023
0024 #include "RecoMuon/DetLayers/interface/MuonDetLayerGeometry.h"
0025 #include "RecoMuon/TransientTrackingRecHit/interface/MuonTransientTrackingRecHitBuilder.h"
0026 #include "RecoMuon/TransientTrackingRecHit/interface/MuonTransientTrackingRecHit.h"
0027
0028 #include "RecoVertex/KalmanVertexFit/interface/KalmanVertexFitter.h"
0029
0030 #include "TrackingTools/DetLayers/interface/DetLayer.h"
0031 #include "TrackingTools/TrajectoryState/interface/TrajectoryStateTransform.h"
0032 #include "TrackingTools/TrajectoryState/interface/TrajectoryStateOnSurface.h"
0033
0034 #include "TrackingTools/Records/interface/TrackingComponentsRecord.h"
0035
0036 ResidualRefitting::ResidualRefitting(const edm::ParameterSet& cfg)
0037 : magFieldToken_(esConsumes()),
0038 topoToken_(esConsumes()),
0039 trackingGeometryToken_(esConsumes()),
0040 propagatorToken_(esConsumes(edm::ESInputTag("", cfg.getParameter<std::string>("propagator")))),
0041 outputFileName_(cfg.getUntrackedParameter<std::string>("histoutputFile")),
0042 muons_(cfg.getParameter<edm::InputTag>("muons")),
0043 muonsRemake_(cfg.getParameter<edm::InputTag>("muonsRemake")),
0044 muonsNoStation1_(cfg.getParameter<edm::InputTag>("muonsNoStation1")),
0045 muonsNoStation2_(cfg.getParameter<edm::InputTag>("muonsNoStation2")),
0046 muonsNoStation3_(cfg.getParameter<edm::InputTag>("muonsNoStation3")),
0047 muonsNoStation4_(cfg.getParameter<edm::InputTag>("muonsNoStation4")),
0048 debug_(cfg.getUntrackedParameter<bool>("doDebug")),
0049 muonsToken_(consumes<reco::MuonCollection>(muons_)),
0050 muonTracksToken_(consumes<reco::TrackCollection>(muonsRemake_)),
0051 muonsNoSt1Token_(consumes<reco::TrackCollection>(muonsNoStation1_)),
0052 muonsNoSt2Token_(consumes<reco::TrackCollection>(muonsNoStation2_)),
0053 muonsNoSt3Token_(consumes<reco::TrackCollection>(muonsNoStation3_)),
0054 muonsNoSt4Token_(consumes<reco::TrackCollection>(muonsNoStation4_)),
0055 outputFile_(nullptr),
0056 outputTree_(nullptr),
0057 outputBranch_(nullptr),
0058 theField(nullptr) {
0059 eventInfo_.evtNum_ = 0;
0060 eventInfo_.evtNum_ = 0;
0061
0062
0063 edm::ParameterSet serviceParameters = cfg.getParameter<edm::ParameterSet>("ServiceParameters");
0064
0065
0066 theService = new MuonServiceProxy(serviceParameters, consumesCollector());
0067 }
0068
0069 void ResidualRefitting::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0070 edm::ParameterSetDescription desc;
0071 desc.add<edm::InputTag>("muons", edm::InputTag("muons"));
0072 desc.add<edm::InputTag>("muonsRemake", edm::InputTag("globalMuons"));
0073 desc.add<edm::InputTag>("muonsNoStation1", edm::InputTag("muonsNoSt1"));
0074 desc.add<edm::InputTag>("muonsNoStation2", edm::InputTag("muonsNoSt2"));
0075 desc.add<edm::InputTag>("muonsNoStation3", edm::InputTag("muonsNoSt3"));
0076 desc.add<edm::InputTag>("muonsNoStation4", edm::InputTag("muonsNoSt4"));
0077 desc.addUntracked<std::string>("histoutputFile", "histFile.root");
0078 desc.addUntracked<bool>("doDebug", false);
0079 descriptions.add("residualRefitting", desc);
0080 }
0081
0082 void ResidualRefitting::analyze(const edm::Event& event, const edm::EventSetup& eventSetup) {
0083 if (debug_)
0084 printf("STARTING EVENT\n");
0085
0086 eventInfo_.evtNum_ = (int)event.id().run();
0087 eventInfo_.runNum_ = (int)event.id().event();
0088
0089
0090
0091
0092 const edm::Handle<reco::MuonCollection>& muons = event.getHandle(muonsToken_);
0093 const edm::Handle<reco::TrackCollection>& muonTracks = event.getHandle(muonTracksToken_);
0094 const edm::Handle<reco::TrackCollection>& muonsNoSt1 = event.getHandle(muonsNoSt1Token_);
0095 const edm::Handle<reco::TrackCollection>& muonsNoSt2 = event.getHandle(muonsNoSt2Token_);
0096 const edm::Handle<reco::TrackCollection>& muonsNoSt3 = event.getHandle(muonsNoSt3Token_);
0097 const edm::Handle<reco::TrackCollection>& muonsNoSt4 = event.getHandle(muonsNoSt4Token_);
0098
0099
0100 theField = &eventSetup.getData(magFieldToken_);
0101 edm::ESHandle<GlobalTrackingGeometry> globalTrackingGeometry = eventSetup.getHandle(trackingGeometryToken_);
0102 thePropagator = eventSetup.getHandle(propagatorToken_);
0103 theService->update(eventSetup);
0104
0105
0106 zero_storage();
0107
0108
0109
0110
0111 if (debug_)
0112 printf("Data Dump:: Rebuilt GMR Muon Track With TeV refitter default\n");
0113 int iGmrRemake = 0;
0114 for (reco::TrackCollection::const_iterator muon = muonTracks->begin(); muon != muonTracks->end();
0115 muon++, iGmrRemake++) {
0116 if (iGmrRemake >= ResidualRefitting::N_MAX_STORED)
0117 break;
0118
0119 reco::TrackRef trackref = reco::TrackRef(muonTracks, iGmrRemake);
0120
0121 if (debug_)
0122 dumpTrackRef(trackref, "gmr");
0123 muonInfo(storageGmrNew_, trackref, iGmrRemake);
0124 }
0125 storageGmrNew_.n_ = iGmrRemake;
0126
0127 if (debug_)
0128 printf("muons Remake");
0129 if (debug_)
0130 printf("-----------------------------------------\n");
0131 CollectTrackHits(muonTracks, storageTrackExtrapRec_, eventSetup);
0132
0133 if (true) {
0134 printf("muons No Station 1");
0135 printf("-----------------------------------------\n");
0136 }
0137 NewTrackMeasurements(muonTracks, muonsNoSt1, storageTrackExtrapRecNoSt1_);
0138
0139 if (true) {
0140 printf("muons No Station 2");
0141 printf("-----------------------------------------\n");
0142 }
0143 NewTrackMeasurements(muonTracks, muonsNoSt2, storageTrackExtrapRecNoSt2_);
0144
0145 if (true) {
0146 printf("muons No Station 3");
0147 printf("-----------------------------------------\n");
0148 }
0149 NewTrackMeasurements(muonTracks, muonsNoSt3, storageTrackExtrapRecNoSt3_);
0150
0151 if (true) {
0152 printf("muons No Station 4");
0153 printf("-----------------------------------------\n");
0154 }
0155 NewTrackMeasurements(muonTracks, muonsNoSt4, storageTrackExtrapRecNoSt4_);
0156
0157
0158
0159
0160
0161
0162
0163
0164
0165
0166
0167 int iGmrCyl = 0;
0168 for (reco::MuonCollection::const_iterator muon = muons->begin(); muon != muons->end(); muon++, iGmrCyl++) {
0169 dumpTrackRef(muon->combinedMuon(), "cmb");
0170 dumpTrackRef(muon->standAloneMuon(), "sam");
0171 dumpTrackRef(muon->track(), "trk");
0172
0173 cylExtrapTrkSam(iGmrCyl, muon->standAloneMuon(), samExtrap120_, 120.);
0174 cylExtrapTrkSam(iGmrCyl, muon->track(), trackExtrap120_, 120.);
0175 }
0176 samExtrap120_.n_ = iGmrCyl;
0177 trackExtrap120_.n_ = iGmrCyl;
0178
0179 if (iGmrRemake > 0 || iGmrCyl > 0) {
0180 outputTree_->Fill();
0181 edm::LogVerbatim("ResidualRefitting") << "FILLING NTUPLE!";
0182 edm::LogVerbatim("ResidualRefitting")
0183 << "Entries Recorded: " << outputTree_->GetEntries() << " Branch :: " << outputBranch_->GetEntries();
0184 } else
0185 edm::LogVerbatim("ResidualRefitting") << "no tracks -- no fill!\n";
0186
0187
0188
0189
0190
0191 }
0192
0193
0194
0195
0196
0197
0198 ResidualRefitting::~ResidualRefitting() {
0199 delete outputFile_;
0200 delete theService;
0201 }
0202
0203
0204
0205 void ResidualRefitting::CollectTrackHits(edm::Handle<reco::TrackCollection> trackColl,
0206 ResidualRefitting::storage_trackExtrap& trackExtrap,
0207 const edm::EventSetup& eventSetup) {
0208
0209 const TrackerTopology* const tTopo = &eventSetup.getData(topoToken_);
0210
0211 int iMuonHit = 0;
0212 int iTrackHit = 0;
0213 int numTracks = 0;
0214
0215 for (reco::TrackCollection::const_iterator muon = trackColl->begin(); muon != trackColl->end(); muon++) {
0216 int iTrack = muon - trackColl->begin();
0217 reco::TrackRef trackref = reco::TrackRef(trackColl, iTrack);
0218 FreeTrajectoryState recoStart = ResidualRefitting::freeTrajStateMuon(trackref);
0219
0220 if (debug_)
0221 dumpTrackRef(trackref, "CollectTrackHits Track");
0222
0223 int iRec = 0;
0224 for (auto const& rec : muon->recHits()) {
0225 DetId detid = rec->geographicalId();
0226
0227 if (detid.det() != DetId::Muon && detid.det() != DetId::Tracker) {
0228 if (debug_)
0229 printf("Rec Hit not from muon system or tracker... continuing...\n");
0230 continue;
0231 }
0232
0233
0234
0235 LocalPoint lp = rec->localPosition();
0236 float lpX = lp.x();
0237 float lpY = lp.y();
0238 float lpZ = lp.z();
0239
0240 auto mrhp = MuonTransientTrackingRecHit::specificBuild(
0241 theService->trackingGeometry()->idToDet(rec->geographicalId()), rec);
0242
0243 GlobalPoint gp = mrhp->globalPosition();
0244 float gpRecX = gp.x();
0245 float gpRecY = gp.y();
0246 float gpRecZ = gp.z();
0247 float gpRecEta = gp.eta();
0248 float gpRecPhi = gp.phi();
0249
0250 if (detid.det() == DetId::Muon) {
0251 int systemMuon = detid.subdetId();
0252 int endcap = -999;
0253 int station = -999;
0254 int ring = -999;
0255 int chamber = -999;
0256 int layer = -999;
0257 int superLayer = -999;
0258 int wheel = -999;
0259 int sector = -999;
0260 if (systemMuon == MuonSubdetId::CSC) {
0261 CSCDetId id(detid.rawId());
0262 endcap = id.endcap();
0263 station = id.station();
0264 ring = id.ring();
0265 chamber = id.chamber();
0266 layer = id.layer();
0267 if (debug_)
0268 printf("CSC\t[endcap][station][ringN][chamber][layer]:[%d][%d][%d][%d][%d]\t",
0269 endcap,
0270 station,
0271 ring,
0272 chamber,
0273 layer);
0274
0275 } else if (systemMuon == MuonSubdetId::DT) {
0276 DTWireId id(detid.rawId());
0277 station = id.station();
0278 layer = id.layer();
0279 superLayer = id.superLayer();
0280 wheel = id.wheel();
0281 sector = id.sector();
0282 if (debug_)
0283 printf("DT \t[station][layer][superlayer]:[%d][%d][%d]\n", station, layer, superLayer);
0284
0285 } else if (systemMuon == MuonSubdetId::RPC) {
0286 RPCDetId id(detid.rawId());
0287 station = id.station();
0288 if (debug_)
0289 printf("RPC\t[station]:[%d]\n", station);
0290 }
0291
0292 storageRecMuon_.muonLink_[iMuonHit] = iTrack;
0293 storageRecMuon_.system_[iMuonHit] = systemMuon;
0294 storageRecMuon_.endcap_[iMuonHit] = endcap;
0295 storageRecMuon_.station_[iMuonHit] = station;
0296 storageRecMuon_.ring_[iMuonHit] = ring;
0297 storageRecMuon_.chamber_[iMuonHit] = chamber;
0298 storageRecMuon_.layer_[iMuonHit] = layer;
0299 storageRecMuon_.superLayer_[iMuonHit] = superLayer;
0300 storageRecMuon_.wheel_[iMuonHit] = wheel;
0301 storageRecMuon_.sector_[iMuonHit] = sector;
0302
0303 storageRecMuon_.gpX_[iMuonHit] = gpRecX;
0304 storageRecMuon_.gpY_[iMuonHit] = gpRecY;
0305 storageRecMuon_.gpZ_[iMuonHit] = gpRecZ;
0306 storageRecMuon_.gpEta_[iMuonHit] = gpRecEta;
0307 storageRecMuon_.gpPhi_[iMuonHit] = gpRecPhi;
0308 storageRecMuon_.lpX_[iMuonHit] = lpX;
0309 storageRecMuon_.lpY_[iMuonHit] = lpY;
0310 storageRecMuon_.lpZ_[iMuonHit] = lpZ;
0311 iMuonHit++;
0312
0313 } else if (detid.det() == DetId::Tracker) {
0314 if (debug_)
0315 printf("Tracker\n");
0316
0317 StoreTrackerRecHits(detid, tTopo, iTrack, iTrackHit);
0318
0319 storageTrackHit_.gpX_[iTrackHit] = gpRecX;
0320 storageTrackHit_.gpY_[iTrackHit] = gpRecY;
0321 storageTrackHit_.gpZ_[iTrackHit] = gpRecZ;
0322 storageTrackHit_.gpEta_[iTrackHit] = gpRecEta;
0323 storageTrackHit_.gpPhi_[iTrackHit] = gpRecPhi;
0324 storageTrackHit_.lpX_[iTrackHit] = lpX;
0325 storageTrackHit_.lpY_[iTrackHit] = lpY;
0326 storageTrackHit_.lpZ_[iTrackHit] = lpZ;
0327 iTrackHit++;
0328 } else
0329 printf("THIS CAN NOT HAPPEN\n");
0330
0331 trkExtrap(detid, numTracks, iTrack, iRec, recoStart, lp, trackExtrap);
0332 numTracks++;
0333
0334 if (debug_)
0335 printf("\tLocal Positon: \tx = %2.2f\ty = %2.2f\tz = %2.2f\n", lpX, lpY, lpZ);
0336 if (debug_)
0337 printf("\tGlobal Position: \tx = %6.2f\ty = %6.2f\tz = %6.2f\teta = %4.2f\tphi = %3.2f\n",
0338 gpRecX,
0339 gpRecY,
0340 gpRecZ,
0341 gpRecEta,
0342 gpRecPhi);
0343
0344 ++iRec;
0345 }
0346 }
0347
0348 storageRecMuon_.n_ = iMuonHit;
0349 storageTrackHit_.n_ = iTrackHit;
0350 trackExtrap.n_ = numTracks;
0351 }
0352
0353
0354
0355
0356
0357
0358
0359
0360 void ResidualRefitting::NewTrackMeasurements(const edm::Handle<reco::TrackCollection>& trackCollOrig,
0361 const edm::Handle<reco::TrackCollection>& trackColl,
0362 ResidualRefitting::storage_trackExtrap& trackExtrap) {
0363 int numTracks = 0;
0364 int recCounter = 0;
0365
0366 for (reco::TrackCollection::const_iterator muon = trackColl->begin(); muon != trackColl->end(); muon++) {
0367 int iTrack = muon - trackColl->begin();
0368
0369 reco::TrackRef trackref = reco::TrackRef(trackColl, iTrack);
0370 FreeTrajectoryState recoStart = ResidualRefitting::freeTrajStateMuon(trackref);
0371
0372 int iTrackLink = MatchTrackWithRecHits(muon, trackCollOrig);
0373 reco::TrackRef ref = reco::TrackRef(trackCollOrig, iTrackLink);
0374
0375 for (auto const& rec1 : ref->recHits()) {
0376 bool unbiasedRec = true;
0377
0378 for (auto const& rec2 : muon->recHits()) {
0379 if (IsSameHit(*rec1, *rec2)) {
0380 unbiasedRec = false;
0381 break;
0382 }
0383 }
0384 if (!unbiasedRec)
0385 continue;
0386
0387 DetId detid = rec1->geographicalId();
0388
0389 auto mrhp = MuonTransientTrackingRecHit::specificBuild(
0390 theService->trackingGeometry()->idToDet(rec1->geographicalId()), rec1);
0391
0392 trkExtrap(detid, numTracks, iTrackLink, recCounter, recoStart, rec1->localPosition(), trackExtrap);
0393 numTracks++;
0394 }
0395 }
0396
0397 trackExtrap.n_ = numTracks;
0398 }
0399
0400
0401
0402 int ResidualRefitting::MatchTrackWithRecHits(reco::TrackCollection::const_iterator trackIt,
0403 edm::Handle<reco::TrackCollection> ref) {
0404 if (debug_)
0405 printf("Matching a re-fitted track to the original track.\n");
0406
0407 int TrackMatch = -1;
0408
0409 for (auto const& rec : trackIt->recHits()) {
0410 bool foundMatch = false;
0411 for (reco::TrackCollection::const_iterator refIt = ref->begin(); refIt != ref->end(); refIt++) {
0412 int iTrackMatch = refIt - ref->begin();
0413 if (foundMatch && TrackMatch != iTrackMatch)
0414 break;
0415 for (auto const& recRef : refIt->recHits()) {
0416 if (!IsSameHit(*rec, *recRef))
0417 continue;
0418
0419 foundMatch = true;
0420 TrackMatch = iTrackMatch;
0421
0422 }
0423 }
0424 if (!foundMatch) {
0425 printf("SOMETHING WENT WRONG! Could not match Track with original track!");
0426 exit(1);
0427 }
0428 }
0429 if (debug_)
0430 printf("Rec hit match for original track %d\n", TrackMatch);
0431
0432
0433 return TrackMatch;
0434 }
0435
0436
0437
0438
0439
0440
0441
0442
0443
0444
0445
0446
0447
0448
0449
0450
0451
0452
0453
0454
0455
0456
0457
0458
0459
0460
0461
0462
0463
0464
0465
0466
0467
0468 bool ResidualRefitting::IsSameHit(TrackingRecHit const& hit1, TrackingRecHit const& hit2) {
0469 double lpx1 = hit1.localPosition().x();
0470 double lpy1 = hit1.localPosition().y();
0471 double lpz1 = hit1.localPosition().z();
0472
0473 double lpx2 = hit2.localPosition().x();
0474 double lpy2 = hit2.localPosition().y();
0475 double lpz2 = hit2.localPosition().z();
0476 if (fabs(lpx1 - lpx2) > 1e-3)
0477 return false;
0478
0479 if (fabs(lpy1 - lpy2) > 1e-3)
0480 return false;
0481
0482 if (fabs(lpz1 - lpz2) > 1e-3)
0483 return false;
0484
0485
0486 return true;
0487 }
0488
0489
0490
0491
0492 void ResidualRefitting::StoreTrackerRecHits(DetId detid, const TrackerTopology* tTopo, int iTrack, int iRec) {
0493 int detector = -1;
0494 int subdetector = -1;
0495 int blade = -1;
0496 int disk = -1;
0497 int ladder = -1;
0498 int layer = -1;
0499 int module = -1;
0500 int panel = -1;
0501 int ring = -1;
0502 int side = -1;
0503 int wheel = -1;
0504
0505
0506
0507 detector = detid.det();
0508 subdetector = detid.subdetId();
0509
0510 if (detector != DetId::Tracker) {
0511 edm::LogVerbatim("ResidualRefitting") << "OMFG NOT THE TRACKER\n";
0512 return;
0513 }
0514
0515 if (debug_)
0516 edm::LogVerbatim("ResidualRefitting") << "Tracker:: ";
0517 if (subdetector == ResidualRefitting::PXB) {
0518 layer = tTopo->pxbLayer(detid.rawId());
0519 ladder = tTopo->pxbLadder(detid.rawId());
0520 module = tTopo->pxbModule(detid.rawId());
0521 if (debug_)
0522 edm::LogVerbatim("ResidualRefitting")
0523 << "PXB"
0524 << "\tlayer = " << layer << "\tladder = " << ladder << "\tmodule = " << module;
0525
0526 } else if (subdetector == ResidualRefitting::PXF) {
0527 side = tTopo->pxfSide(detid.rawId());
0528 disk = tTopo->pxfDisk(detid.rawId());
0529 blade = tTopo->pxfBlade(detid.rawId());
0530 panel = tTopo->pxfPanel(detid.rawId());
0531 module = tTopo->pxfModule(detid.rawId());
0532 if (debug_)
0533 edm::LogVerbatim("ResidualRefitting") << "PXF"
0534 << "\tside = " << side << "\tdisk = " << disk << "\tblade = " << blade
0535 << "\tpanel = " << panel << "\tmodule = " << module;
0536
0537 } else if (subdetector == ResidualRefitting::TIB) {
0538 layer = tTopo->tibLayer(detid.rawId());
0539 module = tTopo->tibModule(detid.rawId());
0540 if (debug_)
0541 edm::LogVerbatim("ResidualRefitting") << "TIB"
0542 << "\tlayer = " << layer << "\tmodule = " << module;
0543 } else if (subdetector == ResidualRefitting::TID) {
0544 side = tTopo->tidSide(detid.rawId());
0545 wheel = tTopo->tidWheel(detid.rawId());
0546 ring = tTopo->tidRing(detid.rawId());
0547 if (debug_)
0548 edm::LogVerbatim("ResidualRefitting") << "TID"
0549 << "\tside = " << side << "\twheel = " << wheel << "\tring = " << ring;
0550
0551 } else if (subdetector == ResidualRefitting::TOB) {
0552 layer = tTopo->tobLayer(detid.rawId());
0553 module = tTopo->tobModule(detid.rawId());
0554 if (debug_)
0555 edm::LogVerbatim("ResidualRefitting") << "TOB"
0556 << "\tlayer = " << layer << "\tmodule = " << module;
0557
0558 } else if (subdetector == ResidualRefitting::TEC) {
0559 ring = tTopo->tecRing(detid.rawId());
0560 module = tTopo->tecModule(detid.rawId());
0561 if (debug_)
0562 edm::LogVerbatim("ResidualRefitting") << "TEC"
0563 << "\tring = " << ring << "\tmodule = " << module;
0564 }
0565
0566
0567
0568 storageTrackHit_.muonLink_[iRec] = iTrack;
0569 storageTrackHit_.detector_[iRec] = detector;
0570 storageTrackHit_.subdetector_[iRec] = subdetector;
0571 storageTrackHit_.blade_[iRec] = blade;
0572 storageTrackHit_.disk_[iRec] = disk;
0573 storageTrackHit_.ladder_[iRec] = ladder;
0574 storageTrackHit_.layer_[iRec] = layer;
0575 storageTrackHit_.module_[iRec] = module;
0576 storageTrackHit_.panel_[iRec] = panel;
0577 storageTrackHit_.ring_[iRec] = ring;
0578 storageTrackHit_.side_[iRec] = side;
0579 storageTrackHit_.wheel_[iRec] = wheel;
0580 }
0581
0582
0583
0584
0585 void ResidualRefitting::muonInfo(ResidualRefitting::storage_muon& storeMuon, reco::TrackRef muon, int val) {
0586 storeMuon.pt_[val] = muon->pt();
0587 storeMuon.p_[val] = muon->p();
0588 storeMuon.eta_[val] = muon->eta();
0589 storeMuon.phi_[val] = muon->phi();
0590 storeMuon.charge_[val] = muon->charge();
0591 storeMuon.numRecHits_[val] = muon->numberOfValidHits();
0592 storeMuon.chiSq_[val] = muon->chi2();
0593 storeMuon.ndf_[val] = muon->ndof();
0594 storeMuon.chiSqOvrNdf_[val] = muon->normalizedChi2();
0595 }
0596
0597
0598
0599 void ResidualRefitting::trkExtrap(const DetId& detid,
0600 int iTrk,
0601 int iTrkLink,
0602 int iRec,
0603 const FreeTrajectoryState& freeTrajState,
0604 const LocalPoint& recPoint,
0605 storage_trackExtrap& storeTemp) {
0606 bool dump_ = debug_;
0607
0608 if (dump_)
0609 edm::LogVerbatim("ResidualRefitting") << "In the trkExtrap function";
0610
0611 float gpExtrapX = -99999;
0612 float gpExtrapY = -99999;
0613 float gpExtrapZ = -99999;
0614 float gpExtrapEta = -99999;
0615 float gpExtrapPhi = -99999;
0616
0617 float lpX = -99999;
0618 float lpY = -99999;
0619 float lpZ = -99999;
0620
0621
0622
0623
0624
0625 float recLpX = recPoint.x();
0626 float recLpY = recPoint.y();
0627 float recLpZ = recPoint.z();
0628
0629 float resX = -9999;
0630 float resY = -9999;
0631 float resZ = -9999;
0632
0633 const GeomDet* gdet = theService->trackingGeometry()->idToDet(detid);
0634
0635
0636 TrajectoryStateOnSurface surfTest = thePropagator->propagate(freeTrajState, gdet->surface());
0637
0638 if (surfTest.isValid()) {
0639 GlobalPoint globTest = surfTest.globalPosition();
0640 gpExtrapX = globTest.x();
0641 gpExtrapY = globTest.y();
0642 gpExtrapZ = globTest.z();
0643 gpExtrapEta = globTest.eta();
0644 gpExtrapPhi = globTest.phi();
0645 LocalPoint loc = surfTest.localPosition();
0646 if (detid.det() == DetId::Muon || detid.det() == DetId::Tracker) {
0647 lpX = loc.x();
0648 lpY = loc.y();
0649 lpZ = loc.z();
0650
0651 resX = lpX - recLpX;
0652 resY = lpY - recLpY;
0653 resZ = lpZ - recLpZ;
0654 }
0655 }
0656 storeTemp.muonLink_[iTrk] = iTrkLink;
0657 storeTemp.recLink_[iTrk] = iRec;
0658 storeTemp.gpX_[iTrk] = gpExtrapX;
0659 storeTemp.gpY_[iTrk] = gpExtrapY;
0660 storeTemp.gpZ_[iTrk] = gpExtrapZ;
0661 storeTemp.gpEta_[iTrk] = gpExtrapEta;
0662 storeTemp.gpPhi_[iTrk] = gpExtrapPhi;
0663 storeTemp.lpX_[iTrk] = lpX;
0664 storeTemp.lpY_[iTrk] = lpY;
0665 storeTemp.lpZ_[iTrk] = lpZ;
0666 storeTemp.resX_[iTrk] = resX;
0667 storeTemp.resY_[iTrk] = resY;
0668 storeTemp.resZ_[iTrk] = resZ;
0669
0670 printf("station: %d\tsector: %d\tresX storage: %4.2f\n", ReturnStation(detid), ReturnSector(detid), resX);
0671 }
0672
0673
0674
0675 int ResidualRefitting::ReturnStation(DetId detid) {
0676 int station = -999;
0677
0678 if (detid.det() == DetId::Muon) {
0679 int systemMuon = detid.subdetId();
0680 if (systemMuon == MuonSubdetId::CSC) {
0681 CSCDetId id(detid.rawId());
0682 station = id.station();
0683
0684 } else if (systemMuon == MuonSubdetId::DT) {
0685 DTWireId id(detid.rawId());
0686 station = id.station();
0687
0688 } else if (systemMuon == MuonSubdetId::RPC) {
0689 RPCDetId id(detid.rawId());
0690 station = id.station();
0691 }
0692 }
0693
0694 return station;
0695 }
0696
0697
0698
0699 int ResidualRefitting::ReturnSector(DetId detid) {
0700 int sector = -999;
0701
0702 if (detid.det() == DetId::Muon) {
0703 int systemMuon = detid.subdetId();
0704 if (systemMuon == MuonSubdetId::DT) {
0705 DTWireId id(detid.rawId());
0706 sector = id.sector();
0707 }
0708 }
0709
0710 return sector;
0711 }
0712
0713
0714
0715
0716 void ResidualRefitting::cylExtrapTrkSam(int recNum,
0717 reco::TrackRef track,
0718 ResidualRefitting::storage_trackExtrap& storage,
0719 double rho) {
0720 Cylinder::PositionType pos(0, 0, 0);
0721 Cylinder::RotationType rot;
0722
0723 Cylinder::CylinderPointer myCylinder = Cylinder::build(pos, rot, rho);
0724
0725
0726 FreeTrajectoryState recoStart = freeTrajStateMuon(track);
0727
0728 TrajectoryStateOnSurface recoProp = thePropagator->propagate(recoStart, *myCylinder);
0729
0730 double xVal = -9999;
0731 double yVal = -9999;
0732 double zVal = -9999;
0733 double phiVal = -9999;
0734 double etaVal = -9999;
0735
0736 if (recoProp.isValid()) {
0737 GlobalPoint recoPoint = recoProp.globalPosition();
0738 xVal = recoPoint.x();
0739 yVal = recoPoint.y();
0740 zVal = recoPoint.z();
0741 phiVal = recoPoint.phi();
0742 etaVal = recoPoint.eta();
0743 }
0744 storage.muonLink_[recNum] = recNum;
0745 storage.gpX_[recNum] = xVal;
0746 storage.gpY_[recNum] = yVal;
0747 storage.gpZ_[recNum] = zVal;
0748 storage.gpEta_[recNum] = etaVal;
0749 storage.gpPhi_[recNum] = phiVal;
0750
0751 float rhoVal = sqrt(xVal * xVal + yVal * yVal);
0752
0753 printf("Cylinder: rho = %4.2f\tphi = %4.2f\teta = %4.2f\n", rhoVal, phiVal, etaVal);
0754 if (debug_)
0755 printf("Cylinder: rho = %4.2f\tphi = %4.2f\teta = %4.2f\n", rhoVal, phiVal, etaVal);
0756 }
0757
0758
0759
0760
0761
0762
0763
0764 void ResidualRefitting::zero_storage() {
0765 if (debug_)
0766 printf("zero_storage\n");
0767
0768 zero_muon(&storageGmrOld_);
0769 zero_muon(&storageGmrNew_);
0770 zero_muon(&storageSamNew_);
0771 zero_muon(&storageTrkNew_);
0772 zero_muon(&storageGmrNoSt1_);
0773 zero_muon(&storageSamNoSt1_);
0774 zero_muon(&storageGmrNoSt2_);
0775 zero_muon(&storageSamNoSt2_);
0776 zero_muon(&storageGmrNoSt3_);
0777 zero_muon(&storageSamNoSt3_);
0778 zero_muon(&storageGmrNoSt4_);
0779 zero_muon(&storageSamNoSt4_);
0780
0781 zero_muon(&storageGmrNoPXBLayer1);
0782 zero_muon(&storageGmrNoPXBLayer2);
0783 zero_muon(&storageGmrNoPXBLayer3);
0784
0785 zero_muon(&storageGmrNoPXF);
0786
0787 zero_muon(&storageGmrNoTIBLayer1);
0788 zero_muon(&storageGmrNoTIBLayer2);
0789 zero_muon(&storageGmrNoTIBLayer3);
0790 zero_muon(&storageGmrNoTIBLayer4);
0791
0792 zero_muon(&storageGmrNoTID);
0793
0794 zero_muon(&storageGmrNoTOBLayer1);
0795 zero_muon(&storageGmrNoTOBLayer2);
0796 zero_muon(&storageGmrNoTOBLayer3);
0797 zero_muon(&storageGmrNoTOBLayer4);
0798 zero_muon(&storageGmrNoTOBLayer5);
0799 zero_muon(&storageGmrNoTOBLayer6);
0800
0801 zero_muon(&storageGmrNoTEC);
0802
0803 zero_muon(&storageTrkNoPXBLayer1);
0804 zero_muon(&storageTrkNoPXBLayer2);
0805 zero_muon(&storageTrkNoPXBLayer3);
0806
0807 zero_muon(&storageTrkNoPXF);
0808
0809 zero_muon(&storageTrkNoTIBLayer1);
0810 zero_muon(&storageTrkNoTIBLayer2);
0811 zero_muon(&storageTrkNoTIBLayer3);
0812 zero_muon(&storageTrkNoTIBLayer4);
0813
0814 zero_muon(&storageTrkNoTID);
0815
0816 zero_muon(&storageTrkNoTOBLayer1);
0817 zero_muon(&storageTrkNoTOBLayer2);
0818 zero_muon(&storageTrkNoTOBLayer3);
0819 zero_muon(&storageTrkNoTOBLayer4);
0820 zero_muon(&storageTrkNoTOBLayer5);
0821 zero_muon(&storageTrkNoTOBLayer6);
0822
0823 zero_muon(&storageTrkNoTEC);
0824
0825 zero_trackExtrap(&storageTrackExtrapRec_);
0826 zero_trackExtrap(&storageTrackExtrapTracker_);
0827 zero_trackExtrap(&storageTrackExtrapRecNoSt1_);
0828 zero_trackExtrap(&storageTrackExtrapRecNoSt2_);
0829 zero_trackExtrap(&storageTrackExtrapRecNoSt3_);
0830 zero_trackExtrap(&storageTrackExtrapRecNoSt4_);
0831
0832 zero_trackExtrap(&trackExtrap120_);
0833
0834 zero_trackExtrap(&samExtrap120_);
0835
0836 zero_trackExtrap(&storageTrackNoPXBLayer1);
0837 zero_trackExtrap(&storageTrackNoPXBLayer2);
0838 zero_trackExtrap(&storageTrackNoPXBLayer3);
0839
0840 zero_trackExtrap(&storageTrackNoPXF);
0841
0842 zero_trackExtrap(&storageTrackNoTIBLayer1);
0843 zero_trackExtrap(&storageTrackNoTIBLayer2);
0844 zero_trackExtrap(&storageTrackNoTIBLayer3);
0845 zero_trackExtrap(&storageTrackNoTIBLayer4);
0846
0847 zero_trackExtrap(&storageTrackNoTOBLayer1);
0848 zero_trackExtrap(&storageTrackNoTOBLayer2);
0849 zero_trackExtrap(&storageTrackNoTOBLayer3);
0850 zero_trackExtrap(&storageTrackNoTOBLayer4);
0851 zero_trackExtrap(&storageTrackNoTOBLayer5);
0852 zero_trackExtrap(&storageTrackNoTOBLayer6);
0853
0854 zero_trackExtrap(&storageTrackNoTEC);
0855
0856 zero_trackExtrap(&storageTrackNoTID);
0857
0858 storageRecMuon_.n_ = 0;
0859 storageTrackHit_.n_ = 0;
0860 }
0861
0862
0863
0864 void ResidualRefitting::zero_muon(ResidualRefitting::storage_muon* str) {
0865 str->n_ = 0;
0866
0867 for (int i = 0; i < ResidualRefitting::N_MAX_STORED; i++) {
0868 str->pt_[i] = -9999;
0869 str->eta_[i] = -9999;
0870 str->p_[i] = -9999;
0871 str->phi_[i] = -9999;
0872 str->numRecHits_[i] = -9999;
0873 str->chiSq_[i] = -9999;
0874 str->ndf_[i] = -9999;
0875 str->chiSqOvrNdf_[i] = -9999;
0876 }
0877 }
0878
0879
0880
0881 void ResidualRefitting::zero_trackExtrap(ResidualRefitting::storage_trackExtrap* str) {
0882 str->n_ = 0;
0883 for (int i = 0; i < ResidualRefitting::N_MAX_STORED_HIT; i++) {
0884 str->muonLink_[i] = -9999;
0885 str->recLink_[i] = -9999;
0886 str->gpX_[i] = -9999;
0887 str->gpY_[i] = -9999;
0888 str->gpZ_[i] = -9999;
0889 str->gpEta_[i] = -9999;
0890 str->gpPhi_[i] = -9999;
0891 str->lpX_[i] = -9999;
0892 str->lpY_[i] = -9999;
0893 str->lpZ_[i] = -9999;
0894 str->resX_[i] = -9999;
0895 str->resY_[i] = -9999;
0896 str->resZ_[i] = -9999;
0897 }
0898 }
0899
0900
0901
0902 void ResidualRefitting::beginJob() {
0903 edm::LogVerbatim("ResidualRefitting") << "Creating file " << outputFileName_.c_str();
0904
0905 outputFile_ = new TFile(outputFileName_.c_str(), "RECREATE");
0906
0907 outputTree_ = new TTree("outputTree", "outputTree");
0908
0909 outputTree_->Branch("eventInfo",
0910 &eventInfo_,
0911 "evtNum_/I:"
0912 "runNum_/I");
0913
0914 ResidualRefitting::branchMuon(storageGmrOld_, "gmrOld");
0915 ResidualRefitting::branchMuon(storageGmrNew_, "gmrNew");
0916 ResidualRefitting::branchMuon(storageGmrNoSt1_, "gmrNoSt1");
0917 ResidualRefitting::branchMuon(storageGmrNoSt2_, "gmrNoSt2");
0918 ResidualRefitting::branchMuon(storageGmrNoSt3_, "gmrNoSt3");
0919 ResidualRefitting::branchMuon(storageGmrNoSt4_, "gmrNoSt4");
0920
0921 ResidualRefitting::branchMuon(storageSamNew_, "samNew");
0922 ResidualRefitting::branchMuon(storageSamNoSt1_, "samNoSt1");
0923 ResidualRefitting::branchMuon(storageSamNoSt2_, "samNoSt2");
0924 ResidualRefitting::branchMuon(storageSamNoSt3_, "samNoSt3");
0925 ResidualRefitting::branchMuon(storageSamNoSt4_, "samNoSt4");
0926
0927 ResidualRefitting::branchMuon(storageTrkNew_, "trkNew");
0928 ResidualRefitting::branchMuon(storageGmrNoPXBLayer1, "gmrNoPXBLayer1");
0929 ResidualRefitting::branchMuon(storageGmrNoPXBLayer2, "gmrNoPXBLayer2");
0930 ResidualRefitting::branchMuon(storageGmrNoPXBLayer3, "gmrNoPXBLayer3");
0931 ResidualRefitting::branchMuon(storageGmrNoPXF, "gmrNoPXF");
0932 ResidualRefitting::branchMuon(storageGmrNoTIBLayer1, "gmrNoTIBLayer1");
0933 ResidualRefitting::branchMuon(storageGmrNoTIBLayer2, "gmrNoTIBLayer2");
0934 ResidualRefitting::branchMuon(storageGmrNoTIBLayer3, "gmrNoTIBLayer3");
0935 ResidualRefitting::branchMuon(storageGmrNoTIBLayer4, "gmrNoTIBLayer4");
0936 ResidualRefitting::branchMuon(storageGmrNoTID, "gmrNoTID");
0937 ResidualRefitting::branchMuon(storageGmrNoTOBLayer1, "gmrNoTOBLayer1");
0938 ResidualRefitting::branchMuon(storageGmrNoTOBLayer2, "gmrNoTOBLayer2");
0939 ResidualRefitting::branchMuon(storageGmrNoTOBLayer3, "gmrNoTOBLayer3");
0940 ResidualRefitting::branchMuon(storageGmrNoTOBLayer4, "gmrNoTOBLayer4");
0941 ResidualRefitting::branchMuon(storageGmrNoTOBLayer5, "gmrNoTOBLayer5");
0942 ResidualRefitting::branchMuon(storageGmrNoTOBLayer6, "gmrNoTOBLayer6");
0943 ResidualRefitting::branchMuon(storageGmrNoTEC, "gmrNoTEC");
0944
0945 ResidualRefitting::branchMuon(storageTrkNoPXBLayer1, "trkNoPXBLayer1");
0946 ResidualRefitting::branchMuon(storageTrkNoPXBLayer2, "trkNoPXBLayer2");
0947 ResidualRefitting::branchMuon(storageTrkNoPXBLayer3, "trkNoPXBLayer3");
0948 ResidualRefitting::branchMuon(storageTrkNoPXF, "trkNoPXF");
0949 ResidualRefitting::branchMuon(storageTrkNoTIBLayer1, "trkNoTIBLayer1");
0950 ResidualRefitting::branchMuon(storageTrkNoTIBLayer2, "trkNoTIBLayer2");
0951 ResidualRefitting::branchMuon(storageTrkNoTIBLayer3, "trkNoTIBLayer3");
0952 ResidualRefitting::branchMuon(storageTrkNoTIBLayer4, "trkNoTIBLayer4");
0953 ResidualRefitting::branchMuon(storageTrkNoTID, "trkNoTID");
0954 ResidualRefitting::branchMuon(storageTrkNoTOBLayer1, "trkNoTOBLayer1");
0955 ResidualRefitting::branchMuon(storageTrkNoTOBLayer2, "trkNoTOBLayer2");
0956 ResidualRefitting::branchMuon(storageTrkNoTOBLayer3, "trkNoTOBLayer3");
0957 ResidualRefitting::branchMuon(storageTrkNoTOBLayer4, "trkNoTOBLayer4");
0958 ResidualRefitting::branchMuon(storageTrkNoTOBLayer5, "trkNoTOBLayer5");
0959 ResidualRefitting::branchMuon(storageTrkNoTOBLayer6, "trkNoTOBLayer6");
0960 ResidualRefitting::branchMuon(storageTrkNoTEC, "trkNoTEC");
0961
0962 outputBranch_ = outputTree_->Branch("recHitsNew",
0963 &storageRecMuon_,
0964
0965 "n_/I:"
0966 "muonLink_[1000]/I:"
0967
0968 "system_[1000]/I:"
0969 "endcap_[1000]/I:"
0970 "station_[1000]/I:"
0971 "ring_[1000]/I:"
0972 "chamber_[1000]/I:"
0973 "layer_[1000]/I:"
0974 "superLayer_[1000]/I:"
0975 "wheel_[1000]/I:"
0976 "sector_[1000]/I:"
0977
0978 "gpX_[1000]/F:"
0979 "gpY_[1000]/F:"
0980 "gpZ_[1000]/F:"
0981 "gpEta_[1000]/F:"
0982 "gpPhi_[1000]/F:"
0983 "lpX_[1000]/F:"
0984 "lpY_[1000]/F:"
0985 "lpZ_[1000]/F");
0986
0987 outputBranch_ = outputTree_->Branch("recHitsTracker",
0988 &storageTrackHit_,
0989
0990 "n_/I:"
0991
0992 "muonLink_[1000]/I:"
0993 "detector_[1000]/I:"
0994 "subdetector_[1000]/I:"
0995 "blade_[1000]/I:"
0996 "disk_[1000]/I:"
0997 "ladder_[1000]/I:"
0998 "layer_[1000]/I:"
0999 "module_[1000]/I:"
1000 "panel_[1000]/I:"
1001 "ring_[1000]/I:"
1002 "side_[1000]/I:"
1003 "wheel_[1000]/I:"
1004
1005 "gpX_[1000]/F:"
1006 "gpY_[1000]/F:"
1007 "gpZ_[1000]/F:"
1008 "gpEta_[1000]/F:"
1009 "gpPhi_[1000]/F:"
1010 "lpX_[1000]/F:"
1011 "lpY_[1000]/F:"
1012 "lpZ_[1000]/F");
1013
1014 ResidualRefitting::branchTrackExtrap(storageTrackExtrapRec_, "trkExtrap");
1015 ResidualRefitting::branchTrackExtrap(storageTrackExtrapRecNoSt1_, "trkExtrapNoSt1");
1016 ResidualRefitting::branchTrackExtrap(storageTrackExtrapRecNoSt2_, "trkExtrapNoSt2");
1017 ResidualRefitting::branchTrackExtrap(storageTrackExtrapRecNoSt3_, "trkExtrapNoSt3");
1018 ResidualRefitting::branchTrackExtrap(storageTrackExtrapRecNoSt4_, "trkExtrapNoSt4");
1019
1020 ResidualRefitting::branchTrackExtrap(storageTrackExtrapTracker_, "trkExtrapTracker");
1021 ResidualRefitting::branchTrackExtrap(storageTrackNoPXF, "trkExtrapNoPXF");
1022 ResidualRefitting::branchTrackExtrap(storageTrackNoPXBLayer1, "trkExtrapNoPXBLayer1");
1023 ResidualRefitting::branchTrackExtrap(storageTrackNoPXBLayer2, "trkExtrapNoPXBLayer2");
1024 ResidualRefitting::branchTrackExtrap(storageTrackNoPXBLayer3, "trkExtrapNoPXBLayer3");
1025 ResidualRefitting::branchTrackExtrap(storageTrackNoTIBLayer1, "trkExtrapNoTIBLayer1");
1026 ResidualRefitting::branchTrackExtrap(storageTrackNoTIBLayer2, "trkExtrapNoTIBLayer2");
1027 ResidualRefitting::branchTrackExtrap(storageTrackNoTIBLayer3, "trkExtrapNoTIBLayer3");
1028 ResidualRefitting::branchTrackExtrap(storageTrackNoTIBLayer4, "trkExtrapNoTIBLayer4");
1029 ResidualRefitting::branchTrackExtrap(storageTrackNoTID, "trkExtrapNoTID");
1030 ResidualRefitting::branchTrackExtrap(storageTrackNoTOBLayer1, "trkExtrapNoTOBLayer1");
1031 ResidualRefitting::branchTrackExtrap(storageTrackNoTOBLayer2, "trkExtrapNoTOBLayer2");
1032 ResidualRefitting::branchTrackExtrap(storageTrackNoTOBLayer3, "trkExtrapNoTOBLayer3");
1033 ResidualRefitting::branchTrackExtrap(storageTrackNoTOBLayer4, "trkExtrapNoTOBLayer4");
1034 ResidualRefitting::branchTrackExtrap(storageTrackNoTOBLayer5, "trkExtrapNoTOBLayer5");
1035 ResidualRefitting::branchTrackExtrap(storageTrackNoTOBLayer6, "trkExtrapNoTOBLayer6");
1036 ResidualRefitting::branchTrackExtrap(storageTrackNoTEC, "trkExtrapNoTEC");
1037
1038 ResidualRefitting::branchTrackExtrap(trackExtrap120_, "trackCyl120");
1039 ResidualRefitting::branchTrackExtrap(samExtrap120_, "samCyl120");
1040 }
1041
1042
1043
1044 void ResidualRefitting::branchMuon(ResidualRefitting::storage_muon& storageTmp, std::string branchName) {
1045 outputBranch_ = outputTree_->Branch(branchName.c_str(),
1046 &storageTmp,
1047 "n_/I:"
1048 "charge_[10]/I:"
1049 "pt_[10]/F:"
1050 "eta_[10]/F:"
1051 "p_[10]/F:"
1052 "phi_[10]/F:"
1053 "numRecHits_[10]/I:"
1054 "chiSq_[10]/F:"
1055 "ndf_[10]/F:"
1056 "chiSqOvrNdf_[10]/F"
1057
1058 );
1059 }
1060
1061
1062
1063 void ResidualRefitting::branchTrackExtrap(ResidualRefitting::storage_trackExtrap& storageTmp, std::string branchName) {
1064 outputBranch_ = outputTree_->Branch(branchName.c_str(),
1065 &storageTmp,
1066 "n_/I:"
1067 "muonLink_[1000]/I:"
1068 "recLink_[1000]/I:"
1069 "gpX_[1000]/F:"
1070 "gpY_[1000]/F:"
1071 "gpZ_[1000]/F:"
1072 "gpEta_[1000]/F:"
1073 "gpPhi_[1000]/F:"
1074 "lpX_[1000]/F:"
1075 "lpY_[1000]/F:"
1076 "lpZ_[1000]/F:"
1077 "resX_[1000]/F:"
1078 "resY_[1000]/F:"
1079 "resZ_[1000]/F"
1080
1081 );
1082 }
1083
1084
1085
1086 void ResidualRefitting::endJob() {
1087 outputFile_->Write();
1088
1089 outputFile_->Close();
1090 }
1091
1092
1093
1094 FreeTrajectoryState ResidualRefitting::freeTrajStateMuon(reco::TrackRef muon) {
1095 math::XYZPoint innerPos = muon->referencePoint();
1096 math::XYZVector innerMom = muon->momentum();
1097 if (debug_)
1098 edm::LogVerbatim("ResidualRefitting")
1099 << "Inner Pos: "
1100 << "\tx = " << innerPos.X() << "\ty = " << innerPos.Y() << "\tz = " << innerPos.Z();
1101
1102 GlobalPoint innerPoint(innerPos.X(), innerPos.Y(), innerPos.Z());
1103 GlobalVector innerVec(innerMom.X(), innerMom.Y(), innerMom.Z());
1104
1105 FreeTrajectoryState recoStart(innerPoint, innerVec, muon->charge(), theField);
1106 return recoStart;
1107 }
1108
1109
1110
1111
1112
1113
1114
1115
1116 void ResidualRefitting::dumpTrackExtrap(const ResidualRefitting::storage_trackExtrap& track) {
1117 edm::LogVerbatim("ResidualRefitting") << "\n\nExtrapolation Dump:\n";
1118 for (unsigned int i = 0; i < (unsigned int)track.n_; i++) {
1119
1120
1121 printf("%d\tmuonLink= %d", i, (int)track.muonLink_[i]);
1122 printf("\trecLink = %d", (int)track.recLink_[i]);
1123
1124
1125
1126
1127
1128
1129 printf("\t\tLocal\tx = %0.3f", (float)track.lpX_[i]);
1130 printf("\ty = %0.3f", (float)track.lpY_[i]);
1131 printf("\tz = %0.3f\n", (float)track.lpZ_[i]);
1132 }
1133 }
1134
1135
1136
1137 void ResidualRefitting::dumpMuonRecHits(const ResidualRefitting::storage_hit& hit) {
1138 edm::LogVerbatim("ResidualRefitting") << "Muon Rec Hits Dump:\n";
1139 for (unsigned int i = 0; i < (unsigned int)hit.n_; i++) {
1140
1141
1142 printf("%d\tsubdetector = %d\t superLayer =%d", i, (int)hit.system_[i], (int)hit.superLayer_[i]);
1143
1144
1145
1146
1147
1148
1149 printf("\t\tLocal\tx = %0.3f", (float)hit.lpX_[i]);
1150 printf("\ty = %0.3f", (float)hit.lpY_[i]);
1151 printf("\tz = %0.3f\n", (float)hit.lpZ_[i]);
1152 }
1153 }
1154
1155
1156
1157 void ResidualRefitting::dumpTrackHits(const ResidualRefitting::storage_trackHit& hit) {
1158 edm::LogVerbatim("ResidualRefitting") << "Tracker Rec Hits Dump:\n";
1159 for (unsigned int i = 0; i < (unsigned int)hit.n_; i++) {
1160
1161
1162 printf("%d\tsubdetector = %d", i, (int)hit.subdetector_[i]);
1163 printf("\tlayer = %d", (int)hit.layer_[i]);
1164
1165
1166
1167
1168
1169
1170 printf("\t\tLocal\tx = %0.3f", (float)hit.lpX_[i]);
1171 printf("\ty = %0.3f", (float)hit.lpY_[i]);
1172 printf("\tz = %0.3f\n", (float)hit.lpZ_[i]);
1173 }
1174 }
1175
1176
1177
1178 void ResidualRefitting::dumpTrackRef(reco::TrackRef muon, std::string str) {
1179 float pt = muon->pt();
1180 float p = muon->p();
1181 float eta = muon->eta();
1182 float phi = muon->phi();
1183 printf("\t%s: \tp = %4.2f \t pt = %4.2f \t eta = %4.2f \t phi = %4.2f\n", str.c_str(), p, pt, eta, phi);
1184 }
1185
1186 DEFINE_FWK_MODULE(ResidualRefitting);
1187
1188
1189
1190