35 printf(
"\n==enter==CSCEfficiency===== run %u\tevent %llu\tn Analyzed %i\n", iRun, iEvent,
nEventsAnalyzed);
42 printf(
"\tget handles for digi collections\n");
48 printf(
"\tpass handles\n");
64 event.getByToken(
co_token, correlatedlcts);
70 event.getByToken(
se_token, segments);
71 event.getByToken(
tk_token, trackCollectionH);
76 printf(
"\tget the CSC geometry.\n");
84 bool triggerPassed =
true;
99 if (
theService->magneticField()->inTesla(gpZero).mag2() < 0.1) {
106 fillDigiInfo(alcts, clcts, correlatedlcts, wires, strips, simhits, rechits, segments, cscGeom);
110 event.getByLabel(muonTag_, muons);
113 event.getByLabel(
"offlineBeamSpot", beamSpotHandle);
116 std::vector<reco::MuonCollection::const_iterator> goodMuons_it;
117 unsigned int nPositiveZ = 0;
118 unsigned int nNegativeZ = 0;
119 float muonOuterZPosition = -99999.;
122 std::cout <<
" muons.size() = " << muons->size() << std::endl;
123 for (reco::MuonCollection::const_iterator
muon = muons->begin();
muon != muons->end(); ++
muon) {
126 std::cout <<
" iMuon = " <<
muon - muons->begin() <<
" charge = " <<
muon->charge() <<
" p = " <<
muon->p()
127 <<
" pt = " <<
muon->pt() <<
" eta = " <<
muon->eta() <<
" phi = " <<
muon->phi()
128 <<
" matches = " <<
muon->matches().size()
130 <<
" GLB/TR/STA = " <<
muon->isGlobalMuon() <<
"/" <<
muon->isTrackerMuon() <<
"/" 131 <<
muon->isStandAloneMuon() << std::endl;
133 if (!(
muon->isTrackerMuon() &&
muon->isGlobalMuon())) {
138 (
muon->isolationR03().sumPt +
muon->isolationR03().emEt +
muon->isolationR03().hadEt) /
muon->track()->pt();
140 std::cout <<
" relISO = " << relISO <<
" emVetoEt = " <<
muon->isolationR03().emVetoEt
142 <<
" dxy = " << fabs(
muon->track()->dxy(vertexBeamSpot.
position())) << std::endl;
146 fabs(
muon->track()->dxy(vertexBeamSpot.
position())) > 0.2 ||
muon->pt() < 6.) {
150 if (
muon->track()->hitPattern().numberOfValidPixelHits() < 1 ||
151 muon->track()->hitPattern().numberOfValidTrackerHits() < 11 ||
152 muon->combinedMuon()->hitPattern().numberOfValidMuonHits() < 1 ||
153 muon->combinedMuon()->normalizedChi2() > 10. ||
muon->numberOfMatches() < 2) {
157 float zOuter =
muon->combinedMuon()->outerPosition().z();
158 float rhoOuter =
muon->combinedMuon()->outerPosition().rho();
159 bool passDepth =
true;
162 if (fabs(zOuter) < 660. && rhoOuter > 400. && rhoOuter < 540.) {
167 else if (fabs(zOuter) > 550. && fabs(zOuter) < 650. && rhoOuter < 300.) {
172 else if (fabs(zOuter) > 680. && fabs(zOuter) < 880. && rhoOuter < 540.) {
179 goodMuons_it.push_back(
muon);
180 if (
muon->track()->momentum().z() > 0.) {
183 if (
muon->track()->momentum().z() < 0.) {
192 std::cout <<
"Start track loop over " << trackCollection.
size() <<
" tracks" << std::endl;
199 std::cout <<
" nNegativeZ = " << nNegativeZ <<
" nPositiveZ = " << nPositiveZ << std::endl;
201 if (nNegativeZ > 1 || nPositiveZ > 1) {
204 bool trackOK =
false;
206 std::cout <<
" goodMuons_it.size() = " << goodMuons_it.size() << std::endl;
208 for (
size_t iM = 0; iM < goodMuons_it.size(); ++iM) {
212 float deltaR =
pow(
track->phi() - goodMuons_it[iM]->track()->phi(), 2) +
213 pow(
track->eta() - goodMuons_it[iM]->track()->eta(), 2);
214 deltaR =
sqrt(deltaR);
216 std::cout <<
" TR mu match to a tr: deltaR = " << deltaR
217 <<
" dPt = " <<
track->pt() - goodMuons_it[iM]->track()->pt() << std::endl;
219 if (deltaR > 0.01 || fabs(
track->pt() - goodMuons_it[iM]->track()->pt()) > 0.1) {
226 muonOuterZPosition = goodMuons_it[iM]->combinedMuon()->outerPosition().z();
233 std::cout <<
" failed: trackOK " << std::endl;
239 if (trackCollection.
size() > 2) {
243 if (!
i && 2 == trackCollection.
size()) {
246 if (
track->outerPosition().z() * trackTwo->outerPosition().z() > 0) {
253 std::cout <<
"i track = " <<
i <<
" P = " <<
track->p() <<
" chi2/ndf = " <<
track->normalizedChi2()
254 <<
" nSeg = " << segments->size() << std::endl;
261 <<
track->qoverpError() << std::endl;
264 <<
" outer position = " <<
track->outerPosition() << std::endl;
265 std::cout <<
"track eta (outer) = " <<
track->outerPosition().eta()
266 <<
" phi (outer) = " <<
track->outerPosition().phi() << std::endl;
267 if (fabs(
track->innerPosition().z()) > 500.) {
269 std::cout <<
" dump inner state MUON detid = " << debug.
dumpMuonId(innerDetId) << std::endl;
271 if (fabs(
track->outerPosition().z()) > 500.) {
273 std::cout <<
" dump outer state MUON detid = " << debug.
dumpMuonId(outerDetId) << std::endl;
289 float dpT_ov_pT = 0.;
290 if (fabs(
track->pt()) > 0.001) {
302 if (!segments->size()) {
310 if (
magField && (dpT_ov_pT > 0.5)) {
318 CLHEP::Hep3Vector r3T_inner(
track->innerPosition().x(),
track->innerPosition().y(),
track->innerPosition().z());
319 CLHEP::Hep3Vector r3T(
track->outerPosition().x(),
track->outerPosition().y(),
track->outerPosition().z());
322 CLHEP::Hep3Vector p3T(
track->outerMomentum().x(),
track->outerMomentum().y(),
track->outerMomentum().z());
323 CLHEP::Hep3Vector p3_propagated, r3_propagated;
326 cov_propagated *= 1
e-20;
330 std::cout <<
" p = " <<
track->p() <<
" norm chi2 = " <<
track->normalizedChi2() << std::endl;
331 std::cout <<
" dump the very first FTS = " << debug.
dumpFTS(ftsStart) << std::endl;
336 if (
track->outerPosition().z() > 0) {
343 std::vector<CSCDetId> refME;
344 for (
int iS = 1; iS < 5; ++iS) {
345 for (
int iR = 1; iR < 4; ++iR) {
346 if (1 != iS && iR > 2) {
348 }
else if (4 == iS && iR > 1) {
351 refME.push_back(
CSCDetId(endcap, iS, iR, chamber));
355 for (
size_t iSt = 0; iSt < refME.size(); ++iSt) {
357 std::cout <<
"loop iStatation = " << iSt << std::endl;
358 std::cout <<
"refME[iSt]: st = " << refME[iSt].station() <<
" rg = " << refME[iSt].ring() << std::endl;
360 std::map<std::string, bool> chamberTypes;
361 chamberTypes[
"ME11"] =
false;
362 chamberTypes[
"ME12"] =
false;
363 chamberTypes[
"ME13"] =
false;
364 chamberTypes[
"ME21"] =
false;
365 chamberTypes[
"ME22"] =
false;
366 chamberTypes[
"ME31"] =
false;
367 chamberTypes[
"ME32"] =
false;
368 chamberTypes[
"ME41"] =
false;
384 getFromFTS(ftsStart, p3_propagated, r3_propagated, charge, cov_propagated);
385 float feta = fabs(r3_propagated.eta());
386 float phi = r3_propagated.phi();
390 map<std::string, bool>::iterator iter;
393 for (iter = chamberTypes.begin(); iter != chamberTypes.end(); iter++) {
396 if (iter->second && (iterations - 1) ==
int(iSt)) {
398 std::cout <<
" Chamber type " << iter->first <<
" is a candidate..." << std::endl;
399 std::cout <<
" station() = " << refME[iSt].station() <<
" ring() = " << refME[iSt].ring()
400 <<
" iSt = " << iSt << std::endl;
402 std::vector<int> coupleOfChambers;
406 for (
size_t iCh = 0; iCh < coupleOfChambers.size(); ++iCh) {
409 std::cout <<
" Check chamber N = " << coupleOfChambers.at(iCh) << std::endl;
413 [coupleOfChambers.at(iCh) -
FirstCh])) {
418 const BoundPlane bpCh = cscGeom->
idToDet(cscChamber->geographicalId())->surface();
420 float dz = fabs(bpCh.position().z() - zFTS);
421 float zDistInner =
track->innerPosition().z() - bpCh.position().z();
422 float zDistOuter =
track->outerPosition().z() - bpCh.position().z();
425 std::cout <<
" zIn = " <<
track->innerPosition().z() <<
" zOut = " <<
track->outerPosition().z()
426 <<
" zSurf = " << bpCh.position().z() << std::endl;
428 if (!
isIPdata && (zDistInner * zDistOuter > 0. || fabs(zDistInner) < 15. ||
429 fabs(zDistOuter) < 15.)) {
431 std::cout <<
" Not an intermediate (as defined) point... Skip." << std::endl;
436 if (fabs(muonOuterZPosition) - fabs(bpCh.position().z()) < 0 ||
437 fabs(muonOuterZPosition - bpCh.position().z()) < 15.) {
445 tSOSDest =
propagate(ftsStart, cscGeom->
idToDet(cscChamber->geographicalId())->surface());
450 std::cout <<
"TSOS not valid! Break." << std::endl;
455 std::cout <<
" info: dz<0.1" << std::endl;
459 bool inDeadZone =
false;
461 for (
int iLayer = 0; iLayer < 6; ++iLayer) {
462 bool extrapolationPassed =
true;
464 std::cout <<
" iLayer = " << iLayer <<
" dump FTS init = " << debug.
dumpFTS(ftsInit) << std::endl;
465 std::cout <<
" dump detid = " << debug.
dumpMuonId(cscChamber->geographicalId()) << std::endl;
466 std::cout <<
"Surface to propagate to: pos = " << cscChamber->layer(iLayer + 1)->surface().position()
467 <<
" eta = " << cscChamber->layer(iLayer + 1)->surface().position().eta()
468 <<
" phi = " << cscChamber->layer(iLayer + 1)->surface().position().phi() << std::endl;
471 tSOSDest =
propagate(ftsInit, cscChamber->layer(iLayer + 1)->surface());
475 std::cout <<
" Propagation between layers successful: dump FTS end = " << debug.
dumpFTS(ftsInit)
477 getFromFTS(ftsInit, p3_propagated, r3_propagated, charge, cov_propagated);
480 std::cout <<
"Propagation between layers not successful - notValid TSOS" << std::endl;
481 extrapolationPassed =
false;
486 if (extrapolationPassed) {
487 GlobalPoint theExtrapolationPoint(r3_propagated.x(), r3_propagated.y(), r3_propagated.z());
488 LocalPoint theLocalPoint = cscChamber->layer(iLayer + 1)->toLocal(theExtrapolationPoint);
490 inDeadZone = (inDeadZone ||
492 theLocalPoint.x(), theLocalPoint.y(), refME[iSt].station(), refME[iSt].ring()));
494 std::cout <<
" Candidate chamber: extrapolated LocalPoint = " << theLocalPoint
495 <<
"inDeadZone = " << inDeadZone << std::endl;
510 std::cout <<
"Do efficiencies..." << std::endl;
513 bool angle_flag =
true;
526 std::cout <<
" Not in active area for all layers" << std::endl;
536 std::cout <<
" TSOS not valid..." << std::endl;
542 printf(
"==exit===CSCEfficiency===== run %u\tevent %llu\n\n", iRun, iEvent);
bool applyTrigger(edm::Handle< edm::TriggerResults > &hltR, const edm::TriggerNames &triggerNames)
edm::EDGetTokenT< CSCStripDigiCollection > sd_token
const GeomDet * idToDet(DetId) const override
void chooseDirection(CLHEP::Hep3Vector &innerPosition, CLHEP::Hep3Vector &outerPosition)
void ringCandidates(int station, float absEta, std::map< std::string, bool > &chamberTypes)
Geom::Phi< T > phi() const
unsigned long long EventNumber_t
edm::EDGetTokenT< CSCCorrelatedLCTDigiCollection > co_token
bool recSimHitEfficiency(CSCDetId &id, FreeTrajectoryState &ftsChamber)
edm::EDGetTokenT< CSCCLCTDigiCollection > cl_token
const Plane & surface() const
The nominal surface of the GeomDet.
bool getAbsoluteEfficiency
float caloCompatibility(const reco::Muon &muon)
bool emptyChambers[2][4][4][(36-1+1)]
edm::EDGetTokenT< CSCSegmentCollection > se_token
FreeTrajectoryState getFromCLHEP(const CLHEP::Hep3Vector &p3, const CLHEP::Hep3Vector &r3, int charge, const AlgebraicSymMatrix66 &cov, const MagneticField *field)
std::string dumpMuonId(const DetId &id) const
std::string dumpFTS(const FreeTrajectoryState &fts) const
edm::EDGetTokenT< edm::PSimHitContainer > sh_token
MuonServiceProxy * theService
edm::EDGetTokenT< CSCWireDigiCollection > wd_token
FreeTrajectoryState const * freeState(bool withErrors=true) const
DetId geographicalId() const
The label of this GeomDet.
void getFromFTS(const FreeTrajectoryState &fts, CLHEP::Hep3Vector &p3, CLHEP::Hep3Vector &r3, int &charge, AlgebraicSymMatrix66 &cov)
bool efficienciesPerChamber(CSCDetId &id, const CSCChamber *cscChamber, FreeTrajectoryState &ftsChamber)
void chamberCandidates(int station, int ring, float phi, std::vector< int > &coupleOfChambers)
bool stripWire_Efficiencies(CSCDetId &cscDetId, FreeTrajectoryState &ftsChamber)
ROOT::Math::SMatrix< double, 6, 6, ROOT::Math::MatRepSym< double, 6 > > AlgebraicSymMatrix66
edm::EDGetTokenT< CSCRecHit2DCollection > rh_token
GlobalPoint position() const
void fillDigiInfo(edm::Handle< CSCALCTDigiCollection > &alcts, edm::Handle< CSCCLCTDigiCollection > &clcts, edm::Handle< CSCCorrelatedLCTDigiCollection > &correlatedlcts, edm::Handle< CSCWireDigiCollection > &wires, edm::Handle< CSCStripDigiCollection > &strips, edm::Handle< edm::PSimHitContainer > &simhits, edm::Handle< CSCRecHit2DCollection > &rechits, edm::Handle< CSCSegmentCollection > &segments, edm::ESHandle< CSCGeometry > &cscGeom)
T const * product() const
const CSCChamber * chamber(CSCDetId id) const
Return the chamber corresponding to given DetId.
bool recHitSegment_Efficiencies(CSCDetId &cscDetId, const CSCChamber *cscChamber, FreeTrajectoryState &ftsChamber)
unsigned int printout_NEvents
bool inSensitiveLocalRegion(double xLocal, double yLocal, int station, int ring)
strips
#turn off noise in all subdetectors simHcalUnsuppressedDigis.doNoise = False mix.digitizers.hcal.doNoise = False simEcalUnsuppressedDigis.doNoise = False mix.digitizers.ecal.doNoise = False simEcalUnsuppressedDigis.doESNoise = False simSiPixelDigis.AddNoise = False mix.digitizers.pixel.AddNoise = False simSiStripDigis.Noise = False mix.digitizers.strip.AddNoise = False
const Point & position() const
position
const PositionType & position() const
unsigned int minTrackHits
edm::EDGetTokenT< CSCALCTDigiCollection > al_token
edm::EDGetTokenT< edm::TriggerResults > ht_token
Power< A, B >::type pow(const A &a, const B &b)
TrajectoryStateOnSurface propagate(FreeTrajectoryState &ftsStart, const BoundPlane &bp)
edm::EDGetTokenT< edm::View< reco::Track > > tk_token