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_;
285 char c_whn[6][3] = {
"N2",
"N1",
"N0",
"P0",
"P1",
"P2" };
289 for (
int iwh = 0; iwh < 6; ++iwh ) {
291 bookEta( iwh, nbins, start, stop );
296 std::string dttf_trk_folder_wheel = dttf_trk_folder + wheelpath[iwh];
300 sprintf(hname,
"dttf_01_nTracksPerEvent_wh%s", c_whn[iwh]);
301 sprintf(htitle,
"Wheel %s - Number Tracks Per Event", c_whn[iwh]);
307 sprintf(hname,
"dttf_07_phi_vs_etaFine_wh%s", c_whn[iwh]);
308 sprintf(htitle,
"Wheel %s - #eta-#phi DTTF Tracks occupancy (fine #eta only, unpacked values)", c_whn[iwh]);
310 nbins, start-0.5, stop-0.5,
318 sprintf(hname,
"dttf_08_phi_vs_etaCoarse_wh%s", c_whn[iwh]);
319 sprintf(htitle,
"Wheel %s - #eta-#phi DTTF Tracks occupancy (coarse #eta only, unpacked values)", c_whn[iwh]);
321 nbins, start-0.5, stop-0.5,
330 dttf_trk_folder_wheel +
"/2ND_TRACK_ONLY";
335 sprintf(hname,
"dttf_04_quality_wh%s_2ndTrack", c_whn[iwh]);
336 sprintf(htitle,
"Wheel %s - 2nd Tracks Quality distribution", c_whn[iwh]);
341 sprintf(hname,
"dttf_05_quality_summary_wh%s_2ndTrack", c_whn[iwh]);
342 sprintf(htitle,
"Wheel %s - 2nd Tracks - Quality", c_whn[iwh]);
344 12, 1, 13, 7, 1, 8 );
350 sprintf(hname,
"dttf_06_phi_vs_eta_wh%s_2ndTrack", c_whn[iwh]);
351 sprintf(htitle,
"Wheel %s - #eta-#phi Distribution of DTTF 2nd Tracks",
355 nbins, start-0.5,stop-0.5,
364 sprintf(hname,
"dttf_07_eta_wh%s_2ndTrack", c_whn[iwh]);
365 sprintf(htitle,
"Wheel %s - DTTF 2nd Tracks #eta distribution (Packed values)",
371 sprintf(hname,
"dttf_08_phi_wh%s_2ndTrack", c_whn[iwh]);
372 sprintf(htitle,
"Wheel %s - DTTF 2nd Tracks Phi distribution (Packed values)",
378 sprintf(hname,
"dttf_09_pt_wh%s_2ndTrack", c_whn[iwh]);
379 sprintf(htitle,
"Wheel %s - DTTF 2nd Tracks p_{T} distribution (Packed values)",
385 sprintf(hname,
"dttf_10_charge_wh%s_2ndTrack", c_whn[iwh]);
386 sprintf(htitle,
"Wheel %s - DTTF 2nd Tracks Charge distribution", c_whn[iwh]);
398 std::string dttf_trk_folder_nTracksPerEvent = dttf_trk_folder_wheel +
"/TracksPerEvent";
401 for(
int ise = 0; ise < 12; ++ise) {
402 sprintf(hname,
"dttf_nTracksPerEvent_wh%s_se%d", c_whn[iwh], ise+1);
403 sprintf(htitle,
"Wheel %s Sector %d - Number of Tracks Per Event",
412 dttf_trk_folder_wheel +
"/BX_BySector";
415 for(
int ise = 0; ise < 12; ++ise ) {
416 sprintf(hname,
"dttf_bx_wh%s_se%d", c_whn[iwh], ise+1);
417 sprintf(htitle,
"Wheel %s Sector %d - BX Distribution",
419 dttf_bx[iwh][ise] = ibooker.
book1D(hname, htitle, 3, -1.5, 1.5);
424 dttf_trk_folder_wheel +
"/BX_BySector/2ND_TRACK_ONLY";
427 for(
int ise = 0; ise < 12; ++ise ) {
428 sprintf(hname,
"dttf_bx_2ndTrack_wh%s_se%d", c_whn[iwh], ise+1);
429 sprintf(htitle,
"Wheel %s Sector %d - BX 2nd Tracks only",
436 std::string dttf_trk_folder_charge = dttf_trk_folder_wheel +
"/Charge";
439 for(
int ise = 0; ise < 12; ++ise) {
440 sprintf(hname,
"dttf_charge_wh%s_se%d", c_whn[iwh], ise+1);
441 sprintf(htitle,
"Wheel %s Sector %d - Packed Charge", c_whn[iwh], ise+1);
442 dttf_q[iwh][ise] = ibooker.
book1D(hname, htitle, 2, -0.5, 1.5);
447 std::string dttf_trk_folder_pt = dttf_trk_folder_wheel +
"/PT";
450 for(
int ise = 0; ise < 12; ++ise ) {
451 sprintf(hname,
"dttf_pt_wh%s_se%d", c_whn[iwh], ise+1);
452 sprintf(htitle,
"Wheel %s Sector %d - Packed p_{T}",
453 c_whn[iwh], ise + 1 );
454 dttf_pt[iwh][ise]= ibooker.
book1D(hname, htitle, 32, -0.5, 31.5);
459 std::string dttf_trk_folder_phi = dttf_trk_folder_wheel +
"/Phi";
462 for(
int ise = 0; ise < 12; ++ise ) {
463 sprintf(hname,
"dttf_phi_wh%s_se%d", c_whn[iwh], ise+1);
464 sprintf(htitle,
"Wheel %s Sector %d - Packed Phi", c_whn[iwh], ise+1);
471 std::string dttf_trk_folder_quality = dttf_trk_folder_wheel +
"/Quality";
474 for(
int ise = 0; ise < 12; ++ise){
475 sprintf(hname,
"dttf_qual_wh%s_se%d", c_whn[iwh], ise+1);
476 sprintf(htitle,
"Wheel %s Sector %d - Packed Quality",
484 std::string dttf_trk_folder_eta = dttf_trk_folder_wheel +
"/Eta";
487 for (
int ise = 0; ise < 12; ++ise ) {
489 sprintf(hname,
"dttf_eta_wh%s_se%d", c_whn[iwh], ise+1);
490 sprintf(htitle,
"Wheel %s Sector %d - Packed #eta",
492 dttf_eta[iwh][ise] = ibooker.
book1D(hname, htitle, 64, -0.5, 63.5);
498 dttf_trk_folder_eta = dttf_trk_folder_wheel +
"/EtaFineFraction";
501 for (
int ise = 0; ise < 12; ++ise ) {
503 sprintf(hname,
"dttf_etaFine_fraction_wh%s_se%d", c_whn[iwh], ise+1);
504 sprintf(htitle,
"Wheel %s Sector %d - Eta Fine Fraction",
517 std::string dttf_trk_folder_inclusive = dttf_trk_folder +
"/01-INCLUSIVE";
521 sprintf(hname,
"dttf_01_nTracksPerEvent_integ");
522 sprintf(htitle,
"Number of DTTF Tracks Per Event");
534 sprintf(hname,
"dttf_04_tracks_occupancy_by_lumi");
535 sprintf(htitle,
"DTTF Tracks in the last LumiSections");
542 sprintf(hname,
"dttf_04_global_muons_request");
543 sprintf(htitle,
"Tracks compatible with a Global Muon in the Barrel");
553 dttf_trk_folder +
"/08-GMT_MATCH";
556 sprintf(hname,
"dttf_tracks_with_gmt_match");
557 sprintf(htitle,
"DTTF Tracks With a Match in GMT");
561 sprintf(hname,
"dttf_tracks_without_gmt_match");
562 sprintf(htitle,
"DTTF Tracks Without a Match in GMT");
566 sprintf(hname,
"dttf_missing_tracks_in_gmt");
567 sprintf(htitle,
"GMT Tracks Without a Corresponding Track in DTTF");
590 edm::LogInfo(
"L1TDTTF::Analyze::start") <<
"#################### START";
594 memset(
numTracks, 0, 72 *
sizeof(
int) );
602 <<
"can't getByToken L1MuDTTrackContainer with label "
607 if ( !myL1MuDTTrackContainer.
isValid() ) {
609 <<
"can't find L1MuDTTrackContainer with label "
615 myL1MuDTTrackContainer->getContainer();
618 if ( trackContainer->size() > 0 ) {
635 for (reco::MuonCollection::const_iterator recoMu = muons->begin();
636 recoMu!=muons->end(); ++recoMu ) {
637 if ( fabs( recoMu->eta() ) < 1.4 ) {
639 edm::LogInfo(
"L1TDTTFClient::Analyze:GM") <<
"Found a global muon!";
653 <<
"No global muons in this event!";
664 <<
"Invalid MuonCollection with label "
672 edm::LogError(
"DataNotFound") <<
"Unable to getByToken MuonCollection with label "
680 std::vector<L1MuRegionalCand> gmtBx0DttfCandidates;
687 if ( !pCollection.
isValid() ) {
688 edm::LogError(
"DataNotFound") <<
"can't find L1MuGMTReadoutCollection with label "
694 std::vector<L1MuGMTReadoutRecord> gmt_records = gmtrc->
getRecords();
696 std::vector<L1MuGMTReadoutRecord>::const_iterator RRItr;
698 for ( RRItr = gmt_records.begin(); RRItr != gmt_records.end(); ++RRItr ) {
700 std::vector<L1MuRegionalCand> dttfCands = RRItr->getDTBXCands();
701 std::vector<L1MuRegionalCand>::iterator dttfCand;
703 for( dttfCand = dttfCands.begin(); dttfCand != dttfCands.end();
706 if(dttfCand->empty())
continue;
708 if ( RRItr->getBxInEvent() )
continue;
712 gmtBx0DttfCandidates.push_back( *dttfCand );
718 edm::LogError(
"DataNotFound") <<
"Unable to getByToken L1MuGMTReadoutCollection with label "
724 if ( accept )
fillMEs( trackContainer, gmtBx0DttfCandidates );
727 std::vector<L1MuRegionalCand>::iterator dttfCand;
728 for( dttfCand = gmtBx0DttfCandidates.begin();
729 dttfCand != gmtBx0DttfCandidates.end(); ++dttfCand ) {
730 if( dttfCand->empty() )
continue;
735 int phi= dttfCand->phi_packed();
736 int sector = 1 + (phi + 6)/12;
737 if (sector > 12 ) sector -= 12;
738 double eta = dttfCand->etaValue();
743 }
else if ( eta < -0.3 ) {
746 }
else if ( eta < 0.3 ) {
749 }
else if ( eta < 0.74 ) {
762 int numTracksInt = 0;
764 for (
int w = 0;
w < 6; ++
w ) {
766 int numTracks_wh = 0;
767 for (
int s = 0;
s < 12; ++
s ) {
775 numTracksInt += numTracks_wh;
791 std::vector<L1MuRegionalCand>& gmtDttfCands )
794 L1MuDTTrackContainer::TrackContainer::const_iterator track
795 = trackContainer->begin();
796 L1MuDTTrackContainer::TrackContainer::const_iterator trackEnd
797 = trackContainer->end();
799 for ( ; track != trackEnd; ++track ) {
802 edm::LogInfo(
"L1TDTTF::Analyze") <<
"bx = " << track->bx();
803 edm::LogInfo(
"L1TDTTF::Analyze") <<
"quality (packed) = "
804 << track->quality_packed();
806 << track->pt_packed()
807 <<
" , pt (GeV) = " << track->ptValue();
809 << track->phi_packed()
810 <<
" , phi (rad) = " << track->phiValue();
811 edm::LogInfo(
"L1TDTTF::Analyze") <<
"charge (packed) = "
812 << track->charge_packed();
817 if ( ( track->whNum() == -1 ) && ! track->eta_packed() ) {
818 edm::LogInfo(
"L1TDTTF::Analyze") <<
"Skipping N0 with zero eta value";
824 int bxindex = track->bx() + 1;
825 int se = track->scNum();
827 int whindex = track->whNum();
829 whindex = ( whindex < 0 ) ? whindex + 3 : whindex + 2;
831 if ( whindex < 0 || whindex > 5 ) {
832 edm::LogError(
"L1TDTTF::Analyze::WHEEL_ERROR") << track->whNum()
833 <<
"(" << whindex <<
")";
837 if ( se < 0 || se > 11 ) {
854 int phi_global = track->phi_packed();
855 phi_global = (phi_global > 15 ? phi_global - 32 : phi_global ) + se * 12;
856 if ( phi_global < -6 ) phi_global += 144;
857 if ( phi_global > 137 ) phi_global -= 144;
872 if( track->TrkTag() == 1 ) {
884 if ( bxindex == 1 ) {
899 dttf_q[whindex][se]->
Fill(track->charge_packed());
905 if( track->isFineHalo() ) {
929 if ( track->TrkTag() == 1 ) {
956 std::vector<L1MuRegionalCand>::iterator dttfCand;
958 unsigned int gmt_phi = ( phi_global < 0 ? phi_global + 144 : phi_global );
960 for ( dttfCand = gmtDttfCands.begin(); dttfCand != gmtDttfCands.end();
964 if ( dttfCand->empty() )
continue;
965 if ( ( dttfCand->phi_packed() == gmt_phi ) &&
966 dttfCand->quality_packed() == track->quality_packed() ) {
1022 case 0 : start = 0; stop = 18; nbins = 18;
break;
1023 case 1 : start = 8; stop = 28; nbins = 20;
break;
1024 case 2 : start = 22; stop = 32; nbins = 10;
break;
1025 case 3 : start = 22; stop = 42; nbins = 20;
break;
1026 case 4 : start = 36; stop = 56; nbins = 20;
break;
1027 case 5 : start = 46; stop = 64; nbins = 18;
break;
1028 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]
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]
MonitorElement * book1D(Args &&...args)
edm::EDGetTokenT< L1MuDTTrackContainer > trackInputToken_
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]
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]
virtual void dqmBeginRun(edm::Run const &, edm::EventSetup const &)
virtual void beginLuminosityBlock(edm::LuminosityBlock const &, edm::EventSetup const &)
MonitorElement * dttf_q_wheel_2ndTrack[6]
MonitorElement * dttf_eta[6][12]
virtual void bookHistograms(DQMStore::IBooker &i, edm::Run const &, edm::EventSetup const &) override
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 * 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)
L1TDTTF(const edm::ParameterSet &ps)
base services