22 : l1tdttffolder_ ( ps.getUntrackedParameter<std::string> (
"l1tSourceFolder",
"L1T/L1TDTTF") ),
23 dttfSource_( ps.getParameter< edm::InputTag >(
"dttfSource") ),
24 online_( ps.getUntrackedParameter<bool>(
"online",
true) ),
25 resetafterlumi_( ps.getUntrackedParameter<int>(
"resetAfterLumi", 3) ),
26 counterLS_(0), occupancy_r_(0)
34 edm::LogInfo(
"L1TDTTFClient")<<
"[L1TDTTFClient]: ending... ";
42 edm::LogInfo(
"L1TDTTFClient")<<
"[L1TDTTFClient]: Begin Job";
72 sprintf(hname,
"dttf_02_nTracks");
73 sprintf(mename,
"DTTF Tracks by Wheel");
78 sprintf(hname,
"dttf_03_tracks_occupancy_summary");
79 sprintf(mename,
"DTTF Tracks Occupancy");
87 sprintf(hname,
"dttf_05_bx_occupancy");
88 sprintf(mename,
"DTTF Tracks BX Distribution by Wheel");
94 sprintf(hname,
"dttf_06_bx");
95 sprintf(mename,
"DTTF Tracks BX w.r.t. Tracks with BX=0");
100 sprintf(hname,
"dttf_07_quality");
101 sprintf(mename,
"DTTF Tracks Quality distribution");
106 sprintf(hname,
"dttf_08_quality_occupancy");
107 sprintf(mename,
"DTTF Tracks Quality distribution by Wheel");
114 sprintf(hname,
"dttf_09_highQuality_Tracks");
115 sprintf(mename,
"Fraction of DTTF Tracks with Quality>3");
122 sprintf(hname,
"dttf_10_phi_vs_etaCoarse");
123 sprintf(mename,
"#eta-#phi DTTF Tracks occupancy (coarse #eta only, packed values)");
130 sprintf(hname,
"dttf_11_phi_vs_etaFine");
131 sprintf(mename,
"#eta-#phi DTTF Tracks occupancy (fine #eta only, packed values)");
138 sprintf(hname,
"dttf_12_phi_vs_eta");
139 sprintf(mename,
"#eta-#phi DTTF Tracks occupancy");
146 sprintf(hname,
"dttf_13_eta_fine_fraction");
147 sprintf(mename,
"Fraction of DTTF Tracks with Fine #eta Assignment");
155 sprintf(hname,
"dttf_14_eta");
156 sprintf(mename,
"DTTF Tracks #eta distribution (Packed values)");
161 sprintf(hname,
"dttf_15_phi");
162 sprintf(mename,
"DTTF Tracks Phi distribution (Packed values)");
167 sprintf(hname,
"dttf_16_pt");
168 sprintf(mename,
"DTTF Tracks p_{T} distribution (Packed values)");
173 sprintf(hname,
"dttf_17_charge");
174 sprintf(mename,
"DTTF Tracks Charge distribution");
181 sprintf(hname,
"dttf_18_2ndTrack_occupancy_summary");
182 sprintf(mename,
"DTTF 2nd Tracks occupancy w.r.t. Tracks with BX=0");
192 sprintf(hname,
"dttf_gmt_fract_matching" );
193 sprintf(mename,
"Fraction of DTTF tracks matching with GMT tracks" );
206 sprintf(hname,
"dttf_01_nTracks_2ndTrack");
207 sprintf(mename,
"DTTF 2nd Tracks per Wheel distribution");
212 sprintf(hname,
"dttf_02_occupancy_summary_2ndTrack");
213 sprintf(mename,
"DTTF 2nd Tracks distribution by Sector and Wheel");
219 sprintf(hname,
"dttf_03_bx_occupancy_2ndTrack");
220 sprintf(mename,
"DTTF 2nd Tracks BX Distribution by Wheel");
226 sprintf(hname,
"dttf_04_bx_2ndTrack");
227 sprintf(mename,
"Fraction of DTTF Tracks BX w.r.t. Tracks with BX=0");
232 sprintf(hname,
"dttf_05_quality_2ndTrack");
233 sprintf(mename,
"DTTF 2nd Tracks Quality distribution");
239 sprintf(hname,
"dttf_06_quality_occupancy_2ndTrack");
240 sprintf(mename,
"DTTF 2nd Tracks Quality distribution by Wheel");
248 sprintf(hname,
"dttf_07_highQuality_Tracks_2ndTrack");
249 sprintf(mename,
"Fraction of DTTF 2nd Tracks with Quality>3");
256 sprintf(hname,
"dttf_08_phi_vs_eta_2ndTrack");
257 sprintf(mename,
"#eta-#phi DTTF Tracks occupancy for 2nd Tracks");
264 sprintf(hname,
"dttf_09_eta_2ndTrack");
265 sprintf(mename,
"DTTF 2nd Tracks #eta distribution (Packed values)");
270 sprintf(hname,
"dttf_10_phi_2ndTrack");
271 sprintf(mename,
"DTTF 2nd Tracks Phi distribution (Packed values)");
276 sprintf(hname,
"dttf_11_pt_2ndTrack");
277 sprintf(mename,
"DTTF 2nd Tracks p_{T} distribution (Packed values)");
282 sprintf(hname,
"dttf_12_charge_2ndTrack");
283 sprintf(mename,
"DTTF 2nd Tracks Charge distribution");
288 for (
unsigned int wh = 0; wh < 6 ; ++wh ) {
292 sprintf( hname,
"dttf_02_nTracks_wh%s",
wheel_[wh].c_str() );
293 sprintf( mename,
"Wheel %s - Number of Tracks",
wheel_[wh].c_str() );
298 sprintf(hname,
"dttf_03_bx_occupancy_wh%s",
wheel_[wh].c_str() );
299 sprintf(mename,
"Wheel %s - DTTF Tracks BX distribution by Sector",
306 sprintf(hname,
"dttf_04_bx_wh%s",
wheel_[wh].c_str());
307 sprintf(mename,
"Wheel %s - DTTF Tracks BX w.r.t. Tracks with BX=0",
wheel_[wh].c_str());
312 sprintf(hname,
"dttf_05_quality_wh%s",
wheel_[wh].c_str() );
313 sprintf(mename,
"Wheel %s - Tracks Quality Distribution",
wheel_[wh].c_str() );
319 sprintf(hname,
"dttf_06_quality_summary_wh%s",
wheel_[wh].c_str() );
320 sprintf(mename,
"Wheel %s - Tracks Quality Distribution by Sector",
328 sprintf(hname,
"dttf_09_etaFine_fraction_wh%s",
wheel_[wh].c_str() );
329 sprintf(mename,
"Wheel %s - Fraction of DTTF Tracks with fine #eta assignment",
336 sprintf(hname,
"dttf_10_eta_wh%s",
wheel_[wh].c_str() );
337 sprintf(mename,
"Wheel %s - DTTF Tracks #eta distribution (Packed values)",
343 sprintf(hname,
"dttf_11_phi_wh%s",
wheel_[wh].c_str() );
344 sprintf(mename,
"Wheel %s - DTTF Tracks Phi distribution (Packed values)",
350 sprintf(hname,
"dttf_12_pt_wh%s",
wheel_[wh].c_str() );
351 sprintf(mename,
"Wheel %s - DTTF Tracks p_{T} distribution (Packed values)",
357 sprintf(hname,
"dttf_13_charge_wh%s",
wheel_[wh].c_str() );
358 sprintf(mename,
"Wheel %s - DTTF Tracks Charge distribution",
367 for (
unsigned int wh = 0; wh < 6 ; ++wh ) {
371 sprintf( hname,
"dttf_01_nTracks_wh%s_2ndTrack",
wheel_[wh].c_str() );
372 sprintf( mename,
"Wheel %s - DTTF Number of 2nd Tracks with BX=0",
379 sprintf(hname,
"dttf_02_bx_occupancy_wh%s_2ndTrack",
wheel_[wh].c_str() );
380 sprintf(mename,
"Wheel %s - DTTF 2nd Tracks BX distribution by Sector",
387 sprintf(hname,
"dttf_03_bx_wh%s_2ndTrack",
wheel_[wh].c_str());
388 sprintf(mename,
"Wheel %s - 2nd Tracks BX Distribution",
wheel_[wh].c_str());
413 sprintf( hname,
"%s/dttf_04_tracks_occupancy_by_lumi",
417 if ( ! occupancy_r_ ) {
419 <<
"Failed to get TH2D " << std::string(hname);
421 edm::LogInfo(
"L1TDTTFClient::beginLuminosityBlock:RESET") <<
"Reseting plots by lumi!";
422 occupancy_r_->Reset();
487 if ( physEntries > 0 ) {
488 double physScale = 1 / physEntries;
511 if ( entries2ndTrack > 0 ) {
519 "%s/2ND_TRACK_ONLY/dttf_05_quality_summary_wh%s_2ndTrack" );
524 double scale2nd = 1 / entries2ndTrack;
556 int wheelSumBx2nd[4];
559 memset( wheelSumBx, 0, 4 *
sizeof(
int) );
560 memset( wheelSumBx2nd, 0, 4 *
sizeof(
int) );
580 for (
unsigned int wh = 0; wh < 6 ; ++wh ) {
589 double wheelEtaAll = 0;
590 double wheelEtaFine = 0;
591 memset( wheelBx, 0, 4 *
sizeof(
int) );
592 memset( wheelBx2nd, 0, 4 *
sizeof(
int) );
595 memset( qualities, 0, 8 *
sizeof(
int) );
602 "%s/dttf_07_phi_vs_etaFine_wh%s",
603 "%s/dttf_08_phi_vs_etaCoarse_wh%s", wh );
606 "%s/2ND_TRACK_ONLY/dttf_06_phi_vs_eta_wh%s_2ndTrack",
613 for (
unsigned int sector = 1; sector < 13; ++sector ) {
618 sprintf( hname,
"%s/BX_BySector/dttf_bx_wh%s_se%d",
621 TH1F * bxsector =
getTH1F(hname);
623 edm::LogError(
"L1TDTTFClient::makeSummary:ME") <<
"Failed to get TH1D "
624 << std::string(hname);
627 for (
unsigned int bx = 1; bx < 4 ; ++bx ) {
629 int bxval = bxsector->GetBinContent( bx );
639 wheelBx[bx] += bxval;
648 sprintf( hname,
"%s/BX_BySector/2ND_TRACK_ONLY/dttf_bx_2ndTrack_wh%s_se%d",
651 TH1F * bxsector2nd =
getTH1F(hname);
652 if ( ! bxsector2nd ) {
653 edm::LogError(
"L1TDTTFClient::makeSummary:ME") <<
"Failed to get TH1D "
654 << std::string(hname);
657 for (
unsigned int bx = 1; bx < 4 ; ++bx ) {
658 int bxval = bxsector2nd->GetBinContent( bx );
665 wheelBx2nd[bx] += bxval;
673 sprintf( hname,
"%s/Charge/dttf_charge_wh%s_se%d",
677 edm::LogError(
"L1TDTTFClient::makeSummary:ME") <<
"Failed to get TH1D "
678 << std::string(hname);
687 sprintf( hname,
"%s/PT/dttf_pt_wh%s_se%d",
691 edm::LogError(
"L1TDTTFClient::makeSummary:ME") <<
"Failed to get TH1D "
692 << std::string(hname);
702 sprintf( hname,
"%s/Phi/dttf_phi_wh%s_se%d",
706 edm::LogError(
"L1TDTTFClient::makeSummary:ME") <<
"Failed to get TH1D "
707 << std::string(hname);
718 double denHighQual = 0;
719 sprintf( hname,
"%s/Quality/dttf_qual_wh%s_se%d",
723 edm::LogError(
"L1TDTTFClient::makeSummary:ME") <<
"Failed to get TH1D "
724 << std::string(hname);
730 for (
unsigned int qual = 1; qual < 4 ; ++qual ) {
731 double bincontent = tmp->GetBinContent( qual );
732 qualities[qual] += bincontent;
733 denHighQual += bincontent;
737 for (
unsigned int qual = 4; qual < 8 ; ++qual ) {
738 double bincontent = tmp->GetBinContent( qual );
739 qualities[qual] += bincontent;
741 denHighQual += bincontent;
742 highQual += bincontent;
746 if ( denHighQual > 0 ) highQual /= denHighQual;
753 sprintf( hname,
"%s/Eta/dttf_eta_wh%s_se%d",
757 edm::LogError(
"L1TDTTFClient::makeSummary:ME") <<
"Failed to get TH1D "
758 << std::string(hname);
768 sprintf( hname,
"%s/EtaFineFraction/dttf_etaFine_fraction_wh%s_se%d",
772 edm::LogError(
"L1TDTTFClient::makeSummary:ME") <<
"Failed to get TH1D "
773 << std::string(hname);
775 double fine = tmp->GetBinContent( 1 );
776 double coarse = tmp->GetBinContent( 2 );
777 double tot = fine + coarse;
779 wheelEtaFine += fine;
790 if ( wheelEtaAll > 0 ) {
803 for (
unsigned int bx = 1; bx < 4; ++bx ) {
807 wheelSumBx[bx] += wheelBx[bx];
811 wheelSumBx2nd[bx] += wheelBx2nd[bx];
819 for (
unsigned int qual = 1; qual < 8 ; ++qual ) {
842 double scale = wheelBx[2];
848 scale = wheelBx2nd[2];
867 sprintf( hname,
"%s/2ND_TRACK_ONLY/dttf_07_eta_wh%s_2ndTrack",
872 edm::LogError(
"L1TDTTFClient::makeSummary:ME") <<
"Failed to get TH1D "
873 << std::string(hname);
881 sprintf( hname,
"%s/2ND_TRACK_ONLY/dttf_08_phi_wh%s_2ndTrack",
885 edm::LogError(
"L1TDTTFClient::makeSummary:ME") <<
"Failed to get TH1D "
886 << std::string(hname);
895 sprintf( hname,
"%s/2ND_TRACK_ONLY/dttf_09_pt_wh%s_2ndTrack",
899 edm::LogError(
"L1TDTTFClient::makeSummary:ME") <<
"Failed to get TH1D "
900 << std::string(hname);
908 sprintf( hname,
"%s/2ND_TRACK_ONLY/dttf_10_charge_wh%s_2ndTrack",
912 edm::LogError(
"L1TDTTFClient::makeSummary:ME") <<
"Failed to get TH1D "
913 << std::string(hname);
921 sprintf( hname,
"%s/2ND_TRACK_ONLY/dttf_04_quality_wh%s_2ndTrack",
925 edm::LogError(
"L1TDTTFClient::makeSummary:ME") <<
"Failed to get TH1D "
926 << std::string(hname);
928 for (
unsigned int qual = 1; qual < 8; ++qual ) {
929 double binqual = tmp->GetBinContent( qual );
941 for (
unsigned int bx = 1; bx < 4; ++bx ) {
949 double scale = wheelSumBx[2];
955 scale = wheelSumBx2nd[2];
970 sprintf( hname,
"%s/dttf_tracks_with_gmt_match",
gmtpath_.c_str() );
971 TH2F * gmt_match =
getTH2F(hname);
973 edm::LogError(
"L1TDTTFClient::makeSummary:ME") <<
"Failed to get TH1D "
974 << std::string(hname);
980 sprintf( hname,
"%s/dttf_tracks_without_gmt_match",
gmtpath_.c_str() );
981 TH2F * gmt_missed =
getTH2F(hname);
982 if ( ! gmt_missed ) {
983 edm::LogError(
"L1TDTTFClient::makeSummary:ME") <<
"Failed to get TH1D "
984 << std::string(hname);
989 sprintf( hname,
"%s/dttf_missing_tracks_in_gmt",
gmtpath_.c_str() );
990 TH2F * gmt_ghost =
getTH2F(hname);
992 edm::LogError(
"L1TDTTFClient::makeSummary:ME") <<
"Failed to get TH1D "
993 << std::string(hname);
997 int match = gmt_match->Integral();
998 int missed = gmt_missed->Integral();
999 int ghost = gmt_ghost->Integral();
1000 float tot = match + missed + ghost;
1002 double val = ghost/tot;
1019 edm::LogError(
"L1TDTTFClient::makeSummary:ME") <<
"Failed to get ME "
1020 << std::string(hname);
1039 edm::LogError(
"L1TDTTFClient::makeSummary:ME") <<
"Failed to get ME "
1040 << std::string(hname);
1058 const std::string &
path )
1066 for (
unsigned int wh = 0; wh < 6 ; ++wh ) {
1067 sprintf( hname, path.c_str(),
wheelpath_[wh].c_str(),
wheel_[wh].c_str() );
1069 TH2F * quality =
getTH2F(hname);
1072 <<
"Failed to get TH2F " << std::string(hname);
1075 for (
unsigned int sec = 1; sec < 13 ; ++sec ) {
1076 double denHighQual = occupancySummary->GetBinContent( wh+1, sec );
1078 if ( denHighQual > 0 ) {
1079 for (
unsigned int qual = 4; qual < 8 ; ++qual ) {
1080 val += quality->GetBinContent( qual, sec );
1094 const std::string & path_fine,
1095 const std::string & path_coarse,
1100 sprintf( hname, path_fine.c_str(),
1103 TH2F * phi_vs_eta_fine =
getTH2F(hname);
1104 if ( ! phi_vs_eta_fine ) {
1106 <<
"Failed to get TH1D " << std::string(hname);
1109 sprintf( hname, path_coarse.c_str(),
1111 TH2F * phi_vs_eta_coarse =
getTH2F(hname);
1112 if ( ! phi_vs_eta_coarse ) {
1114 <<
"Failed to get TH1D " << std::string(hname);
1117 if ( ! phi_vs_eta_fine || ! phi_vs_eta_coarse ) {
1121 for (
unsigned int phi = 1;
phi < 145 ; ++
phi ) {
1126 case 0 : start = 0; stop = 18; nbins = 18;
break;
1127 case 1 : start = 8; stop = 28; nbins = 20;
break;
1128 case 2 : start = 22; stop = 32; nbins = 10;
break;
1129 case 3 : start = 22; stop = 42; nbins = 20;
break;
1130 case 4 : start = 36; stop = 56; nbins = 20;
break;
1131 case 5 : start = 46; stop = 64; nbins = 18;
break;
1132 default : start = 0; stop = 0; nbins = 0;
break;
1136 double setbin =
eta + start;
1138 double valfine = phi_vs_eta_fine->GetBinContent(
eta,
phi )
1141 double valcoarse = phi_vs_eta_coarse->GetBinContent(
eta,
phi )
1179 const std::string &
path,
1183 sprintf( hname, path.c_str(),
1186 TH2F * phi_vs_eta =
getTH2F(hname);
1187 if ( ! phi_vs_eta ) {
1188 edm::LogError(
"L1TDTTFClient::buildPhiEtaPlotO:ME") <<
"Failed to get TH1D "
1189 << std::string(hname);
1192 for (
unsigned int phi = 1;
phi < 145 ; ++
phi ) {
1197 case 0 : start = 0; stop = 18; nbins = 18;
break;
1198 case 1 : start = 8; stop = 28; nbins = 20;
break;
1199 case 2 : start = 22; stop = 32; nbins = 10;
break;
1200 case 3 : start = 22; stop = 42; nbins = 20;
break;
1201 case 4 : start = 36; stop = 56; nbins = 20;
break;
1202 case 5 : start = 46; stop = 64; nbins = 18;
break;
1203 default : start = 0; stop = 0; nbins = 0;
break;
1207 double setbin =
eta + start;
1208 double val = phi_vs_eta->GetBinContent(
eta,
phi )
1213 double underflow = phi_vs_eta->GetBinContent( 0,
phi )
1217 double overflow = phi_vs_eta->GetBinContent( nbins+1,
phi )
MonitorElement * dttf_bx_integ_2ndTrack
MonitorElement * dttf_gmt_matching
MonitorElement * dttf_occupancySummary
MonitorElement * dttf_quality_summary
void setBinContent(int binx, double content)
set content of bin (1-D)
L1TDTTFClient(const edm::ParameterSet &ps)
Constructor.
MonitorElement * dttf_q_wheel[6]
TH2F * getTH2F(const char *hname)
MonitorElement * dttf_eta_integ_2ndTrack
MonitorElement * book1D(const char *name, const char *title, int nchX, double lowX, double highX)
Book 1D histogram.
void buildPhiEtaPlotO(MonitorElement *phi_eta_integ, const std::string &path, int wh)
MonitorElement * dttf_quality_integ_2ndTrack
MonitorElement * dttf_eta_wheel[6]
void endLuminosityBlock(const edm::LuminosityBlock &lumiSeg, const edm::EventSetup &c)
DQM Client Diagnostic.
void beginJob(void)
BeginJob.
MonitorElement * dttf_nTracks_integ
MonitorElement * dttf_quality_integ
std::string wheelpath_[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)
MonitorElement * dttf_bx_wheel_integ_2ndTrack[6]
MonitorElement * dttf_bx_wheel_summary[6]
MonitorElement * dttf_pt_integ_2ndTrack
MonitorElement * dttf_bx_integ
MonitorElement * dttf_phi_eta_fine_integ
MonitorElement * dttf_highQual_Summary_2ndTrack
MonitorElement * dttf_phi_wheel[6]
MonitorElement * dttf_phi_eta_integ
MonitorElement * dttf_quality_summary_wheel[6]
MonitorElement * dttf_pt_integ
MonitorElement * dttf_phi_eta_coarse_integ
virtual ~L1TDTTFClient()
Destructor.
TH2F * occupancy_r_
counter
MonitorElement * dttf_occupancySummary_2ndTrack
void beginRun(const edm::Run &r, const edm::EventSetup &c)
BeginRun.
MonitorElement * dttf_eta_integ
MonitorElement * dttf_2ndTrack_Summary
MonitorElement * dttf_q_integ_2ndTrack
MonitorElement * get(const std::string &path) const
get ME from full pathname (e.g. "my/long/dir/my_histo")
MonitorElement * dttf_bx_wheel_summary_2ndTrack[6]
void beginLuminosityBlock(const edm::LuminosityBlock &lumiSeg, const edm::EventSetup &context)
void endRun(const edm::Run &r, const edm::EventSetup &c)
EndRun.
MonitorElement * dttf_bx_summary
MonitorElement * dttf_quality_wheel[6]
TH1F * getTH1F(void) const
TH1F * getTH1F(const char *hname)
MonitorElement * dttf_eta_fine_fraction
std::vector< std::vector< double > > tmp
std::string l1tdttffolder_
double getBinContent(int binx) const
get content of bin (1-D)
void buildHighQualityPlot(TH2F *occupancySummary, MonitorElement *highQual_Summary, const std::string &path)
MonitorElement * dttf_fine_fraction_wh[6]
void setQualLabel(MonitorElement *me, int axis)
MonitorElement * dttf_nTracks_wheel[6]
void analyze(const edm::Event &e, const edm::EventSetup &c)
Fake Analyze.
void buildPhiEtaPlotOFC(MonitorElement *phi_eta_fine_integ, MonitorElement *phi_eta_coarse_integ, MonitorElement *phi_eta_integ, const std::string &path_fine, const std::string &path_coarse, int wh)
MonitorElement * dttf_bx_summary_2ndTrack
MonitorElement * dttf_nTracks_integ_2ndTrack
MonitorElement * dttf_phi_integ_2ndTrack
std::pair< typename Association::data_type::first_type, double > match(Reference key, Association association, bool bestMatchByMaxValue)
Generic matching function.
MonitorElement * dttf_pt_wheel[6]
MonitorElement * dttf_nTracks_wheel_2ndTrack[6]
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_phi_integ
MonitorElement * dttf_highQual_Summary
void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)
void Reset(void)
reset ME (ie. contents, errors, etc)
MonitorElement * dttf_q_integ
MonitorElement * dttf_bx_wheel_integ[6]
std::string inclusivepath_
void setCurrentFolder(const std::string &fullpath)
void setWheelLabel(MonitorElement *me)
MonitorElement * dttf_quality_summary_2ndTrack
MonitorElement * dttf_phi_eta_integ_2ndTrack