64 wds_token = consumes<CSCWireDigiCollection>(
edm::InputTag(
"simMuonCSCDigis",
"MuonCSCWireDigi") );
65 sds_token = consumes<CSCStripDigiCollection>(
edm::InputTag(
"simMuonCSCDigis",
"MuonCSCStripDigi") );
66 wdr_token = consumes<CSCWireDigiCollection>(
edm::InputTag(
"muonCSCDigis",
"MuonCSCWireDigi") );
67 sdr_token = consumes<CSCStripDigiCollection>(
edm::InputTag(
"muonCSCDigis",
"MuonCSCStripDigi") );
85 makeHistogramsForMessyEvents = pset.
getUntrackedParameter<
bool>(
"makeHistogramsForMessyEvebts",
false);
103 <<
"\n\t===== CSCSkim =====\n"
104 <<
"\t\ttype of skim ...............................\t" << typeOfSkim
105 <<
"\t\tminimum number of layers with hits .........\t" << nLayersWithHitsMinimum
106 <<
"\n\t\tminimum number of chambers w/ hit layers..\t" << minimumHitChambers
107 <<
"\n\t\tminimum number of segments ...............\t" << minimumSegments
108 <<
"\n\t\tdemand chambers on both sides.............\t" << demandChambersBothSides
109 <<
"\n\t\tmake histograms...........................\t" << makeHistograms
110 <<
"\n\t\t..for messy events........................\t" << makeHistogramsForMessyEvents
111 <<
"\n\t===================\n\n";
132 nEventsChambersBothSides = 0;
133 nEventsOverlappingChambers = 0;
135 nEventsCertainChamber = 0;
136 nEventsDTOverlap = 0;
138 nEventsLongSATrack = 0;
139 nEventsForBFieldStudies = 0;
143 if (makeHistograms || makeHistogramsForMessyEvents) {
147 theHistogramFile->cd();
149 if (makeHistograms) {
151 hxnRecHits =
new TH1F(
"hxnRecHits",
"n RecHits",61,-0.5,60.5);
152 hxnSegments =
new TH1F(
"hxnSegments",
"n Segments",11,-0.5,10.5);
153 hxnHitChambers =
new TH1F(
"hxnHitsChambers",
"n chambers with hits",11,-0.5,10.5);
154 hxnRecHitsSel =
new TH1F(
"hxnRecHitsSel",
"n RecHits selected",61,-0.5,60.5);
156 xxP =
new TH1F(
"xxP",
"P global",100,0.,200.);
157 xxnValidHits =
new TH1F(
"xxnValidHits",
"n valid hits global",61,-0.5,60.5);
158 xxnTrackerHits =
new TH1F(
"xxnTrackerHits",
"n tracker hits global",61,-0.5,60.5);
159 xxnCSCHits =
new TH1F(
"xxnCSCHits",
"n CSC hits global",41,-0.5,40.5);
160 xxredChiSq =
new TH1F(
"xxredChiSq",
"red chisq global",100,0.,100.);
165 if (makeHistogramsForMessyEvents) {
167 mevnRecHits0 =
new TH1F(
"mevnRecHits0",
"n RecHits",121,-0.5,120.5);
168 mevnChambers0 =
new TH1F(
"mevnChambers0",
"n chambers with hits",21,-0.5,20.5);
169 mevnSegments0 =
new TH1F(
"mevnSegments0",
"n Segments",21,-0.5,20.5);
170 mevnRecHits1 =
new TH1F(
"mevnRecHits1",
"n RecHits",100,0.,300.);
171 mevnChambers1 =
new TH1F(
"mevnChambers1",
"n chambers with hits",50,0.,50.);
172 mevnSegments1 =
new TH1F(
"mevnSegments1",
"n Segments",30,0.,30.);
187 if (nEventsAnalyzed > 0) {fraction = (float)nEventsSelected / (
float)nEventsAnalyzed;}
190 <<
"\n\n\t====== CSCSkim ==========================================================\n"
191 <<
"\t\ttype of skim ...............................\t" << typeOfSkim <<
"\n"
192 <<
"\t\tevents analyzed ..............\t" << nEventsAnalyzed <<
"\n"
193 <<
"\t\tevents selected ..............\t" << nEventsSelected <<
"\tfraction= " << fraction << std::endl
194 <<
"\t\tevents chambers both sides ...\t" << nEventsChambersBothSides <<
"\n"
195 <<
"\t\tevents w/ overlaps .......... \t" << nEventsOverlappingChambers <<
"\n"
196 <<
"\t\tevents lots of hit chambers . \t" << nEventsMessy <<
"\n"
197 <<
"\t\tevents from certain chamber . \t" << nEventsCertainChamber <<
"\n"
198 <<
"\t\tevents in DT-CSC overlap .... \t" << nEventsDTOverlap <<
"\n"
199 <<
"\t\tevents halo-like ............ \t" << nEventsHaloLike <<
"\n"
200 <<
"\t\tevents w/ long SA track ..... \t" << nEventsLongSATrack <<
"\n"
201 <<
"\t\tevents good for BField ..... \t" << nEventsForBFieldStudies <<
"\n"
202 <<
"\t=========================================================================\n\n";
204 if (makeHistograms || makeHistogramsForMessyEvents) {
206 LogDebug(
"[CSCSkim]") <<
"======= write out my histograms ====\n" ;
207 theHistogramFile->cd();
208 if (makeHistograms) {
210 hxnSegments->Write();
211 hxnHitChambers->Write();
212 hxnRecHitsSel->Write();
214 if (makeHistogramsForMessyEvents) {
215 mevnRecHits0->Write();
216 mevnChambers0->Write();
217 mevnSegments0->Write();
218 mevnRecHits1->Write();
219 mevnChambers1->Write();
220 mevnSegments1->Write();
222 theHistogramFile->Close();
235 iRun =
event.id().run();
236 iEvent =
event.id().event();
238 LogDebug(
"[CSCSkim] EventInfo") <<
"Run: " << iRun <<
"\tEvent: " <<
iEvent <<
"\tn Analyzed: " << nEventsAnalyzed;
249 event.getByToken(wdr_token,wires);
250 event.getByToken(sdr_token,strips);
253 event.getByToken(wds_token,wires);
254 event.getByToken(sds_token,strips);
259 event.getByToken(rh_token,cscRecHits);
263 event.getByToken(seg_token,cscSegments);
267 if (typeOfSkim == 8) {
268 event.getByToken(sam_token,saMuons);
274 if (typeOfSkim == 9) {
275 event.getByToken(sam_token,saMuons);
276 event.getByToken(trk_token,tracks);
277 event.getByToken(glm_token,gMuons);
287 bool basicEvent =
false;
288 if (typeOfSkim == 1 || typeOfSkim == 2) {
289 basicEvent = doCSCSkimming(cscRecHits,cscSegments);
293 bool goodOverlapEvent =
false;
294 if (typeOfSkim == 3) {
295 goodOverlapEvent = doOverlapSkimming(cscSegments);
296 if (goodOverlapEvent) {nEventsOverlappingChambers++;}
300 bool messyEvent =
false;
301 if (typeOfSkim == 4) {
302 messyEvent = doMessyEventSkimming(cscRecHits,cscSegments);
303 if (messyEvent) {nEventsMessy++;}
307 bool hasChamber =
false;
308 if (typeOfSkim == 5) {
309 hasChamber = doCertainChamberSelection(wires,strips);
310 if (hasChamber) {nEventsCertainChamber++;}
314 bool DTOverlapCandidate =
false;
315 if (typeOfSkim == 6) {
316 DTOverlapCandidate = doDTOverlap(cscSegments);
317 if (DTOverlapCandidate) {nEventsDTOverlap++;}
321 bool HaloLike =
false;
322 if (typeOfSkim == 7) {
323 HaloLike = doHaloLike(cscSegments);
324 if (HaloLike) {nEventsHaloLike++;}
328 bool LongSATrack =
false;
329 if (typeOfSkim == 8) {
330 LongSATrack = doLongSATrack(saMuons);
331 if (LongSATrack) {nEventsLongSATrack++;}
335 bool GoodForBFieldStudy =
false;
336 if (typeOfSkim == 9) {
337 GoodForBFieldStudy = doBFieldStudySelection(saMuons,tracks,gMuons);
338 if (GoodForBFieldStudy) {nEventsForBFieldStudies++;}
343 bool selectThisEvent =
false;
344 if (typeOfSkim == 1 || typeOfSkim == 2) {selectThisEvent = basicEvent;}
345 if (typeOfSkim == 3) {selectThisEvent = goodOverlapEvent;}
346 if (typeOfSkim == 4) {selectThisEvent = messyEvent;}
347 if (typeOfSkim == 5) {selectThisEvent = hasChamber;}
348 if (typeOfSkim == 6) {selectThisEvent = DTOverlapCandidate;}
349 if (typeOfSkim == 7) {selectThisEvent = HaloLike;}
350 if (typeOfSkim == 8) {selectThisEvent = LongSATrack;}
351 if (typeOfSkim == 9) {selectThisEvent = GoodForBFieldStudy;}
353 if (selectThisEvent) {nEventsSelected++;}
355 return selectThisEvent;
368 int nRecHits = cscRecHits->size();
372 for (
int i = 0;
i < 600;
i++) {
381 for (recIt = cscRecHits->begin(); recIt != cscRecHits->end(); recIt++) {
385 int kEndcap = idrec.
endcap();
386 int kRing = idrec.
ring();
387 int kStation = idrec.
station();
388 int kChamber = idrec.
chamber();
392 int kSerial = chamberSerial( kEndcap, kStation, kRing, kChamber ) ;
396 int kDigit = (int)
pow((
float)10.,(float)(kLayer-1));
397 cntRecHit[kSerial] += kDigit;
406 int nChambersWithMinimalHits = 0;
407 int nChambersWithMinimalHitsPOS = 0;
408 int nChambersWithMinimalHitsNEG = 0;
410 for (
int i = 0;
i < 600;
i++) {
411 if (cntRecHit[
i] > 0) {
412 int nLayersWithHits = 0;
413 float dummy = (float) cntRecHit[
i];
414 for (
int j = 5;
j > -1;
j--) {
415 float digit = dummy /
pow( (
float)10., (
float)
j );
416 int kCount = (int) digit;
417 if (kCount > 0) nLayersWithHits++;
418 dummy = dummy - ( (float) kCount) *
pow( (
float)10., (
float)j );
420 if (nLayersWithHits > nLayersWithHitsMinimum) {
421 if (
i < 300) {nChambersWithMinimalHitsPOS++;}
422 else {nChambersWithMinimalHitsNEG++;}
426 nChambersWithMinimalHits = nChambersWithMinimalHitsPOS + nChambersWithMinimalHitsNEG;
430 int nSegments = cscSegments->size();
436 if (makeHistograms) {
437 hxnRecHits->Fill(nRecHits);
439 hxnSegments->Fill(nSegments);
440 hxnHitChambers->Fill(nChambersWithMinimalHits);
442 if (nChambersWithMinimalHits > 0) {
443 hxnRecHitsSel->Fill(nRecHits);
450 bool basicEvent = ( nChambersWithMinimalHits >= minimumHitChambers ) && ( nSegments >= minimumSegments );
452 bool chambersOnBothSides = ((nChambersWithMinimalHitsPOS >= minimumHitChambers) && (nChambersWithMinimalHitsNEG >= minimumHitChambers));
454 if (chambersOnBothSides) {nEventsChambersBothSides++;}
456 bool selectEvent =
false;
457 if (typeOfSkim == 1) {selectEvent = basicEvent;}
458 if (typeOfSkim == 2) {selectEvent = chambersOnBothSides;}
462 LogDebug(
"[CSCSkim]") <<
"----- nRecHits = " << nRecHits
463 <<
"\tnChambersWithMinimalHits = " << nChambersWithMinimalHits
464 <<
"\tnSegments = " << nSegments
465 <<
"\tselect? " << selectEvent << std::endl;
495 const int nhitsMinimum = 4;
496 const float chisqMaximum = 100.;
497 const int nAllMaximum = 3;
505 for (
int i=0;
i<600;
i++) {
517 int kEndcap =
id.
endcap();
518 int kStation =
id.station();
519 int kRing =
id.ring();
520 int kChamber =
id.chamber();
521 int kSerial = chamberSerial( kEndcap, kStation, kRing, kChamber);
524 float chisq = (*it).chi2();
525 int nhits = (*it).nRecHits();
528 bool goodSegment = (nhits >= nhitsMinimum) && (chisq < chisqMaximum) ;
542 if (goodSegment) nGood[kSerial]++;
551 bool messyChamber =
false;
552 for (
int i = 0;
i < 600;
i++) {
553 if (nAll[
i] > nAllMaximum) messyChamber =
true;
558 bool consecutiveChambers =
false;
559 for (
int i = 0;
i < 599;
i++) {
560 if ( (nGood[
i]>0) && (nGood[
i+1]>0) ) consecutiveChambers =
true;
563 bool selectThisEvent = !messyChamber && consecutiveChambers;
565 return selectThisEvent;
578 int nRecHits = cscRecHits->size();
582 for (
int i = 0;
i < 600;
i++) {
591 for (recIt = cscRecHits->begin(); recIt != cscRecHits->end(); recIt++) {
595 int kEndcap = idrec.
endcap();
596 int kRing = idrec.
ring();
597 int kStation = idrec.
station();
598 int kChamber = idrec.
chamber();
602 int kSerial = chamberSerial( kEndcap, kStation, kRing, kChamber ) ;
606 int kDigit = (int)
pow((
float)10.,(float)(kLayer-1));
607 cntRecHit[kSerial] += kDigit;
616 int nChambersWithMinimalHits = 0;
617 int nChambersWithMinimalHitsPOS = 0;
618 int nChambersWithMinimalHitsNEG = 0;
620 for (
int i = 0;
i < 600;
i++) {
621 if (cntRecHit[
i] > 0) {
622 int nLayersWithHits = 0;
623 float dummy = (float) cntRecHit[
i];
624 for (
int j = 5;
j > -1;
j--) {
625 float digit = dummy /
pow( (
float)10., (
float)
j );
626 int kCount = (int) digit;
627 if (kCount > 0) nLayersWithHits++;
628 dummy = dummy - ( (float) kCount) *
pow( (
float)10., (
float)j );
630 if (nLayersWithHits > nLayersWithHitsMinimum) {
631 if (
i < 300) {nChambersWithMinimalHitsPOS++;}
632 else {nChambersWithMinimalHitsNEG++;}
636 nChambersWithMinimalHits = nChambersWithMinimalHitsPOS + nChambersWithMinimalHitsNEG;
640 int nSegments = cscSegments->size();
646 if (makeHistogramsForMessyEvents) {
648 mevnRecHits0->Fill(nRecHits);
649 mevnChambers0->Fill(nChambersWithMinimalHits);
650 mevnSegments0->Fill(nSegments);
653 double dummy = (double) nRecHits;
654 if (dummy > 299.9) dummy = 299.9;
655 mevnRecHits1->Fill(dummy);
656 dummy = (double) nChambersWithMinimalHits;
657 if (dummy > 49.9) dummy = 49.9;
658 mevnChambers1->Fill(dummy);
659 dummy = (double) nSegments;
660 if (dummy > 29.9) dummy = 29.9;
661 mevnSegments1->Fill(dummy);
669 bool selectEvent =
false;
670 if ( (nRecHits > 54) && (nChambersWithMinimalHits > 5) ) {selectEvent =
true;}
673 LogDebug(
"[CSCSkim]") <<
"----- nRecHits = " << nRecHits
674 <<
"\tnChambersWithMinimalHits = " << nChambersWithMinimalHits
675 <<
"\tnSegments = " << nSegments
676 <<
"\tselect? " << selectEvent << std::endl;
710 bool certainChamberIsPresentInWires =
false;
713 int kEndcap =
id.
endcap();
714 int kRing =
id.ring();
715 int kStation =
id.station();
716 int kChamber =
id.chamber();
717 if ( (kEndcap == whichEndcap) &&
718 (kStation == whichStation) &&
719 (kRing == whichRing) &&
720 (kChamber == whichChamber) )
721 {certainChamberIsPresentInWires =
true;}
726 bool certainChamberIsPresentInStrips =
false;
729 int kEndcap =
id.
endcap();
730 int kRing =
id.ring();
731 int kStation =
id.station();
732 int kChamber =
id.chamber();
733 if ( (kEndcap == whichEndcap) &&
734 (kStation == whichStation) &&
735 (kRing == whichRing) &&
736 (kChamber == whichChamber) )
737 {certainChamberIsPresentInStrips =
true;}
740 bool certainChamberIsPresent = certainChamberIsPresentInWires || certainChamberIsPresentInStrips;
742 return certainChamberIsPresent;
753 const float chisqMax = 100.;
754 const int nhitsMin = 5;
755 const int maxNSegments = 3;
758 bool DTOverlapCandidate =
false;
765 for (
int i=0;
i<36; ++
i) {
778 int nSegments = cscSegments->size();
779 if (nSegments < 2)
return DTOverlapCandidate;
784 int kEndcap =
id.
endcap();
785 int kStation =
id.station();
786 int kRing =
id.ring();
787 int kChamber =
id.chamber();
789 float chisq = (*it).chi2();
790 int nhits = (*it).nRecHits();
791 bool goodSegment = (chisq < chisqMax) && (nhits >= nhitsMin) ;
793 if ( (kStation == 1) && (kRing == 3) ) {
794 if (kEndcap == 1) {cntMEP13[kChamber-1]++;}
795 if (kEndcap == 2) {cntMEN13[kChamber-1]++;}
797 if ( (kStation == 2) && (kRing == 2) ) {
798 if (kEndcap == 1) {cntMEP22[kChamber-1]++;}
799 if (kEndcap == 2) {cntMEN22[kChamber-1]++;}
801 if ( (kStation == 3) && (kRing == 2) ) {
802 if (kEndcap == 1) {cntMEP32[kChamber-1]++;}
803 if (kEndcap == 2) {cntMEN32[kChamber-1]++;}
811 bool tooManySegments =
false;
812 for (
int i=0;
i<36; ++
i) {
813 if ( (cntMEP13[
i] > maxNSegments) ||
814 (cntMEN13[
i] > maxNSegments) ||
815 (cntMEP22[
i] > maxNSegments) ||
816 (cntMEN22[
i] > maxNSegments) ||
817 (cntMEP32[
i] > maxNSegments) ||
818 (cntMEN32[
i] > maxNSegments) ) tooManySegments =
true;
820 if (tooManySegments) {
821 return DTOverlapCandidate;
827 bool matchup =
false;
828 for (
int i=0;
i<36; ++
i) {
829 if ( (cntMEP13[
i] > 0) && (cntMEP22[
i]+cntMEP32[
i] > 0) ) {matchup =
true;}
830 if ( (cntMEN13[
i] > 0) && (cntMEN22[
i]+cntMEN32[
i] > 0) ) {matchup =
true;}
847 DTOverlapCandidate = matchup;
848 return DTOverlapCandidate;
861 const float chisqMax = 100.;
862 const int nhitsMin = 5;
863 const int maxNSegments = 3;
866 bool HaloLike =
false;
877 for (
int i=0;
i<36; ++
i) {
893 int nSegments = cscSegments->size();
894 if (nSegments < 4)
return HaloLike;
899 int kEndcap =
id.
endcap();
900 int kStation =
id.station();
901 int kRing =
id.ring();
902 int kChamber =
id.chamber();
904 float chisq = (*it).chi2();
905 int nhits = (*it).nRecHits();
906 bool goodSegment = (chisq < chisqMax) && (nhits >= nhitsMin) ;
908 if ( (kStation == 1) && (kRing == 1) ) {
909 if (kEndcap == 1) {cntMEP11[kChamber-1]++;}
910 if (kEndcap == 2) {cntMEN11[kChamber-1]++;}
912 if ( (kStation == 1) && (kRing == 2) ) {
913 if (kEndcap == 1) {cntMEP12[kChamber-1]++;}
914 if (kEndcap == 2) {cntMEN12[kChamber-1]++;}
916 if ( (kStation == 2) && (kRing == 1) ) {
917 if (kEndcap == 1) {cntMEP21[kChamber-1]++;}
918 if (kEndcap == 2) {cntMEN21[kChamber-1]++;}
920 if ( (kStation == 3) && (kRing == 1) ) {
921 if (kEndcap == 1) {cntMEP31[kChamber-1]++;}
922 if (kEndcap == 2) {cntMEN31[kChamber-1]++;}
924 if ( (kStation == 4) && (kRing == 1) ) {
925 if (kEndcap == 1) {cntMEP41[kChamber-1]++;}
926 if (kEndcap == 2) {cntMEN41[kChamber-1]++;}
934 bool tooManySegments =
false;
935 for (
int i=0;
i<36; ++
i) {
936 if ( (cntMEP11[
i] > 3*maxNSegments) ||
937 (cntMEN11[
i] > 3*maxNSegments) ||
938 (cntMEP12[
i] > maxNSegments) ||
939 (cntMEN12[
i] > maxNSegments) ||
940 (cntMEP21[
i] > maxNSegments) ||
941 (cntMEN21[
i] > maxNSegments) ||
942 (cntMEP31[
i] > maxNSegments) ||
943 (cntMEN31[
i] > maxNSegments) ||
944 (cntMEP41[
i] > maxNSegments) ||
945 (cntMEN41[
i] > maxNSegments) ) tooManySegments =
true;
947 if (tooManySegments) {
954 bool matchup =
false;
955 for (
int i=0;
i<36; ++
i) {
956 if ( (cntMEP11[
i]+cntMEP12[
i] > 0) &&
959 (cntMEP41[
i] > 0) ) {matchup =
true;}
960 if ( (cntMEN11[
i]+cntMEN12[
i] > 0) &&
963 (cntMEN41[
i] > 0) ) {matchup =
true;}
1007 const float zDistanceMax = 2500.;
1008 const float zDistanceMin = 700.;
1009 const int nCSCHitsMin = 25;
1010 const int nCSCHitsMax = 50;
1011 const float zInnerMax = 80000.;
1013 const int nNiceMuonsMin = 1;
1021 for(reco::TrackCollection::const_iterator
muon = saMuons->begin();
muon != saMuons->end(); ++
muon ) {
1027 GlobalPoint ip(innerPo.x(), innerPo.y(),innerPo.z());
1029 GlobalPoint op(outerPo.x(), outerPo.y(),outerPo.z());
1030 float zInner = ip.
z();
1031 float zOuter = op.z();
1032 float zDistance = fabs(zOuter-zInner);
1040 const DetId detId( (*hit)->geographicalId() );
1056 if ( (zDistance < zDistanceMax) && (zDistance > zDistanceMin)
1057 && (nCSCHits > nCSCHitsMin) && (nCSCHits < nCSCHitsMax)
1058 && (
min ( fabs(zInner), fabs(zOuter) ) < zInnerMax)
1059 && (fabs(innerMo.z()) > 0.000000001) ) {
1064 bool select = (nNiceMuons >= nNiceMuonsMin);
1083 bool acceptThisEvent =
false;
1088 int nGoodSAMuons = 0;
1089 for (reco::TrackCollection::const_iterator
muon = saMuons->begin();
muon != saMuons->end(); ++
muon ) {
1090 float preco =
muon->p();
1093 GlobalPoint iPnt(innerPo.x(), innerPo.y(),innerPo.z());
1095 GlobalPoint oPnt(outerPo.x(), outerPo.y(),outerPo.z());
1096 float zLength =
abs( iPnt.z() - oPnt.z() );
1099 GlobalVector iP(innerMom.x(), innerMom.y(), innerMom.z() );
1101 GlobalVector oP(outerMom.x(), outerMom.y(), outerMom.z() );
1103 const float zRef = 300.;
1104 float xExt = 10000.;
1105 float yExt = 10000.;
1106 if (
abs(oPnt.z()) <
abs(iPnt.z())) {
1109 deltaZ = zRef - oPnt.
z();
1111 deltaZ = -zRef - oPnt.z();
1113 xExt = oPnt.x() + deltaZ * oP.x() / oP.z();
1114 yExt = oPnt.y() + deltaZ * oP.y() / oP.z();
1118 deltaZ = zRef - iPnt.z();
1120 deltaZ = -zRef - iPnt.z();
1122 xExt = iPnt.x() + deltaZ * iP.x() / iP.z();
1123 yExt = iPnt.y() + deltaZ * iP.y() / iP.z();
1125 float rExt =
sqrt( xExt*xExt + yExt*yExt );
1132 const DetId detId( (*hit)->geographicalId() );
1144 if (nCSCHits >= nCSCHitsMin) {
1145 if (
abs(iPnt.z()) <
abs(iPnt.z())) {
1152 bool goodSAMuon = (preco > pMin)
1153 && ( zLength > zLengthMin )
1154 && ( nCSCHits >= nCSCHitsMin )
1155 && ( zInner < zInnerMax )
1156 && ( rExt < rExtMax ) ;
1158 if (goodSAMuon) {nGoodSAMuons++;}
1168 int nGoodTracks = 0;
1169 for (reco::TrackCollection::const_iterator track = tracks->begin(); track != tracks->end(); ++ track ) {
1170 float preco = track->p();
1171 int n = track->recHitsSize();
1174 GlobalPoint iPnt(innerPo.x(), innerPo.y(),innerPo.z());
1176 GlobalPoint oPnt(outerPo.x(), outerPo.y(),outerPo.z());
1177 float zLength =
abs( iPnt.z() - oPnt.z() );
1180 GlobalVector iP(innerMom.x(), innerMom.y(), innerMom.z() );
1182 GlobalVector oP(outerMom.x(), outerMom.y(), outerMom.z() );
1184 const float zRef = 300.;
1185 float xExt = 10000.;
1186 float yExt = 10000.;
1187 if (
abs(oPnt.z()) >
abs(iPnt.z())) {
1190 deltaZ = zRef - oPnt.
z();
1192 deltaZ = -zRef - oPnt.z();
1194 xExt = oPnt.x() + deltaZ * oP.x() / oP.z();
1195 yExt = oPnt.y() + deltaZ * oP.y() / oP.z();
1199 deltaZ = zRef - iPnt.z();
1201 deltaZ = -zRef - iPnt.z();
1203 xExt = iPnt.x() + deltaZ * iP.x() / iP.z();
1204 yExt = iPnt.y() + deltaZ * iP.y() / iP.z();
1206 float rExt =
sqrt( xExt*xExt + yExt*yExt );
1209 && (n >= nTrHitsMin)
1210 && (zLength > zLengthTrMin)
1211 && ( rExt < rExtMax ) ;
1213 if (goodTrack) {nGoodTracks++;}
1221 int nGoodGlobalMuons = 0;
1222 for (reco::MuonCollection::const_iterator global = gMuons->begin(); global != gMuons->end(); ++global ) {
1224 if (global->isGlobalMuon()) {
1226 float pDef = global->p();
1227 float redChiSq = global->globalTrack()->normalizedChi2();
1238 const DetId detId( (*hit)->geographicalId() );
1249 bool goodGlobalMuon = (pDef > pMin)
1250 && ( nTrackerHits >= nValidHitsMin )
1251 && ( nCSCHits >= nCSCHitsMin )
1252 && ( redChiSq < redChiSqMax );
1254 if (goodGlobalMuon) {nGoodGlobalMuons++;}
1263 acceptThisEvent = ( (nGoodSAMuons > 0) && (nGoodTracks > 0) ) || (nGoodGlobalMuons > 0) ;
1265 return acceptThisEvent;
1273 int kSerial = kChamber;
1274 if (kStation == 1 && kRing == 1) {kSerial = kChamber;}
1275 if (kStation == 1 && kRing == 2) {kSerial = kChamber + 36;}
1276 if (kStation == 1 && kRing == 3) {kSerial = kChamber + 72;}
1277 if (kStation == 1 && kRing == 4) {kSerial = kChamber;}
1278 if (kStation == 2 && kRing == 1) {kSerial = kChamber + 108;}
1279 if (kStation == 2 && kRing == 2) {kSerial = kChamber + 126;}
1280 if (kStation == 3 && kRing == 1) {kSerial = kChamber + 162;}
1281 if (kStation == 3 && kRing == 2) {kSerial = kChamber + 180;}
1282 if (kStation == 4 && kRing == 1) {kSerial = kChamber + 216;}
1283 if (kStation == 4 && kRing == 2) {kSerial = kChamber + 234;}
1284 if (kEndcap == 2) {kSerial = kSerial + 300;}
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
virtual bool filter(edm::Event &event, const edm::EventSetup &eventSetup) override
#define DEFINE_FWK_MODULE(type)
bool doLongSATrack(edm::Handle< reco::TrackCollection > saTracks)
bool doOverlapSkimming(edm::Handle< CSCSegmentCollection > cscSegments)
bool doDTOverlap(edm::Handle< CSCSegmentCollection > cscSegments)
bool goodTrack(const reco::Track *pTrack, math::XYZPoint leadPV, trackSelectionParameters parameters, bool debug=false)
Abs< T >::type abs(const T &t)
static const std::string kLayer("layer")
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
bool doCSCSkimming(edm::Handle< CSCRecHit2DCollection > cscRecHits, edm::Handle< CSCSegmentCollection > cscSegments)
bool doCertainChamberSelection(edm::Handle< CSCWireDigiCollection > wires, edm::Handle< CSCStripDigiCollection > strips)
bool doBFieldStudySelection(edm::Handle< reco::TrackCollection > saTracks, edm::Handle< reco::TrackCollection > Tracks, edm::Handle< reco::MuonCollection > gMuons)
EventAuxiliary const & eventAuxiliary() const
XYZVectorD XYZVector
spatial vector with cartesian internal representation
XYZPointD XYZPoint
point in space with cartesian internal representation
int numberOfValidTrackerHits() const
bool doMessyEventSkimming(edm::Handle< CSCRecHit2DCollection > cscRecHits, edm::Handle< CSCSegmentCollection > cscSegments)
int chamberSerial(int kE, int kS, int kR, int kCh)
CSCSkim(const edm::ParameterSet &pset)
Power< A, B >::type pow(const A &a, const B &b)
bool doHaloLike(edm::Handle< CSCSegmentCollection > cscSegments)