45 LogTrace (
"DTDQM|DTMonitorModule|DTTriggerEfficiencyTask") <<
"[DTTriggerEfficiencyTask]: Constructor" << endl;
51 tm_Token_ = consumes<L1MuDTChambPhContainer>(
53 ddu_Token_ = consumes<DTLocalTriggerCollection>(
56 gmt_Token_ = consumes<L1MuGMTReadoutCollection>(
73 ddu_Token_ = consumes<DTLocalTriggerCollection>(
76 if (!processTM && !processDDU)
LogError (
"DTDQM|DTMonitorModule|DTTriggerEfficiencyTask") <<
"[DTTriggerEfficiencyTask]: Error, no trigger source (DDU or Twinmux) has been selected!!" <<endl;
83 LogTrace (
"DTDQM|DTMonitorModule|DTTriggerEfficiencyTask") <<
"[DTTriggerEfficiencyTask]: analyzed " <<
nevents <<
" events" << endl;
99 LogTrace (
"DTDQM|DTMonitorModule|DTTriggerEfficiencyTask") <<
"[DTTriggerEfficiencyTask]: bookHistograms" << endl;
102 for (
int wh=-2;wh<=2;++wh){
103 vector<string>::const_iterator tagIt =
processTags.begin();
104 vector<string>::const_iterator tagEnd =
processTags.end();
105 for (; tagIt!=tagEnd; ++tagIt) {
110 for (
int sect=1;sect<=12;++sect){
127 map<DTChamberId,const L1MuDTChambPhDigi*> phBestTM;
128 map<DTChamberId,const DTLocalTrigger*> phBestDDU;
132 vector<L1MuDTChambPhDigi>
const* phTrigs = l1DTTPGPh->
getContainer();
134 vector<L1MuDTChambPhDigi>::const_iterator iph = phTrigs->begin();
135 vector<L1MuDTChambPhDigi>::const_iterator iphe = phTrigs->end();
136 for(; iph !=iphe ; ++iph) {
138 int phwheel = iph->whNum();
139 int phsec = iph->scNum() + 1;
140 int phst = iph->stNum();
141 int phcode = iph->code();
145 if( phcode < 7 && (phBestTM.find(chId) == phBestTM.end() ||
146 phcode>phBestTM[chId]->code()) ) phBestTM[chId] = &(*iph);
155 for (detUnitIt=trigsDDU->begin();detUnitIt!=trigsDDU->end();++detUnitIt){
162 for (; trigIt!= trigEnd;++trigIt){
163 int quality = trigIt->quality();
164 if(quality>-1 && quality<7 &&
165 (phBestDDU.find(
id) == phBestDDU.end() ||
166 quality>phBestDDU[
id]->quality()) ) phBestDDU[
id] = &(*trigIt);
173 vector<const DTRecSegment4D*> best4DSegments;
177 reco::MuonCollection::const_iterator
mu;
179 for( mu = muons->begin(); mu != muons->end(); ++
mu ) {
182 if( !((*mu).isStandAloneMuon()) ) {
continue;}
185 const vector<reco::MuonChamberMatch> matchedChambers = (*mu).matches();
186 vector<reco::MuonChamberMatch>::const_iterator
chamber;
188 for( chamber = matchedChambers.begin(); chamber != matchedChambers.end(); ++
chamber ) {
194 const vector<reco::MuonSegmentMatch> matchedSegments = (*chamber).segmentMatches;
195 vector<reco::MuonSegmentMatch>::const_iterator segment;
197 for( segment = matchedSegments.begin(); segment != matchedSegments.end(); ++segment ) {
215 if( (*dtSegment).hasPhi() ) {
216 best4DSegments.push_back(&(*dtSegment));
224 vector<const DTRecSegment4D*>::const_iterator btrack;
225 for ( btrack = best4DSegments.begin(); btrack != best4DSegments.end(); ++btrack ){
226 int wheel = (*btrack)->chamberId().wheel();
227 int station = (*btrack)->chamberId().station();
231 int nHitsPhi = (*btrack)->phiSegment()->degreesOfFreedom()+2;
233 uint32_t indexCh = dtChId.
rawId();
234 map<string, MonitorElement*> &innerChME =
chamberHistos[indexCh];
238 vector<string>::const_iterator tagIt =
processTags.begin();
239 vector<string>::const_iterator tagEnd =
processTags.end();
240 for (; tagIt!=tagEnd; ++tagIt) {
241 int qual = (*tagIt) ==
"TM" ?
242 phBestTM.find(dtChId) != phBestTM.end() ? phBestTM[dtChId]->code() : -1 :
243 phBestDDU.find(dtChId) != phBestDDU.end() ? phBestDDU[dtChId]->quality() : -1;
244 innerWhME.find((*tagIt) +
"_TrigEffDenum")->second->Fill(scsector,station);
246 if ( qual>=0 && qual<7 ) {
247 innerWhME.find((*tagIt) +
"_TrigEffNum")->second->Fill(scsector,station);
249 innerWhME.find((*tagIt) +
"_TrigEffCorrNum")->second->Fill(scsector,station);
253 innerChME.find((*tagIt) +
"_TrackPosvsAngle")->second->Fill(xdir,x);
254 if ( qual>=0 && qual<7 ) {
255 innerChME.find((*tagIt) +
"_TrackPosvsAngleAnyQual")->second->Fill(xdir,x);
257 innerChME.find((*tagIt) +
"_TrackPosvsAngleCorr")->second->Fill(xdir,x);
272 std::vector<L1MuGMTReadoutRecord> gmt_records = gmtrc->
getRecords();
273 std::vector<L1MuGMTReadoutRecord>::const_iterator igmtrr = gmt_records.begin();
274 std::vector<L1MuGMTReadoutRecord>::const_iterator egmtrr = gmt_records.end();
275 for(; igmtrr!=egmtrr; igmtrr++) {
277 std::vector<L1MuGMTExtendedCand> candsGMT = igmtrr->getGMTCands();
278 std::vector<L1MuGMTExtendedCand>::const_iterator candGMTIt = candsGMT.begin();
279 std::vector<L1MuGMTExtendedCand>::const_iterator candGMTEnd = candsGMT.end();
281 for(; candGMTIt!=candGMTEnd; ++candGMTIt){
282 if(!candGMTIt->empty()) {
283 int quality = candGMTIt->quality();
284 if(candGMTIt->bx()==0 &&
285 (quality == 5 || quality == 7)){
297 string histoType,
string folder) {
299 int wh = dtCh.
wheel();
302 stringstream
wheel; wheel << wh;
303 stringstream
station; station << st;
304 stringstream sector; sector <<
sc;
307 string bookingFolder = hwFolder +
"Wheel" + wheel.str() +
"/Sector" + sector.str() +
"/Station" + station.str() +
"/" +
folder;
308 string histoTag =
"_W" + wheel.str() +
"_Sec" + sector.str() +
"_St" + station.str();
312 LogTrace (
"DTDQM|DTMonitorModule|DTTriggerEfficiencyTask")
313 <<
"[DTTriggerEfficiencyTask]: booking histos in " << bookingFolder << endl;
319 string histoName = histoType +
"_TrackPosvsAngle" + histoTag;
320 string histoLabel =
"Position vs Angle (phi)";
323 ibooker.
book2D(histoName,histoLabel,12,-30.,30.,nbins,min,max);
325 histoName = histoType +
"_TrackPosvsAngleAnyQual" + histoTag;
326 histoLabel =
"Position vs Angle (phi) for any qual triggers";
329 ibooker.
book2D(histoName,histoLabel,12,-30.,30.,nbins,min,max);
331 histoName = histoType +
"_TrackPosvsAngleCorr" + histoTag;
332 histoLabel =
"Position vs Angle (phi) for correlated triggers";
335 ibooker.
book2D(histoName,histoLabel,12,-30.,30.,nbins,min,max);
342 stringstream wh; wh <<
wheel;
344 if (hTag.find(
"Summary") != string::npos ) {
347 basedir =
topFolder(hTag) + folder +
"/" ;
352 string hTagName =
"_W" + wh.str();
354 LogTrace(
"DTDQM|DTMonitorModule|DTTriggerEfficiencyTask")
355 <<
"[DTTriggerEfficiencyTask]: booking histos in "<< basedir << endl;
357 string hName = hTag +
"_TrigEffDenum" + hTagName;
369 hName = hTag +
"_TrigEffNum" + hTagName;
370 me = ibooker.
book2D(hName.c_str(),hName.c_str(),12,1,13,4,1,5);
380 hName = hTag +
"_TrigEffCorrNum" + hTagName;
381 me = ibooker.
book2D(hName.c_str(),hName.c_str(),12,1,13,4,1,5);
void analyze(const edm::Event &e, const edm::EventSetup &c) override
Analyze.
edm::EDGetTokenT< L1MuGMTReadoutCollection > gmt_Token_
std::string SegmArbitration
bool getByToken(EDGetToken token, Handle< PROD > &result) const
edm::EDGetTokenT< reco::MuonCollection > muons_Token_
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
constexpr uint32_t rawId() const
get the raw id
void bookWheelHistos(DQMStore::IBooker &ibooker, int wheel, std::string histoTag, std::string folder="")
Book wheel granularity histograms.
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)
edm::EDGetTokenT< L1MuDTChambPhContainer > tm_Token_
std::map< int, std::map< std::string, MonitorElement * > > wheelHistos
void setCurrentFolder(std::string const &fullpath)
void bookChamberHistos(DQMStore::IBooker &ibooker, const DTChamberId &dtCh, std::string histoTag, std::string folder="")
Book chamber granularity histograms.
void dqmBeginRun(const edm::Run &, const edm::EventSetup &) override
BeginRun.
DTTrigGeomUtils * trigGeomUtils
static const unsigned int BestInChamberByDR
static const unsigned int BelongsToTrackByCleaning
edm::EDGetTokenT< DTLocalTriggerCollection > ddu_Token_
void phiRange(const DTChamberId &id, float &min, float &max, int &nbins, float step=15)
Compute phi range in local chamber coordinates.
bool hasRPCTriggers(const edm::Event &e)
checks for RPC Triggers
edm::ESHandle< DTGeometry > muonGeom
int nevents
To reset the MEs.
MonitorElement * book2D(Args &&...args)
std::vector< DTLocalTrigger >::const_iterator const_iterator
Phi_Container const * getContainer() const
std::vector< std::string > processTags
static const unsigned int BelongsToTrackByDR
std::vector< L1MuGMTReadoutRecord > const & getRecords() const
std::pair< const_iterator, const_iterator > Range
std::map< uint32_t, std::map< std::string, MonitorElement * > > chamberHistos
DTTriggerEfficiencyTask(const edm::ParameterSet &ps)
Constructor.
edm::InputTag inputTagSEG
int station() const
Return the station number.
int wheel() const
Return the wheel number.
void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)
std::string topFolder(std::string source)
return the top folder
void computeSCCoordinates(const DTRecSegment4D *track, int &scsec, float &x, float &xdir, float &y, float &ydir)
Compute track coordinates with SC sector numbering.
~DTTriggerEfficiencyTask() override
Destructor.