CMS 3D CMS Logo

Public Member Functions | Protected Member Functions | Private Attributes

DTTriggerEfficiencyTask Class Reference

#include <DTTriggerEfficiencyTask.h>

Inheritance diagram for DTTriggerEfficiencyTask:
edm::EDAnalyzer

List of all members.

Public Member Functions

 DTTriggerEfficiencyTask (const edm::ParameterSet &ps)
 Constructor.
virtual ~DTTriggerEfficiencyTask ()
 Destructor.

Protected Member Functions

void analyze (const edm::Event &e, const edm::EventSetup &c)
 Analyze.
void beginJob ()
void beginLuminosityBlock (const edm::LuminosityBlock &lumiSeg, const edm::EventSetup &context)
 To reset the MEs.
void beginRun (const edm::Run &run, const edm::EventSetup &context)
 BeginRun.
void bookChamberHistos (const DTChamberId &dtCh, std::string histoTag, std::string folder="")
 Book chamber granularity histograms.
void bookWheelHistos (int wheel, std::string histoTag, std::string folder="")
 Book wheel granularity histograms.
void endJob (void)
 EndJob.
bool hasRPCTriggers (const edm::Event &e)
 checks for RPC Triggers
std::string topFolder (std::string source)
 return the top folder

Private Attributes

std::map< uint32_t, std::map
< std::string, MonitorElement * > > 
chamberHistos
DQMStoredbe
bool detailedPlots
edm::InputTag inputTagDCC
edm::InputTag inputTagDDU
edm::InputTag inputTagGMT
edm::InputTag inputTagMuons
edm::InputTag inputTagSEG
int maxBXDDU
int minBXDDU
edm::ESHandle< DTGeometrymuonGeom
int nevents
int nMinHitsPhi
edm::ParameterSet parameters
float phiAccRange
bool processDCC
bool processDDU
std::vector< std::string > processTags
std::string SegmArbitration
DTTrigGeomUtilstrigGeomUtils
std::map< int, std::map
< std::string, MonitorElement * > > 
wheelHistos

Detailed Description

Definition at line 43 of file DTTriggerEfficiencyTask.h.


Constructor & Destructor Documentation

DTTriggerEfficiencyTask::DTTriggerEfficiencyTask ( const edm::ParameterSet ps)

Constructor.

Definition at line 48 of file DTTriggerEfficiencyTask.cc.

References dbe, LogTrace, cmsCodeRules::cppFunctionSkipper::operator, and parameters.

                                                                          : trigGeomUtils(0) {

  LogTrace ("DTDQM|DTMonitorModule|DTTriggerEfficiencyTask")  << "[DTTriggerEfficiencyTask]: Constructor" << endl;

  parameters = ps;
  dbe = edm::Service<DQMStore>().operator->();

}
DTTriggerEfficiencyTask::~DTTriggerEfficiencyTask ( ) [virtual]

Destructor.

Definition at line 58 of file DTTriggerEfficiencyTask.cc.

References LogTrace, and nevents.

                                                  {

  LogTrace ("DTDQM|DTMonitorModule|DTTriggerEfficiencyTask")  << "[DTTriggerEfficiencyTask]: analyzed " << nevents << " events" << endl;

}

Member Function Documentation

void DTTriggerEfficiencyTask::analyze ( const edm::Event e,
const edm::EventSetup c 
) [protected, virtual]

Analyze.

Implements edm::EDAnalyzer.

Definition at line 132 of file DTTriggerEfficiencyTask.cc.

References reco::MuonSegmentMatch::BelongsToTrackByCleaning, reco::MuonSegmentMatch::BelongsToTrackByDR, reco::MuonSegmentMatch::BestInChamberByDR, chamberHistos, DTTrigGeomUtils::computeSCCoordinates(), detailedPlots, GeomDetEnumerators::DT, edm::Event::getByLabel(), hasRPCTriggers(), inputTagDCC, inputTagDDU, inputTagMuons, RPCpg::mu, patZpeak::muons, nevents, nMinHitsPhi, phiAccRange, processTags, DetId::rawId(), SegmArbitration, relativeConstraints::station, trigGeomUtils, wheelHistos, x, xdir, detailsBasic3DVector::y, and ydir.

                                                                              {

  nevents++;

  if (!hasRPCTriggers(e)) { return; }

  map<DTChamberId,const L1MuDTChambPhDigi*> phBestDCC;
  map<DTChamberId,const DTLocalTrigger*>    phBestDDU;

  // Getting best DCC Stuff
  edm::Handle<L1MuDTChambPhContainer> l1DTTPGPh;
  e.getByLabel(inputTagDCC,l1DTTPGPh);
  vector<L1MuDTChambPhDigi>*  phTrigs = l1DTTPGPh->getContainer();

  vector<L1MuDTChambPhDigi>::const_iterator iph  = phTrigs->begin();
  vector<L1MuDTChambPhDigi>::const_iterator iphe = phTrigs->end();
  for(; iph !=iphe ; ++iph) {

    int phwheel = iph->whNum();
    int phsec   = iph->scNum() + 1; // DTTF numbering [0:11] -> DT numbering [1:12]
    int phst    = iph->stNum();
    int phcode  = iph->code();

    DTChamberId chId(phwheel,phst,phsec);

    if( phcode < 7 && (phBestDCC.find(chId) == phBestDCC.end() || 
          phcode>phBestDCC[chId]->code()) ) phBestDCC[chId] = &(*iph);
  }

  //Getting Best DDU Stuff
  Handle<DTLocalTriggerCollection> trigsDDU;
  e.getByLabel(inputTagDDU,trigsDDU);
  DTLocalTriggerCollection::DigiRangeIterator detUnitIt;

  for (detUnitIt=trigsDDU->begin();detUnitIt!=trigsDDU->end();++detUnitIt){

    const DTChamberId& id = (*detUnitIt).first;
    const DTLocalTriggerCollection::Range& range = (*detUnitIt).second;

    DTLocalTriggerCollection::const_iterator trigIt  = range.first;
    DTLocalTriggerCollection::const_iterator trigEnd = range.second;
    for (; trigIt!= trigEnd;++trigIt){
      int quality = trigIt->quality();
      if(quality>-1 && quality<7 &&
          (phBestDDU.find(id) == phBestDDU.end() || 
           quality>phBestDDU[id]->quality()) ) phBestDDU[id] = &(*trigIt);
    }

  }

  //Getting Best Segments
  vector<const DTRecSegment4D*> best4DSegments;

  Handle<reco::MuonCollection> muons;
  e.getByLabel(inputTagMuons, muons);
  reco::MuonCollection::const_iterator mu;

  for( mu = muons->begin(); mu != muons->end(); ++mu ) {

    // Make sure that is standalone muon
    if( !((*mu).isStandAloneMuon()) ) {continue;}

    // Get the chambers compatible with the muon
    const vector<reco::MuonChamberMatch> matchedChambers = (*mu).matches(); 
    vector<reco::MuonChamberMatch>::const_iterator chamber;

    for( chamber = matchedChambers.begin(); chamber != matchedChambers.end(); ++chamber ) {

      // look only in DTs
      if( chamber->detector() != MuonSubdetId::DT ) {continue;}

      // Get the matched segments in the chamber
      const vector<reco::MuonSegmentMatch> matchedSegments = (*chamber).segmentMatches; 
      vector<reco::MuonSegmentMatch>::const_iterator segment;

      for( segment = matchedSegments.begin(); segment != matchedSegments.end(); ++segment ) {

        edm::Ref<DTRecSegment4DCollection> dtSegment = segment->dtSegmentRef;

        // Segment Arbitration
        if( SegmArbitration == "SegmentArbitration" 
            && !((*segment).isMask(reco::MuonSegmentMatch::BestInChamberByDR)) ) {continue;}

        if( SegmArbitration == "SegmentAndTrackArbitration" 
            && (!((*segment).isMask(reco::MuonSegmentMatch::BestInChamberByDR)) ||
              !((*segment).isMask(reco::MuonSegmentMatch::BelongsToTrackByDR))) ) {continue;} 

        if( SegmArbitration == "SegmentAndTrackArbitrationCleaned" 
            && (!((*segment).isMask(reco::MuonSegmentMatch::BestInChamberByDR))  ||
              !((*segment).isMask(reco::MuonSegmentMatch::BelongsToTrackByDR)) ||
              !((*segment).isMask(reco::MuonSegmentMatch::BelongsToTrackByCleaning))) ) {continue;} 


        if( (*dtSegment).hasPhi() ) {
          best4DSegments.push_back(&(*dtSegment));
        }

      }// end loop on matched segments
    }// end loop on compatible chambers
  }// end loop on muons

  // Plot filling
  vector<const DTRecSegment4D*>::const_iterator btrack;
  for ( btrack = best4DSegments.begin(); btrack != best4DSegments.end(); ++btrack ){

    int wheel    = (*btrack)->chamberId().wheel();
    int station  = (*btrack)->chamberId().station();
    int scsector = 0;
    float x, xdir, y, ydir;
    trigGeomUtils->computeSCCoordinates((*btrack),scsector,x,xdir,y,ydir);
    int nHitsPhi = (*btrack)->phiSegment()->degreesOfFreedom()+2;       
    DTChamberId dtChId(wheel,station,scsector);
    uint32_t indexCh = dtChId.rawId(); 
    map<string, MonitorElement*> &innerChME = chamberHistos[indexCh];
    map<string, MonitorElement*> &innerWhME = wheelHistos[wheel];

    if (fabs(xdir)<phiAccRange && nHitsPhi>=nMinHitsPhi){

      vector<string>::const_iterator tagIt  = processTags.begin();
      vector<string>::const_iterator tagEnd = processTags.end();

      for (; tagIt!=tagEnd; ++tagIt) { 

        int qual   = (*tagIt) == "DCC" ?
          phBestDCC.find(dtChId) != phBestDCC.end() ? phBestDCC[dtChId]->code() : -1 :
          phBestDDU.find(dtChId) != phBestDDU.end() ? phBestDDU[dtChId]->quality() : -1;

        innerWhME.find((*tagIt) + "_TrigEffDenum")->second->Fill(scsector,station);
        if ( qual>=0 && qual<7 ) {
          innerWhME.find((*tagIt) + "_TrigEffNum")->second->Fill(scsector,station);
          if ( qual>=4 ) {
            innerWhME.find((*tagIt) + "_TrigEffCorrNum")->second->Fill(scsector,station);
          }
        }
        if (detailedPlots) {
          innerChME.find((*tagIt) + "_TrackPosvsAngle")->second->Fill(xdir,x);
          if ( qual>=0 && qual<7 ) {
            innerChME.find((*tagIt) + "_TrackPosvsAngleAnyQual")->second->Fill(xdir,x);
            if ( qual>=4 ) {
              innerChME.find((*tagIt) + "_TrackPosvsAngleCorr")->second->Fill(xdir,x);  
            }
          }
        }
      }
    }
  }

}
void DTTriggerEfficiencyTask::beginJob ( void  ) [protected, virtual]

Reimplemented from edm::EDAnalyzer.

Definition at line 65 of file DTTriggerEfficiencyTask.cc.

References detailedPlots, edm::ParameterSet::getUntrackedParameter(), inputTagDCC, inputTagDDU, inputTagGMT, inputTagMuons, inputTagSEG, LogTrace, maxBXDDU, minBXDDU, nMinHitsPhi, parameters, phiAccRange, processDCC, processDDU, processTags, and SegmArbitration.

                                      {

  LogTrace ("DTDQM|DTMonitorModule|DTTriggerEfficiencyTask") << "[DTTriggerEfficiencyTask]: BeginJob" << endl;

  inputTagMuons = parameters.getUntrackedParameter<edm::InputTag>("inputTagMuons");

  inputTagDCC = parameters.getUntrackedParameter<edm::InputTag>("inputTagDCC");
  inputTagDDU = parameters.getUntrackedParameter<edm::InputTag>("inputTagDDU");
  inputTagSEG = parameters.getUntrackedParameter<edm::InputTag>("inputTagSEG");
  inputTagGMT = parameters.getUntrackedParameter<edm::InputTag>("inputTagGMT");

  SegmArbitration = parameters.getUntrackedParameter<std::string>("SegmArbitration");

  detailedPlots = parameters.getUntrackedParameter<bool>("detailedAnalysis");
  processDCC = parameters.getUntrackedParameter<bool>("processDCC");
  processDDU = parameters.getUntrackedParameter<bool>("processDDU");
  minBXDDU = parameters.getUntrackedParameter<int>("minBXDDU");
  maxBXDDU = parameters.getUntrackedParameter<int>("maxBXDDU");

  nMinHitsPhi = parameters.getUntrackedParameter<int>("nMinHitsPhi");
  phiAccRange = parameters.getUntrackedParameter<double>("phiAccRange");

  if (processDCC) processTags.push_back("DCC");
  if (processDDU) processTags.push_back("DDU");

}
void DTTriggerEfficiencyTask::beginLuminosityBlock ( const edm::LuminosityBlock lumiSeg,
const edm::EventSetup context 
) [protected, virtual]

To reset the MEs.

Reimplemented from edm::EDAnalyzer.

Definition at line 118 of file DTTriggerEfficiencyTask.cc.

References LogTrace.

                                                                                                            {

  LogTrace ("DTDQM|DTMonitorModule|DTTriggerEfficiencyTask") <<"[DTTriggerEfficiencyTask]: Begin of LS transition"<<endl;

}
void DTTriggerEfficiencyTask::beginRun ( const edm::Run run,
const edm::EventSetup context 
) [protected, virtual]

BeginRun.

Reimplemented from edm::EDAnalyzer.

Definition at line 92 of file DTTriggerEfficiencyTask.cc.

References bookChamberHistos(), bookWheelHistos(), detailedPlots, DTChamberId, edm::EventSetup::get(), LogTrace, muonGeom, nevents, processTags, testRegression::stat, and trigGeomUtils.

                                                                                     {

  LogTrace ("DTDQM|DTMonitorModule|DTTriggerEfficiencyTask") << "[DTTriggerEfficiencyTask]: BeginRun" << endl;

  nevents = 0;

  for (int wh=-2;wh<=2;++wh){
    vector<string>::const_iterator tagIt  = processTags.begin();
    vector<string>::const_iterator tagEnd = processTags.end();
    for (; tagIt!=tagEnd; ++tagIt) {
      bookWheelHistos(wh,(*tagIt),"Task");
      if (detailedPlots) {
        for (int stat=1;stat<=4;++stat){
          for (int sect=1;sect<=12;++sect){
            bookChamberHistos(DTChamberId(wh,stat,sect),(*tagIt),"Segment");
          }
        }
      }
    }
  }

  context.get<MuonGeometryRecord>().get(muonGeom);
  trigGeomUtils = new DTTrigGeomUtils(muonGeom);

}
void DTTriggerEfficiencyTask::bookChamberHistos ( const DTChamberId dtCh,
std::string  histoTag,
std::string  folder = "" 
) [protected]

Book chamber granularity histograms.

Definition at line 201 of file DTRunConditionVar.cc.

References DQMStore::book1D(), DTRunConditionVar::chamberHistos, LogTrace, DetId::rawId(), DTChamberId::sector(), DQMStore::setCurrentFolder(), relativeConstraints::station, DTChamberId::station(), DTRunConditionVar::theDbe, and DTChamberId::wheel().

Referenced by beginRun().

                                                                                                                    {

  int wh = dtCh.wheel();                
  int sc = dtCh.sector();       
  int st = dtCh.station();
  stringstream wheel; wheel << wh;      
  stringstream station; station << st;  
  stringstream sector; sector << sc;    

  string bookingFolder = "DT/02-Segments/Wheel" + wheel.str() + "/Sector" + sector.str() + "/Station" + station.str();
  string histoTag      = "_W" + wheel.str() + "_Sec" + sector.str() + "_St" + station.str();

  theDbe->setCurrentFolder(bookingFolder);

  LogTrace ("DTDQM|DTMonitorModule|DTRunConditionVar") 
    << "[DTRunConditionVar]: booking histos in " << bookingFolder << endl;

  string histoName = histoType  +  histoTag;
  string histoLabel = histoType;

  (chamberHistos[dtCh.rawId()])[histoType] = 
    theDbe->book1D(histoName,histoLabel,nbins,min,max);

}
void DTTriggerEfficiencyTask::bookWheelHistos ( int  wheel,
std::string  histoTag,
std::string  folder = "" 
) [protected]

Book wheel granularity histograms.

Definition at line 282 of file DTLocalTriggerBaseTest.cc.

References python::rootplot::argparse::category, newFWLiteAna::fullName, LogTrace, MonitorElement::setAxisTitle(), and MonitorElement::setBinLabel().

Referenced by beginRun().

                                                                                {
  
  stringstream wh; wh << wheel;
  string basedir;  
  bool isDCC = hwSource=="DCC" ;  
  if (hTag.find("Summary") != string::npos) {
    basedir = topFolder(isDCC);   //Book summary histo outside wheel directories
  } else {
    basedir = topFolder(isDCC) + "Wheel" + wh.str() + "/" ;
    
  }
  if (folder != "") {
    basedir += folder +"/" ;
  }
  dbe->setCurrentFolder(basedir);

  string fullTag = fullName(hTag);
  string hname    = fullTag+ "_W" + wh.str();

  LogTrace(category()) << "[" << testName << "Test]: booking "<< basedir << hname;
  
  if (hTag.find("Phi")!= string::npos ||
      hTag.find("Summary") != string::npos ){    
    MonitorElement* me = dbe->book2D(hname.c_str(),hname.c_str(),12,1,13,4,1,5);

//     setLabelPh(me);
    me->setBinLabel(1,"MB1",2);
    me->setBinLabel(2,"MB2",2);
    me->setBinLabel(3,"MB3",2);
    me->setBinLabel(4,"MB4",2);
    me->setAxisTitle("Sector",1);
    
    whME[wheel][fullTag] = me;
    return;
  }
  
  if (hTag.find("Theta") != string::npos){
    MonitorElement* me =dbe->book2D(hname.c_str(),hname.c_str(),12,1,13,3,1,4);

//     setLabelTh(me);
    me->setBinLabel(1,"MB1",2);
    me->setBinLabel(2,"MB2",2);
    me->setBinLabel(3,"MB3",2);
    me->setAxisTitle("Sector",1);

    whME[wheel][fullTag] = me;
    return;
  }
  
}
void DTTriggerEfficiencyTask::endJob ( void  ) [protected, virtual]

EndJob.

Reimplemented from edm::EDAnalyzer.

Definition at line 125 of file DTTriggerEfficiencyTask.cc.

References LogTrace, and nevents.

                                    {

  LogTrace ("DTDQM|DTMonitorModule|DTTriggerEfficiencyTask")  << "[DTTriggerEfficiencyTask]: analyzed " << nevents << " events" << endl;

}
bool DTTriggerEfficiencyTask::hasRPCTriggers ( const edm::Event e) [protected]

checks for RPC Triggers

Definition at line 281 of file DTTriggerEfficiencyTask.cc.

References edm::Event::getByLabel(), and inputTagGMT.

Referenced by analyze().

                                                              {

  edm::Handle<L1MuGMTReadoutCollection> gmtrc; 
  e.getByLabel(inputTagGMT,gmtrc);

  std::vector<L1MuGMTReadoutRecord> gmt_records = gmtrc->getRecords();
  std::vector<L1MuGMTReadoutRecord>::const_iterator igmtrr = gmt_records.begin();
  std::vector<L1MuGMTReadoutRecord>::const_iterator egmtrr = gmt_records.end();
  for(; igmtrr!=egmtrr; igmtrr++) {

    std::vector<L1MuGMTExtendedCand> candsGMT = igmtrr->getGMTCands();
    std::vector<L1MuGMTExtendedCand>::const_iterator candGMTIt   = candsGMT.begin();
    std::vector<L1MuGMTExtendedCand>::const_iterator candGMTEnd  = candsGMT.end();

    for(; candGMTIt!=candGMTEnd; ++candGMTIt){
      if(!candGMTIt->empty()) {
        int quality = candGMTIt->quality();
        if(candGMTIt->bx()==0 && 
            (quality == 5 || quality == 7)){
          return true;
        }
      }
    }
  }

  return false;

}
std::string DTTriggerEfficiencyTask::topFolder ( std::string  source) [inline, protected]

return the top folder

Definition at line 71 of file DTTriggerEfficiencyTask.h.

{ return source=="DCC" ? "DT/03-LocalTrigger-DCC/" : "DT/04-LocalTrigger-DDU/"; }

Member Data Documentation

std::map<uint32_t, std::map<std::string, MonitorElement*> > DTTriggerEfficiencyTask::chamberHistos [private]

Definition at line 107 of file DTTriggerEfficiencyTask.h.

Referenced by analyze().

Definition at line 103 of file DTTriggerEfficiencyTask.h.

Referenced by DTTriggerEfficiencyTask().

Definition at line 88 of file DTTriggerEfficiencyTask.h.

Referenced by analyze(), beginJob(), and beginRun().

Definition at line 97 of file DTTriggerEfficiencyTask.h.

Referenced by analyze(), and beginJob().

Definition at line 98 of file DTTriggerEfficiencyTask.h.

Referenced by analyze(), and beginJob().

Definition at line 101 of file DTTriggerEfficiencyTask.h.

Referenced by beginJob(), and hasRPCTriggers().

Definition at line 95 of file DTTriggerEfficiencyTask.h.

Referenced by analyze(), and beginJob().

Definition at line 99 of file DTTriggerEfficiencyTask.h.

Referenced by beginJob().

Definition at line 90 of file DTTriggerEfficiencyTask.h.

Referenced by beginJob().

Definition at line 90 of file DTTriggerEfficiencyTask.h.

Referenced by beginJob().

Definition at line 105 of file DTTriggerEfficiencyTask.h.

Referenced by beginRun().

Definition at line 84 of file DTTriggerEfficiencyTask.h.

Referenced by analyze(), beginRun(), endJob(), and ~DTTriggerEfficiencyTask().

Definition at line 93 of file DTTriggerEfficiencyTask.h.

Referenced by analyze(), and beginJob().

Definition at line 104 of file DTTriggerEfficiencyTask.h.

Referenced by beginJob(), and DTTriggerEfficiencyTask().

Definition at line 92 of file DTTriggerEfficiencyTask.h.

Referenced by analyze(), and beginJob().

Definition at line 88 of file DTTriggerEfficiencyTask.h.

Referenced by beginJob().

Definition at line 88 of file DTTriggerEfficiencyTask.h.

Referenced by beginJob().

std::vector<std::string> DTTriggerEfficiencyTask::processTags [private]

Definition at line 89 of file DTTriggerEfficiencyTask.h.

Referenced by analyze(), beginJob(), and beginRun().

Definition at line 86 of file DTTriggerEfficiencyTask.h.

Referenced by analyze(), and beginJob().

Definition at line 106 of file DTTriggerEfficiencyTask.h.

Referenced by analyze(), and beginRun().

std::map<int, std::map<std::string, MonitorElement*> > DTTriggerEfficiencyTask::wheelHistos [private]

Definition at line 108 of file DTTriggerEfficiencyTask.h.

Referenced by analyze().