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) )
225 <<
"L1T Monitoring histograms will be saved to " <<
outputFile_;
282 char c_whn[6][3] = {
"N2",
"N1",
"N0",
"P0",
"P1",
"P2" };
286 for (
int iwh = 0; iwh < 6; ++iwh ) {
288 bookEta( iwh, nbins, start, stop );
293 std::string dttf_trk_folder_wheel = dttf_trk_folder + wheelpath[iwh];
297 sprintf(hname,
"dttf_01_nTracksPerEvent_wh%s", c_whn[iwh]);
298 sprintf(htitle,
"Wheel %s - Number Tracks Per Event", c_whn[iwh]);
304 sprintf(hname,
"dttf_07_phi_vs_etaFine_wh%s", c_whn[iwh]);
305 sprintf(htitle,
"Wheel %s - #eta-#phi DTTF Tracks occupancy (fine #eta only, unpacked values)", c_whn[iwh]);
307 nbins, start-0.5, stop-0.5,
315 sprintf(hname,
"dttf_08_phi_vs_etaCoarse_wh%s", c_whn[iwh]);
316 sprintf(htitle,
"Wheel %s - #eta-#phi DTTF Tracks occupancy (coarse #eta only, unpacked values)", c_whn[iwh]);
318 nbins, start-0.5, stop-0.5,
327 dttf_trk_folder_wheel +
"/2ND_TRACK_ONLY";
332 sprintf(hname,
"dttf_04_quality_wh%s_2ndTrack", c_whn[iwh]);
333 sprintf(htitle,
"Wheel %s - 2nd Tracks Quality distribution", c_whn[iwh]);
338 sprintf(hname,
"dttf_05_quality_summary_wh%s_2ndTrack", c_whn[iwh]);
339 sprintf(htitle,
"Wheel %s - 2nd Tracks - Quality", c_whn[iwh]);
341 12, 1, 13, 7, 1, 8 );
347 sprintf(hname,
"dttf_06_phi_vs_eta_wh%s_2ndTrack", c_whn[iwh]);
348 sprintf(htitle,
"Wheel %s - #eta-#phi Distribution of DTTF 2nd Tracks",
352 nbins, start-0.5,stop-0.5,
361 sprintf(hname,
"dttf_07_eta_wh%s_2ndTrack", c_whn[iwh]);
362 sprintf(htitle,
"Wheel %s - DTTF 2nd Tracks #eta distribution (Packed values)",
368 sprintf(hname,
"dttf_08_phi_wh%s_2ndTrack", c_whn[iwh]);
369 sprintf(htitle,
"Wheel %s - DTTF 2nd Tracks Phi distribution (Packed values)",
375 sprintf(hname,
"dttf_09_pt_wh%s_2ndTrack", c_whn[iwh]);
376 sprintf(htitle,
"Wheel %s - DTTF 2nd Tracks p_{T} distribution (Packed values)",
382 sprintf(hname,
"dttf_10_charge_wh%s_2ndTrack", c_whn[iwh]);
383 sprintf(htitle,
"Wheel %s - DTTF 2nd Tracks Charge distribution", c_whn[iwh]);
395 std::string dttf_trk_folder_nTracksPerEvent = dttf_trk_folder_wheel +
"/TracksPerEvent";
398 for(
int ise = 0; ise < 12; ++ise) {
399 sprintf(hname,
"dttf_nTracksPerEvent_wh%s_se%d", c_whn[iwh], ise+1);
400 sprintf(htitle,
"Wheel %s Sector %d - Number of Tracks Per Event",
409 dttf_trk_folder_wheel +
"/BX_BySector";
412 for(
int ise = 0; ise < 12; ++ise ) {
413 sprintf(hname,
"dttf_bx_wh%s_se%d", c_whn[iwh], ise+1);
414 sprintf(htitle,
"Wheel %s Sector %d - BX Distribution",
416 dttf_bx[iwh][ise] = ibooker.
book1D(hname, htitle, 3, -1.5, 1.5);
421 dttf_trk_folder_wheel +
"/BX_BySector/2ND_TRACK_ONLY";
424 for(
int ise = 0; ise < 12; ++ise ) {
425 sprintf(hname,
"dttf_bx_2ndTrack_wh%s_se%d", c_whn[iwh], ise+1);
426 sprintf(htitle,
"Wheel %s Sector %d - BX 2nd Tracks only",
433 std::string dttf_trk_folder_charge = dttf_trk_folder_wheel +
"/Charge";
436 for(
int ise = 0; ise < 12; ++ise) {
437 sprintf(hname,
"dttf_charge_wh%s_se%d", c_whn[iwh], ise+1);
438 sprintf(htitle,
"Wheel %s Sector %d - Packed Charge", c_whn[iwh], ise+1);
439 dttf_q[iwh][ise] = ibooker.
book1D(hname, htitle, 2, -0.5, 1.5);
444 std::string dttf_trk_folder_pt = dttf_trk_folder_wheel +
"/PT";
447 for(
int ise = 0; ise < 12; ++ise ) {
448 sprintf(hname,
"dttf_pt_wh%s_se%d", c_whn[iwh], ise+1);
449 sprintf(htitle,
"Wheel %s Sector %d - Packed p_{T}",
450 c_whn[iwh], ise + 1 );
451 dttf_pt[iwh][ise]= ibooker.
book1D(hname, htitle, 32, -0.5, 31.5);
456 std::string dttf_trk_folder_phi = dttf_trk_folder_wheel +
"/Phi";
459 for(
int ise = 0; ise < 12; ++ise ) {
460 sprintf(hname,
"dttf_phi_wh%s_se%d", c_whn[iwh], ise+1);
461 sprintf(htitle,
"Wheel %s Sector %d - Packed Phi", c_whn[iwh], ise+1);
468 std::string dttf_trk_folder_quality = dttf_trk_folder_wheel +
"/Quality";
471 for(
int ise = 0; ise < 12; ++ise){
472 sprintf(hname,
"dttf_qual_wh%s_se%d", c_whn[iwh], ise+1);
473 sprintf(htitle,
"Wheel %s Sector %d - Packed Quality",
481 std::string dttf_trk_folder_eta = dttf_trk_folder_wheel +
"/Eta";
484 for (
int ise = 0; ise < 12; ++ise ) {
486 sprintf(hname,
"dttf_eta_wh%s_se%d", c_whn[iwh], ise+1);
487 sprintf(htitle,
"Wheel %s Sector %d - Packed #eta",
489 dttf_eta[iwh][ise] = ibooker.
book1D(hname, htitle, 64, -0.5, 63.5);
495 dttf_trk_folder_eta = dttf_trk_folder_wheel +
"/EtaFineFraction";
498 for (
int ise = 0; ise < 12; ++ise ) {
500 sprintf(hname,
"dttf_etaFine_fraction_wh%s_se%d", c_whn[iwh], ise+1);
501 sprintf(htitle,
"Wheel %s Sector %d - Eta Fine Fraction",
514 std::string dttf_trk_folder_inclusive = dttf_trk_folder +
"/01-INCLUSIVE";
518 sprintf(hname,
"dttf_01_nTracksPerEvent_integ");
519 sprintf(htitle,
"Number of DTTF Tracks Per Event");
531 sprintf(hname,
"dttf_04_tracks_occupancy_by_lumi");
532 sprintf(htitle,
"DTTF Tracks in the last LumiSections");
539 sprintf(hname,
"dttf_04_global_muons_request");
540 sprintf(htitle,
"Tracks compatible with a Global Muon in the Barrel");
550 dttf_trk_folder +
"/08-GMT_MATCH";
553 sprintf(hname,
"dttf_tracks_with_gmt_match");
554 sprintf(htitle,
"DTTF Tracks With a Match in GMT");
558 sprintf(hname,
"dttf_tracks_without_gmt_match");
559 sprintf(htitle,
"DTTF Tracks Without a Match in GMT");
563 sprintf(hname,
"dttf_missing_tracks_in_gmt");
564 sprintf(htitle,
"GMT Tracks Without a Corresponding Track in DTTF");
587 edm::LogInfo(
"L1TDTTF::Analyze::start") <<
"#################### START";
591 memset(
numTracks, 0, 72 *
sizeof(
int) );
599 <<
"can't getByToken L1MuDTTrackContainer with label " 604 if ( !myL1MuDTTrackContainer.
isValid() ) {
606 <<
"can't find L1MuDTTrackContainer with label " 615 if ( !trackContainer->empty() ) {
632 for (reco::MuonCollection::const_iterator recoMu = muons->begin();
633 recoMu!=muons->end(); ++recoMu ) {
634 if ( fabs( recoMu->eta() ) < 1.4 ) {
636 edm::LogInfo(
"L1TDTTFClient::Analyze:GM") <<
"Found a global muon!";
650 <<
"No global muons in this event!";
661 <<
"Invalid MuonCollection with label " 669 edm::LogError(
"DataNotFound") <<
"Unable to getByToken MuonCollection with label " 677 std::vector<L1MuRegionalCand> gmtBx0DttfCandidates;
684 if ( !pCollection.
isValid() ) {
685 edm::LogError(
"DataNotFound") <<
"can't find L1MuGMTReadoutCollection with label " 691 std::vector<L1MuGMTReadoutRecord> gmt_records = gmtrc->
getRecords();
693 std::vector<L1MuGMTReadoutRecord>::const_iterator RRItr;
695 for ( RRItr = gmt_records.begin(); RRItr != gmt_records.end(); ++RRItr ) {
697 std::vector<L1MuRegionalCand> dttfCands = RRItr->getDTBXCands();
698 std::vector<L1MuRegionalCand>::iterator dttfCand;
700 for( dttfCand = dttfCands.begin(); dttfCand != dttfCands.end();
703 if(dttfCand->empty())
continue;
705 if ( RRItr->getBxInEvent() )
continue;
709 gmtBx0DttfCandidates.push_back( *dttfCand );
715 edm::LogError(
"DataNotFound") <<
"Unable to getByToken L1MuGMTReadoutCollection with label " 721 if ( accept )
fillMEs( trackContainer, gmtBx0DttfCandidates );
724 std::vector<L1MuRegionalCand>::iterator dttfCand;
725 for( dttfCand = gmtBx0DttfCandidates.begin();
726 dttfCand != gmtBx0DttfCandidates.end(); ++dttfCand ) {
727 if( dttfCand->empty() )
continue;
732 int phi= dttfCand->phi_packed();
733 int sector = 1 + (phi + 6)/12;
734 if (sector > 12 ) sector -= 12;
735 double eta = dttfCand->etaValue();
740 }
else if ( eta < -0.3 ) {
743 }
else if ( eta < 0.3 ) {
746 }
else if ( eta < 0.74 ) {
759 int numTracksInt = 0;
761 for (
int w = 0;
w < 6; ++
w ) {
763 int numTracks_wh = 0;
764 for (
int s = 0;
s < 12; ++
s ) {
772 numTracksInt += numTracks_wh;
788 std::vector<L1MuRegionalCand>& gmtDttfCands )
791 L1MuDTTrackContainer::TrackContainer::const_iterator
track 792 = trackContainer->begin();
793 L1MuDTTrackContainer::TrackContainer::const_iterator trackEnd
794 = trackContainer->end();
796 for ( ; track != trackEnd; ++
track ) {
799 edm::LogInfo(
"L1TDTTF::Analyze") <<
"bx = " << track->bx();
800 edm::LogInfo(
"L1TDTTF::Analyze") <<
"quality (packed) = " 801 << track->quality_packed();
803 << track->pt_packed()
804 <<
" , pt (GeV) = " << track->ptValue();
806 << track->phi_packed()
807 <<
" , phi (rad) = " << track->phiValue();
808 edm::LogInfo(
"L1TDTTF::Analyze") <<
"charge (packed) = " 809 << track->charge_packed();
814 if ( ( track->whNum() == -1 ) && ! track->eta_packed() ) {
815 edm::LogInfo(
"L1TDTTF::Analyze") <<
"Skipping N0 with zero eta value";
821 int bxindex = track->bx() + 1;
822 int se = track->scNum();
824 int whindex = track->whNum();
826 whindex = ( whindex < 0 ) ? whindex + 3 : whindex + 2;
828 if ( whindex < 0 || whindex > 5 ) {
829 edm::LogError(
"L1TDTTF::Analyze::WHEEL_ERROR") << track->whNum()
830 <<
"(" << whindex <<
")";
834 if ( se < 0 || se > 11 ) {
851 int phi_global = track->phi_packed();
852 phi_global = (phi_global > 15 ? phi_global - 32 : phi_global ) + se * 12;
853 if ( phi_global < -6 ) phi_global += 144;
854 if ( phi_global > 137 ) phi_global -= 144;
869 if( track->TrkTag() == 1 ) {
881 if ( bxindex == 1 ) {
896 dttf_q[whindex][se]->
Fill(track->charge_packed());
902 if( track->isFineHalo() ) {
926 if ( track->TrkTag() == 1 ) {
953 std::vector<L1MuRegionalCand>::iterator dttfCand;
955 unsigned int gmt_phi = ( phi_global < 0 ? phi_global + 144 : phi_global );
957 for ( dttfCand = gmtDttfCands.begin(); dttfCand != gmtDttfCands.end();
961 if ( dttfCand->empty() )
continue;
962 if ( ( dttfCand->phi_packed() == gmt_phi ) &&
963 dttfCand->quality_packed() == track->quality_packed() ) {
1019 case 0 : start = 0; stop = 18; nbins = 18;
break;
1020 case 1 : start = 8; stop = 28; nbins = 20;
break;
1021 case 2 : start = 22; stop = 32; nbins = 10;
break;
1022 case 3 : start = 22; stop = 42; nbins = 20;
break;
1023 case 4 : start = 36; stop = 56; nbins = 20;
break;
1024 case 5 : start = 46; stop = 64; nbins = 18;
break;
1025 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_
MonitorElement * dttf_phi_eta_coarse_wheel[6]
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
void analyze(const edm::Event &e, const edm::EventSetup &c) override
MonitorElement * dttf_pt_wheel_2ndTrack[6]
MonitorElement * dttf_eta_wheel_2ndTrack[6]
edm::EDGetTokenT< L1MuGMTReadoutCollection > gmtSourceToken_
MonitorElement * dttf_qual[6][12]
void dqmBeginRun(edm::Run const &, edm::EventSetup const &) override
edm::InputTag dttpgSource_
MonitorElement * dttf_quality_wheel_2ndTrack[6]
std::vector< L1MuDTTrackCand > TrackContainer
MonitorElement * dttf_phi[6][12]
MonitorElement * book1D(Args &&...args)
edm::EDGetTokenT< L1MuDTTrackContainer > trackInputToken_
void fillMEs(std::vector< L1MuDTTrackCand > const *trackContainer, std::vector< L1MuRegionalCand > &gmtDttfCands)
MonitorElement * dttf_gmt_missed
MonitorElement * dttf_quality_summary_wheel_2ndTrack[6]
MonitorElement * dttf_eta_fine_fraction[6][12]
MonitorElement * dttf_bx[6][12]
void setCurrentFolder(const std::string &fullpath)
T const * product() const
MonitorElement * book2D(Args &&...args)
MonitorElement * dttf_gmt_ghost
edm::EDGetTokenT< reco::MuonCollection > muonCollectionToken_
MonitorElement * dttf_bx_2ndTrack[6][12]
MonitorElement * dttf_q_wheel_2ndTrack[6]
MonitorElement * dttf_eta[6][12]
void bookHistograms(DQMStore::IBooker &i, edm::Run const &, edm::EventSetup const &) override
std::vector< L1MuGMTReadoutRecord > const & getRecords() const
MonitorElement * dttf_nTracksPerEv[6][12]
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
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)
TrackContainer const * getContainer() const
L1TDTTF(const edm::ParameterSet &ps)
base services