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 Attributes
HcalSimpleRecAlgo Class Reference

#include <HcalSimpleRecAlgo.h>

Public Member Functions

 HcalSimpleRecAlgo (int firstSample, int samplesToAdd, bool correctForTimeslew, bool correctForContainment, float fixedPhaseNs)
 
 HcalSimpleRecAlgo (int firstSample, int samplesToAdd)
 
HBHERecHit reconstruct (const HBHEDataFrame &digi, const HcalCoder &coder, const HcalCalibrations &calibs) const
 
HFRecHit reconstruct (const HFDataFrame &digi, const HcalCoder &coder, const HcalCalibrations &calibs) const
 
HORecHit reconstruct (const HODataFrame &digi, const HcalCoder &coder, const HcalCalibrations &calibs) const
 
HcalCalibRecHit reconstruct (const HcalCalibDataFrame &digi, const HcalCoder &coder, const HcalCalibrations &calibs) const
 
void resetTimeSamples (int firstSample, int samplesToAdd)
 

Private Attributes

bool correctForTimeslew_
 
int firstSample_
 
std::auto_ptr
< HcalPulseContainmentCorrection
pulseCorr_
 
int samplesToAdd_
 

Detailed Description

This class reconstructs RecHits from Digis for HBHE, HF, and HO by addition of selected time samples, pedestal subtraction, and gain application. The time of the hit is reconstructed using a weighted peak bin calculation supplemented by precise time lookup table. A consumer of this class also has the option of correcting the reconstructed time for energy-dependent time slew associated with the QIE.

Date:
2010/01/21 14:27:43
Revision:
1.9
Author
J. Mans - Minnesota

Definition at line 32 of file HcalSimpleRecAlgo.h.

Constructor & Destructor Documentation

HcalSimpleRecAlgo::HcalSimpleRecAlgo ( int  firstSample,
int  samplesToAdd,
bool  correctForTimeslew,
bool  correctForContainment,
float  fixedPhaseNs 
)

Full featured constructor for HB/HE and HO (HPD-based detectors)

Definition at line 9 of file HcalSimpleRecAlgo.cc.

References MaximumFractionalError, pulseCorr_, and samplesToAdd_.

HcalSimpleRecAlgo::HcalSimpleRecAlgo ( int  firstSample,
int  samplesToAdd 
)

Member Function Documentation

HBHERecHit HcalSimpleRecAlgo::reconstruct ( const HBHEDataFrame digi,
const HcalCoder coder,
const HcalCalibrations calibs 
) const

Definition at line 102 of file HcalSimpleRecAlgo.cc.

References correctForTimeslew_, firstSample_, HcalTimeSlew::Medium, pulseCorr_, and samplesToAdd_.

Referenced by HcalSimpleReconstructor::produce(), and HcalHitReconstructor::produce().

102  {
103  return HcalSimpleRecAlgoImpl::reco<HBHEDataFrame,HBHERecHit>(digi,coder,calibs,
105  pulseCorr_.get(),
107 }
std::auto_ptr< HcalPulseContainmentCorrection > pulseCorr_
HFRecHit HcalSimpleRecAlgo::reconstruct ( const HFDataFrame digi,
const HcalCoder coder,
const HcalCalibrations calibs 
) const

Definition at line 123 of file HcalSimpleRecAlgo.cc.

References HcalCoder::adc2fC(), correctForTimeslew_, ExpressReco_HICollisions_FallBack::e, funct::exp(), f, firstSample_, i, HFDataFrame::id(), LogDebug, findQualityFiles::maxI, min, HcalCalibrations::pedestal(), HFDataFrame::presamples(), HcalCalibrations::respcorrgain(), samplesToAdd_, CaloSamples::size(), cond::rpcobgas::time, HcalCalibrations::timecorr(), and timeshift_ns_hf().

123  {
124  CaloSamples tool;
125  coder.adc2fC(digi,tool);
126 
127  double ampl=0; int maxI = -1; double maxA = -1e10; float ta=0; float amp_fC=0;
128  for (int i=firstSample_; i<tool.size() && i<samplesToAdd_+firstSample_; i++) {
129  int capid=digi[i].capid();
130  ta = (tool[i]-calibs.pedestal(capid))*calibs.respcorrgain(capid);
131  ampl+=ta;
132  amp_fC += tool[i]-calibs.pedestal(capid);
133  if(ta>maxA){
134  maxA=ta;
135  maxI=i;
136  }
137  }
138 
139  float time=-9999.0;
141  if(maxI==0 || maxI==(tool.size()-1)) {
142  LogDebug("HCAL Pulse") << "HcalSimpleRecAlgo::reconstruct :"
143  << " Invalid max amplitude position, "
144  << " max Amplitude: "<< maxI
145  << " first: "<<firstSample_
146  << " last: "<<(tool.size()-1)
147  << std::endl;
148  } else {
149  int capid=digi[maxI-1].capid();
150  float t0 = (tool[maxI-1]-calibs.pedestal(capid))*calibs.respcorrgain(capid);
151  capid=digi[maxI+1].capid();
152  float t2 = (tool[maxI+1]-calibs.pedestal(capid))*calibs.respcorrgain(capid);
153 
154  // Handle negative excursions by moving "zero":
155  float zerocorr=std::min(t0,t2);
156  if (zerocorr<0.f) {
157  t0 -= zerocorr;
158  t2 -= zerocorr;
159  maxA -= zerocorr;
160  }
161 
162  // pair the peak with the larger of the two neighboring time samples
163  float wpksamp=0.f;
164  if (t0>t2) {
165  wpksamp = t0+maxA;
166  if (wpksamp != 0.f) wpksamp = maxA/wpksamp;
167  } else {
168  wpksamp = maxA+t2;
169  if (wpksamp != 0.f) wpksamp = 1.+(t2/wpksamp);
170  }
171 
172  time = (maxI - digi.presamples())*25.0 + timeshift_ns_hf(wpksamp);
173 
174  if (correctForTimeslew_ && (amp_fC>0)) {
175  // -5.12327 - put in calibs.timecorr()
176  double tslew=exp(0.337681-5.94689e-4*amp_fC)+exp(2.44628-1.34888e-2*amp_fC);
177  time -= (float)tslew;
178  }
179 
180  time=time-calibs.timecorr();
181  }
182 
183  return HFRecHit(digi.id(),ampl,time);
184 }
#define LogDebug(id)
int i
Definition: DBlmapReader.cc:9
double respcorrgain(int fCapId) const
get response corrected gain for capid=0..3
static float timeshift_ns_hf(float wpksamp)
Same as above, but for the HF PMTs.
#define min(a, b)
Definition: mlp_lapack.h:161
double pedestal(int fCapId) const
get pedestal for capid=0..3
Exp< T >::type exp(const T &t)
Definition: Exp.h:22
double f[11][100]
int size() const
get the size
Definition: CaloSamples.h:24
double timecorr() const
get time correction factor
virtual void adc2fC(const HBHEDataFrame &df, CaloSamples &lf) const =0
int presamples() const
number of samples before the sample from the triggered beam crossing (according to the hardware) ...
Definition: HFDataFrame.h:28
const HcalDetId & id() const
Definition: HFDataFrame.h:22
HORecHit HcalSimpleRecAlgo::reconstruct ( const HODataFrame digi,
const HcalCoder coder,
const HcalCalibrations calibs 
) const

Definition at line 109 of file HcalSimpleRecAlgo.cc.

References correctForTimeslew_, firstSample_, pulseCorr_, samplesToAdd_, and HcalTimeSlew::Slow.

109  {
110  return HcalSimpleRecAlgoImpl::reco<HODataFrame,HORecHit>(digi,coder,calibs,
112  pulseCorr_.get(),
114 }
std::auto_ptr< HcalPulseContainmentCorrection > pulseCorr_
HcalCalibRecHit HcalSimpleRecAlgo::reconstruct ( const HcalCalibDataFrame digi,
const HcalCoder coder,
const HcalCalibrations calibs 
) const

Definition at line 116 of file HcalSimpleRecAlgo.cc.

References correctForTimeslew_, HcalTimeSlew::Fast, firstSample_, pulseCorr_, and samplesToAdd_.

116  {
117  return HcalSimpleRecAlgoImpl::reco<HcalCalibDataFrame,HcalCalibRecHit>(digi,coder,calibs,
119  pulseCorr_.get(),
121 }
std::auto_ptr< HcalPulseContainmentCorrection > pulseCorr_
void HcalSimpleRecAlgo::resetTimeSamples ( int  firstSample,
int  samplesToAdd 
)

Member Data Documentation

bool HcalSimpleRecAlgo::correctForTimeslew_
private

Definition at line 49 of file HcalSimpleRecAlgo.h.

Referenced by reconstruct().

int HcalSimpleRecAlgo::firstSample_
private

Definition at line 48 of file HcalSimpleRecAlgo.h.

Referenced by reconstruct(), and resetTimeSamples().

std::auto_ptr<HcalPulseContainmentCorrection> HcalSimpleRecAlgo::pulseCorr_
private

Definition at line 50 of file HcalSimpleRecAlgo.h.

Referenced by HcalSimpleRecAlgo(), and reconstruct().

int HcalSimpleRecAlgo::samplesToAdd_
private

Definition at line 48 of file HcalSimpleRecAlgo.h.

Referenced by HcalSimpleRecAlgo(), reconstruct(), and resetTimeSamples().