200 : dttpgSource_( ps.getParameter< edm::InputTag >(
"dttpgSource") ),
201 gmtSource_( ps.getParameter< edm::InputTag >(
"gmtSource") ),
202 muonCollectionLabel_( ps.getParameter<edm::InputTag>(
"MuonCollection") ),
203 l1tsubsystemfolder_( ps.getUntrackedParameter<std::string>(
"l1tSystemFolder",
205 online_( ps.getUntrackedParameter<bool>(
"online",
true) ),
206 verbose_( ps.getUntrackedParameter<bool>(
"verbose",
false) )
210 std::string trstring =
235 <<
"L1T Monitoring histograms will be saved to " <<
outputFile_;
278 std::string wheelpath[6] = {
"/02-WHEEL_N2",
286 char c_whn[6][3] = {
"N2",
"N1",
"N0",
"P0",
"P1",
"P2" };
290 for (
int iwh = 0; iwh < 6; ++iwh ) {
292 bookEta( iwh, nbins, start, stop );
297 std::string dttf_trk_folder_wheel = dttf_trk_folder + wheelpath[iwh];
301 sprintf(hname,
"dttf_01_nTracksPerEvent_wh%s", c_whn[iwh]);
302 sprintf(htitle,
"Wheel %s - Number Tracks Per Event", c_whn[iwh]);
308 sprintf(hname,
"dttf_07_phi_vs_etaFine_wh%s", c_whn[iwh]);
309 sprintf(htitle,
"Wheel %s - #eta-#phi DTTF Tracks occupancy (fine #eta only, unpacked values)", c_whn[iwh]);
311 nbins, start-0.5, stop-0.5,
319 sprintf(hname,
"dttf_08_phi_vs_etaCoarse_wh%s", c_whn[iwh]);
320 sprintf(htitle,
"Wheel %s - #eta-#phi DTTF Tracks occupancy (coarse #eta only, unpacked values)", c_whn[iwh]);
322 nbins, start-0.5, stop-0.5,
330 std::string dttf_trk_folder_wheel_2ndtrack =
331 dttf_trk_folder_wheel +
"/2ND_TRACK_ONLY";
336 sprintf(hname,
"dttf_04_quality_wh%s_2ndTrack", c_whn[iwh]);
337 sprintf(htitle,
"Wheel %s - 2nd Tracks Quality distribution", c_whn[iwh]);
342 sprintf(hname,
"dttf_05_quality_summary_wh%s_2ndTrack", c_whn[iwh]);
343 sprintf(htitle,
"Wheel %s - 2nd Tracks - Quality", c_whn[iwh]);
345 12, 1, 13, 7, 1, 8 );
351 sprintf(hname,
"dttf_06_phi_vs_eta_wh%s_2ndTrack", c_whn[iwh]);
352 sprintf(htitle,
"Wheel %s - #eta-#phi Distribution of DTTF 2nd Tracks",
356 nbins, start-0.5,stop-0.5,
365 sprintf(hname,
"dttf_07_eta_wh%s_2ndTrack", c_whn[iwh]);
366 sprintf(htitle,
"Wheel %s - DTTF 2nd Tracks #eta distribution (Packed values)",
372 sprintf(hname,
"dttf_08_phi_wh%s_2ndTrack", c_whn[iwh]);
373 sprintf(htitle,
"Wheel %s - DTTF 2nd Tracks Phi distribution (Packed values)",
379 sprintf(hname,
"dttf_09_pt_wh%s_2ndTrack", c_whn[iwh]);
380 sprintf(htitle,
"Wheel %s - DTTF 2nd Tracks p_{T} distribution (Packed values)",
386 sprintf(hname,
"dttf_10_charge_wh%s_2ndTrack", c_whn[iwh]);
387 sprintf(htitle,
"Wheel %s - DTTF 2nd Tracks Charge distribution", c_whn[iwh]);
399 std::string dttf_trk_folder_nTracksPerEvent = dttf_trk_folder_wheel +
"/TracksPerEvent";
402 for(
int ise = 0; ise < 12; ++ise) {
403 sprintf(hname,
"dttf_nTracksPerEvent_wh%s_se%d", c_whn[iwh], ise+1);
404 sprintf(htitle,
"Wheel %s Sector %d - Number of Tracks Per Event",
412 std::string dttf_trk_folder_wh_bxsec_all =
413 dttf_trk_folder_wheel +
"/BX_BySector";
416 for(
int ise = 0; ise < 12; ++ise ) {
417 sprintf(hname,
"dttf_bx_wh%s_se%d", c_whn[iwh], ise+1);
418 sprintf(htitle,
"Wheel %s Sector %d - BX Distribution",
424 std::string dttf_trk_folder_wh_bxsec_trk2 =
425 dttf_trk_folder_wheel +
"/BX_BySector/2ND_TRACK_ONLY";
428 for(
int ise = 0; ise < 12; ++ise ) {
429 sprintf(hname,
"dttf_bx_2ndTrack_wh%s_se%d", c_whn[iwh], ise+1);
430 sprintf(htitle,
"Wheel %s Sector %d - BX 2nd Tracks only",
437 std::string dttf_trk_folder_charge = dttf_trk_folder_wheel +
"/Charge";
440 for(
int ise = 0; ise < 12; ++ise) {
441 sprintf(hname,
"dttf_charge_wh%s_se%d", c_whn[iwh], ise+1);
442 sprintf(htitle,
"Wheel %s Sector %d - Packed Charge", c_whn[iwh], ise+1);
448 std::string dttf_trk_folder_pt = dttf_trk_folder_wheel +
"/PT";
451 for(
int ise = 0; ise < 12; ++ise ) {
452 sprintf(hname,
"dttf_pt_wh%s_se%d", c_whn[iwh], ise+1);
453 sprintf(htitle,
"Wheel %s Sector %d - Packed p_{T}",
454 c_whn[iwh], ise + 1 );
460 std::string dttf_trk_folder_phi = dttf_trk_folder_wheel +
"/Phi";
463 for(
int ise = 0; ise < 12; ++ise ) {
464 sprintf(hname,
"dttf_phi_wh%s_se%d", c_whn[iwh], ise+1);
465 sprintf(htitle,
"Wheel %s Sector %d - Packed Phi", c_whn[iwh], ise+1);
472 std::string dttf_trk_folder_quality = dttf_trk_folder_wheel +
"/Quality";
475 for(
int ise = 0; ise < 12; ++ise){
476 sprintf(hname,
"dttf_qual_wh%s_se%d", c_whn[iwh], ise+1);
477 sprintf(htitle,
"Wheel %s Sector %d - Packed Quality",
485 std::string dttf_trk_folder_eta = dttf_trk_folder_wheel +
"/Eta";
488 for (
int ise = 0; ise < 12; ++ise ) {
490 sprintf(hname,
"dttf_eta_wh%s_se%d", c_whn[iwh], ise+1);
491 sprintf(htitle,
"Wheel %s Sector %d - Packed #eta",
499 dttf_trk_folder_eta = dttf_trk_folder_wheel +
"/EtaFineFraction";
502 for (
int ise = 0; ise < 12; ++ise ) {
504 sprintf(hname,
"dttf_etaFine_fraction_wh%s_se%d", c_whn[iwh], ise+1);
505 sprintf(htitle,
"Wheel %s Sector %d - Eta Fine Fraction",
519 std::string dttf_trk_folder_inclusive = dttf_trk_folder +
"/01-INCLUSIVE";
523 sprintf(hname,
"dttf_01_nTracksPerEvent_integ");
524 sprintf(htitle,
"Number of DTTF Tracks Per Event");
536 sprintf(hname,
"dttf_04_tracks_occupancy_by_lumi");
537 sprintf(htitle,
"DTTF Tracks in the last LumiSections");
544 sprintf(hname,
"dttf_04_global_muons_request");
545 sprintf(htitle,
"Tracks compatible with a Global Muon in the Barrel");
554 std::string dttf_trk_folder_integrated_gmt =
555 dttf_trk_folder +
"/08-GMT_MATCH";
558 sprintf(hname,
"dttf_tracks_with_gmt_match");
559 sprintf(htitle,
"DTTF Tracks With a Match in GMT");
563 sprintf(hname,
"dttf_tracks_without_gmt_match");
564 sprintf(htitle,
"DTTF Tracks Without a Match in GMT");
568 sprintf(hname,
"dttf_missing_tracks_in_gmt");
569 sprintf(htitle,
"GMT Tracks Without a Corresponding Track in DTTF");
596 edm::LogInfo(
"EndJob") <<
"containing at least one dttf track : "
598 edm::LogInfo(
"EndJob") <<
"containing two dttf tracks : "
615 edm::LogInfo(
"L1TDTTF::Analyze::start") <<
"#################### START";
619 memset(
numTracks, 0, 72 *
sizeof(
int) );
627 <<
"can't getByLabel L1MuDTTrackContainer with label "
632 if ( !myL1MuDTTrackContainer.
isValid() ) {
634 <<
"can't find L1MuDTTrackContainer with label "
640 myL1MuDTTrackContainer->getContainer();
643 if ( trackContainer->size() > 0 ) {
661 for (reco::MuonCollection::const_iterator recoMu = muons->begin();
662 recoMu!=muons->end(); ++recoMu ) {
663 if ( fabs( recoMu->eta() ) < 1.4 ) {
665 edm::LogInfo(
"L1TDTTFClient::Analyze:GM") <<
"Found a global muon!";
679 <<
"No global muons in this event!";
690 <<
"Invalid MuonCollection with label "
698 edm::LogError(
"DataNotFound") <<
"Unable to getByLabel MuonCollection with label "
706 std::vector<L1MuRegionalCand> gmtBx0DttfCandidates;
713 if ( !pCollection.
isValid() ) {
714 edm::LogError(
"DataNotFound") <<
"can't find L1MuGMTReadoutCollection with label "
720 std::vector<L1MuGMTReadoutRecord> gmt_records = gmtrc->
getRecords();
722 std::vector<L1MuGMTReadoutRecord>::const_iterator RRItr;
724 for ( RRItr = gmt_records.begin(); RRItr != gmt_records.end(); ++RRItr ) {
726 std::vector<L1MuRegionalCand> dttfCands = RRItr->getDTBXCands();
727 std::vector<L1MuRegionalCand>::iterator dttfCand;
729 for( dttfCand = dttfCands.begin(); dttfCand != dttfCands.end();
732 if(dttfCand->empty())
continue;
734 if ( RRItr->getBxInEvent() )
continue;
738 gmtBx0DttfCandidates.push_back( *dttfCand );
744 edm::LogError(
"DataNotFound") <<
"Unable to getByLabel L1MuGMTReadoutCollection with label "
750 if ( accept )
fillMEs( trackContainer, gmtBx0DttfCandidates );
753 std::vector<L1MuRegionalCand>::iterator dttfCand;
754 for( dttfCand = gmtBx0DttfCandidates.begin();
755 dttfCand != gmtBx0DttfCandidates.end(); ++dttfCand ) {
756 if( dttfCand->empty() )
continue;
761 int phi= dttfCand->phi_packed();
762 int sector = 1 + (phi + 6)/12;
763 if (sector > 12 ) sector -= 12;
764 double eta = dttfCand->etaValue();
769 }
else if ( eta < -0.3 ) {
772 }
else if ( eta < 0.3 ) {
775 }
else if ( eta < 0.74 ) {
788 int numTracksInt = 0;
790 for (
int w = 0; w < 6; ++w ) {
792 int numTracks_wh = 0;
793 for (
int s = 0;
s < 12; ++
s ) {
801 numTracksInt += numTracks_wh;
817 std::vector<L1MuRegionalCand> & gmtDttfCands )
820 L1MuDTTrackContainer::TrackContainer::const_iterator
track
821 = trackContainer->begin();
822 L1MuDTTrackContainer::TrackContainer::const_iterator trackEnd
823 = trackContainer->end();
825 for ( ; track != trackEnd; ++
track ) {
828 edm::LogInfo(
"L1TDTTF::Analyze") <<
"bx = " << track->bx();
829 edm::LogInfo(
"L1TDTTF::Analyze") <<
"quality (packed) = "
830 << track->quality_packed();
832 << track->pt_packed()
833 <<
" , pt (GeV) = " << track->ptValue();
835 << track->phi_packed()
836 <<
" , phi (rad) = " << track->phiValue();
837 edm::LogInfo(
"L1TDTTF::Analyze") <<
"charge (packed) = "
838 << track->charge_packed();
843 if ( ( track->whNum() == -1 ) && ! track->eta_packed() ) {
844 edm::LogInfo(
"L1TDTTF::Analyze") <<
"Skipping N0 with zero eta value";
850 int bxindex = track->bx() + 1;
851 int se = track->scNum();
853 int whindex = track->whNum();
855 whindex = ( whindex < 0 ) ? whindex + 3 : whindex + 2;
857 if ( whindex < 0 || whindex > 5 ) {
858 edm::LogError(
"L1TDTTF::Analyze::WHEEL_ERROR") << track->whNum()
859 <<
"(" << whindex <<
")";
863 if ( se < 0 || se > 11 ) {
880 int phi_global = track->phi_packed();
881 phi_global = (phi_global > 15 ? phi_global - 32 : phi_global ) + se * 12;
882 if ( phi_global < -6 ) phi_global += 144;
883 if ( phi_global > 137 ) phi_global -= 144;
898 if( track->TrkTag() == 1 ) {
910 if ( bxindex == 1 ) {
925 dttf_q[whindex][se]->
Fill(track->charge_packed());
931 if( track->isFineHalo() ) {
955 if ( track->TrkTag() == 1 ) {
982 std::vector<L1MuRegionalCand>::iterator dttfCand;
984 unsigned int gmt_phi = ( phi_global < 0 ? phi_global + 144 : phi_global );
986 for ( dttfCand = gmtDttfCands.begin(); dttfCand != gmtDttfCands.end();
990 if ( dttfCand->empty() )
continue;
991 if ( ( dttfCand->phi_packed() == gmt_phi ) &&
992 dttfCand->quality_packed() == track->quality_packed() ) {
1048 case 0 : start = 0; stop = 18; nbins = 18;
break;
1049 case 1 : start = 8; stop = 28; nbins = 20;
break;
1050 case 2 : start = 22; stop = 32; nbins = 10;
break;
1051 case 3 : start = 22; stop = 42; nbins = 20;
break;
1052 case 4 : start = 36; stop = 56; nbins = 20;
break;
1053 case 5 : start = 46; stop = 64; nbins = 18;
break;
1054 default : start = 0; stop = 0; nbins = 0;
break;
T getUntrackedParameter(std::string const &, T const &) const
std::string l1tsubsystemfolder_
edm::InputTag trackInputTag_
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 save(const std::string &filename, const std::string &path="", const std::string &pattern="", const std::string &rewrite="", SaveReferenceTag ref=SaveWithReference, int minStatus=dqm::qstatus::STATUS_OK, const std::string &fileupdate="RECREATE")
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]
void fillMEs(std::vector< L1MuDTTrackCand > *trackContainer, std::vector< L1MuRegionalCand > &gmtDttfCands)
MonitorElement * dttf_nTracksPerEvent_integ
MonitorElement * dttf_pt_wheel_2ndTrack[6]
MonitorElement * dttf_eta_wheel_2ndTrack[6]
MonitorElement * dttf_qual[6][12]
edm::InputTag dttpgSource_
MonitorElement * dttf_quality_wheel_2ndTrack[6]
std::vector< L1MuDTTrackCand > TrackContainer
MonitorElement * dttf_phi[6][12]
void setVerbose(unsigned level)
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]
std::vector< L1MuGMTReadoutRecord > getRecords() const
MonitorElement * dttf_gmt_ghost
MonitorElement * dttf_bx_2ndTrack[6][12]
T const * product() const
MonitorElement * dttf_q_wheel_2ndTrack[6]
MonitorElement * dttf_eta[6][12]
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
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