CMS 3D CMS Logo

MahiFit.h
Go to the documentation of this file.
1 #ifndef RecoLocalCalo_HcalRecAlgos_MahiFit_HH
2 #define RecoLocalCalo_HcalRecAlgos_MahiFit_HH
3 
10 
14 
15 #include <Math/Functor.h>
16 
18 
19  unsigned int nPulseTot;
20  unsigned int tsSize;
21  unsigned int tsOffset;
22  unsigned int fullTSOffset;
23  int bxOffset;
24  double dt;
25 
26  //holds active bunch crossings
28 
29  //holds data samples
31 
32  //holds inverse covariance matrix
34 
35  //holds diagonal noise terms
37 
38  //holds flat pedestal uncertainty
40 
41  //holds full covariance matrix for a pulse shape
42  //varied in time
43  std::array<FullSampleMatrix, MaxPVSize> pulseCovArray;
44 
45  //holds full pulse shape template
46  std::array<FullSampleVector, MaxPVSize> pulseShapeArray;
47 
48  //holds full pulse shape derivatives
49  std::array<FullSampleVector, MaxPVSize> pulseDerivArray;
50 
51  //holders for calculating pulse shape & covariance matrices
52  std::array<double, MaxSVSize> pulseN;
53  std::array<double, MaxSVSize> pulseM;
54  std::array<double, MaxSVSize> pulseP;
55 
56  //holds matrix of pulse shape templates for each BX
58 
59  //holds matrix of pulse shape derivatives for each BX
61 
62  //holds residual vector
64 
65  //for FNNLS algorithm
66  unsigned int nP;
68 
71 
73  PulseMatrix aTaMat; // A-transpose A (matrix)
74  PulseVector aTbVec; // A-transpose b (vector)
75  PulseVector updateWork; // w (vector)
76 
81 
82 };
83 
84 struct MahiDebugInfo {
85 
86  int nSamples;
87  int soi;
88 
89  bool use3;
90 
91  float inTimeConst;
93  float inPedAvg;
94  float inGain;
95 
96  float inNoiseADC[MaxSVSize];
97  float inNoiseDC[MaxSVSize];
98  float inNoisePhoto[MaxSVSize];
99  float inPedestal[MaxSVSize];
100 
101  float totalUCNoise[MaxSVSize];
102 
103  float mahiEnergy;
104  float chiSq;
105  float arrivalTime;
106 
107  float pEnergy;
108  float nEnergy;
109  float pedEnergy;
110 
111  float count[MaxSVSize];
112  float inputTS[MaxSVSize];
113  int inputTDC[MaxSVSize];
114  float itPulse[MaxSVSize];
115  float pPulse[MaxSVSize];
116  float nPulse[MaxSVSize];
117 
118 };
119 
120 class MahiFit
121 {
122  public:
123  MahiFit();
124  ~MahiFit() { };
125 
126  void setParameters(bool iDynamicPed, double iTS4Thresh, double chiSqSwitch,
127  bool iApplyTimeSlew, HcalTimeSlew::BiasSetting slewFlavor,
128  double iMeanTime, double iTimeSigmaHPD, double iTimeSigmaSiPM,
129  const std::vector <int> &iActiveBXs, int iNMaxItersMin, int iNMaxItersNNLS,
130  double iDeltaChiSqThresh, double iNnlsThresh);
131 
132  void phase1Apply(const HBHEChannelInfo& channelData,
133  float& reconstructedEnergy,
134  float& reconstructedTime,
135  bool& useTriple,
136  float& chi2) const;
137 
138  void phase1Debug(const HBHEChannelInfo& channelData,
139  MahiDebugInfo& mdi) const;
140 
141  void doFit(std::array<float,3> &correctedOutput, const int nbx) const;
142 
143  void setPulseShapeTemplate (const HcalPulseShapes::Shape& ps,const HcalTimeSlew * hcalTimeSlewDelay);
144  void resetPulseShapeTemplate(const HcalPulseShapes::Shape& ps);
145 
146  typedef BXVector::Index Index;
147  const HcalPulseShapes::Shape* currentPulseShape_=nullptr;
148  const HcalTimeSlew* hcalTimeSlewDelay_=nullptr;
149 
150  private:
151 
152  double minimize() const;
153  void onePulseMinimize() const;
154  void updateCov() const;
155  void updatePulseShape(double itQ, FullSampleVector &pulseShape,
156  FullSampleVector &pulseDeriv,
157  FullSampleMatrix &pulseCov) const;
158 
159  double calculateArrivalTime() const;
160  double calculateChiSq() const;
161  void nnls() const;
162  void resetWorkspace() const;
163 
164  void nnlsUnconstrainParameter(Index idxp) const;
165  void nnlsConstrainParameter(Index minratioidx) const;
166 
167  void solveSubmatrix(PulseMatrix& mat, PulseVector& invec, PulseVector& outvec, unsigned nP) const;
168 
170 
171  //hard coded in initializer
172  const unsigned int fullTSSize_;
173  const unsigned int fullTSofInterest_;
174 
175  static constexpr int pedestalBX_ = 100;
176 
177  // used to restrict returned time value to a 25 ns window centered
178  // on the nominal arrival time
179  static constexpr float timeLimit_ = 12.5;
180 
181  // Python-configurables
183  float ts4Thresh_;
184  float chiSqSwitch_;
185 
188  double tsDelay1GeV_=0;
189 
190  float meanTime_;
193 
194  std::vector <int> activeBXs_;
195 
198 
200  float nnlsThresh_;
201 
202  unsigned int bxSizeConf_;
204 
205  //for pulse shapes
207  std::unique_ptr<FitterFuncs::PulseShapeFunctor> psfPtr_;
208  std::unique_ptr<ROOT::Math::Functor> pfunctor_;
209 
210 };
211 #endif
unsigned int nPulseTot
Definition: MahiFit.h:19
float chiSqSwitch_
Definition: MahiFit.h:184
SamplePulseMatrix invcovp
Definition: MahiFit.h:72
HcalTimeSlew::BiasSetting slewFlavor_
Definition: MahiFit.h:187
SampleVector amplitudes
Definition: MahiFit.h:30
Eigen::LLT< SampleMatrix > SampleDecompLLT
MahiNnlsWorkspace nnlsWork_
Definition: MahiFit.h:169
BXVector::Index Index
Definition: MahiFit.h:146
float inDarkCurrent
Definition: MahiFit.h:92
bool applyTimeSlew_
Definition: MahiFit.h:186
PulseVector ampVec
Definition: MahiFit.h:67
~MahiFit()
Definition: MahiFit.h:124
SampleDecompLLT covDecomp
Definition: MahiFit.h:77
PulseVector ampvecpermtest
Definition: MahiFit.h:70
Eigen::LDLT< PulseMatrix > PulseDecompLDLT
std::array< FullSampleVector, MaxPVSize > pulseShapeArray
Definition: MahiFit.h:46
float meanTime_
Definition: MahiFit.h:190
std::array< double, MaxSVSize > pulseM
Definition: MahiFit.h:53
PulseMatrix topleft_work
Definition: MahiFit.h:79
#define constexpr
float pedEnergy
Definition: MahiFit.h:109
SamplePulseMatrix pulseDerivMat
Definition: MahiFit.h:60
std::array< double, MaxSVSize > pulseN
Definition: MahiFit.h:52
int bxOffsetConf_
Definition: MahiFit.h:203
PulseVector aTbVec
Definition: MahiFit.h:74
float nnlsThresh_
Definition: MahiFit.h:200
int cntsetPulseShape_
Definition: MahiFit.h:206
std::unique_ptr< FitterFuncs::PulseShapeFunctor > psfPtr_
Definition: MahiFit.h:207
Eigen::Matrix< double, FullSampleVectorSize, 1 > FullSampleVector
unsigned int bxSizeConf_
Definition: MahiFit.h:202
int nMaxItersMin_
Definition: MahiFit.h:196
PulseVector residuals
Definition: MahiFit.h:63
int nSamples
Definition: MahiFit.h:86
float chiSq
Definition: MahiFit.h:104
float nEnergy
Definition: MahiFit.h:108
SampleMatrix pedConstraint
Definition: MahiFit.h:39
std::vector< int > activeBXs_
Definition: MahiFit.h:194
std::array< FullSampleVector, MaxPVSize > pulseDerivArray
Definition: MahiFit.h:49
bool use3
Definition: MahiFit.h:89
const unsigned int fullTSofInterest_
Definition: MahiFit.h:173
Eigen::Matrix< double, SampleVectorSize, 1 > SampleVector
float inGain
Definition: MahiFit.h:94
SampleMatrix covDecompLinv
Definition: MahiFit.h:78
float arrivalTime
Definition: MahiFit.h:105
SampleMatrix invCovMat
Definition: MahiFit.h:33
unsigned int tsOffset
Definition: MahiFit.h:21
float inPedAvg
Definition: MahiFit.h:93
std::unique_ptr< ROOT::Math::Functor > pfunctor_
Definition: MahiFit.h:208
Eigen::Matrix< double, FullSampleVectorSize, FullSampleVectorSize > FullSampleMatrix
PulseMatrix aTaMat
Definition: MahiFit.h:73
Eigen::Matrix< double, SampleVectorSize, SampleVectorSize > SampleMatrix
float mahiEnergy
Definition: MahiFit.h:103
unsigned int fullTSOffset
Definition: MahiFit.h:22
Eigen::Matrix< double, Eigen::Dynamic, 1, 0, PulseVectorSize, 1 > PulseVector
SamplePulseMatrix pulseMat
Definition: MahiFit.h:57
bool dynamicPed_
Definition: MahiFit.h:182
constexpr int MaxSVSize
std::array< FullSampleMatrix, MaxPVSize > pulseCovArray
Definition: MahiFit.h:43
float timeSigmaSiPM_
Definition: MahiFit.h:192
SampleVector noiseTerms
Definition: MahiFit.h:36
float pEnergy
Definition: MahiFit.h:107
Eigen::Matrix< double, SampleVectorSize, Eigen::Dynamic, 0, SampleVectorSize, PulseVectorSize > SamplePulseMatrix
float ts4Thresh_
Definition: MahiFit.h:183
PulseDecompLDLT pulseDecomp
Definition: MahiFit.h:80
unsigned int tsSize
Definition: MahiFit.h:20
float deltaChiSqThresh_
Definition: MahiFit.h:199
float timeSigmaHPD_
Definition: MahiFit.h:191
unsigned int nP
Definition: MahiFit.h:66
BXVector bxs
Definition: MahiFit.h:27
float inTimeConst
Definition: MahiFit.h:91
PulseVector errVec
Definition: MahiFit.h:69
int nMaxItersNNLS_
Definition: MahiFit.h:197
std::array< double, MaxSVSize > pulseP
Definition: MahiFit.h:54
const unsigned int fullTSSize_
Definition: MahiFit.h:172
PulseVector updateWork
Definition: MahiFit.h:75
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic, 0, PulseVectorSize, PulseVectorSize > PulseMatrix