CMS 3D CMS Logo

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

#include <EcalCleaningAlgo.h>

Public Member Functions

EcalRecHit::Flags checkTopology (const DetId &id, const EcalRecHitCollection &rhs)
 
 EcalCleaningAlgo (const edm::ParameterSet &p)
 
void setFlags (EcalRecHitCollection &rhs)
 

Private Member Functions

float e4e1 (const DetId &id, const EcalRecHitCollection &rhs)
 yet another function to calculate swiss cross More...
 
float e6e2 (const DetId &id, const EcalRecHitCollection &rhs)
 
bool isNearCrack (const DetId &detid)
 in EB, check if we are near a crack More...
 
const std::vector< DetIdneighbours (const DetId &id)
 return the id of the 4 neighbours in the swiss cross More...
 
float recHitE (const DetId id, const EcalRecHitCollection &recHits, bool useTimingInfo)
 

Private Attributes

float cThreshold_barrel_
 
float cThreshold_double_
 
float cThreshold_endcap_
 
float e4e1_a_barrel_
 
float e4e1_a_endcap_
 
float e4e1_b_barrel_
 
float e4e1_b_endcap_
 
float e4e1Treshold_barrel_
 
float e4e1Treshold_endcap_
 
float e6e2thresh_
 
float ignoreOutOfTimeThresh_
 ignore kOutOfTime above threshold when calculating e4e1 More...
 
float tightenCrack_e1_double_
 
float tightenCrack_e1_single_
 
float tightenCrack_e4e1_single_
 
float tightenCrack_e6e2_double_
 

Detailed Description

Definition at line 22 of file EcalCleaningAlgo.h.

Constructor & Destructor Documentation

EcalCleaningAlgo::EcalCleaningAlgo ( const edm::ParameterSet p)

Definition at line 15 of file EcalCleaningAlgo.cc.

References cThreshold_barrel_, cThreshold_double_, cThreshold_endcap_, e4e1_a_barrel_, e4e1_a_endcap_, e4e1_b_barrel_, e4e1_b_endcap_, e4e1Treshold_barrel_, e4e1Treshold_endcap_, e6e2thresh_, edm::ParameterSet::getParameter(), ignoreOutOfTimeThresh_, tightenCrack_e1_double_, tightenCrack_e1_single_, tightenCrack_e4e1_single_, and tightenCrack_e6e2_double_.

15  {
16 
17  cThreshold_barrel_ = p.getParameter<double>("cThreshold_barrel");;
18  cThreshold_endcap_ = p.getParameter<double>("cThreshold_endcap");;
19  e4e1_a_barrel_ = p.getParameter<double>("e4e1_a_barrel");
20  e4e1_b_barrel_ = p.getParameter<double>("e4e1_b_barrel");
21  e4e1_a_endcap_ = p.getParameter<double>("e4e1_a_endcap");
22  e4e1_b_endcap_ = p.getParameter<double>("e4e1_b_endcap");
23  e4e1Treshold_barrel_ = p.getParameter<double>("e4e1Threshold_barrel");
24  e4e1Treshold_endcap_ = p.getParameter<double>("e4e1Threshold_endcap");
25 
26  cThreshold_double_ = p.getParameter<double>("cThreshold_double");
27 
28  ignoreOutOfTimeThresh_ =p.getParameter<double>("ignoreOutOfTimeThresh");
29  tightenCrack_e1_single_ =p.getParameter<double>("tightenCrack_e1_single");
30  tightenCrack_e4e1_single_=p.getParameter<double>("tightenCrack_e4e1_single");
31  tightenCrack_e1_double_ =p.getParameter<double>("tightenCrack_e1_double");
32  tightenCrack_e6e2_double_=p.getParameter<double>("tightenCrack_e6e2_double");
33  e6e2thresh_= p.getParameter<double>("e6e2thresh");
34 
35 
36 
37 }
T getParameter(std::string const &) const
float tightenCrack_e4e1_single_
float ignoreOutOfTimeThresh_
ignore kOutOfTime above threshold when calculating e4e1
float tightenCrack_e6e2_double_

Member Function Documentation

EcalRecHit::Flags EcalCleaningAlgo::checkTopology ( const DetId id,
const EcalRecHitCollection rhs 
)

check topology, return : kGood : not anomalous kWeird : spike kDiWeird : dispike

Flag spikey channels

Mark single spikes. Spike definition:

Barrel: e> cThreshold_barrel_ && e4e1 > e4e1_a_barrel_ * log10(e) + e4e1_b_barrel_

Near cracks: energy threshold is multiplied by tightenCrack_e1_single e4e1 threshold is divided by tightenCrack_e4e1_single

Endcap : e> cThreshold_endcap_ && e4e1> e4e1_a_endcap_ * log10(e) + e4e1_b_endcap_

Mark double spikes (barrel only) e> cThreshold_double_ && e6e2 > e6e2thresh_;

Near cracks: energy threshold multiplied by tightenCrack_e1_double e6e2 threshold divided by tightenCrack_e6e2_double

Out of time hits above e4e1_IgnoreOutOfTimeThresh_ are ignored in topological quantities

Definition at line 70 of file EcalCleaningAlgo.cc.

References a, b, cThreshold_barrel_, cThreshold_double_, cThreshold_endcap_, e4e1(), e4e1_a_barrel_, e4e1_a_endcap_, e4e1_b_barrel_, e4e1_b_endcap_, e6e2(), e6e2thresh_, EcalBarrel, EcalEndcap, relval_parameters_module::energy, isNearCrack(), EcalRecHit::kDiWeird, EcalRecHit::kGood, EcalRecHit::kWeird, recHitE(), tightenCrack_e1_double_, tightenCrack_e1_single_, tightenCrack_e4e1_single_, and tightenCrack_e6e2_double_.

Referenced by EcalRecHitProducer::produce(), and setFlags().

71  {
72 
73 
74  float a=0,b=0,e4e1thresh=0,ethresh=0;
75 
76 
77  if( id.subdetId() == EcalBarrel) {
78  a= e4e1_a_barrel_;
79  b= e4e1_b_barrel_;
80  ethresh=cThreshold_barrel_;
81 
82  }
83  else if( id.subdetId() == EcalEndcap){
84  a= e4e1_a_endcap_;
86  ethresh=cThreshold_endcap_;
87  }
88 
89 
90 
91  // for energies below threshold, we don't apply e4e1 cut
92  float energy = recHitE(id,rhs,false);
93 
94  if (energy< ethresh) return EcalRecHit::kGood;
95  if (isNearCrack(id) && energy < ethresh*tightenCrack_e1_single_)
96  return EcalRecHit::kGood;
97 
98 
99  float e4e1value = e4e1(id,rhs);
100  e4e1thresh = a* log10(energy) + b;
101 
102  // near cracks the cut is tighter by a factor
103  if (isNearCrack(id)) {
104  e4e1thresh/=tightenCrack_e4e1_single_;
105  }
106 
107  // identify spike
108  if (e4e1value < e4e1thresh) return EcalRecHit::kWeird;
109 
110 
111 
112  // now for double spikes
113 
114  // no checking for double spikes in EE
115  if( id.subdetId() == EcalEndcap) return EcalRecHit::kGood;
116 
117  float e6e2value = e6e2(id,rhs);
118  float e6e2thresh = e6e2thresh_ ;
120  return EcalRecHit::kGood;
121 
122  if (energy < cThreshold_double_) return EcalRecHit::kGood;
123 
124  // near cracks the cut is tighter by a factor
125  if (id.subdetId() == EcalBarrel && isNearCrack(id))
126  e6e2thresh/=tightenCrack_e6e2_double_;
127 
128  // identify double spike
129  if (e6e2value < e6e2thresh) return EcalRecHit::kDiWeird;
130 
131  return EcalRecHit::kGood;
132 
133 }
float tightenCrack_e4e1_single_
float recHitE(const DetId id, const EcalRecHitCollection &recHits, bool useTimingInfo)
float e4e1(const DetId &id, const EcalRecHitCollection &rhs)
yet another function to calculate swiss cross
bool isNearCrack(const DetId &detid)
in EB, check if we are near a crack
float tightenCrack_e6e2_double_
double b
Definition: hdecay.h:120
double a
Definition: hdecay.h:121
float e6e2(const DetId &id, const EcalRecHitCollection &rhs)
float EcalCleaningAlgo::e4e1 ( const DetId id,
const EcalRecHitCollection rhs 
)
private

yet another function to calculate swiss cross

Definition at line 140 of file EcalCleaningAlgo.cc.

References i, neighbours(), and recHitE().

Referenced by checkTopology(), and e6e2().

141  {
142 
143 
144  float s4 = 0;
145  float e1 = recHitE( id, rhs, false );
146 
147 
148  if ( e1 == 0 ) return 0;
149  const std::vector<DetId>& neighs = neighbours(id);
150  for (size_t i=0; i<neighs.size(); ++i)
151  // avoid hits out of time when making s4
152  s4+=recHitE(neighs[i],rhs, true);
153 
154  return s4 / e1;
155 
156 
157 }
int i
Definition: DBlmapReader.cc:9
const std::vector< DetId > neighbours(const DetId &id)
return the id of the 4 neighbours in the swiss cross
float recHitE(const DetId id, const EcalRecHitCollection &recHits, bool useTimingInfo)
float EcalCleaningAlgo::e6e2 ( const DetId id,
const EcalRecHitCollection rhs 
)
private

Compute e6 over e2 around xtal 1, where 2 is the most energetic in the swiss cross around 1

  | | |   
+-+-+-+-+
| |1|2| |
+-+-+-+-+
  | | |                

Definition at line 162 of file EcalCleaningAlgo.cc.

References e4e1(), i, neighbours(), and recHitE().

Referenced by checkTopology().

163  {
164 
165  float s4_1 = 0;
166  float s4_2 = 0;
167  float e1 = recHitE( id, rhs , false );
168 
169 
170  float maxene=0;
171  DetId maxid;
172 
173  if ( e1 == 0 ) return 0;
174 
175  const std::vector<DetId>& neighs = neighbours(id);
176 
177  // find the most energetic neighbour ignoring time info
178  for (size_t i=0; i<neighs.size(); ++i){
179  float ene = recHitE(neighs[i],rhs,false);
180  if (ene>maxene) {
181  maxene=ene;
182  maxid = neighs[i];
183  }
184  }
185 
186  float e2=maxene;
187 
188  s4_1 = e4e1(id,rhs)* e1;
189  s4_2 = e4e1(maxid,rhs)* e2;
190 
191  return (s4_1 + s4_2) / (e1+e2) -1. ;
192 
193 }
int i
Definition: DBlmapReader.cc:9
const std::vector< DetId > neighbours(const DetId &id)
return the id of the 4 neighbours in the swiss cross
float recHitE(const DetId id, const EcalRecHitCollection &recHits, bool useTimingInfo)
float e4e1(const DetId &id, const EcalRecHitCollection &rhs)
yet another function to calculate swiss cross
Definition: DetId.h:20
bool EcalCleaningAlgo::isNearCrack ( const DetId detid)
private

in EB, check if we are near a crack

Definition at line 256 of file EcalCleaningAlgo.cc.

References EcalEndcap, EBDetId::isNextToBoundary(), and EEDetId::isNextToRingBoundary().

Referenced by checkTopology().

256  {
257 
258  if (id.subdetId() == EcalEndcap) {
260  } else {
261  return EBDetId::isNextToBoundary(id);
262  }
263 }
static bool isNextToBoundary(EBDetId id)
Definition: EBDetId.cc:171
static bool isNextToRingBoundary(EEDetId id)
Definition: EEDetId.cc:391
const std::vector< DetId > EcalCleaningAlgo::neighbours ( const DetId id)
private

return the id of the 4 neighbours in the swiss cross

four neighbours in the swiss cross around id

Definition at line 230 of file EcalCleaningAlgo.cc.

References EcalBarrel, EcalEndcap, EBDetId::offsetBy(), EEDetId::offsetBy(), and runTheMatrix::ret.

Referenced by e4e1(), and e6e2().

230  {
231 
232  std::vector<DetId> ret;
233 
234  if ( id.subdetId() == EcalBarrel) {
235 
236  ret.push_back( EBDetId::offsetBy( id, 1, 0 ));
237  ret.push_back( EBDetId::offsetBy( id, -1, 0 ));
238  ret.push_back( EBDetId::offsetBy( id, 0, 1 ));
239  ret.push_back( EBDetId::offsetBy( id, 0,-1 ));
240  }
241  // nobody understands what polymorphism is for, sgrunt !
242  else if (id.subdetId() == EcalEndcap) {
243  ret.push_back( EEDetId::offsetBy( id, 1, 0 ));
244  ret.push_back( EEDetId::offsetBy( id, -1, 0 ));
245  ret.push_back( EEDetId::offsetBy( id, 0, 1 ));
246  ret.push_back( EEDetId::offsetBy( id, 0,-1 ));
247 
248  }
249 
250 
251  return ret;
252 
253 }
EEDetId offsetBy(int nrStepsX, int nrStepsY) const
Definition: EEDetId.cc:490
EBDetId offsetBy(int nrStepsEta, int nrStepsPhi) const
Definition: EBDetId.cc:111
float EcalCleaningAlgo::recHitE ( const DetId  id,
const EcalRecHitCollection recHits,
bool  useTimingInfo 
)
private

Definition at line 198 of file EcalCleaningAlgo.cc.

References e4e1Treshold_barrel_, e4e1Treshold_endcap_, EcalBarrel, EcalEndcap, edm::SortedCollection< T, SORT >::end(), edm::SortedCollection< T, SORT >::find(), ignoreOutOfTimeThresh_, EcalRecHit::kOutOfTime, and dtT0WireCalibration_cfg::threshold.

Referenced by checkTopology(), e4e1(), and e6e2().

201 {
202  if ( id.rawId() == 0 ) return 0;
203 
204 
206  if ( id.subdetId() == EcalEndcap) threshold = e4e1Treshold_endcap_;
207 
208  EcalRecHitCollection::const_iterator it = recHits.find( id );
209  if ( it != recHits.end() ){
210  float ene= (*it).energy();
211 
212  // ignore out of time in EB when making e4e1 if so configured
213  if (useTimingInfo){
214 
215  if (id.subdetId()==EcalBarrel &&
216  it->checkFlag(EcalRecHit::kOutOfTime)
217  && ene>ignoreOutOfTimeThresh_) return 0;
218  }
219 
220  // ignore hits below threshold
221  if (ene < threshold) return 0;
222 
223  // else return the energy of this hit
224  return ene;
225  }
226  return 0;
227 }
float ignoreOutOfTimeThresh_
ignore kOutOfTime above threshold when calculating e4e1
std::vector< T >::const_iterator const_iterator
const_iterator end() const
iterator find(key_type k)
void EcalCleaningAlgo::setFlags ( EcalRecHitCollection rhs)

Definition at line 267 of file EcalCleaningAlgo.cc.

References edm::SortedCollection< T, SORT >::begin(), checkTopology(), edm::SortedCollection< T, SORT >::end(), EcalRecHit::kGood, and evf::utils::state.

Referenced by python.Vispa.Plugins.EdmBrowser.EventContentView.LabelItem::__init__(), and EcalRawToRecHitProducer::produce().

267  {
269  //changing the collection on place
270  for (rh=rhs.begin(); rh!=rhs.end(); ++rh){
271  EcalRecHit::Flags state=checkTopology(rh->id(),rhs);
272  if (state!=EcalRecHit::kGood) {
273  rh->unsetFlag(EcalRecHit::kGood);
274  rh->setFlag(state);
275  }
276  }
277 }
EcalRecHit::Flags checkTopology(const DetId &id, const EcalRecHitCollection &rhs)
std::vector< T >::iterator iterator
const_iterator end() const
char state
Definition: procUtils.cc:75
const_iterator begin() const

Member Data Documentation

float EcalCleaningAlgo::cThreshold_barrel_
private

Definition at line 68 of file EcalCleaningAlgo.h.

Referenced by checkTopology(), and EcalCleaningAlgo().

float EcalCleaningAlgo::cThreshold_double_
private

Definition at line 79 of file EcalCleaningAlgo.h.

Referenced by checkTopology(), and EcalCleaningAlgo().

float EcalCleaningAlgo::cThreshold_endcap_
private

Definition at line 69 of file EcalCleaningAlgo.h.

Referenced by checkTopology(), and EcalCleaningAlgo().

float EcalCleaningAlgo::e4e1_a_barrel_
private

Definition at line 70 of file EcalCleaningAlgo.h.

Referenced by checkTopology(), and EcalCleaningAlgo().

float EcalCleaningAlgo::e4e1_a_endcap_
private

Definition at line 72 of file EcalCleaningAlgo.h.

Referenced by checkTopology(), and EcalCleaningAlgo().

float EcalCleaningAlgo::e4e1_b_barrel_
private

Definition at line 71 of file EcalCleaningAlgo.h.

Referenced by checkTopology(), and EcalCleaningAlgo().

float EcalCleaningAlgo::e4e1_b_endcap_
private

Definition at line 73 of file EcalCleaningAlgo.h.

Referenced by checkTopology(), and EcalCleaningAlgo().

float EcalCleaningAlgo::e4e1Treshold_barrel_
private

Definition at line 75 of file EcalCleaningAlgo.h.

Referenced by EcalCleaningAlgo(), and recHitE().

float EcalCleaningAlgo::e4e1Treshold_endcap_
private

Definition at line 76 of file EcalCleaningAlgo.h.

Referenced by EcalCleaningAlgo(), and recHitE().

float EcalCleaningAlgo::e6e2thresh_
private

Definition at line 82 of file EcalCleaningAlgo.h.

Referenced by checkTopology(), and EcalCleaningAlgo().

float EcalCleaningAlgo::ignoreOutOfTimeThresh_
private

ignore kOutOfTime above threshold when calculating e4e1

Definition at line 64 of file EcalCleaningAlgo.h.

Referenced by EcalCleaningAlgo(), and recHitE().

float EcalCleaningAlgo::tightenCrack_e1_double_
private

Definition at line 80 of file EcalCleaningAlgo.h.

Referenced by checkTopology(), and EcalCleaningAlgo().

float EcalCleaningAlgo::tightenCrack_e1_single_
private

Definition at line 77 of file EcalCleaningAlgo.h.

Referenced by checkTopology(), and EcalCleaningAlgo().

float EcalCleaningAlgo::tightenCrack_e4e1_single_
private

Definition at line 78 of file EcalCleaningAlgo.h.

Referenced by checkTopology(), and EcalCleaningAlgo().

float EcalCleaningAlgo::tightenCrack_e6e2_double_
private

Definition at line 81 of file EcalCleaningAlgo.h.

Referenced by checkTopology(), and EcalCleaningAlgo().