CMS 3D CMS Logo

Public Member Functions | Protected Member Functions | Private Member Functions | Private Attributes

DTNoiseTask Class Reference

#include <DTNoiseTask.h>

Inheritance diagram for DTNoiseTask:
edm::EDAnalyzer

List of all members.

Public Member Functions

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

Protected Member Functions

void analyze (const edm::Event &e, const edm::EventSetup &c)
 Analyze.
void beginJob ()
 BeginJob.
void beginLuminosityBlock (const edm::LuminosityBlock &lumiSeg, const edm::EventSetup &context)
 To reset the MEs.
void beginRun (const edm::Run &, const edm::EventSetup &)
void endJob ()
 Endjob.
void endLuminosityBlock (const edm::LuminosityBlock &lumiSeg, const edm::EventSetup &setup)

Private Member Functions

void bookHistos (DTChamberId chId)
void bookHistos (DTSuperLayerId slId)

Private Attributes

DQMStoredbe
bool doSegmentVeto
bool doTimeBoxHistos
edm::InputTag dtDigiLabel
edm::ESHandle< DTGeometrydtGeom
int evtNumber
std::map< DTChamberId, int > mapEvt
MonitorElementnEventMonitor
std::map< DTChamberId,
MonitorElement * > 
noiseHistos
double safeMargin
std::map< DTSuperLayerId,
MonitorElement * > 
tbHistos
std::string theRecHits4DLabel
std::map< DTChamberId, double > tTrigStMap

Detailed Description

No description available.

Date:
2011/06/10 13:23:26
Revision:
1.9
Authors:
G. Mila , G. Cerminara - INFN Torino

Definition at line 32 of file DTNoiseTask.h.


Constructor & Destructor Documentation

DTNoiseTask::DTNoiseTask ( const edm::ParameterSet ps)

Constructor.

Definition at line 48 of file DTNoiseTask.cc.

References dbe, doSegmentVeto, doTimeBoxHistos, dtDigiLabel, edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), cppFunctionSkipper::operator, safeMargin, and theRecHits4DLabel.

                                               : evtNumber(0) {

   LogVerbatim("DTNoiseTask") << "[DTNoiseTask]: Constructor"<<endl;

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

  //switch for timeBox booking
  doTimeBoxHistos = ps.getUntrackedParameter<bool>("doTbHistos", false);
  
  // The label to retrieve the digis 
  dtDigiLabel = ps.getParameter<InputTag>("dtDigiLabel");

  // the name of the 4D rec hits collection
  theRecHits4DLabel = ps.getParameter<string>("recHits4DLabel");
  
  // switch for segment veto
  doSegmentVeto = ps.getUntrackedParameter<bool>("doSegmentVeto", false);

  // safe margin (ns) between ttrig and beginning of counting area
  safeMargin = ps.getUntrackedParameter<double>("safeMargin", 200.);

}
DTNoiseTask::~DTNoiseTask ( ) [virtual]

Destructor.

Definition at line 74 of file DTNoiseTask.cc.

{}

Member Function Documentation

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

Analyze.

Implements edm::EDAnalyzer.

Definition at line 98 of file DTNoiseTask.cc.

References doSegmentVeto, doTimeBoxHistos, dtDigiLabel, evtNumber, MonitorElement::Fill(), edm::Event::getByLabel(), mapEvt, nEventMonitor, noiseHistos, safeMargin, edm::second(), tbHistos, theRecHits4DLabel, and tTrigStMap.

                                                                   {

  evtNumber++;
  nEventMonitor->Fill(evtNumber);

  if(evtNumber%1000==0)
     LogVerbatim("DTNoiseTask") <<"[DTNoiseTask]: Analyzing evt number :"<<evtNumber<<endl;

  // map of the chambers with at least 1 segment
  std::map<DTChamberId, int> segmentsChId;

  // Get the 4D segment collection from the event
  edm::Handle<DTRecSegment4DCollection> all4DSegments;
  if(doSegmentVeto) {
    e.getByLabel(theRecHits4DLabel, all4DSegments);
  
    // Loop over all chambers containing a segment and look for the number of segments
    DTRecSegment4DCollection::id_iterator chamberId;
    for (chamberId = all4DSegments->id_begin();
         chamberId != all4DSegments->id_end();
         ++chamberId){
      segmentsChId[*chamberId]=1;
    }
  }

  // Get the digis from the event
  edm::Handle<DTDigiCollection> dtdigis;
  e.getByLabel(dtDigiLabel, dtdigis);
  
  // LOOP OVER ALL THE DIGIS OF THE EVENT
  DTDigiCollection::DigiRangeIterator dtLayerId_It;
  for (dtLayerId_It=dtdigis->begin(); dtLayerId_It!=dtdigis->end(); ++dtLayerId_It){
    for (DTDigiCollection::const_iterator digiIt = ((*dtLayerId_It).second).first;
         digiIt!=((*dtLayerId_It).second).second; ++digiIt){
  
      //Check the TDC trigger width
      int tdcTime = (*digiIt).countsTDC();
      double upperLimit = tTrigStMap[(*dtLayerId_It).first.superlayerId().chamberId()]-safeMargin;
      if(doTimeBoxHistos)
        tbHistos[(*dtLayerId_It).first.superlayerId()]->Fill(tdcTime);
      if(tdcTime>upperLimit)
        continue;

      //Check the chamber has no 4D segments (optional)
      if(doSegmentVeto &&
         segmentsChId.find((*dtLayerId_It).first.superlayerId().chamberId())!=segmentsChId.end())
        continue;

      // fill the occupancy histo
      // FIXME: needs to be optimized: no need to rescale the histo for each digi
      TH2F* noise_root = noiseHistos[(*dtLayerId_It).first.superlayerId().chamberId()]->getTH2F();
      double normalization=0;
      if(mapEvt.find((*dtLayerId_It).first.superlayerId().chamberId())!=mapEvt.end()) {
        LogVerbatim("DTNoiseTask")  << " Last fill: # of events: "
                                    << mapEvt[(*dtLayerId_It).first.superlayerId().chamberId()]
                                    << endl;
        normalization =  1e-9*upperLimit*mapEvt[(*dtLayerId_It).first.superlayerId().chamberId()];
        // revert back to # of entries
        noise_root->Scale(normalization);
      }
      int yBin=(*dtLayerId_It).first.layer()+(4*((*dtLayerId_It).first.superlayerId().superlayer()-1));
      noise_root->Fill((*digiIt).wire(),yBin);
      // normalize the occupancy histo
      mapEvt[(*dtLayerId_It).first.superlayerId().chamberId()] = evtNumber;
      LogVerbatim("DTNoiseTask")  << (*dtLayerId_It).first << " wire: " << (*digiIt).wire()
                                  << " # counts: " << noise_root->GetBinContent((*digiIt).wire(),yBin)
                                  << " Time interval: " << upperLimit
                                  << " # of events: " << evtNumber << endl;;
      normalization = double( 1e-9*upperLimit*mapEvt[(*dtLayerId_It).first.superlayerId().chamberId()]);
      // update the rate
      noise_root->Scale(1./normalization);
      LogVerbatim("DTNoiseTask")  << "    noise rate: "
                                  << noise_root->GetBinContent((*digiIt).wire(),yBin) << endl;
    }
  }
}
void DTNoiseTask::beginJob ( void  ) [protected, virtual]

BeginJob.

Reimplemented from edm::EDAnalyzer.

Definition at line 79 of file DTNoiseTask.cc.

                           {

   LogVerbatim("DTNoiseTask") << "[DTNoiseTask]: BeginJob"<<endl;

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

To reset the MEs.

Reimplemented from edm::EDAnalyzer.

Definition at line 88 of file DTNoiseTask.cc.

                                                                     {

   LogVerbatim("DTNoiseTask") <<"[DTNoiseTask]: Begin of LS transition"<<endl;

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

Reimplemented from edm::EDAnalyzer.

Definition at line 266 of file DTNoiseTask.cc.

References DQMStore::bookFloat(), bookHistos(), dbe, doTimeBoxHistos, dtGeom, edm::EventSetup::get(), nEventMonitor, DTTimeUnits::ns, DQMStore::setCurrentFolder(), and tTrigStMap.

                                                                  {

  LogVerbatim("DTNoiseTask") <<"[DTNoiseTask]: Begin of run"<<endl;

  // tTrig Map
  edm::ESHandle<DTTtrig> tTrigMap;
  setup.get<DTTtrigRcd>().get(tTrigMap);

  // get the geometry
  setup.get<MuonGeometryRecord>().get(dtGeom);

  dbe->setCurrentFolder("DT/EventInfo/Counters");
  nEventMonitor = dbe->bookFloat("nProcessedEventsNoise");

  // Loop over all the chambers          
  vector<DTChamber*>::const_iterator ch_it = dtGeom->chambers().begin();         
  vector<DTChamber*>::const_iterator ch_end = dtGeom->chambers().end();          
  for (; ch_it != ch_end; ++ch_it) {     
    DTChamberId chId = (*ch_it)->id();
    // histo booking
    bookHistos(chId);
    vector<const DTSuperLayer*>::const_iterator sl_it = (*ch_it)->superLayers().begin();         
    vector<const DTSuperLayer*>::const_iterator sl_end = (*ch_it)->superLayers().end();          
    // Loop over the SLs         
    for(; sl_it != sl_end; ++sl_it) { 
      DTSuperLayerId slId = (*sl_it)->id();
      if(doTimeBoxHistos)
        bookHistos(slId);
      float tTrig, tTrigRMS, kFactor;
      tTrigMap->get(slId, tTrig, tTrigRMS,kFactor,DTTimeUnits::ns);
      // tTrig mapping per station
      // check that the ttrig is the lowest of the 3 SLs
      if(tTrigStMap.find(chId)==tTrigStMap.end() || 
         (tTrigStMap.find(chId)!=tTrigStMap.end() && tTrig < tTrigStMap[chId]))
        tTrigStMap[chId] = tTrig;
    }
  }


}
void DTNoiseTask::bookHistos ( DTSuperLayerId  slId) [private]

Definition at line 237 of file DTNoiseTask.cc.

References DQMStore::book1D(), DTSuperLayerId::chamberId(), dbe, DTChamberId::sector(), DQMStore::setCurrentFolder(), relativeConstraints::station, DTChamberId::station(), DTSuperLayerId::superlayer(), tbHistos, and DTChamberId::wheel().

                                                {

  // set the folder
  stringstream wheel; wheel << slId.chamberId().wheel();        
  stringstream station; station << slId.chamberId().station();  
  stringstream sector; sector << slId.chamberId().sector();     
  stringstream superlayer; superlayer << slId.superlayer();
  dbe->setCurrentFolder("DT/05-Noise/Wheel" + wheel.str() +
                        "/Station" + station.str() +
                        "/Sector" + sector.str());

  // Build the histo name
  string histoName = string("TimeBox")
    + "_W" + wheel.str() 
    + "_St" + station.str() 
    + "_Sec" + sector.str()
    + "_SL" + superlayer.str();
  
   LogVerbatim("DTNoiseTask") <<"[DTNoiseTask]: booking SL histo:"<<endl;
   LogVerbatim("DTNoiseTask") <<"              folder "<< "DT/05-Noise/Wheel" + wheel.str() +
    "/Station" + station.str() +
    "/Sector" + sector.str() + "/" << endl; 
   LogVerbatim("DTNoiseTask") <<"              histoName "<<histoName<<endl;

  tbHistos[slId] = dbe->book1D(histoName,"Time Box (TDC counts)", 1000, 0, 6000);

}
void DTNoiseTask::bookHistos ( DTChamberId  chId) [private]

Definition at line 181 of file DTNoiseTask.cc.

References DQMStore::book2D(), dbe, dtGeom, noiseHistos, DTChamberId::sector(), DQMStore::setCurrentFolder(), relativeConstraints::station, DTChamberId::station(), DTChamber::superLayers(), and DTChamberId::wheel().

Referenced by beginRun().

                                             {

  // set the folder
  stringstream wheel; wheel << chId.wheel();    
  stringstream station; station << chId.station();      
  stringstream sector; sector << chId.sector(); 
  dbe->setCurrentFolder("DT/05-Noise/Wheel" + wheel.str() +
//                      "/Station" + station.str() +
                        "/Sector" + sector.str());

  // Build the histo name
  string histoName = string("NoiseRate")
    + "_W" + wheel.str() 
    + "_St" + station.str() 
    + "_Sec" + sector.str() ;
  
   LogVerbatim("DTNoiseTask") << "[DTNoiseTask]: booking chamber histo:"<<endl;
   LogVerbatim("DTNoiseTask") << "              folder "<< "DT/05-Noise/Wheel" + wheel.str() +
//     "/Station" + station.str() +
    "/Sector" + sector.str() + "/"<<endl; 
   LogVerbatim("DTNoiseTask") << "              histoName "<<histoName<<endl;

  // Get the chamber from the geometry
  int nWires_max = 0;
  const DTChamber* dtchamber = dtGeom->chamber(chId);
  const vector<const DTSuperLayer*> superlayers = dtchamber->superLayers();

  // Loop over layers and find the max # of wires
  for(vector<const DTSuperLayer*>::const_iterator sl = superlayers.begin();
      sl != superlayers.end(); ++sl) { // loop over SLs
    vector<const DTLayer*> layers = (*sl)->layers();
    for(vector<const DTLayer*>::const_iterator lay = layers.begin();
        lay != layers.end(); ++lay) { // loop over layers
      int nWires = (*lay)->specificTopology().channels();
      if(nWires > nWires_max) nWires_max = nWires;
    }
  }

  noiseHistos[chId] = dbe->book2D(histoName,"Noise rate (Hz) per channel", nWires_max,1, nWires_max+1,12,1,13);
  noiseHistos[chId]->setAxisTitle("wire number",1);
  noiseHistos[chId]->setBinLabel(1,"SL1-L1",2);
  noiseHistos[chId]->setBinLabel(2,"SL1-L2",2);
  noiseHistos[chId]->setBinLabel(3,"SL1-L3",2);
  noiseHistos[chId]->setBinLabel(4,"SL1-L4",2);
  noiseHistos[chId]->setBinLabel(5,"SL2-L1",2);
  noiseHistos[chId]->setBinLabel(6,"SL2-L2",2);
  noiseHistos[chId]->setBinLabel(7,"SL2-L3",2);
  noiseHistos[chId]->setBinLabel(8,"SL2-L4",2);
  noiseHistos[chId]->setBinLabel(9,"SL3-L1",2);
  noiseHistos[chId]->setBinLabel(10,"SL3-L2",2);
  noiseHistos[chId]->setBinLabel(11,"SL3-L3",2);
  noiseHistos[chId]->setBinLabel(12,"SL3-L4",2);

}
void DTNoiseTask::endJob ( void  ) [protected, virtual]

Endjob.

Reimplemented from edm::EDAnalyzer.

Definition at line 178 of file DTNoiseTask.cc.

{}
void DTNoiseTask::endLuminosityBlock ( const edm::LuminosityBlock lumiSeg,
const edm::EventSetup setup 
) [protected, virtual]

Reimplemented from edm::EDAnalyzer.

Definition at line 307 of file DTNoiseTask.cc.

References alignCSCRings::e, evtNumber, mapEvt, noiseHistos, safeMargin, and tTrigStMap.

                                                                                            {
  LogVerbatim("DTNoiseTask") << "[DTNoiseTask]: End LS, update rates in all histos" << endl;
  
  // update the rate of all histos (usefull for histos with few entries: they are not updated very often
  for(map<DTChamberId, MonitorElement*>::const_iterator meAndChamber = noiseHistos.begin();
      meAndChamber != noiseHistos.end(); ++meAndChamber) {
    DTChamberId chId = (*meAndChamber).first;
    TH2F* noise_root = (*meAndChamber).second->getTH2F();
    double upperLimit = tTrigStMap[chId]-safeMargin;

    double normalization=0;
    if(mapEvt.find(chId) != mapEvt.end()) {
      LogVerbatim("DTNoiseTask")  << " Ch: " << chId << " Last fill: # of events: " << mapEvt[chId] << endl;
        normalization =  1e-9*upperLimit*mapEvt[chId];
        // revert back to # of entries
        noise_root->Scale(normalization);
    }
    //check that event analyzed != 0 might happen oline
    if (evtNumber) {
      // set the # of events analyzed until this update
      LogVerbatim("DTNoiseTask")  << "          Update for events: " << evtNumber << endl;
      mapEvt[chId] = evtNumber;
      // update the rate
      normalization = double( 1e-9*upperLimit*evtNumber);
      noise_root->Scale(1./normalization);
    }
  }
}

Member Data Documentation

Definition at line 74 of file DTNoiseTask.h.

Referenced by beginRun(), bookHistos(), and DTNoiseTask().

Definition at line 72 of file DTNoiseTask.h.

Referenced by analyze(), and DTNoiseTask().

Definition at line 68 of file DTNoiseTask.h.

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

Definition at line 64 of file DTNoiseTask.h.

Referenced by analyze(), and DTNoiseTask().

Definition at line 75 of file DTNoiseTask.h.

Referenced by beginRun(), and bookHistos().

int DTNoiseTask::evtNumber [private]

Definition at line 66 of file DTNoiseTask.h.

Referenced by analyze(), and endLuminosityBlock().

std::map<DTChamberId, int> DTNoiseTask::mapEvt [private]

Definition at line 84 of file DTNoiseTask.h.

Referenced by analyze(), and endLuminosityBlock().

Definition at line 89 of file DTNoiseTask.h.

Referenced by analyze(), and beginRun().

Definition at line 81 of file DTNoiseTask.h.

Referenced by analyze(), bookHistos(), and endLuminosityBlock().

double DTNoiseTask::safeMargin [private]

Definition at line 92 of file DTNoiseTask.h.

Referenced by analyze(), DTNoiseTask(), and endLuminosityBlock().

Definition at line 87 of file DTNoiseTask.h.

Referenced by analyze(), and bookHistos().

std::string DTNoiseTask::theRecHits4DLabel [private]

Definition at line 70 of file DTNoiseTask.h.

Referenced by analyze(), and DTNoiseTask().

std::map<DTChamberId, double> DTNoiseTask::tTrigStMap [private]

Definition at line 78 of file DTNoiseTask.h.

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