206 : dttpgSource_( ps.getParameter< edm::InputTag >(
"dttpgSource") ),
207 gmtSource_( ps.getParameter< edm::InputTag >(
"gmtSource") ),
208 muonCollectionLabel_( ps.getParameter<edm::InputTag>(
"MuonCollection") ),
209 l1tsubsystemfolder_( ps.getUntrackedParameter<std::string>(
"l1tSystemFolder",
211 online_( ps.getUntrackedParameter<bool>(
"online",
true) ),
212 verbose_( ps.getUntrackedParameter<bool>(
"verbose",
false) )
216 std::string trstring =
241 <<
"L1T Monitoring histograms will be saved to " <<
outputFile_;
284 std::string wheelpath[6] = {
"/02-WHEEL_N2",
292 char c_whn[6][3] = {
"N2",
"N1",
"N0",
"P0",
"P1",
"P2" };
296 for (
int iwh = 0; iwh < 6; ++iwh ) {
298 bookEta( iwh, nbins, start, stop );
303 std::string dttf_trk_folder_wheel = dttf_trk_folder + wheelpath[iwh];
307 sprintf(hname,
"dttf_01_nTracksPerEvent_wh%s", c_whn[iwh]);
308 sprintf(htitle,
"Wheel %s - Number Tracks Per Event", c_whn[iwh]);
314 sprintf(hname,
"dttf_07_phi_vs_etaFine_wh%s", c_whn[iwh]);
315 sprintf(htitle,
"Wheel %s - #eta-#phi DTTF Tracks occupancy (fine #eta only, unpacked values)", c_whn[iwh]);
317 nbins, start-0.5, stop-0.5,
325 sprintf(hname,
"dttf_08_phi_vs_etaCoarse_wh%s", c_whn[iwh]);
326 sprintf(htitle,
"Wheel %s - #eta-#phi DTTF Tracks occupancy (coarse #eta only, unpacked values)", c_whn[iwh]);
328 nbins, start-0.5, stop-0.5,
336 std::string dttf_trk_folder_wheel_2ndtrack =
337 dttf_trk_folder_wheel +
"/2ND_TRACK_ONLY";
342 sprintf(hname,
"dttf_04_quality_wh%s_2ndTrack", c_whn[iwh]);
343 sprintf(htitle,
"Wheel %s - 2nd Tracks Quality distribution", c_whn[iwh]);
348 sprintf(hname,
"dttf_05_quality_summary_wh%s_2ndTrack", c_whn[iwh]);
349 sprintf(htitle,
"Wheel %s - 2nd Tracks - Quality", c_whn[iwh]);
351 12, 1, 13, 7, 1, 8 );
357 sprintf(hname,
"dttf_06_phi_vs_eta_wh%s_2ndTrack", c_whn[iwh]);
358 sprintf(htitle,
"Wheel %s - #eta-#phi Distribution of DTTF 2nd Tracks",
362 nbins, start-0.5,stop-0.5,
371 sprintf(hname,
"dttf_07_eta_wh%s_2ndTrack", c_whn[iwh]);
372 sprintf(htitle,
"Wheel %s - DTTF 2nd Tracks #eta distribution (Packed values)",
378 sprintf(hname,
"dttf_08_phi_wh%s_2ndTrack", c_whn[iwh]);
379 sprintf(htitle,
"Wheel %s - DTTF 2nd Tracks Phi distribution (Packed values)",
385 sprintf(hname,
"dttf_09_pt_wh%s_2ndTrack", c_whn[iwh]);
386 sprintf(htitle,
"Wheel %s - DTTF 2nd Tracks p_{T} distribution (Packed values)",
392 sprintf(hname,
"dttf_10_charge_wh%s_2ndTrack", c_whn[iwh]);
393 sprintf(htitle,
"Wheel %s - DTTF 2nd Tracks Charge distribution", c_whn[iwh]);
405 std::string dttf_trk_folder_nTracksPerEvent = dttf_trk_folder_wheel +
"/TracksPerEvent";
408 for(
int ise = 0; ise < 12; ++ise) {
409 sprintf(hname,
"dttf_nTracksPerEvent_wh%s_se%d", c_whn[iwh], ise+1);
410 sprintf(htitle,
"Wheel %s Sector %d - Number of Tracks Per Event",
418 std::string dttf_trk_folder_wh_bxsec_all =
419 dttf_trk_folder_wheel +
"/BX_BySector";
422 for(
int ise = 0; ise < 12; ++ise ) {
423 sprintf(hname,
"dttf_bx_wh%s_se%d", c_whn[iwh], ise+1);
424 sprintf(htitle,
"Wheel %s Sector %d - BX Distribution",
430 std::string dttf_trk_folder_wh_bxsec_trk2 =
431 dttf_trk_folder_wheel +
"/BX_BySector/2ND_TRACK_ONLY";
434 for(
int ise = 0; ise < 12; ++ise ) {
435 sprintf(hname,
"dttf_bx_2ndTrack_wh%s_se%d", c_whn[iwh], ise+1);
436 sprintf(htitle,
"Wheel %s Sector %d - BX 2nd Tracks only",
443 std::string dttf_trk_folder_charge = dttf_trk_folder_wheel +
"/Charge";
446 for(
int ise = 0; ise < 12; ++ise) {
447 sprintf(hname,
"dttf_charge_wh%s_se%d", c_whn[iwh], ise+1);
448 sprintf(htitle,
"Wheel %s Sector %d - Packed Charge", c_whn[iwh], ise+1);
454 std::string dttf_trk_folder_pt = dttf_trk_folder_wheel +
"/PT";
457 for(
int ise = 0; ise < 12; ++ise ) {
458 sprintf(hname,
"dttf_pt_wh%s_se%d", c_whn[iwh], ise+1);
459 sprintf(htitle,
"Wheel %s Sector %d - Packed p_{T}",
460 c_whn[iwh], ise + 1 );
466 std::string dttf_trk_folder_phi = dttf_trk_folder_wheel +
"/Phi";
469 for(
int ise = 0; ise < 12; ++ise ) {
470 sprintf(hname,
"dttf_phi_wh%s_se%d", c_whn[iwh], ise+1);
471 sprintf(htitle,
"Wheel %s Sector %d - Packed Phi", c_whn[iwh], ise+1);
478 std::string dttf_trk_folder_quality = dttf_trk_folder_wheel +
"/Quality";
481 for(
int ise = 0; ise < 12; ++ise){
482 sprintf(hname,
"dttf_qual_wh%s_se%d", c_whn[iwh], ise+1);
483 sprintf(htitle,
"Wheel %s Sector %d - Packed Quality",
491 std::string dttf_trk_folder_eta = dttf_trk_folder_wheel +
"/Eta";
494 for (
int ise = 0; ise < 12; ++ise ) {
496 sprintf(hname,
"dttf_eta_wh%s_se%d", c_whn[iwh], ise+1);
497 sprintf(htitle,
"Wheel %s Sector %d - Packed #eta",
505 dttf_trk_folder_eta = dttf_trk_folder_wheel +
"/EtaFineFraction";
508 for (
int ise = 0; ise < 12; ++ise ) {
510 sprintf(hname,
"dttf_etaFine_fraction_wh%s_se%d", c_whn[iwh], ise+1);
511 sprintf(htitle,
"Wheel %s Sector %d - Eta Fine Fraction",
525 std::string dttf_trk_folder_inclusive = dttf_trk_folder +
"/01-INCLUSIVE";
529 sprintf(hname,
"dttf_01_nTracksPerEvent_integ");
530 sprintf(htitle,
"Number of DTTF Tracks Per Event");
542 sprintf(hname,
"dttf_04_tracks_occupancy_by_lumi");
543 sprintf(htitle,
"DTTF Tracks in the last LumiSections");
550 sprintf(hname,
"dttf_04_global_muons_request");
551 sprintf(htitle,
"Tracks compatible with a Global Muon in the Barrel");
560 std::string dttf_trk_folder_integrated_gmt =
561 dttf_trk_folder +
"/08-GMT_MATCH";
564 sprintf(hname,
"dttf_tracks_with_gmt_match");
565 sprintf(htitle,
"DTTF Tracks With a Match in GMT");
569 sprintf(hname,
"dttf_tracks_without_gmt_match");
570 sprintf(htitle,
"DTTF Tracks Without a Match in GMT");
574 sprintf(hname,
"dttf_missing_tracks_in_gmt");
575 sprintf(htitle,
"GMT Tracks Without a Corresponding Track in DTTF");
602 edm::LogInfo(
"EndJob") <<
"containing at least one dttf track : "
604 edm::LogInfo(
"EndJob") <<
"containing two dttf tracks : "
621 edm::LogInfo(
"L1TDTTF::Analyze::start") <<
"#################### START";
625 memset(
numTracks, 0, 72 *
sizeof(
int) );
633 <<
"can't getByLabel L1MuDTTrackContainer with label "
638 if ( !myL1MuDTTrackContainer.
isValid() ) {
640 <<
"can't find L1MuDTTrackContainer with label "
646 myL1MuDTTrackContainer->getContainer();
649 if ( trackContainer->size() > 0 ) {
667 for (reco::MuonCollection::const_iterator recoMu = muons->begin();
668 recoMu!=muons->end(); ++recoMu ) {
669 if ( fabs( recoMu->eta() ) < 1.4 ) {
671 edm::LogInfo(
"L1TDTTFClient::Analyze:GM") <<
"Found a global muon!";
685 <<
"No global muons in this event!";
696 <<
"Invalid MuonCollection with label "
704 edm::LogError(
"DataNotFound") <<
"Unable to getByLabel MuonCollection with label "
712 std::vector<L1MuRegionalCand> gmtBx0DttfCandidates;
719 if ( !pCollection.
isValid() ) {
720 edm::LogError(
"DataNotFound") <<
"can't find L1MuGMTReadoutCollection with label "
726 std::vector<L1MuGMTReadoutRecord> gmt_records = gmtrc->
getRecords();
728 std::vector<L1MuGMTReadoutRecord>::const_iterator RRItr;
730 for ( RRItr = gmt_records.begin(); RRItr != gmt_records.end(); ++RRItr ) {
732 std::vector<L1MuRegionalCand> dttfCands = RRItr->getDTBXCands();
733 std::vector<L1MuRegionalCand>::iterator dttfCand;
735 for( dttfCand = dttfCands.begin(); dttfCand != dttfCands.end();
738 if(dttfCand->empty())
continue;
740 if ( RRItr->getBxInEvent() )
continue;
744 gmtBx0DttfCandidates.push_back( *dttfCand );
750 edm::LogError(
"DataNotFound") <<
"Unable to getByLabel L1MuGMTReadoutCollection with label "
756 if ( accept )
fillMEs( trackContainer, gmtBx0DttfCandidates );
759 std::vector<L1MuRegionalCand>::iterator dttfCand;
760 for( dttfCand = gmtBx0DttfCandidates.begin();
761 dttfCand != gmtBx0DttfCandidates.end(); ++dttfCand ) {
762 if( dttfCand->empty() )
continue;
767 int phi= dttfCand->phi_packed();
768 int sector = 1 + (phi + 6)/12;
769 if (sector > 12 ) sector -= 12;
770 double eta = dttfCand->etaValue();
775 }
else if ( eta < -0.3 ) {
778 }
else if ( eta < 0.3 ) {
781 }
else if ( eta < 0.74 ) {
794 int numTracksInt = 0;
796 for (
int w = 0;
w < 6; ++
w ) {
798 int numTracks_wh = 0;
799 for (
int s = 0;
s < 12; ++
s ) {
807 numTracksInt += numTracks_wh;
823 std::vector<L1MuRegionalCand> & gmtDttfCands )
826 L1MuDTTrackContainer::TrackContainer::const_iterator track
827 = trackContainer->begin();
828 L1MuDTTrackContainer::TrackContainer::const_iterator trackEnd
829 = trackContainer->end();
831 for ( ; track != trackEnd; ++track ) {
834 edm::LogInfo(
"L1TDTTF::Analyze") <<
"bx = " << track->bx();
835 edm::LogInfo(
"L1TDTTF::Analyze") <<
"quality (packed) = "
836 << track->quality_packed();
838 << track->pt_packed()
839 <<
" , pt (GeV) = " << track->ptValue();
841 << track->phi_packed()
842 <<
" , phi (rad) = " << track->phiValue();
843 edm::LogInfo(
"L1TDTTF::Analyze") <<
"charge (packed) = "
844 << track->charge_packed();
849 if ( ( track->whNum() == -1 ) && ! track->eta_packed() ) {
850 edm::LogInfo(
"L1TDTTF::Analyze") <<
"Skipping N0 with zero eta value";
856 int bxindex = track->bx() + 1;
857 int se = track->scNum();
859 int whindex = track->whNum();
861 whindex = ( whindex < 0 ) ? whindex + 3 : whindex + 2;
863 if ( whindex < 0 || whindex > 5 ) {
864 edm::LogError(
"L1TDTTF::Analyze::WHEEL_ERROR") << track->whNum()
865 <<
"(" << whindex <<
")";
869 if ( se < 0 || se > 11 ) {
886 int phi_global = track->phi_packed();
887 phi_global = (phi_global > 15 ? phi_global - 32 : phi_global ) + se * 12;
888 if ( phi_global < -6 ) phi_global += 144;
889 if ( phi_global > 137 ) phi_global -= 144;
904 if( track->TrkTag() == 1 ) {
916 if ( bxindex == 1 ) {
931 dttf_q[whindex][se]->
Fill(track->charge_packed());
937 if( track->isFineHalo() ) {
961 if ( track->TrkTag() == 1 ) {
988 std::vector<L1MuRegionalCand>::iterator dttfCand;
990 unsigned int gmt_phi = ( phi_global < 0 ? phi_global + 144 : phi_global );
992 for ( dttfCand = gmtDttfCands.begin(); dttfCand != gmtDttfCands.end();
996 if ( dttfCand->empty() )
continue;
997 if ( ( dttfCand->phi_packed() == gmt_phi ) &&
998 dttfCand->quality_packed() == track->quality_packed() ) {
1054 case 0 : start = 0; stop = 18; nbins = 18;
break;
1055 case 1 : start = 8; stop = 28; nbins = 20;
break;
1056 case 2 : start = 22; stop = 32; nbins = 10;
break;
1057 case 3 : start = 22; stop = 42; nbins = 20;
break;
1058 case 4 : start = 36; stop = 56; nbins = 20;
break;
1059 case 5 : start = 46; stop = 64; nbins = 18;
break;
1060 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]
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]
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
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