CMS 3D CMS Logo

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

#include <HcalDeterministicFit.h>

Public Types

enum  NegStrategy { DoNothing =0, MoveCharge =1, MoveTiming =2 }
 

Public Member Functions

template<class Digi >
void apply (const CaloSamples &cs, const std::vector< int > &capidvec, const HcalCalibrations &calibs, const Digi &digi, std::vector< double > &Output) const
 
void getLandauFrac (float tStart, float tEnd, float &sum) const
 
 HcalDeterministicFit ()
 
void init (HcalTimeSlew::ParaSource tsParam, HcalTimeSlew::BiasSetting bias, NegStrategy nStrat, PedestalSub pedSubFxn_, std::vector< double > pars, double respCorr)
 
 ~HcalDeterministicFit ()
 

Private Attributes

NegStrategy fNegStrat
 
double fpars [9]
 
PedestalSub fPedestalSubFxn_
 
double frespCorr
 
HcalTimeSlew::ParaSource fTimeSlew
 
HcalTimeSlew::BiasSetting fTimeSlewBias
 

Static Private Attributes

static int HcalRegion [2] = {16, 17}
 
static float invGpar [3] = {-13.11, 11.29, 5.133}
 
static float landauFrac []
 
static float negThresh [2] = {-3., 15.}
 
static float rCorr [2] = {0.95, 0.95}
 
static int tsWidth = 25
 

Detailed Description

Definition at line 15 of file HcalDeterministicFit.h.

Member Enumeration Documentation

Constructor & Destructor Documentation

HcalDeterministicFit::HcalDeterministicFit ( )

Definition at line 13 of file HcalDeterministicFit.cc.

13  {
14 }
HcalDeterministicFit::~HcalDeterministicFit ( )

Definition at line 16 of file HcalDeterministicFit.cc.

16  {
17 }

Member Function Documentation

template<class Digi >
void HcalDeterministicFit::apply ( const CaloSamples cs,
const std::vector< int > &  capidvec,
const HcalCalibrations calibs,
const Digi &  digi,
std::vector< double > &  Output 
) const

Definition at line 59 of file HcalDeterministicFit.h.

References funct::abs(), PedestalSub::calculate(), RecoTauCleanerPlugins::charge, HcalTimeSlew::delay(), fNegStrat, fpars, fPedestalSubFxn_, frespCorr, fTimeSlew, fTimeSlewBias, getLandauFrac(), HcalRegion, HcalDetId::ieta(), invGpar, dqm-mbProfile::log, MoveCharge, MoveTiming, negThresh, HcalCalibrations::pedestal(), rCorr, HcalCalibrations::respcorrgain(), CaloSamples::size(), mathSSE::sqrt(), and tsWidth.

Referenced by heavyIonTools.ConfigureHeavyIons::__call__(), editorTools.UserCodeTool::__call__(), HiCoreTools.RestrictInputToAOD::__call__(), coreTools.RunOnData::__call__(), trackTools.MakeAODTrackCandidates::__call__(), runJetUncertainties.RunJetUncertainties::__call__(), metTools.AddMETCollection::__call__(), heavyIonTools.ProductionDefaults::__call__(), editorTools.ChangeSource::__call__(), HiCoreTools.RemoveMCMatching::__call__(), coreTools.RemoveMCMatching::__call__(), trackTools.MakePATTrackCandidates::__call__(), trigTools.SwitchOnTrigger::__call__(), runMETCorrectionsAndUncertainties.RunMETCorrectionsAndUncertainties::__call__(), heavyIonTools.SelectionDefaults::__call__(), HiCoreTools.RemoveAllPATObjectsBut::__call__(), heavyIonTools.DisbaleMonteCarloDeps::__call__(), HiCoreTools.RemoveSpecificPATObjects::__call__(), trigTools.SwitchOnTriggerStandAlone::__call__(), trackTools.MakeTrackCandidates::__call__(), tauTools.AddTauCollection::__call__(), trigTools.SwitchOnTriggerMatching::__call__(), HiCoreTools.RemoveCleaning::__call__(), HiCoreTools.AddCleaning::__call__(), trigTools.SwitchOnTriggerMatchingStandAlone::__call__(), jetTools.AddJetCollection::__call__(), trigTools.SwitchOnTriggerMatchEmbedding::__call__(), jetTools.SwitchJetCollection::__call__(), jetTools.UpdateJetCollection::__call__(), jetTools.AddJetID::__call__(), jetTools.SetTagInfos::__call__(), HcalSimpleRecAlgoImpl::reco(), and HcalSimpleRecAlgoImpl::recoHBHE().

59  {
60  std::vector<double> corrCharge;
61  std::vector<double> inputCharge;
62  std::vector<double> inputPedestal;
63  double gainCorr = 0;
64  double respCorr = 0;
65 
66  for(int ip=0; ip<cs.size(); ip++){
67  const int capid = capidvec[ip];
68  double charge = cs[ip];
69  double ped = calibs.pedestal(capid);
70  double gain = calibs.respcorrgain(capid);
71  gainCorr = gain;
72  inputCharge.push_back(charge);
73  inputPedestal.push_back(ped);
74  }
75 
76  fPedestalSubFxn_.calculate(inputCharge, inputPedestal, corrCharge);
77 
78  const HcalDetId& cell = digi.id();
79  double fpar0, fpar1, fpar2;
80  if(std::abs(cell.ieta())<HcalRegion[0]){
81  fpar0 = fpars[0];
82  fpar1 = fpars[1];
83  fpar2 = fpars[2];
84  }else if(std::abs(cell.ieta())==HcalRegion[0]||std::abs(cell.ieta())==HcalRegion[1]){
85  fpar0 = fpars[3];
86  fpar1 = fpars[4];
87  fpar2 = fpars[5];
88  }else{
89  fpar0 = fpars[6];
90  fpar1 = fpars[7];
91  fpar2 = fpars[8];
92  }
93 
94  if (fTimeSlew==0)respCorr=1.0;
95  else if (fTimeSlew==1)respCorr=rCorr[0];
96  else if (fTimeSlew==2)respCorr=rCorr[1];
97  else if (fTimeSlew==3)respCorr=frespCorr;
98 
99 
100  float tsShift3=HcalTimeSlew::delay(inputCharge[3],fTimeSlew,fTimeSlewBias, fpar0, fpar1 ,fpar2);
101  float tsShift4=HcalTimeSlew::delay(inputCharge[4],fTimeSlew,fTimeSlewBias, fpar0, fpar1 ,fpar2);
102  float tsShift5=HcalTimeSlew::delay(inputCharge[5],fTimeSlew,fTimeSlewBias, fpar0, fpar1 ,fpar2);
103 
104  float i3=0;
105  getLandauFrac(-tsShift3,-tsShift3+tsWidth,i3);
106  float n3=0;
107  getLandauFrac(-tsShift3+tsWidth,-tsShift3+tsWidth*2,n3);
108  float nn3=0;
109  getLandauFrac(-tsShift3+tsWidth*2,-tsShift3+tsWidth*3,nn3);
110 
111  float i4=0;
112  getLandauFrac(-tsShift4,-tsShift4+tsWidth,i4);
113  float n4=0;
114  getLandauFrac(-tsShift4+tsWidth,-tsShift4+tsWidth*2,n4);
115 
116  float i5=0;
117  getLandauFrac(-tsShift5,-tsShift5+tsWidth,i5);
118  float n5=0;
119  getLandauFrac(-tsShift5+tsWidth,-tsShift5+tsWidth*2,n5);
120 
121  float ch3=corrCharge[3]/i3;
122  float ch4=(i3*corrCharge[4]-n3*corrCharge[3])/(i3*i4);
123  float ch5=(n3*n4*corrCharge[3]-i4*nn3*corrCharge[3]-i3*n4*corrCharge[4]+i3*i4*corrCharge[5])/(i3*i4*i5);
124 
126  ch3=negThresh[0];
127  ch4=corrCharge[4]/i4;
128  ch5=(i4*corrCharge[5]-n4*corrCharge[4])/(i4*i5);
129  }
130 
132  ch4=ch4+(ch5-negThresh[0]);
133  ch5=negThresh[0];
134  }
135 
137  if (ch3<negThresh[0]) {
138  ch3=negThresh[0];
139  ch4=corrCharge[4]/i4;
140  ch5=(i4*corrCharge[5]-n4*corrCharge[4])/(i4*i5);
141  }
142  if (ch5<negThresh[0] && ch4>negThresh[1]) {
143  double ratio = (corrCharge[4]-ch3*i3)/(corrCharge[5]-negThresh[0]*i5);
144  if (ratio < 5 && ratio > 0.5) {
145  double invG = invGpar[0]+invGpar[1]*std::sqrt(2*std::log(invGpar[2]/ratio));
146  float iG=0;
147  getLandauFrac(-invG,-invG+tsWidth,iG);
148  ch4=(corrCharge[4]-ch3*n3)/(iG);
149  ch5=negThresh[0];
150  tsShift4=invG;
151  }
152  }
153  }
154 
155  if (ch3<1) {
156  ch3=0;
157  }
158  if (ch4<1) {
159  ch4=0;
160  }
161  if (ch5<1) {
162  ch5=0;
163  }
164  Output.clear();
165  Output.push_back(ch4*gainCorr*respCorr);// amplitude
166  Output.push_back(tsShift4); // time shift of in-time pulse
167  Output.push_back(ch5); // whatever
168 
169 }
double respcorrgain(int fCapId) const
get response corrected gain for capid=0..3
double pedestal(int fCapId) const
get pedestal for capid=0..3
HcalTimeSlew::ParaSource fTimeSlew
T sqrt(T t)
Definition: SSEVec.h:18
int ieta() const
get the cell ieta
Definition: HcalDetId.h:56
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
void getLandauFrac(float tStart, float tEnd, float &sum) const
void calculate(const std::vector< double > &inputCharge, const std::vector< double > &inputPedestal, std::vector< double > &corrCharge) const
Definition: PedestalSub.cc:21
int size() const
get the size
Definition: CaloSamples.h:24
#define Output(cl)
Definition: vmac.h:192
HcalTimeSlew::BiasSetting fTimeSlewBias
static double delay(double fC, BiasSetting bias=Medium)
Returns the amount (ns) by which a pulse of the given number of fC will be delayed by the timeslew ef...
Definition: HcalTimeSlew.cc:12
void HcalDeterministicFit::getLandauFrac ( float  tStart,
float  tEnd,
float &  sum 
) const

Definition at line 36 of file HcalDeterministicFit.cc.

References funct::abs().

Referenced by apply().

36  {
37 
38  if (std::abs(tStart-tEnd-tsWidth)<0.1) {
39  sum=0;
40  return;
41  }
42  sum= landauFrac[int(ceil(tStart+tsWidth))];
43  return;
44 }
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
void HcalDeterministicFit::init ( HcalTimeSlew::ParaSource  tsParam,
HcalTimeSlew::BiasSetting  bias,
NegStrategy  nStrat,
PedestalSub  pedSubFxn_,
std::vector< double >  pars,
double  respCorr 
)

Definition at line 19 of file HcalDeterministicFit.cc.

19  {
20  for(int fi=0; fi<9; fi++){
21  fpars[fi] = pars.at(fi);
22  }
23 
24  fTimeSlew=tsParam;
25  fTimeSlewBias=bias;
26  fNegStrat=nStrat;
27  fPedestalSubFxn_=pedSubFxn_;
28  frespCorr=respCorr;
29 }
HcalTimeSlew::ParaSource fTimeSlew
HcalTimeSlew::BiasSetting fTimeSlewBias

Member Data Documentation

NegStrategy HcalDeterministicFit::fNegStrat
private

Definition at line 31 of file HcalDeterministicFit.h.

Referenced by apply().

double HcalDeterministicFit::fpars[9]
private

Definition at line 34 of file HcalDeterministicFit.h.

Referenced by apply().

PedestalSub HcalDeterministicFit::fPedestalSubFxn_
private

Definition at line 32 of file HcalDeterministicFit.h.

Referenced by apply().

double HcalDeterministicFit::frespCorr
private

Definition at line 35 of file HcalDeterministicFit.h.

Referenced by apply().

HcalTimeSlew::ParaSource HcalDeterministicFit::fTimeSlew
private

Definition at line 29 of file HcalDeterministicFit.h.

Referenced by apply().

HcalTimeSlew::BiasSetting HcalDeterministicFit::fTimeSlewBias
private

Definition at line 30 of file HcalDeterministicFit.h.

Referenced by apply().

int HcalDeterministicFit::HcalRegion = {16, 17}
staticprivate

Definition at line 37 of file HcalDeterministicFit.h.

Referenced by apply().

float HcalDeterministicFit::invGpar = {-13.11, 11.29, 5.133}
staticprivate

Definition at line 40 of file HcalDeterministicFit.h.

Referenced by apply().

float HcalDeterministicFit::landauFrac
staticprivate
Initial value:
= {0, 7.6377e-05, 0.000418655, 0.00153692, 0.00436844, 0.0102076,
0.0204177, 0.0360559, 0.057596, 0.0848493, 0.117069, 0.153152, 0.191858, 0.23198, 0.272461, 0.312438,
0.351262, 0.388476, 0.423788, 0.457036, 0.488159, 0.517167, 0.54412, 0.569112, 0.592254, 0.613668,
0.633402, 0.651391, 0.667242, 0.680131, 0.688868, 0.692188, 0.689122, 0.67928, 0.662924, 0.64087,
0.614282, 0.584457, 0.552651, 0.51997, 0.487317, 0.455378, 0.424647, 0.395445, 0.367963, 0.342288,
0.318433, 0.29636, 0.275994, 0.257243, 0.24, 0.224155, 0.2096, 0.196227, 0.183937, 0.172635,
0.162232, 0.15265, 0.143813, 0.135656, 0.128117, 0.12114, 0.114677, 0.108681, 0.103113, 0.0979354,
0.0931145, 0.0886206, 0.0844264, 0.0805074, 0.0768411, 0.0734075, 0.0701881, 0.0671664, 0.0643271,
0.0616564, 0.0591418, 0.0567718, 0.054536, 0.0524247, 0.0504292, 0.0485414, 0.046754, 0.0450602,
0.0434538, 0.041929, 0.0404806, 0.0391037, 0.0377937, 0.0365465, 0.0353583, 0.0342255, 0.0331447,
0.032113, 0.0311274, 0.0301854, 0.0292843, 0.0284221, 0.0275964, 0.0268053, 0.0253052, 0.0238536,
0.0224483, 0.0210872, 0.0197684, 0.0184899, 0.01725, 0.0160471, 0.0148795, 0.0137457, 0.0126445,
0.0115743, 0.0105341, 0.00952249, 0.00853844, 0.00758086, 0.00664871,0.00574103, 0.00485689, 0.00399541,
0.00315576, 0.00233713, 0.00153878, 0.000759962, 0 }

Definition at line 42 of file HcalDeterministicFit.h.

float HcalDeterministicFit::negThresh = {-3., 15.}
staticprivate

Definition at line 39 of file HcalDeterministicFit.h.

Referenced by apply().

float HcalDeterministicFit::rCorr = {0.95, 0.95}
staticprivate

Definition at line 41 of file HcalDeterministicFit.h.

Referenced by apply().

int HcalDeterministicFit::tsWidth = 25
staticprivate

Definition at line 38 of file HcalDeterministicFit.h.

Referenced by apply().