198 : dttpgSource_( ps.getParameter< edm::InputTag >(
"dttpgSource") ),
199 gmtSource_( ps.getParameter< edm::InputTag >(
"gmtSource") ),
200 muonCollectionLabel_( ps.getParameter<edm::InputTag>(
"MuonCollection") ),
201 l1tsubsystemfolder_( ps.getUntrackedParameter<std::
string>(
"l1tSystemFolder",
203 online_( ps.getUntrackedParameter<bool>(
"online",
true) ),
204 verbose_( ps.getUntrackedParameter<bool>(
"verbose",
false) )
233 <<
"L1T Monitoring histograms will be saved to " <<
outputFile_;
288 char c_whn[6][3] = {
"N2",
"N1",
"N0",
"P0",
"P1",
"P2" };
292 for (
int iwh = 0; iwh < 6; ++iwh ) {
294 bookEta( iwh, nbins, start, stop );
299 std::string dttf_trk_folder_wheel = dttf_trk_folder + wheelpath[iwh];
303 sprintf(hname,
"dttf_01_nTracksPerEvent_wh%s", c_whn[iwh]);
304 sprintf(htitle,
"Wheel %s - Number Tracks Per Event", c_whn[iwh]);
310 sprintf(hname,
"dttf_07_phi_vs_etaFine_wh%s", c_whn[iwh]);
311 sprintf(htitle,
"Wheel %s - #eta-#phi DTTF Tracks occupancy (fine #eta only, unpacked values)", c_whn[iwh]);
313 nbins, start-0.5, stop-0.5,
321 sprintf(hname,
"dttf_08_phi_vs_etaCoarse_wh%s", c_whn[iwh]);
322 sprintf(htitle,
"Wheel %s - #eta-#phi DTTF Tracks occupancy (coarse #eta only, unpacked values)", c_whn[iwh]);
324 nbins, start-0.5, stop-0.5,
333 dttf_trk_folder_wheel +
"/2ND_TRACK_ONLY";
338 sprintf(hname,
"dttf_04_quality_wh%s_2ndTrack", c_whn[iwh]);
339 sprintf(htitle,
"Wheel %s - 2nd Tracks Quality distribution", c_whn[iwh]);
344 sprintf(hname,
"dttf_05_quality_summary_wh%s_2ndTrack", c_whn[iwh]);
345 sprintf(htitle,
"Wheel %s - 2nd Tracks - Quality", c_whn[iwh]);
347 12, 1, 13, 7, 1, 8 );
353 sprintf(hname,
"dttf_06_phi_vs_eta_wh%s_2ndTrack", c_whn[iwh]);
354 sprintf(htitle,
"Wheel %s - #eta-#phi Distribution of DTTF 2nd Tracks",
358 nbins, start-0.5,stop-0.5,
367 sprintf(hname,
"dttf_07_eta_wh%s_2ndTrack", c_whn[iwh]);
368 sprintf(htitle,
"Wheel %s - DTTF 2nd Tracks #eta distribution (Packed values)",
374 sprintf(hname,
"dttf_08_phi_wh%s_2ndTrack", c_whn[iwh]);
375 sprintf(htitle,
"Wheel %s - DTTF 2nd Tracks Phi distribution (Packed values)",
381 sprintf(hname,
"dttf_09_pt_wh%s_2ndTrack", c_whn[iwh]);
382 sprintf(htitle,
"Wheel %s - DTTF 2nd Tracks p_{T} distribution (Packed values)",
388 sprintf(hname,
"dttf_10_charge_wh%s_2ndTrack", c_whn[iwh]);
389 sprintf(htitle,
"Wheel %s - DTTF 2nd Tracks Charge distribution", c_whn[iwh]);
401 std::string dttf_trk_folder_nTracksPerEvent = dttf_trk_folder_wheel +
"/TracksPerEvent";
404 for(
int ise = 0; ise < 12; ++ise) {
405 sprintf(hname,
"dttf_nTracksPerEvent_wh%s_se%d", c_whn[iwh], ise+1);
406 sprintf(htitle,
"Wheel %s Sector %d - Number of Tracks Per Event",
415 dttf_trk_folder_wheel +
"/BX_BySector";
418 for(
int ise = 0; ise < 12; ++ise ) {
419 sprintf(hname,
"dttf_bx_wh%s_se%d", c_whn[iwh], ise+1);
420 sprintf(htitle,
"Wheel %s Sector %d - BX Distribution",
427 dttf_trk_folder_wheel +
"/BX_BySector/2ND_TRACK_ONLY";
430 for(
int ise = 0; ise < 12; ++ise ) {
431 sprintf(hname,
"dttf_bx_2ndTrack_wh%s_se%d", c_whn[iwh], ise+1);
432 sprintf(htitle,
"Wheel %s Sector %d - BX 2nd Tracks only",
439 std::string dttf_trk_folder_charge = dttf_trk_folder_wheel +
"/Charge";
442 for(
int ise = 0; ise < 12; ++ise) {
443 sprintf(hname,
"dttf_charge_wh%s_se%d", c_whn[iwh], ise+1);
444 sprintf(htitle,
"Wheel %s Sector %d - Packed Charge", c_whn[iwh], ise+1);
450 std::string dttf_trk_folder_pt = dttf_trk_folder_wheel +
"/PT";
453 for(
int ise = 0; ise < 12; ++ise ) {
454 sprintf(hname,
"dttf_pt_wh%s_se%d", c_whn[iwh], ise+1);
455 sprintf(htitle,
"Wheel %s Sector %d - Packed p_{T}",
456 c_whn[iwh], ise + 1 );
462 std::string dttf_trk_folder_phi = dttf_trk_folder_wheel +
"/Phi";
465 for(
int ise = 0; ise < 12; ++ise ) {
466 sprintf(hname,
"dttf_phi_wh%s_se%d", c_whn[iwh], ise+1);
467 sprintf(htitle,
"Wheel %s Sector %d - Packed Phi", c_whn[iwh], ise+1);
474 std::string dttf_trk_folder_quality = dttf_trk_folder_wheel +
"/Quality";
477 for(
int ise = 0; ise < 12; ++ise){
478 sprintf(hname,
"dttf_qual_wh%s_se%d", c_whn[iwh], ise+1);
479 sprintf(htitle,
"Wheel %s Sector %d - Packed Quality",
487 std::string dttf_trk_folder_eta = dttf_trk_folder_wheel +
"/Eta";
490 for (
int ise = 0; ise < 12; ++ise ) {
492 sprintf(hname,
"dttf_eta_wh%s_se%d", c_whn[iwh], ise+1);
493 sprintf(htitle,
"Wheel %s Sector %d - Packed #eta",
501 dttf_trk_folder_eta = dttf_trk_folder_wheel +
"/EtaFineFraction";
504 for (
int ise = 0; ise < 12; ++ise ) {
506 sprintf(hname,
"dttf_etaFine_fraction_wh%s_se%d", c_whn[iwh], ise+1);
507 sprintf(htitle,
"Wheel %s Sector %d - Eta Fine Fraction",
521 std::string dttf_trk_folder_inclusive = dttf_trk_folder +
"/01-INCLUSIVE";
525 sprintf(hname,
"dttf_01_nTracksPerEvent_integ");
526 sprintf(htitle,
"Number of DTTF Tracks Per Event");
538 sprintf(hname,
"dttf_04_tracks_occupancy_by_lumi");
539 sprintf(htitle,
"DTTF Tracks in the last LumiSections");
546 sprintf(hname,
"dttf_04_global_muons_request");
547 sprintf(htitle,
"Tracks compatible with a Global Muon in the Barrel");
557 dttf_trk_folder +
"/08-GMT_MATCH";
560 sprintf(hname,
"dttf_tracks_with_gmt_match");
561 sprintf(htitle,
"DTTF Tracks With a Match in GMT");
565 sprintf(hname,
"dttf_tracks_without_gmt_match");
566 sprintf(htitle,
"DTTF Tracks Without a Match in GMT");
570 sprintf(hname,
"dttf_missing_tracks_in_gmt");
571 sprintf(htitle,
"GMT Tracks Without a Corresponding Track in DTTF");
598 edm::LogInfo(
"EndJob") <<
"containing at least one dttf track : "
600 edm::LogInfo(
"EndJob") <<
"containing two dttf tracks : "
617 edm::LogInfo(
"L1TDTTF::Analyze::start") <<
"#################### START";
621 memset(
numTracks, 0, 72 *
sizeof(
int) );
629 <<
"can't getByToken L1MuDTTrackContainer with label "
634 if ( !myL1MuDTTrackContainer.
isValid() ) {
636 <<
"can't find L1MuDTTrackContainer with label "
642 myL1MuDTTrackContainer->getContainer();
645 if ( trackContainer->size() > 0 ) {
662 for (reco::MuonCollection::const_iterator recoMu = muons->begin();
663 recoMu!=muons->end(); ++recoMu ) {
664 if ( fabs( recoMu->eta() ) < 1.4 ) {
666 edm::LogInfo(
"L1TDTTFClient::Analyze:GM") <<
"Found a global muon!";
680 <<
"No global muons in this event!";
691 <<
"Invalid MuonCollection with label "
699 edm::LogError(
"DataNotFound") <<
"Unable to getByToken MuonCollection with label "
707 std::vector<L1MuRegionalCand> gmtBx0DttfCandidates;
714 if ( !pCollection.
isValid() ) {
715 edm::LogError(
"DataNotFound") <<
"can't find L1MuGMTReadoutCollection with label "
721 std::vector<L1MuGMTReadoutRecord> gmt_records = gmtrc->
getRecords();
723 std::vector<L1MuGMTReadoutRecord>::const_iterator RRItr;
725 for ( RRItr = gmt_records.begin(); RRItr != gmt_records.end(); ++RRItr ) {
727 std::vector<L1MuRegionalCand> dttfCands = RRItr->getDTBXCands();
728 std::vector<L1MuRegionalCand>::iterator dttfCand;
730 for( dttfCand = dttfCands.begin(); dttfCand != dttfCands.end();
733 if(dttfCand->empty())
continue;
735 if ( RRItr->getBxInEvent() )
continue;
739 gmtBx0DttfCandidates.push_back( *dttfCand );
745 edm::LogError(
"DataNotFound") <<
"Unable to getByToken L1MuGMTReadoutCollection with label "
751 if ( accept )
fillMEs( trackContainer, gmtBx0DttfCandidates );
754 std::vector<L1MuRegionalCand>::iterator dttfCand;
755 for( dttfCand = gmtBx0DttfCandidates.begin();
756 dttfCand != gmtBx0DttfCandidates.end(); ++dttfCand ) {
757 if( dttfCand->empty() )
continue;
762 int phi= dttfCand->phi_packed();
763 int sector = 1 + (phi + 6)/12;
764 if (sector > 12 ) sector -= 12;
765 double eta = dttfCand->etaValue();
770 }
else if ( eta < -0.3 ) {
773 }
else if ( eta < 0.3 ) {
776 }
else if ( eta < 0.74 ) {
789 int numTracksInt = 0;
791 for (
int w = 0;
w < 6; ++
w ) {
793 int numTracks_wh = 0;
794 for (
int s = 0;
s < 12; ++
s ) {
802 numTracksInt += numTracks_wh;
818 std::vector<L1MuRegionalCand>& gmtDttfCands )
821 L1MuDTTrackContainer::TrackContainer::const_iterator track
822 = trackContainer->begin();
823 L1MuDTTrackContainer::TrackContainer::const_iterator trackEnd
824 = trackContainer->end();
826 for ( ; track != trackEnd; ++track ) {
829 edm::LogInfo(
"L1TDTTF::Analyze") <<
"bx = " << track->bx();
830 edm::LogInfo(
"L1TDTTF::Analyze") <<
"quality (packed) = "
831 << track->quality_packed();
833 << track->pt_packed()
834 <<
" , pt (GeV) = " << track->ptValue();
836 << track->phi_packed()
837 <<
" , phi (rad) = " << track->phiValue();
838 edm::LogInfo(
"L1TDTTF::Analyze") <<
"charge (packed) = "
839 << track->charge_packed();
844 if ( ( track->whNum() == -1 ) && ! track->eta_packed() ) {
845 edm::LogInfo(
"L1TDTTF::Analyze") <<
"Skipping N0 with zero eta value";
851 int bxindex = track->bx() + 1;
852 int se = track->scNum();
854 int whindex = track->whNum();
856 whindex = ( whindex < 0 ) ? whindex + 3 : whindex + 2;
858 if ( whindex < 0 || whindex > 5 ) {
859 edm::LogError(
"L1TDTTF::Analyze::WHEEL_ERROR") << track->whNum()
860 <<
"(" << whindex <<
")";
864 if ( se < 0 || se > 11 ) {
881 int phi_global = track->phi_packed();
882 phi_global = (phi_global > 15 ? phi_global - 32 : phi_global ) + se * 12;
883 if ( phi_global < -6 ) phi_global += 144;
884 if ( phi_global > 137 ) phi_global -= 144;
899 if( track->TrkTag() == 1 ) {
911 if ( bxindex == 1 ) {
926 dttf_q[whindex][se]->
Fill(track->charge_packed());
932 if( track->isFineHalo() ) {
956 if ( track->TrkTag() == 1 ) {
983 std::vector<L1MuRegionalCand>::iterator dttfCand;
985 unsigned int gmt_phi = ( phi_global < 0 ? phi_global + 144 : phi_global );
987 for ( dttfCand = gmtDttfCands.begin(); dttfCand != gmtDttfCands.end();
991 if ( dttfCand->empty() )
continue;
992 if ( ( dttfCand->phi_packed() == gmt_phi ) &&
993 dttfCand->quality_packed() == track->quality_packed() ) {
1049 case 0 : start = 0; stop = 18; nbins = 18;
break;
1050 case 1 : start = 8; stop = 28; nbins = 20;
break;
1051 case 2 : start = 22; stop = 32; nbins = 10;
break;
1052 case 3 : start = 22; stop = 42; nbins = 20;
break;
1053 case 4 : start = 36; stop = 56; nbins = 20;
break;
1054 case 5 : start = 46; stop = 64; nbins = 18;
break;
1055 default : start = 0; stop = 0; nbins = 0;
break;
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
std::string l1tsubsystemfolder_
edm::InputTag trackInputTag_
tuple start
Check for commandline option errors.
MonitorElement * dttf_phi_eta_coarse_wheel[6]
MonitorElement * book1D(const char *name, const char *title, int nchX, double lowX, double highX)
Book 1D histogram.
edm::InputTag muonCollectionLabel_
void bookEta(int wh, int &nbins, float &start, float &stop)
MonitorElement * dttf_nTracksPerEvent_wheel[6]
MonitorElement * dttf_phi_eta_fine_wheel[6]
void setBinLabel(int bin, const std::string &label, int axis=1)
set bin label for x, y or z axis (axis=1, 2, 3 respectively)
void setWheelLabel(MonitorElement *me)
MonitorElement * dttf_gmt_match
bool accept(const edm::Event &event, const edm::TriggerResults &triggerTable, const std::string &triggerPath)
MonitorElement * dttf_phi_wheel_2ndTrack[6]
MonitorElement * dttf_nTracksPerEvent_integ
MonitorElement * dttf_pt_wheel_2ndTrack[6]
MonitorElement * dttf_eta_wheel_2ndTrack[6]
edm::EDGetTokenT< L1MuGMTReadoutCollection > gmtSourceToken_
MonitorElement * dttf_qual[6][12]
edm::InputTag dttpgSource_
MonitorElement * dttf_quality_wheel_2ndTrack[6]
std::vector< L1MuDTTrackCand > TrackContainer
MonitorElement * dttf_phi[6][12]
edm::EDGetTokenT< L1MuDTTrackContainer > trackInputToken_
void setVerbose(unsigned level)
void fillMEs(std::vector< L1MuDTTrackCand > const *trackContainer, std::vector< L1MuRegionalCand > &gmtDttfCands)
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
MonitorElement * dttf_gmt_missed
MonitorElement * dttf_quality_summary_wheel_2ndTrack[6]
MonitorElement * dttf_eta_fine_fraction[6][12]
MonitorElement * dttf_bx[6][12]
MonitorElement * dttf_gmt_ghost
edm::EDGetTokenT< reco::MuonCollection > muonCollectionToken_
MonitorElement * dttf_bx_2ndTrack[6][12]
T const * product() const
MonitorElement * dttf_q_wheel_2ndTrack[6]
MonitorElement * dttf_eta[6][12]
void save(const std::string &filename, const std::string &path="", const std::string &pattern="", const std::string &rewrite="", const uint32_t run=0, const uint32_t lumi=0, SaveReferenceTag ref=SaveWithReference, int minStatus=dqm::qstatus::STATUS_OK, const std::string &fileupdate="RECREATE", const bool resetMEsAfterWriting=false)
std::vector< L1MuGMTReadoutRecord > const & getRecords() const
MonitorElement * dttf_nTracksPerEv[6][12]
void analyze(const edm::Event &e, const edm::EventSetup &c)
MonitorElement * dttf_pt[6][12]
MonitorElement * dttf_phi_eta_wheel_2ndTrack[6]
std::pair< typename Association::data_type::first_type, double > match(Reference key, Association association, bool bestMatchByMaxValue)
Generic matching function.
MonitorElement * dttf_spare
volatile std::atomic< bool > shutdown_flag false
TH2F * getTH2F(void) const
MonitorElement * book2D(const char *name, const char *title, int nchX, double lowX, double highX, int nchY, double lowY, double highY)
Book 2D histogram.
MonitorElement * dttf_q[6][12]
void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)
void setQualLabel(MonitorElement *me, int axis)
void setCurrentFolder(const std::string &fullpath)
L1TDTTF(const edm::ParameterSet &ps)
base services