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