CMS 3D CMS Logo

TimingTask.cc
Go to the documentation of this file.
1 #include "../interface/TimingTask.h"
2 
5 
7 
9 
11 
12 namespace ecaldqm
13 {
15  DQWorkerTask(),
16  bxBinEdges_(),
17  bxBin_(0.),
18  chi2ThresholdEB_(0.),
19  chi2ThresholdEE_(0.),
20  energyThresholdEB_(0.),
21  energyThresholdEE_(0.),
22  timingVsBXThreshold_(0.),
23  meTimeMapByLS(nullptr)
24  {
25  }
26 
27  void
29  {
30  bxBinEdges_ = onlineMode_? _params.getUntrackedParameter<std::vector<int> >("bxBins"): _params.getUntrackedParameter<std::vector<int> >("bxBinsFine");
31  chi2ThresholdEB_ = _params.getUntrackedParameter<double>("chi2ThresholdEB");
32  chi2ThresholdEE_ = _params.getUntrackedParameter<double>("chi2ThresholdEE");
33  energyThresholdEB_ = _params.getUntrackedParameter<double>("energyThresholdEB");
34  energyThresholdEE_ = _params.getUntrackedParameter<double>("energyThresholdEE");
35  timingVsBXThreshold_ = _params.getUntrackedParameter<double>("timingVsBXThreshold");
36  }
37 
38  bool
39  TimingTask::filterRunType(short const* _runType)
40  {
41  for(int iFED(0); iFED < nDCC; iFED++){
42  if(_runType[iFED] == EcalDCCHeaderBlock::COSMIC ||
43  _runType[iFED] == EcalDCCHeaderBlock::MTCC ||
44  _runType[iFED] == EcalDCCHeaderBlock::COSMICS_GLOBAL ||
45  _runType[iFED] == EcalDCCHeaderBlock::PHYSICS_GLOBAL ||
46  _runType[iFED] == EcalDCCHeaderBlock::COSMICS_LOCAL ||
47  _runType[iFED] == EcalDCCHeaderBlock::PHYSICS_LOCAL) return true;
48  }
49 
50  return false;
51  }
52 
53  void
55  {
56  // Fill separate MEs with only 10 LSs worth of stats
57  // Used to correctly fill Presample Trend plots:
58  // 1 pt:10 LS in Trend plots
59  meTimeMapByLS = &MEs_.at("TimeMapByLS");
60  if ( timestamp_.iLumi % 10 == 0 )
62  }
63 
64  void
66  {
67  using namespace std;
68  std::vector<int>::iterator pBin = std::upper_bound(bxBinEdges_.begin(), bxBinEdges_.end(), _evt.bunchCrossing());
69  bxBin_ = static_cast<int>(pBin - bxBinEdges_.begin()) - 0.5;
70  }
71 
72  void
74  {
75  MESet& meTimeAmp(MEs_.at("TimeAmp"));
76  MESet& meTimeAmpAll(MEs_.at("TimeAmpAll"));
77  MESet& meTimingVsBX(onlineMode_? MEs_.at("BarrelTimingVsBX"): MEs_.at("BarrelTimingVsBXFineBinned"));
78  MESet& meTimeAll(MEs_.at("TimeAll"));
79  MESet& meTimeAllMap(MEs_.at("TimeAllMap"));
80  MESet& meTimeMap(MEs_.at("TimeMap")); // contains cumulative run stats => not suitable for Trend plots
81  MESet& meTime1D(MEs_.at("Time1D"));
82  MESet& meChi2(MEs_.at("Chi2"));
83 
84  uint32_t mask(~((0x1 << EcalRecHit::kGood) | (0x1 << EcalRecHit::kOutOfTime)));
85  float threshold(_collection == kEBRecHit ? energyThresholdEB_ : energyThresholdEE_);
86  int signedSubdet;
87 
88  std::for_each(_hits.begin(), _hits.end(), [&](EcalRecHitCollection::value_type const& hit){
89  if(hit.checkFlagMask(mask)) return;
90 
91  DetId id(hit.id());
92 
93  float time(hit.time());
94  float energy(hit.energy());
95 
96  // Apply cut on chi2 of pulse shape fit
97  float chi2Threshold = ( id.subdetId() == EcalBarrel ) ? chi2ThresholdEB_ : chi2ThresholdEE_;
98  if ( id.subdetId() == EcalBarrel )
99  signedSubdet = EcalBarrel;
100  else {
101  EEDetId eeId( hit.id() );
102  if ( eeId.zside() < 0 )
103  signedSubdet = -EcalEndcap;
104  else
105  signedSubdet = EcalEndcap;
106  }
107  if ( energy > threshold )
108  meChi2.fill(signedSubdet, hit.chi2());
109  if ( hit.chi2() > chi2Threshold ) return;
110 
111  meTimeAmp.fill(id, energy, time);
112  meTimeAmpAll.fill(id, energy, time);
113 
114  if (energy > timingVsBXThreshold_ && signedSubdet == EcalBarrel) meTimingVsBX.fill(bxBin_, time);
115 
116  if(energy > threshold){
117  meTimeAll.fill(id, time);
118  meTimeMap.fill(id, time);
119  meTimeMapByLS->fill(id, time);
120  meTime1D.fill(id, time);
121  meTimeAllMap.fill(id, time);
122  }
123  });
124  }
125 
126  // For In-time vs Out-of-Time amplitude correlation MEs:
127  // Only UncalibRecHits carry information about OOT amplitude
128  // But still need to make sure we apply similar cuts as on RecHits
130  {
131  MESet& meTimeAmpBXm( MEs_.at("TimeAmpBXm") );
132  MESet& meTimeAmpBXp( MEs_.at("TimeAmpBXp") );
133 
134  for( EcalUncalibratedRecHitCollection::const_iterator uhitItr(_uhits.begin()); uhitItr != _uhits.end(); ++uhitItr ) {
135 
136  // Apply reconstruction quality cuts
137  if( !uhitItr->checkFlag(EcalUncalibratedRecHit::kGood) ) continue;
138  DetId id( uhitItr->id() );
139  float chi2Threshold = ( id.subdetId() == EcalBarrel ) ? chi2ThresholdEB_ : chi2ThresholdEE_;
140  if( uhitItr->chi2() > chi2Threshold ) continue;
141 
142  // Apply amplitude cut based on approx rechit energy
143  float amp( uhitItr->amplitude() );
144  float ampThreshold( id.subdetId() == EcalBarrel ? energyThresholdEB_*20. : energyThresholdEE_*5. ); // 1 GeV ~ ( EB:20, EE:5 ) ADC
145  if( amp < ampThreshold ) continue;
146 
147  // Apply jitter timing cut based on approx rechit timing
148  float timeOff( id.subdetId() == EcalBarrel ? 0.4 : 1.8 );
149  float hitTime( uhitItr->jitter()*25. + timeOff ); // 1 jitter ~ 25 ns
150  if( std::abs(hitTime) >= 5. ) continue;
151 
152  // Fill MEs
153  meTimeAmpBXm.fill( id,amp,uhitItr->outOfTimeAmplitude(4) ); // BX-1
154  meTimeAmpBXp.fill( id,amp,uhitItr->outOfTimeAmplitude(6) ); // BX+1
155 
156  }
157  }
158 
160 }
T getUntrackedParameter(std::string const &, T const &) const
#define DEFINE_ECALDQM_WORKER(TYPE)
Definition: DQWorker.h:108
edm::LuminosityBlockNumber_t iLumi
Definition: DQWorker.h:35
std::vector< EcalUncalibratedRecHit >::const_iterator const_iterator
int bunchCrossing() const
Definition: EventBase.h:66
void beginEvent(edm::Event const &, edm::EventSetup const &) override
Definition: TimingTask.cc:65
#define nullptr
void beginLuminosityBlock(edm::LuminosityBlock const &, edm::EventSetup const &) override
Definition: TimingTask.cc:54
void setParams(edm::ParameterSet const &) override
Definition: TimingTask.cc:28
float timingVsBXThreshold_
Definition: TimingTask.h:34
void runOnRecHits(EcalRecHitCollection const &, Collections)
Definition: TimingTask.cc:73
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
virtual void reset(double=0., double=0., double=0.)
Definition: MESet.cc:110
void runOnUncalibRecHits(EcalUncalibratedRecHitCollection const &)
Definition: TimingTask.cc:129
float energyThresholdEE_
Definition: TimingTask.h:33
unsigned int id
const_iterator end() const
Definition: DetId.h:18
Timestamp timestamp_
Definition: DQWorker.h:78
virtual void fill(DetId const &, double=1., double=1., double=1.)
Definition: MESet.h:46
MESetCollection MEs_
Definition: DQWorker.h:75
MESet * meTimeMapByLS
Definition: TimingTask.h:36
float energyThresholdEB_
Definition: TimingTask.h:32
std::vector< int > bxBinEdges_
Definition: TimingTask.h:27
bool filterRunType(short const *) override
Definition: TimingTask.cc:39
const_iterator begin() const