45 LogTrace (
"DTDQM|DTMonitorModule|DTTriggerEfficiencyTask") <<
"[DTTriggerEfficiencyTask]: Constructor" << endl;
54 ddu_Token_ = consumes<DTLocalTriggerCollection>(
57 gmt_Token_ = consumes<L1MuGMTReadoutCollection>(
79 LogTrace (
"DTDQM|DTMonitorModule|DTTriggerEfficiencyTask") <<
"[DTTriggerEfficiencyTask]: analyzed " <<
nevents <<
" events" << endl;
86 LogTrace (
"DTDQM|DTMonitorModule|DTTriggerEfficiencyTask") <<
"[DTTriggerEfficiencyTask]: BeginJob" << endl;
92 LogTrace (
"DTDQM|DTMonitorModule|DTTriggerEfficiencyTask") <<
"[DTTriggerEfficiencyTask]: BeginRun" << endl;
96 for (
int wh=-2;wh<=2;++wh){
97 vector<string>::const_iterator tagIt =
processTags.begin();
98 vector<string>::const_iterator tagEnd =
processTags.end();
99 for (; tagIt!=tagEnd; ++tagIt) {
102 for (
int stat=1;stat<=4;++stat){
103 for (
int sect=1;sect<=12;++sect){
118 LogTrace (
"DTDQM|DTMonitorModule|DTTriggerEfficiencyTask") <<
"[DTTriggerEfficiencyTask]: Begin of LS transition"<<endl;
125 LogTrace (
"DTDQM|DTMonitorModule|DTTriggerEfficiencyTask") <<
"[DTTriggerEfficiencyTask]: analyzed " <<
nevents <<
" events" << endl;
136 map<DTChamberId,const L1MuDTChambPhDigi*> phBestDCC;
137 map<DTChamberId,const DTLocalTrigger*> phBestDDU;
142 vector<L1MuDTChambPhDigi>
const* phTrigs = l1DTTPGPh->getContainer();
144 vector<L1MuDTChambPhDigi>::const_iterator iph = phTrigs->begin();
145 vector<L1MuDTChambPhDigi>::const_iterator iphe = phTrigs->end();
146 for(; iph !=iphe ; ++iph) {
148 int phwheel = iph->whNum();
149 int phsec = iph->scNum() + 1;
150 int phst = iph->stNum();
151 int phcode = iph->code();
155 if( phcode < 7 && (phBestDCC.find(chId) == phBestDCC.end() ||
156 phcode>phBestDCC[chId]->code()) ) phBestDCC[chId] = &(*iph);
164 for (detUnitIt=trigsDDU->begin();detUnitIt!=trigsDDU->end();++detUnitIt){
171 for (; trigIt!= trigEnd;++trigIt){
172 int quality = trigIt->quality();
173 if(quality>-1 && quality<7 &&
174 (phBestDDU.find(
id) == phBestDDU.end() ||
175 quality>phBestDDU[id]->quality()) ) phBestDDU[id] = &(*trigIt);
181 vector<const DTRecSegment4D*> best4DSegments;
185 reco::MuonCollection::const_iterator
mu;
187 for( mu = muons->begin(); mu != muons->end(); ++
mu ) {
190 if( !((*mu).isStandAloneMuon()) ) {
continue;}
193 const vector<reco::MuonChamberMatch> matchedChambers = (*mu).matches();
194 vector<reco::MuonChamberMatch>::const_iterator chamber;
196 for( chamber = matchedChambers.begin(); chamber != matchedChambers.end(); ++chamber ) {
202 const vector<reco::MuonSegmentMatch> matchedSegments = (*chamber).segmentMatches;
203 vector<reco::MuonSegmentMatch>::const_iterator segment;
205 for( segment = matchedSegments.begin(); segment != matchedSegments.end(); ++segment ) {
223 if( (*dtSegment).hasPhi() ) {
224 best4DSegments.push_back(&(*dtSegment));
232 vector<const DTRecSegment4D*>::const_iterator btrack;
233 for ( btrack = best4DSegments.begin(); btrack != best4DSegments.end(); ++btrack ){
235 int wheel = (*btrack)->chamberId().wheel();
236 int station = (*btrack)->chamberId().station();
240 int nHitsPhi = (*btrack)->phiSegment()->degreesOfFreedom()+2;
242 uint32_t indexCh = dtChId.
rawId();
243 map<string, MonitorElement*> &innerChME =
chamberHistos[indexCh];
244 map<string, MonitorElement*> &innerWhME =
wheelHistos[wheel];
248 vector<string>::const_iterator tagIt =
processTags.begin();
249 vector<string>::const_iterator tagEnd =
processTags.end();
251 for (; tagIt!=tagEnd; ++tagIt) {
253 int qual = (*tagIt) ==
"DCC" ?
254 phBestDCC.find(dtChId) != phBestDCC.end() ? phBestDCC[dtChId]->code() : -1 :
255 phBestDDU.find(dtChId) != phBestDDU.end() ? phBestDDU[dtChId]->quality() : -1;
257 innerWhME.find((*tagIt) +
"_TrigEffDenum")->second->Fill(scsector,station);
258 if ( qual>=0 && qual<7 ) {
259 innerWhME.find((*tagIt) +
"_TrigEffNum")->second->Fill(scsector,station);
261 innerWhME.find((*tagIt) +
"_TrigEffCorrNum")->second->Fill(scsector,station);
265 innerChME.find((*tagIt) +
"_TrackPosvsAngle")->second->Fill(xdir,x);
266 if ( qual>=0 && qual<7 ) {
267 innerChME.find((*tagIt) +
"_TrackPosvsAngleAnyQual")->second->Fill(xdir,x);
269 innerChME.find((*tagIt) +
"_TrackPosvsAngleCorr")->second->Fill(xdir,x);
284 std::vector<L1MuGMTReadoutRecord> gmt_records = gmtrc->getRecords();
285 std::vector<L1MuGMTReadoutRecord>::const_iterator igmtrr = gmt_records.begin();
286 std::vector<L1MuGMTReadoutRecord>::const_iterator egmtrr = gmt_records.end();
287 for(; igmtrr!=egmtrr; igmtrr++) {
289 std::vector<L1MuGMTExtendedCand> candsGMT = igmtrr->getGMTCands();
290 std::vector<L1MuGMTExtendedCand>::const_iterator candGMTIt = candsGMT.begin();
291 std::vector<L1MuGMTExtendedCand>::const_iterator candGMTEnd = candsGMT.end();
293 for(; candGMTIt!=candGMTEnd; ++candGMTIt){
294 if(!candGMTIt->empty()) {
295 int quality = candGMTIt->quality();
296 if(candGMTIt->bx()==0 &&
297 (quality == 5 || quality == 7)){
310 int wh = dtCh.
wheel();
313 stringstream wheel; wheel << wh;
314 stringstream
station; station << st;
315 stringstream sector; sector << sc;
318 string bookingFolder = hwFolder +
"Wheel" + wheel.str() +
"/Sector" + sector.str() +
"/Station" + station.str() +
"/" + folder;
319 string histoTag =
"_W" + wheel.str() +
"_Sec" + sector.str() +
"_St" + station.str();
323 LogTrace (
"DTDQM|DTMonitorModule|DTTriggerEfficiencyTask")
324 <<
"[DTTriggerEfficiencyTask]: booking histos in " << bookingFolder << endl;
330 string histoName = histoType +
"_TrackPosvsAngle" + histoTag;
331 string histoLabel =
"Position vs Angle (phi)";
333 dbe->
book2D(histoName,histoLabel,12,-30.,30.,nbins,min,max);
335 histoName = histoType +
"_TrackPosvsAngleAnyQual" + histoTag;
336 histoLabel =
"Position vs Angle (phi) for any qual triggers";
338 dbe->
book2D(histoName,histoLabel,12,-30.,30.,nbins,min,max);
340 histoName = histoType +
"_TrackPosvsAngleCorr" + histoTag;
341 histoLabel =
"Position vs Angle (phi) for correlated triggers";
343 dbe->
book2D(histoName,histoLabel,12,-30.,30.,nbins,min,max);
349 stringstream wh; wh << wheel;
351 if (hTag.find(
"Summary") != string::npos ) {
354 basedir =
topFolder(hTag) + folder +
"/" ;
359 string hTagName =
"_W" + wh.str();
361 LogTrace(
"DTDQM|DTMonitorModule|DTTriggerEfficiencyTask")
362 <<
"[DTTriggerEfficiencyTask]: booking histos in "<< basedir << endl;
364 string hName = hTag +
"_TrigEffDenum" + hTagName;
375 hName = hTag +
"_TrigEffNum" + hTagName;
376 me =
dbe->
book2D(hName.c_str(),hName.c_str(),12,1,13,4,1,5);
386 hName = hTag +
"_TrigEffCorrNum" + hTagName;
387 me =
dbe->
book2D(hName.c_str(),hName.c_str(),12,1,13,4,1,5);
T getUntrackedParameter(std::string const &, T const &) const
edm::EDGetTokenT< L1MuDTChambPhContainer > dcc_Token_
edm::EDGetTokenT< L1MuGMTReadoutCollection > gmt_Token_
std::string SegmArbitration
bool getByToken(EDGetToken token, Handle< PROD > &result) const
void bookChamberHistos(const DTChamberId &dtCh, std::string histoTag, std::string folder="")
Book chamber granularity histograms.
edm::EDGetTokenT< reco::MuonCollection > muons_Token_
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)
std::map< int, std::map< std::string, MonitorElement * > > wheelHistos
void beginLuminosityBlock(const edm::LuminosityBlock &lumiSeg, const edm::EventSetup &context)
To reset the MEs.
uint32_t rawId() const
get the raw id
void analyze(const edm::Event &e, const edm::EventSetup &c)
Analyze.
void beginRun(const edm::Run &run, const edm::EventSetup &context)
BeginRun.
const T & max(const T &a, const T &b)
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
virtual ~DTTriggerEfficiencyTask()
Destructor.
std::vector< DTLocalTrigger >::const_iterator const_iterator
std::vector< std::string > processTags
static const unsigned int BelongsToTrackByDR
void bookWheelHistos(int wheel, std::string histoTag, std::string folder="")
Book wheel granularity histograms.
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.
edm::ParameterSet parameters
MonitorElement * book2D(const char *name, const char *title, int nchX, double lowX, double highX, int nchY, double lowY, double highY)
Book 2D histogram.
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.
void setCurrentFolder(const std::string &fullpath)