CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Classes | Public Member Functions | Private Member Functions | Private Attributes
DTNoiseCalibration Class Reference

#include <DTNoiseCalibration.h>

Inheritance diagram for DTNoiseCalibration:
edm::EDAnalyzer edm::EDConsumerBase

Classes

class  DTNoiseCalibration
 

Public Member Functions

void analyze (const edm::Event &e, const edm::EventSetup &c)
 
void beginJob ()
 
void beginRun (const edm::Run &run, const edm::EventSetup &setup)
 
 DTNoiseCalibration (const edm::ParameterSet &ps)
 Constructor. More...
 
void endJob ()
 
virtual ~DTNoiseCalibration ()
 Destructor. More...
 
- Public Member Functions inherited from edm::EDAnalyzer
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
 EDAnalyzer ()
 
ModuleDescription const & moduleDescription () const
 
std::string workerType () const
 
virtual ~EDAnalyzer ()
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
 EDConsumerBase ()
 
ProductHolderIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductHolderIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductHolderIndexAndSkipBit > &) const
 
std::vector
< ProductHolderIndexAndSkipBit >
const & 
itemsToGetFromEvent () const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesDependentUpon (const std::string &iProcessName, std::vector< const char * > &oModuleLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
bool registeredToConsume (ProductHolderIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
void updateLookup (BranchType iBranchType, ProductHolderIndexHelper const &)
 
virtual ~EDConsumerBase ()
 

Private Member Functions

std::string getChamberName (const DTChamberId &) const
 
std::string getChannelName (const DTWireId &) const
 
std::string getLayerName (const DTLayerId &) const
 
std::string getSuperLayerName (const DTSuperLayerId &) const
 

Private Attributes

std::map< DTChamberId, TH1F * > chamberOccupancyVsLumiMap_
 
std::map< DTChamberId, TH1F * > chamberOccupancyVsTimeMap_
 
std::string dbLabel_
 
int defaultTtrig_
 
edm::InputTag digiLabel_
 
edm::ESHandle< DTGeometrydtGeom_
 
TH1F * hTDCTriggerWidth_
 
unsigned int lumiMax_
 
double maximumNoiseRate_
 
int nevents_
 
bool readDB_
 
TFile * rootFile_
 
time_t runBeginTime_
 
time_t runEndTime_
 
std::map< DTLayerId, TH1F * > theHistoOccupancyMap_
 
std::map< DTWireId, TH1F * > theHistoOccupancyVsLumiMap_
 
int timeWindowOffset_
 
double triggerWidth_
 
edm::ESHandle< DTTtrigtTrigMap_
 
bool useAbsoluteRate_
 
bool useTimeWindow_
 
std::vector< DTWireIdwireIdWithHisto_
 

Additional Inherited Members

- Public Types inherited from edm::EDAnalyzer
typedef EDAnalyzer ModuleType
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- Static Public Member Functions inherited from edm::EDAnalyzer
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &)
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 

Detailed Description

Definition at line 31 of file DTNoiseCalibration.h.

Constructor & Destructor Documentation

Constructor.

Definition at line 42 of file DTNoiseCalibration.cc.

References defaultTtrig_, edm::ParameterSet::exists(), edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), readDB_, rootFile_, dtT0Analyzer_cfg::rootFileName, relativeConstraints::station, and wireIdWithHisto_.

42  :
43  digiLabel_( pset.getParameter<InputTag>("digiLabel") ),
44  useTimeWindow_( pset.getParameter<bool>("useTimeWindow") ),
45  triggerWidth_( pset.getParameter<double>("triggerWidth") ),
46  timeWindowOffset_( pset.getParameter<int>("timeWindowOffset") ),
47  maximumNoiseRate_( pset.getParameter<double>("maximumNoiseRate") ),
48  useAbsoluteRate_( pset.getParameter<bool>("useAbsoluteRate") ),
49  readDB_(true), defaultTtrig_(0),
50  dbLabel_( pset.getUntrackedParameter<string>("dbLabel", "") ),
51  //fastAnalysis_( pset.getParameter<bool>("fastAnalysis", true) ),
52  wireIdWithHisto_( std::vector<DTWireId>() ),
53  lumiMax_(3000)
54  {
55 
56  // Get the debug parameter for verbose output
57  //debug = ps.getUntrackedParameter<bool>("debug");
58  /*// The analysis type
59  // The wheel & sector interested for the time-dependent analysis
60  wh = ps.getUntrackedParameter<int>("wheel", 0);
61  sect = ps.getUntrackedParameter<int>("sector", 6);*/
62 
63  if( pset.exists("defaultTtrig") ){
64  readDB_ = false;
65  defaultTtrig_ = pset.getParameter<int>("defaultTtrig");
66  }
67 
68  if( pset.exists("cellsWithHisto") ){
69  vector<string> cellsWithHisto = pset.getParameter<vector<string> >("cellsWithHisto");
70  for(vector<string>::const_iterator cell = cellsWithHisto.begin(); cell != cellsWithHisto.end(); ++cell){
71  //FIXME: Use regex to check whether format is right
72  if( (*cell) != "" && (*cell) != "None"){
73  stringstream linestr;
74  int wheel,station,sector,sl,layer,wire;
75  linestr << (*cell);
76  linestr >> wheel >> station >> sector >> sl >> layer >> wire;
77  wireIdWithHisto_.push_back(DTWireId(wheel,station,sector,sl,layer,wire));
78  }
79  }
80  }
81 
82  // The root file which will contain the histos
83  string rootFileName = pset.getUntrackedParameter<string>("rootFileName","noise.root");
84  rootFile_ = new TFile(rootFileName.c_str(), "RECREATE");
85  rootFile_->cd();
86 }
edm::InputTag digiLabel_
std::vector< DTWireId > wireIdWithHisto_
DTNoiseCalibration::~DTNoiseCalibration ( )
virtual

Destructor.

Definition at line 416 of file DTNoiseCalibration.cc.

416  {
417  rootFile_->Close();
418 }

Member Function Documentation

void DTNoiseCalibration::analyze ( const edm::Event e,
const edm::EventSetup c 
)
virtual

Implements edm::EDAnalyzer.

Definition at line 118 of file DTNoiseCalibration.cc.

References DTSuperLayerId::chamberId(), DTTimeUnits::counts, edm::hlt::Exception, spr::find(), DTTopology::firstChannel(), relval_steps::k, DTTopology::lastChannel(), LogTrace, edm::second(), ntuplemaker::status, edm::EventBase::time(), and edm::Timestamp::value().

118  {
119  ++nevents_;
120 
121  // Get the digis from the event
122  Handle<DTDigiCollection> dtdigis;
123  event.getByLabel(digiLabel_, dtdigis);
124 
125  /*TH1F *hOccupancyHisto;
126  TH2F *hEvtPerWireH;
127  string Histo2Name;*/
128 
129  //RunNumber_t runNumber = event.id().run();
130  time_t eventTime = time_t(event.time().value()>>32);
131  unsigned int lumiSection = event.luminosityBlock();
132 
133  // Loop over digis
135  for (dtLayerId_It=dtdigis->begin(); dtLayerId_It!=dtdigis->end(); ++dtLayerId_It){
136  // Define time window
137  float upperLimit = 0.;
138  if(useTimeWindow_){
139  if( readDB_ ){
140  float tTrig,tTrigRMS,kFactor;
141  DTSuperLayerId slId = ((*dtLayerId_It).first).superlayerId();
142  int status = tTrigMap_->get( slId, tTrig, tTrigRMS, kFactor, DTTimeUnits::counts );
143  if(status != 0) throw cms::Exception("DTNoiseCalibration") << "Could not find tTrig entry in DB for" << slId << endl;
144  upperLimit = tTrig - timeWindowOffset_;
145  } else {
146  upperLimit = defaultTtrig_ - timeWindowOffset_;
147  }
148  }
149 
150  double triggerWidth_s = 0.;
151  if(useTimeWindow_) triggerWidth_s = ( (upperLimit*25)/32 )/1e9;
152  else triggerWidth_s = double(triggerWidth_/1e9);
153  LogTrace("Calibration") << ((*dtLayerId_It).first).superlayerId() << " Trigger width (s): " << triggerWidth_s;
154 
155  for (DTDigiCollection::const_iterator digiIt = ((*dtLayerId_It).second).first;
156  digiIt!=((*dtLayerId_It).second).second; ++digiIt){
157 
158  //Check the TDC trigger width
159  int tdcTime = (*digiIt).countsTDC();
160  if( !useTimeWindow_ ){
161  if( ( ((float)tdcTime*25)/32 ) > triggerWidth_ ){
162  LogError("Calibration") << "Digi has a TDC time (ns) higher than the pre-defined TDC trigger width: " << ((float)tdcTime*25)/32;
163  continue;
164  }
165  }
166 
167  hTDCTriggerWidth_->Fill(tdcTime);
168 
169  if( useTimeWindow_ && tdcTime > upperLimit) continue;
170 
171  /*LogTrace("Calibration") << "TDC time (ns): " << ((float)tdcTime*25)/32
172  <<" --- trigger width (ns): " << ((float)upperLimit*25)/32;*/
173 
174  const DTLayerId dtLId = (*dtLayerId_It).first;
175  const DTTopology& dtTopo = dtGeom_->layer(dtLId)->specificTopology();
176  const int firstWire = dtTopo.firstChannel();
177  const int lastWire = dtTopo.lastChannel();
178  //const int nWires = dtTopo.channels();
179  const int nWires = lastWire - firstWire + 1;
180 
181  // Book the occupancy histos
182  if( theHistoOccupancyMap_.find(dtLId) == theHistoOccupancyMap_.end() ){
183  string histoName = "DigiOccupancy_" + getLayerName(dtLId);
184  rootFile_->cd();
185  TH1F* hOccupancyHisto = new TH1F(histoName.c_str(), histoName.c_str(), nWires, firstWire, lastWire+1);
186  LogTrace("Calibration") << " Created occupancy Histo: " << hOccupancyHisto->GetName();
187  theHistoOccupancyMap_[dtLId] = hOccupancyHisto;
188  }
189  theHistoOccupancyMap_[dtLId]->Fill( (*digiIt).wire(), 1./triggerWidth_s );
190 
191  // Histos vs lumi section
192  const DTChamberId dtChId = dtLId.chamberId();
193  if( chamberOccupancyVsLumiMap_.find(dtChId) == chamberOccupancyVsLumiMap_.end() ){
194  string histoName = "OccupancyVsLumi_" + getChamberName(dtChId);
195  rootFile_->cd();
196  TH1F* hOccupancyVsLumiHisto = new TH1F(histoName.c_str(), histoName.c_str(), lumiMax_, 0, lumiMax_);
197  LogTrace("Calibration") << " Created occupancy histo: " << hOccupancyVsLumiHisto->GetName();
198  chamberOccupancyVsLumiMap_[dtChId] = hOccupancyVsLumiHisto;
199  }
200  chamberOccupancyVsLumiMap_[dtChId]->Fill( lumiSection, 1./triggerWidth_s );
201 
202  const DTWireId wireId(dtLId, (*digiIt).wire());
203  if( find(wireIdWithHisto_.begin(),wireIdWithHisto_.end(),wireId) != wireIdWithHisto_.end() ){
204  if( theHistoOccupancyVsLumiMap_.find(wireId) == theHistoOccupancyVsLumiMap_.end() ){
205  string histoName = "OccupancyVsLumi_" + getChannelName(wireId);
206  rootFile_->cd();
207  TH1F* hOccupancyVsLumiHisto = new TH1F(histoName.c_str(), histoName.c_str(), lumiMax_, 0, lumiMax_);
208  LogTrace("Calibration") << " Created occupancy histo: " << hOccupancyVsLumiHisto->GetName();
209  theHistoOccupancyVsLumiMap_[wireId] = hOccupancyVsLumiHisto;
210  }
211  theHistoOccupancyVsLumiMap_[wireId]->Fill( lumiSection, 1./triggerWidth_s );
212  }
213 
214  // Histos vs time
215  if( chamberOccupancyVsTimeMap_.find(dtChId) == chamberOccupancyVsTimeMap_.end() ){
216  string histoName = "OccupancyVsTime_" + getChamberName(dtChId);
217  float secPerBin = 20.0;
218  unsigned int nBins = ( (unsigned int)(runEndTime_ - runBeginTime_) )/secPerBin;
219  rootFile_->cd();
220  TH1F* hOccupancyVsTimeHisto = new TH1F(histoName.c_str(), histoName.c_str(),
221  nBins, (unsigned int)runBeginTime_,
222  (unsigned int)runEndTime_);
223  for(int k = 0; k < hOccupancyVsTimeHisto->GetNbinsX(); ++k){
224  if( k%10 == 0 ){
225  unsigned int binLowEdge = hOccupancyVsTimeHisto->GetBinLowEdge(k+1);
226  time_t timeValue = time_t(binLowEdge);
227  hOccupancyVsTimeHisto->GetXaxis()->SetBinLabel( (k+1),ctime(&timeValue) );
228  }
229  }
230  size_t lastBin = hOccupancyVsTimeHisto->GetNbinsX();
231  unsigned int binUpperEdge = hOccupancyVsTimeHisto->GetBinLowEdge(lastBin) +
232  hOccupancyVsTimeHisto->GetBinWidth(lastBin);
233  time_t timeValue = time_t(binUpperEdge);
234  hOccupancyVsTimeHisto->GetXaxis()->SetBinLabel( (lastBin),ctime(&timeValue) );
235 
236  LogTrace("Calibration") << " Created occupancy histo: " << hOccupancyVsTimeHisto->GetName();
237  chamberOccupancyVsTimeMap_[dtChId] = hOccupancyVsTimeHisto;
238  }
239  chamberOccupancyVsTimeMap_[dtChId]->Fill( (unsigned int)eventTime, 1./triggerWidth_s );
240 
241  /*// Book the digi event plot every 1000 events if the analysis is not "fast" and if is the correct sector
242  if(!fastAnalysis &&
243  dtLId.superlayerId().chamberId().wheel()==wh &&
244  dtLId.superlayerId().chamberId().sector()==sect) {
245  if(theHistoEvtPerWireMap.find(dtLId) == theHistoEvtPerWireMap.end() ||
246  (theHistoEvtPerWireMap.find(dtLId) != theHistoEvtPerWireMap.end() &&
247  skippedPlot[dtLId] != counter)){
248  skippedPlot[dtLId] = counter;
249  stringstream toAppend; toAppend << counter;
250  Histo2Name = "DigiPerWirePerEvent_" + getLayerName(dtLId) + "_" + toAppend.str();
251  theFile->cd();
252  hEvtPerWireH = new TH2F(Histo2Name.c_str(), Histo2Name.c_str(), 1000,0.5,1000.5,nWires, firstWire, lastWire+1);
253  if(hEvtPerWireH){
254  if(debug)
255  cout << " New Histo with the number of digi per evt per wire: " << hEvtPerWireH->GetName() << endl;
256  theHistoEvtPerWireMap[dtLId]=hEvtPerWireH;
257  }
258  }
259  }*/
260  }
261  }
262 
263  /*//Fill the plot of the number of digi per event per wire
264  std::map<int,int > DigiPerWirePerEvent;
265  // LOOP OVER ALL THE CHAMBERS
266  vector<DTChamber*>::const_iterator ch_it = dtGeom->chambers().begin();
267  vector<DTChamber*>::const_iterator ch_end = dtGeom->chambers().end();
268  for (; ch_it != ch_end; ++ch_it) {
269  DTChamberId ch = (*ch_it)->id();
270  vector<const DTSuperLayer*>::const_iterator sl_it = (*ch_it)->superLayers().begin();
271  vector<const DTSuperLayer*>::const_iterator sl_end = (*ch_it)->superLayers().end();
272  // Loop over the SLs
273  for(; sl_it != sl_end; ++sl_it) {
274  DTSuperLayerId sl = (*sl_it)->id();
275  vector<const DTLayer*>::const_iterator l_it = (*sl_it)->layers().begin();
276  vector<const DTLayer*>::const_iterator l_end = (*sl_it)->layers().end();
277  // Loop over the Ls
278  for(; l_it != l_end; ++l_it) {
279  DTLayerId layerId = (*l_it)->id();
280 
281  // Get the number of wires
282  const DTTopology& dtTopo = dtGeom->layer(layerId)->specificTopology();
283  const int firstWire = dtTopo.firstChannel();
284  const int lastWire = dtTopo.lastChannel();
285 
286  if (theHistoEvtPerWireMap.find(layerId) != theHistoEvtPerWireMap.end() &&
287  skippedPlot[layerId] == counter) {
288 
289  for (int wire=firstWire; wire<=lastWire; wire++) {
290  DigiPerWirePerEvent[wire]= 0;
291  }
292  // loop over all the digis of the event
293  DTDigiCollection::Range layerDigi= dtdigis->get(layerId);
294  for (DTDigiCollection::const_iterator digi = layerDigi.first;
295  digi!=layerDigi.second;
296  ++digi){
297  if((cosmicRun && (*digi).countsTDC()<upperLimit) || (!cosmicRun))
298  DigiPerWirePerEvent[(*digi).wire()]+=1;
299  }
300  // fill the digi event histo
301  for (int wire=firstWire; wire<=lastWire; wire++) {
302  theFile->cd();
303  int histoEvents = nevents - (counter*1000);
304  theHistoEvtPerWireMap[layerId]->Fill(histoEvents,wire,DigiPerWirePerEvent[wire]);
305  }
306  }
307  } //Loop Ls
308  } //Loop SLs
309  } //Loop chambers
310 
311 
312  if(nevents % 1000 == 0) {
313  counter++;
314  // save the digis event plot on file
315  for(map<DTLayerId, TH2F* >::const_iterator lHisto = theHistoEvtPerWireMap.begin();
316  lHisto != theHistoEvtPerWireMap.end();
317  lHisto++) {
318  theFile->cd();
319  if((*lHisto).second)
320  (*lHisto).second->Write();
321  }
322  theHistoEvtPerWireMap.clear();
323  }*/
324 
325 }
edm::ESHandle< DTGeometry > dtGeom_
DTChamberId chamberId() const
Return the corresponding ChamberId.
edm::InputTag digiLabel_
std::vector< DTWireId > wireIdWithHisto_
std::map< DTLayerId, TH1F * > theHistoOccupancyMap_
std::string getChannelName(const DTWireId &) const
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:7
std::map< DTChamberId, TH1F * > chamberOccupancyVsTimeMap_
std::string getChamberName(const DTChamberId &) const
std::map< DTChamberId, TH1F * > chamberOccupancyVsLumiMap_
int firstChannel() const
Returns the wire number of the first wire.
Definition: DTTopology.h:78
std::string getLayerName(const DTLayerId &) const
std::map< DTWireId, TH1F * > theHistoOccupancyVsLumiMap_
U second(std::pair< T, U > const &p)
int lastChannel() const
Returns the wire number of the last wire.
Definition: DTTopology.h:80
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
#define LogTrace(id)
std::vector< DTDigi >::const_iterator const_iterator
tuple status
Definition: ntuplemaker.py:245
edm::ESHandle< DTTtrig > tTrigMap_
void DTNoiseCalibration::beginJob ( void  )
virtual

Reimplemented from edm::EDAnalyzer.

Definition at line 88 of file DTNoiseCalibration.cc.

88  {
89  LogVerbatim("Calibration") << "[DTNoiseCalibration]: Begin job";
90 
91  nevents_ = 0;
92 
93  TH1::SetDefaultSumw2(true);
94  int numBin = (triggerWidth_*32/25)/50;
95  hTDCTriggerWidth_ = new TH1F("TDC_Time_Distribution", "TDC_Time_Distribution", numBin, 0, triggerWidth_*32/25);
96 }
void DTNoiseCalibration::beginRun ( const edm::Run run,
const edm::EventSetup setup 
)
virtual

Reimplemented from edm::EDAnalyzer.

Definition at line 98 of file DTNoiseCalibration.cc.

References edm::RunBase::beginTime(), edm::RunBase::endTime(), edm::EventSetup::get(), and edm::Timestamp::value().

98  {
99 
100  // Get the DT Geometry
101  setup.get<MuonGeometryRecord>().get(dtGeom_);
102 
103  // tTrig
104  if( readDB_ ) setup.get<DTTtrigRcd>().get(dbLabel_,tTrigMap_);
105 
106  runBeginTime_ = time_t(run.beginTime().value()>>32);
107  runEndTime_ = time_t(run.endTime().value()>>32);
108  /*
109  nevents = 0;
110  counter = 0;
111 
112  // TDC time distribution
113  int numBin = (triggerWidth_*(32/25))/50;
114  hTDCTriggerWidth = new TH1F("TDC_Time_Distribution", "TDC_Time_Distribution", numBin, 0, triggerWidth_*(32/25));*/
115 
116 }
Timestamp const & endTime() const
Definition: RunBase.h:44
edm::ESHandle< DTGeometry > dtGeom_
const T & get() const
Definition: EventSetup.h:55
Timestamp const & beginTime() const
Definition: RunBase.h:43
TimeValue_t value() const
Definition: Timestamp.h:56
edm::ESHandle< DTTtrig > tTrigMap_
void DTNoiseCalibration::endJob ( void  )
virtual

Reimplemented from edm::EDAnalyzer.

Definition at line 327 of file DTNoiseCalibration.cc.

References newFWLiteAna::bin, DTTopology::firstChannel(), DTTopology::lastChannel(), LogTrace, record, DTStatusFlag::setCellNoise(), and crabStatusFromReport::statusMap.

327  {
328 
329  //LogVerbatim("Calibration") << "[DTNoiseCalibration] endjob called!";
330  LogVerbatim("Calibration") << "[DTNoiseCalibration] Total number of events analyzed: " << nevents_;
331 
332  // Save the TDC digi plot
333  rootFile_->cd();
334  hTDCTriggerWidth_->Write();
335 
336  double normalization = 1./double(nevents_);
337 
338  for(map<DTWireId, TH1F*>::const_iterator wHisto = theHistoOccupancyVsLumiMap_.begin();
339  wHisto != theHistoOccupancyVsLumiMap_.end(); ++wHisto){
340  (*wHisto).second->Scale(normalization);
341  (*wHisto).second->Write();
342  }
343 
344  for(map<DTChamberId, TH1F*>::const_iterator chHisto = chamberOccupancyVsLumiMap_.begin();
345  chHisto != chamberOccupancyVsLumiMap_.end(); ++chHisto){
346  (*chHisto).second->Scale(normalization);
347  (*chHisto).second->Write();
348  }
349 
350  for(map<DTChamberId, TH1F*>::const_iterator chHisto = chamberOccupancyVsTimeMap_.begin();
351  chHisto != chamberOccupancyVsTimeMap_.end(); ++chHisto){
352  (*chHisto).second->Scale(normalization);
353  (*chHisto).second->Write();
354  }
355 
356  // Save on file the occupancy histos and write the list of noisy cells
358  for(map<DTLayerId, TH1F*>::const_iterator lHisto = theHistoOccupancyMap_.begin();
359  lHisto != theHistoOccupancyMap_.end();
360  ++lHisto){
361  /*double triggerWidth_s = 0.;
362  if( useTimeWindow_ ){
363  double triggerWidth_ns = 0.;
364  if( readDB_ ){
365  float tTrig, tTrigRMS, kFactor;
366  DTSuperLayerId slId = ((*lHisto).first).superlayerId();
367  int status = tTrigMap_->get( slId, tTrig, tTrigRMS, kFactor, DTTimeUnits::counts );
368  if(status != 0) throw cms::Exception("DTNoiseCalibration") << "Could not find tTrig entry in DB for" << slId << endl;
369  triggerWidth_ns = tTrig - timeWindowOffset_;
370  } else{
371  triggerWidth_ns = defaultTtrig_ - timeWindowOffset_;
372  }
373  triggerWidth_ns = (triggerWidth_ns*25)/32;
374  triggerWidth_s = triggerWidth_ns/1e9;
375  } else{
376  triggerWidth_s = double(triggerWidth_/1e9);
377  }
378  LogTrace("Calibration") << (*lHisto).second->GetName() << " trigger width (s): " << triggerWidth_s;*/
379 
380  //double normalization = 1./(nevents_*triggerWidth_s);
381  if((*lHisto).second){
382  (*lHisto).second->Scale(normalization);
383  rootFile_->cd();
384  (*lHisto).second->Write();
385  const DTTopology& dtTopo = dtGeom_->layer((*lHisto).first)->specificTopology();
386  const int firstWire = dtTopo.firstChannel();
387  const int lastWire = dtTopo.lastChannel();
388  //const int nWires = dtTopo.channels();
389  const int nWires = lastWire - firstWire + 1;
390  // Find average in layer
391  double averageRate = 0.;
392  for(int bin = 1; bin <= (*lHisto).second->GetNbinsX(); ++bin)
393  averageRate += (*lHisto).second->GetBinContent(bin);
394 
395  if(nWires) averageRate /= nWires;
396  LogTrace("Calibration") << " Average rate = " << averageRate;
397 
398  for(int i_wire = firstWire; i_wire <= lastWire; ++i_wire){
399  // From definition of "noisy cell"
400  int bin = i_wire - firstWire + 1;
401  double channelRate = (*lHisto).second->GetBinContent(bin);
402  double rateOffset = (useAbsoluteRate_) ? 0. : averageRate;
403  if( (channelRate - rateOffset) > maximumNoiseRate_ ){
404  DTWireId wireID((*lHisto).first, i_wire);
405  statusMap->setCellNoise(wireID,1);
406  LogVerbatim("Calibration") << ">>> Channel noisy: " << wireID;
407  }
408  }
409  }
410  }
411  LogVerbatim("Calibration") << "Writing noise map object to DB";
412  string record = "DTStatusFlagRcd";
413  DTCalibDBUtils::writeToDB<DTStatusFlag>(record, statusMap);
414 }
JetCorrectorParameters::Record record
Definition: classes.h:7
edm::ESHandle< DTGeometry > dtGeom_
std::map< DTLayerId, TH1F * > theHistoOccupancyMap_
std::map< DTChamberId, TH1F * > chamberOccupancyVsTimeMap_
std::map< DTChamberId, TH1F * > chamberOccupancyVsLumiMap_
int firstChannel() const
Returns the wire number of the first wire.
Definition: DTTopology.h:78
std::map< DTWireId, TH1F * > theHistoOccupancyVsLumiMap_
int lastChannel() const
Returns the wire number of the last wire.
Definition: DTTopology.h:80
int setCellNoise(int wheelId, int stationId, int sectorId, int slId, int layerId, int cellId, bool flag)
#define LogTrace(id)
string DTNoiseCalibration::getChamberName ( const DTChamberId dtChId) const
private

Definition at line 465 of file DTNoiseCalibration.cc.

References DTChamberId::sector(), DTChamberId::station(), relativeConstraints::station, and DTChamberId::wheel().

465  {
466 
467  stringstream wheel; wheel << dtChId.wheel();
468  stringstream station; station << dtChId.station();
469  stringstream sector; sector << dtChId.sector();
470 
471  string chamberName =
472  "W" + wheel.str()
473  + "_St" + station.str()
474  + "_Sec" + sector.str();
475 
476  return chamberName;
477 }
int sector() const
Definition: DTChamberId.h:61
int station() const
Return the station number.
Definition: DTChamberId.h:51
int wheel() const
Return the wheel number.
Definition: DTChamberId.h:45
string DTNoiseCalibration::getChannelName ( const DTWireId wId) const
private

Definition at line 420 of file DTNoiseCalibration.cc.

References ecaldqm::binning::channelName(), DTLayerId::layer(), DTChamberId::sector(), DTChamberId::station(), DTSuperLayerId::superlayer(), DTChamberId::wheel(), and DTWireId::wire().

420  {
421  stringstream channelName;
422  channelName << "Wh" << wId.wheel() << "_St" << wId.station() << "_Sec" << wId.sector()
423  << "_SL" << wId.superlayer() << "_L" << wId.layer() << "_W"<< wId.wire();
424 
425  return channelName.str();
426 }
int layer() const
Return the layer number.
Definition: DTLayerId.h:53
std::string channelName(uint32_t, BinningType _btype=kDCC)
int wire() const
Return the wire number.
Definition: DTWireId.h:56
int superlayer() const
Return the superlayer number (deprecated method name)
int sector() const
Definition: DTChamberId.h:61
int station() const
Return the station number.
Definition: DTChamberId.h:51
int wheel() const
Return the wheel number.
Definition: DTChamberId.h:45
string DTNoiseCalibration::getLayerName ( const DTLayerId lId) const
private

Definition at line 428 of file DTNoiseCalibration.cc.

References DTSuperLayerId::chamberId(), DTLayerId::layer(), DTChamberId::sector(), DTChamberId::station(), relativeConstraints::station, DTSuperLayerId::superlayer(), DTLayerId::superlayerId(), and DTChamberId::wheel().

428  {
429 
430  const DTSuperLayerId dtSLId = lId.superlayerId();
431  const DTChamberId dtChId = dtSLId.chamberId();
432  stringstream Layer; Layer << lId.layer();
433  stringstream superLayer; superLayer << dtSLId.superlayer();
434  stringstream wheel; wheel << dtChId.wheel();
435  stringstream station; station << dtChId.station();
436  stringstream sector; sector << dtChId.sector();
437 
438  string layerName =
439  "W" + wheel.str()
440  + "_St" + station.str()
441  + "_Sec" + sector.str()
442  + "_SL" + superLayer.str()
443  + "_L" + Layer.str();
444 
445  return layerName;
446 }
DTChamberId chamberId() const
Return the corresponding ChamberId.
int layer() const
Return the layer number.
Definition: DTLayerId.h:53
DTSuperLayerId superlayerId() const
Return the corresponding SuperLayerId.
Definition: DTLayerId.h:59
SeedingLayerSetsHits::SeedingLayer Layer
Definition: LayerTriplets.h:14
int superlayer() const
Return the superlayer number (deprecated method name)
int sector() const
Definition: DTChamberId.h:61
int station() const
Return the station number.
Definition: DTChamberId.h:51
int wheel() const
Return the wheel number.
Definition: DTChamberId.h:45
string DTNoiseCalibration::getSuperLayerName ( const DTSuperLayerId dtSLId) const
private

Definition at line 448 of file DTNoiseCalibration.cc.

References DTSuperLayerId::chamberId(), DTChamberId::sector(), DTChamberId::station(), relativeConstraints::station, DTSuperLayerId::superlayer(), and DTChamberId::wheel().

448  {
449 
450  const DTChamberId dtChId = dtSLId.chamberId();
451  stringstream superLayer; superLayer << dtSLId.superlayer();
452  stringstream wheel; wheel << dtChId.wheel();
453  stringstream station; station << dtChId.station();
454  stringstream sector; sector << dtChId.sector();
455 
456  string superLayerName =
457  "W" + wheel.str()
458  + "_St" + station.str()
459  + "_Sec" + sector.str()
460  + "_SL" + superLayer.str();
461 
462  return superLayerName;
463 }
DTChamberId chamberId() const
Return the corresponding ChamberId.
int superlayer() const
Return the superlayer number (deprecated method name)
int sector() const
Definition: DTChamberId.h:61
int station() const
Return the station number.
Definition: DTChamberId.h:51
int wheel() const
Return the wheel number.
Definition: DTChamberId.h:45

Member Data Documentation

std::map<DTChamberId, TH1F*> DTNoiseCalibration::chamberOccupancyVsLumiMap_
private

Definition at line 89 of file DTNoiseCalibration.h.

std::map<DTChamberId, TH1F*> DTNoiseCalibration::chamberOccupancyVsTimeMap_
private

Definition at line 91 of file DTNoiseCalibration.h.

std::string DTNoiseCalibration::dbLabel_
private

Definition at line 66 of file DTNoiseCalibration.h.

int DTNoiseCalibration::defaultTtrig_
private

Definition at line 65 of file DTNoiseCalibration.h.

Referenced by DTNoiseCalibration().

edm::InputTag DTNoiseCalibration::digiLabel_
private

Definition at line 53 of file DTNoiseCalibration.h.

edm::ESHandle<DTGeometry> DTNoiseCalibration::dtGeom_
private

Definition at line 77 of file DTNoiseCalibration.h.

TH1F* DTNoiseCalibration::hTDCTriggerWidth_
private

Definition at line 83 of file DTNoiseCalibration.h.

unsigned int DTNoiseCalibration::lumiMax_
private

Definition at line 69 of file DTNoiseCalibration.h.

double DTNoiseCalibration::maximumNoiseRate_
private

Definition at line 57 of file DTNoiseCalibration.h.

int DTNoiseCalibration::nevents_
private

Definition at line 71 of file DTNoiseCalibration.h.

bool DTNoiseCalibration::readDB_
private

Definition at line 64 of file DTNoiseCalibration.h.

Referenced by DTNoiseCalibration().

TFile* DTNoiseCalibration::rootFile_
private

Definition at line 81 of file DTNoiseCalibration.h.

Referenced by DTNoiseCalibration().

time_t DTNoiseCalibration::runBeginTime_
private

Definition at line 73 of file DTNoiseCalibration.h.

time_t DTNoiseCalibration::runEndTime_
private

Definition at line 74 of file DTNoiseCalibration.h.

std::map<DTLayerId, TH1F*> DTNoiseCalibration::theHistoOccupancyMap_
private

Definition at line 85 of file DTNoiseCalibration.h.

std::map<DTWireId, TH1F*> DTNoiseCalibration::theHistoOccupancyVsLumiMap_
private

Definition at line 87 of file DTNoiseCalibration.h.

int DTNoiseCalibration::timeWindowOffset_
private

Definition at line 56 of file DTNoiseCalibration.h.

double DTNoiseCalibration::triggerWidth_
private

Definition at line 55 of file DTNoiseCalibration.h.

edm::ESHandle<DTTtrig> DTNoiseCalibration::tTrigMap_
private

Definition at line 79 of file DTNoiseCalibration.h.

bool DTNoiseCalibration::useAbsoluteRate_
private

Definition at line 58 of file DTNoiseCalibration.h.

bool DTNoiseCalibration::useTimeWindow_
private

Definition at line 54 of file DTNoiseCalibration.h.

std::vector<DTWireId> DTNoiseCalibration::wireIdWithHisto_
private

Definition at line 68 of file DTNoiseCalibration.h.

Referenced by DTNoiseCalibration().