212 : dttpgSource_( ps.getParameter< edm::InputTag >(
"dttpgSource") ),
213 gmtSource_( ps.getParameter< edm::InputTag >(
"gmtSource") ),
214 muonCollectionLabel_( ps.getParameter<edm::InputTag>(
"MuonCollection") ),
215 l1tsubsystemfolder_( ps.getUntrackedParameter<std::
string>(
"l1tSystemFolder",
217 online_( ps.getUntrackedParameter<bool>(
"online",
true) ),
218 verbose_( ps.getUntrackedParameter<bool>(
"verbose",
false) )
247 <<
"L1T Monitoring histograms will be saved to " <<
outputFile_;
298 char c_whn[6][3] = {
"N2",
"N1",
"N0",
"P0",
"P1",
"P2" };
302 for (
int iwh = 0; iwh < 6; ++iwh ) {
304 bookEta( iwh, nbins, start, stop );
309 std::string dttf_trk_folder_wheel = dttf_trk_folder + wheelpath[iwh];
313 sprintf(hname,
"dttf_01_nTracksPerEvent_wh%s", c_whn[iwh]);
314 sprintf(htitle,
"Wheel %s - Number Tracks Per Event", c_whn[iwh]);
320 sprintf(hname,
"dttf_07_phi_vs_etaFine_wh%s", c_whn[iwh]);
321 sprintf(htitle,
"Wheel %s - #eta-#phi DTTF Tracks occupancy (fine #eta only, unpacked values)", c_whn[iwh]);
323 nbins, start-0.5, stop-0.5,
331 sprintf(hname,
"dttf_08_phi_vs_etaCoarse_wh%s", c_whn[iwh]);
332 sprintf(htitle,
"Wheel %s - #eta-#phi DTTF Tracks occupancy (coarse #eta only, unpacked values)", c_whn[iwh]);
334 nbins, start-0.5, stop-0.5,
343 dttf_trk_folder_wheel +
"/2ND_TRACK_ONLY";
348 sprintf(hname,
"dttf_04_quality_wh%s_2ndTrack", c_whn[iwh]);
349 sprintf(htitle,
"Wheel %s - 2nd Tracks Quality distribution", c_whn[iwh]);
354 sprintf(hname,
"dttf_05_quality_summary_wh%s_2ndTrack", c_whn[iwh]);
355 sprintf(htitle,
"Wheel %s - 2nd Tracks - Quality", c_whn[iwh]);
357 12, 1, 13, 7, 1, 8 );
363 sprintf(hname,
"dttf_06_phi_vs_eta_wh%s_2ndTrack", c_whn[iwh]);
364 sprintf(htitle,
"Wheel %s - #eta-#phi Distribution of DTTF 2nd Tracks",
368 nbins, start-0.5,stop-0.5,
377 sprintf(hname,
"dttf_07_eta_wh%s_2ndTrack", c_whn[iwh]);
378 sprintf(htitle,
"Wheel %s - DTTF 2nd Tracks #eta distribution (Packed values)",
384 sprintf(hname,
"dttf_08_phi_wh%s_2ndTrack", c_whn[iwh]);
385 sprintf(htitle,
"Wheel %s - DTTF 2nd Tracks Phi distribution (Packed values)",
391 sprintf(hname,
"dttf_09_pt_wh%s_2ndTrack", c_whn[iwh]);
392 sprintf(htitle,
"Wheel %s - DTTF 2nd Tracks p_{T} distribution (Packed values)",
398 sprintf(hname,
"dttf_10_charge_wh%s_2ndTrack", c_whn[iwh]);
399 sprintf(htitle,
"Wheel %s - DTTF 2nd Tracks Charge distribution", c_whn[iwh]);
411 std::string dttf_trk_folder_nTracksPerEvent = dttf_trk_folder_wheel +
"/TracksPerEvent";
414 for(
int ise = 0; ise < 12; ++ise) {
415 sprintf(hname,
"dttf_nTracksPerEvent_wh%s_se%d", c_whn[iwh], ise+1);
416 sprintf(htitle,
"Wheel %s Sector %d - Number of Tracks Per Event",
425 dttf_trk_folder_wheel +
"/BX_BySector";
428 for(
int ise = 0; ise < 12; ++ise ) {
429 sprintf(hname,
"dttf_bx_wh%s_se%d", c_whn[iwh], ise+1);
430 sprintf(htitle,
"Wheel %s Sector %d - BX Distribution",
437 dttf_trk_folder_wheel +
"/BX_BySector/2ND_TRACK_ONLY";
440 for(
int ise = 0; ise < 12; ++ise ) {
441 sprintf(hname,
"dttf_bx_2ndTrack_wh%s_se%d", c_whn[iwh], ise+1);
442 sprintf(htitle,
"Wheel %s Sector %d - BX 2nd Tracks only",
449 std::string dttf_trk_folder_charge = dttf_trk_folder_wheel +
"/Charge";
452 for(
int ise = 0; ise < 12; ++ise) {
453 sprintf(hname,
"dttf_charge_wh%s_se%d", c_whn[iwh], ise+1);
454 sprintf(htitle,
"Wheel %s Sector %d - Packed Charge", c_whn[iwh], ise+1);
460 std::string dttf_trk_folder_pt = dttf_trk_folder_wheel +
"/PT";
463 for(
int ise = 0; ise < 12; ++ise ) {
464 sprintf(hname,
"dttf_pt_wh%s_se%d", c_whn[iwh], ise+1);
465 sprintf(htitle,
"Wheel %s Sector %d - Packed p_{T}",
466 c_whn[iwh], ise + 1 );
472 std::string dttf_trk_folder_phi = dttf_trk_folder_wheel +
"/Phi";
475 for(
int ise = 0; ise < 12; ++ise ) {
476 sprintf(hname,
"dttf_phi_wh%s_se%d", c_whn[iwh], ise+1);
477 sprintf(htitle,
"Wheel %s Sector %d - Packed Phi", c_whn[iwh], ise+1);
484 std::string dttf_trk_folder_quality = dttf_trk_folder_wheel +
"/Quality";
487 for(
int ise = 0; ise < 12; ++ise){
488 sprintf(hname,
"dttf_qual_wh%s_se%d", c_whn[iwh], ise+1);
489 sprintf(htitle,
"Wheel %s Sector %d - Packed Quality",
497 std::string dttf_trk_folder_eta = dttf_trk_folder_wheel +
"/Eta";
500 for (
int ise = 0; ise < 12; ++ise ) {
502 sprintf(hname,
"dttf_eta_wh%s_se%d", c_whn[iwh], ise+1);
503 sprintf(htitle,
"Wheel %s Sector %d - Packed #eta",
511 dttf_trk_folder_eta = dttf_trk_folder_wheel +
"/EtaFineFraction";
514 for (
int ise = 0; ise < 12; ++ise ) {
516 sprintf(hname,
"dttf_etaFine_fraction_wh%s_se%d", c_whn[iwh], ise+1);
517 sprintf(htitle,
"Wheel %s Sector %d - Eta Fine Fraction",
531 std::string dttf_trk_folder_inclusive = dttf_trk_folder +
"/01-INCLUSIVE";
535 sprintf(hname,
"dttf_01_nTracksPerEvent_integ");
536 sprintf(htitle,
"Number of DTTF Tracks Per Event");
548 sprintf(hname,
"dttf_04_tracks_occupancy_by_lumi");
549 sprintf(htitle,
"DTTF Tracks in the last LumiSections");
556 sprintf(hname,
"dttf_04_global_muons_request");
557 sprintf(htitle,
"Tracks compatible with a Global Muon in the Barrel");
567 dttf_trk_folder +
"/08-GMT_MATCH";
570 sprintf(hname,
"dttf_tracks_with_gmt_match");
571 sprintf(htitle,
"DTTF Tracks With a Match in GMT");
575 sprintf(hname,
"dttf_tracks_without_gmt_match");
576 sprintf(htitle,
"DTTF Tracks Without a Match in GMT");
580 sprintf(hname,
"dttf_missing_tracks_in_gmt");
581 sprintf(htitle,
"GMT Tracks Without a Corresponding Track in DTTF");
608 edm::LogInfo(
"EndJob") <<
"containing at least one dttf track : "
610 edm::LogInfo(
"EndJob") <<
"containing two dttf tracks : "
627 edm::LogInfo(
"L1TDTTF::Analyze::start") <<
"#################### START";
631 memset(
numTracks, 0, 72 *
sizeof(
int) );
639 <<
"can't getByLabel L1MuDTTrackContainer with label "
644 if ( !myL1MuDTTrackContainer.
isValid() ) {
646 <<
"can't find L1MuDTTrackContainer with label "
652 myL1MuDTTrackContainer->getContainer();
655 if ( trackContainer->size() > 0 ) {
673 for (reco::MuonCollection::const_iterator recoMu = muons->begin();
674 recoMu!=muons->end(); ++recoMu ) {
675 if ( fabs( recoMu->eta() ) < 1.4 ) {
677 edm::LogInfo(
"L1TDTTFClient::Analyze:GM") <<
"Found a global muon!";
691 <<
"No global muons in this event!";
702 <<
"Invalid MuonCollection with label "
710 edm::LogError(
"DataNotFound") <<
"Unable to getByLabel MuonCollection with label "
718 std::vector<L1MuRegionalCand> gmtBx0DttfCandidates;
725 if ( !pCollection.
isValid() ) {
726 edm::LogError(
"DataNotFound") <<
"can't find L1MuGMTReadoutCollection with label "
732 std::vector<L1MuGMTReadoutRecord> gmt_records = gmtrc->
getRecords();
734 std::vector<L1MuGMTReadoutRecord>::const_iterator RRItr;
736 for ( RRItr = gmt_records.begin(); RRItr != gmt_records.end(); ++RRItr ) {
738 std::vector<L1MuRegionalCand> dttfCands = RRItr->getDTBXCands();
739 std::vector<L1MuRegionalCand>::iterator dttfCand;
741 for( dttfCand = dttfCands.begin(); dttfCand != dttfCands.end();
744 if(dttfCand->empty())
continue;
746 if ( RRItr->getBxInEvent() )
continue;
750 gmtBx0DttfCandidates.push_back( *dttfCand );
756 edm::LogError(
"DataNotFound") <<
"Unable to getByLabel L1MuGMTReadoutCollection with label "
762 if ( accept )
fillMEs( trackContainer, gmtBx0DttfCandidates );
765 std::vector<L1MuRegionalCand>::iterator dttfCand;
766 for( dttfCand = gmtBx0DttfCandidates.begin();
767 dttfCand != gmtBx0DttfCandidates.end(); ++dttfCand ) {
768 if( dttfCand->empty() )
continue;
773 int phi= dttfCand->phi_packed();
774 int sector = 1 + (phi + 6)/12;
775 if (sector > 12 ) sector -= 12;
776 double eta = dttfCand->etaValue();
781 }
else if ( eta < -0.3 ) {
784 }
else if ( eta < 0.3 ) {
787 }
else if ( eta < 0.74 ) {
800 int numTracksInt = 0;
802 for (
int w = 0;
w < 6; ++
w ) {
804 int numTracks_wh = 0;
805 for (
int s = 0;
s < 12; ++
s ) {
813 numTracksInt += numTracks_wh;
829 std::vector<L1MuRegionalCand> & gmtDttfCands )
832 L1MuDTTrackContainer::TrackContainer::const_iterator track
833 = trackContainer->begin();
834 L1MuDTTrackContainer::TrackContainer::const_iterator trackEnd
835 = trackContainer->end();
837 for ( ; track != trackEnd; ++track ) {
840 edm::LogInfo(
"L1TDTTF::Analyze") <<
"bx = " << track->bx();
841 edm::LogInfo(
"L1TDTTF::Analyze") <<
"quality (packed) = "
842 << track->quality_packed();
844 << track->pt_packed()
845 <<
" , pt (GeV) = " << track->ptValue();
847 << track->phi_packed()
848 <<
" , phi (rad) = " << track->phiValue();
849 edm::LogInfo(
"L1TDTTF::Analyze") <<
"charge (packed) = "
850 << track->charge_packed();
855 if ( ( track->whNum() == -1 ) && ! track->eta_packed() ) {
856 edm::LogInfo(
"L1TDTTF::Analyze") <<
"Skipping N0 with zero eta value";
862 int bxindex = track->bx() + 1;
863 int se = track->scNum();
865 int whindex = track->whNum();
867 whindex = ( whindex < 0 ) ? whindex + 3 : whindex + 2;
869 if ( whindex < 0 || whindex > 5 ) {
870 edm::LogError(
"L1TDTTF::Analyze::WHEEL_ERROR") << track->whNum()
871 <<
"(" << whindex <<
")";
875 if ( se < 0 || se > 11 ) {
892 int phi_global = track->phi_packed();
893 phi_global = (phi_global > 15 ? phi_global - 32 : phi_global ) + se * 12;
894 if ( phi_global < -6 ) phi_global += 144;
895 if ( phi_global > 137 ) phi_global -= 144;
910 if( track->TrkTag() == 1 ) {
922 if ( bxindex == 1 ) {
937 dttf_q[whindex][se]->
Fill(track->charge_packed());
943 if( track->isFineHalo() ) {
967 if ( track->TrkTag() == 1 ) {
994 std::vector<L1MuRegionalCand>::iterator dttfCand;
996 unsigned int gmt_phi = ( phi_global < 0 ? phi_global + 144 : phi_global );
998 for ( dttfCand = gmtDttfCands.begin(); dttfCand != gmtDttfCands.end();
1002 if ( dttfCand->empty() )
continue;
1003 if ( ( dttfCand->phi_packed() == gmt_phi ) &&
1004 dttfCand->quality_packed() == track->quality_packed() ) {
1060 case 0 : start = 0; stop = 18; nbins = 18;
break;
1061 case 1 : start = 8; stop = 28; nbins = 20;
break;
1062 case 2 : start = 22; stop = 32; nbins = 10;
break;
1063 case 3 : start = 22; stop = 42; nbins = 20;
break;
1064 case 4 : start = 36; stop = 56; nbins = 20;
break;
1065 case 5 : start = 46; stop = 64; nbins = 18;
break;
1066 default : start = 0; stop = 0; nbins = 0;
break;
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 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