ATLAS Offline Software
Loading...
Searching...
No Matches
TileFilterManager Class Reference

Auxiliary class for TileRawChannelMakerManyAmps. More...

#include <TileFilterManager.h>

Collaboration diagram for TileFilterManager:

Public Member Functions

 TileFilterManager (int mode, int level, int &nPar, int &nSam, int &inTsam, int &jbsam, int &jesam, int &ncr, int &intcr, int &jBcr, int &jEcr, std::vector< double > &Shape, bool lDebug=false)
 ~TileFilterManager ()
int findHighestResidual (CLHEP::HepVector &digits) const
int findLowestCrossing (CLHEP::HepVector &digits) const
int fitDigits (TileFilterResult &tRes, bool lDebug=false)
int fitDigits1 (TileFilterResult &tRes, bool lDebug=false)
int fitDigits2 (TileFilterResult &tRes, bool lDebug=false)
void makeFitterOffsetTables ()
int makeSPD (bool debug, std::vector< int > &vcross, CLHEP::HepMatrix &SPD)
int makeFitterArrays ()
void getVcross (int nPile, int iconfig, std::vector< int > &vcross)
void getCuts (double &rchisq, double &chi)
std::vector< int > & getNfitIndex ()
int getFitIndex (int nParam, std::vector< int > &vcross)
std::vector< double > & getFitterErr (int nParam, int iconfig)

Private Attributes

std::string m_infoName
int m_filterMode
int m_filterLevel
bool m_debug
int m_nParamMax
int m_nShape
int m_inTshape
int m_nDig
int m_inTdig
int m_jBsamp
int m_jEsamp
int m_nCross
int m_inTcross
int m_jBcross
int m_jEcross
double m_rChi2Cut
double m_chiCut
std::vector< int * > m_offsetVector
std::vector< int > m_nFitIndex
std::vector< double * > m_crossShape
int m_ind2icrMap [9]
int m_icr2indMap [9]
std::vector< TileFitter * > m_vNparam
std::vector< std::vector< TileFitter > > m_vNpFitter

Detailed Description

Auxiliary class for TileRawChannelMakerManyAmps.

Definition at line 33 of file TileFilterManager.h.

Constructor & Destructor Documentation

◆ TileFilterManager()

TileFilterManager::TileFilterManager ( int mode,
int level,
int & nPar,
int & nSam,
int & inTsam,
int & jbsam,
int & jesam,
int & ncr,
int & intcr,
int & jBcr,
int & jEcr,
std::vector< double > & Shape,
bool lDebug = false )

Definition at line 24 of file TileFilterManager.cxx.

27 /* Store information needed for fitting. */
28
29 m_debug = lDebug; // Stored as a private data member.
32 m_nParamMax = npMax;
33 m_nShape = nShape;
34 m_inTshape = inShape;
35 m_nDig = nSam;
36 m_inTdig = inTdig;
37 m_jBsamp = ibSam;
38 m_jEsamp = ieSam;
39 m_jBcross = bCr;
40 m_jEcross = eCr;
43 std::cout << " TileFilterManager constructor. NParamMax =" << m_nParamMax << ", Ndig =" << m_nDig << std::endl;
44
45 // Parameters that should be read in externally.
46 m_rChi2Cut = 4.0;
47 m_chiCut = 3.5;
48 int NParamMin = 2;
49 std::cout << " FilterMode=" << m_filterMode << ", NParamMax=" << m_nParamMax << ", NParamMin=" << NParamMin
50 << ", chiCut=" << m_chiCut << ", rchisqCut=" << m_rChi2Cut << std::endl;
51 //
52 // Create the tables of offsets for calculating Fitter indices.
53
55
56 //
57 // Create the maps taking us from "digit number" idig to "crossing index" ind.
58 // "idig" corresponds to the array of digits which are read out, ranging from zero
59 // to Ndig, with the in-time digit defined by InTdig. It is more convenient for
60 // fitting to re-order these so that the index of the in-time crossing is zero,
61 // and the other are sequentially numbered 1,2,..., Ncr.
62 //
63 std::cout << " Number of digits read =" << m_nDig << " . In-time digit has idig=" << m_inTdig << "." << std::endl;
64 int ind = 0;
65 for (int icr = 0; icr < m_nCross; icr++) {
66 if (icr == m_inTdig) ind = 0;
67 if (icr < m_inTdig) ind = icr - m_jBcross + 1;
68 if (icr > m_inTdig) ind = icr - m_jBcross;
69 m_icr2indMap[icr] = ind;
70 m_ind2icrMap[ind] = icr;
71 }
72 if (m_debug) {
73 for (int ind = 0; ind < m_nCross; ind++) {
74 int icr = m_ind2icrMap[ind];
75 int kdisp = icr - m_inTdig;
76 std::cout << " Index =" << ind << " crossing # =" << icr << ", displacement from InTdig =" << kdisp
77 << " crossings." << std::endl;
78 }
79 }
80 /* Create the shaping matrix. Row = crossing (of deposit), col = digit. */
81 // std::vector<double> ShapeMat[Ncross][Ndig];
82 for (int ind = 0; ind < m_nCross; ind++) {
83 int icr = m_ind2icrMap[ind];
84 int OffSet = m_inTshape;
85 double * Xshape = new double[m_nDig];
86 for (int idig = 0; idig < m_nDig; idig++) {
87 int k = OffSet - icr + idig;
88 if (k < 0) k = 0;
89 if (k >= m_nShape) k = m_nShape - 1;
90 Xshape[idig] = Shape[k];
91 }
92 m_crossShape.push_back(Xshape);
93 }
94 /* Print out the Shape Matrix. */
95 if (m_debug) {
96 std::cout << std::format(
97 " TileFilterManager: ShapingMatrix. Nshape={}, InTshape={}, Ndig={}, InTdig={}, Ncross={}\n",
100 m_nDig,
101 m_inTdig,
102 m_nCross);
103 for (int ind = 0; ind < m_nCross; ind++) {
104 double * Xshape = m_crossShape[ind];
105 std::cout << std::format(" ind={} Shape=", ind);
106 for (int idig = 0; idig < m_nDig; idig++) {
107 std::cout << std::format(" {:>6.3g}", Xshape[idig]);
108 }
109 std::cout << std::endl;
110 }
111 }
112
113 // vNparam.reserve(NParamMax);
114 //Print the FitterIndex arrays.
115 std::vector<int> Crossings;
116 //int NpileMax = NParamMax - 2;
117 int NampMax = m_nParamMax - 1;
118 for (int ipile = 0; ipile < NampMax; ipile++) {
119 int Nmax = m_nFitIndex[ipile];
120 if (m_debug)
121 std::cout << " Crossing configurations for Nparam=" << ipile + 2 << ", Npileup=" << ipile << ": " << Nmax
122 << " configurations." << std::endl;
123 for (int iconfig = 0; iconfig < Nmax; iconfig++) {
124 Crossings.clear();
125 getVcross(ipile, iconfig, Crossings);
126 int nParam = ipile + 2;
127 int kFitIndex = getFitIndex(nParam, Crossings);
128 int ncr = Crossings.size();
129 if (m_debug) {
130 std::cout << " Npile=" << std::setw(2) << ipile << ", iconfig=" << std::setw(3) << iconfig << " (kF="
131 << std::setw(3) << kFitIndex << ") => Vcross=";
132 for (int icr = 0; icr < ncr; icr++) {
133 std::cout << " " << std::setw(3) << Crossings[icr];
134 }
135 std::cout << std::endl;
136 }
137 }
138 }
139 // Make the Fitter Arrays
140 /* int iok = */makeFitterArrays();
141
142 /* Initialization has successfully completed. */
143 // Set debug = false for execution phase.
144 m_debug = true;
145 return;
146}
std::vector< double * > m_crossShape
int getFitIndex(int nParam, std::vector< int > &vcross)
std::vector< int > m_nFitIndex
void getVcross(int nPile, int iconfig, std::vector< int > &vcross)

◆ ~TileFilterManager()

TileFilterManager::~TileFilterManager ( )

Definition at line 151 of file TileFilterManager.cxx.

151 {
152
153 for (unsigned int ind = 0; ind < m_crossShape.size(); ++ind) {
154 delete[] m_crossShape[ind];
155 }
156
157 for (unsigned int ind = 0; ind < m_offsetVector.size(); ++ind) {
158 delete[] m_offsetVector[ind];
159 }
160}
std::vector< int * > m_offsetVector

Member Function Documentation

◆ findHighestResidual()

int TileFilterManager::findHighestResidual ( CLHEP::HepVector & digits) const

Definition at line 394 of file TileFilterManager.cxx.

394 {
395 int icrMax = -1;
396 double ampMax = -999.;
397 for (int icr = 0; icr < m_nCross; icr++) {
398 if (digits[icr] > ampMax) {
399 icrMax = icr;
400 ampMax = digits[icr];
401 }
402 }
403 return icrMax;
404}

◆ findLowestCrossing()

int TileFilterManager::findLowestCrossing ( CLHEP::HepVector & digits) const

Definition at line 408 of file TileFilterManager.cxx.

408 {
409 int icrMin = -1;
410 double ampMin = +9999.;
411 for (int icr = 0; icr < m_nCross; icr++) {
412 if (icr == m_inTdig) continue;
413 if (digits[icr] < ampMin) {
414 icrMin = icr;
415 ampMin = digits[icr];
416 }
417 }
418 return icrMin;
419}

◆ fitDigits()

int TileFilterManager::fitDigits ( TileFilterResult & tRes,
bool lDebug = false )

Definition at line 164 of file TileFilterManager.cxx.

164 {
165 int icode = -1;
166
167 // std::cout << " FitDigits: Fmode=" << Fmode << ", lDebug=" << lDebug << std::endl;
168 if (m_filterMode == 2) {
169 icode = fitDigits1(tResult, lDebug);
170 return icode;
171 }
172 if (m_filterMode == 3) {
173 icode = fitDigits2(tResult, lDebug);
174 return icode;
175 }
176 std::cout << " ERROR in TileFitDigits !! Fmode =" << m_filterMode << std::endl;
177
178 return icode;
179}
int fitDigits1(TileFilterResult &tRes, bool lDebug=false)
int fitDigits2(TileFilterResult &tRes, bool lDebug=false)

◆ fitDigits1()

int TileFilterManager::fitDigits1 ( TileFilterResult & tRes,
bool lDebug = false )

Definition at line 183 of file TileFilterManager.cxx.

183 {
184 int icode = -1;
185 m_debug = lDebug;
186 // Get references to the key variable in tResult.
187 CLHEP::HepVector& digits = tResult.getDigRef();
188 //CLHEP::HepVector& fitAmp = tResult.getParamRef();
189 //CLHEP::HepVector& fitErr = tResult.getErrRef();
190 CLHEP::HepVector& residuals = tResult.getResidRef();
191 double& chisqRef = tResult.getChi2Ref();
192 int& Npar = tResult.getNparRef();
193 std::vector<int>& vcross = tResult.getVcrossRef();
194 int& iFitIndex = tResult.getFitIndexRef();
195
196 // First find crossing with highest amplitude.
197 int jcross = findHighestResidual(digits);
198 int jparam = ((jcross < 0) ? 0 : m_icr2indMap[jcross]);
199 // if(debug) std::cout << " Highest crossing = " << jcross << "(cind=" << jparam
200 // << "), amp=" << digits[jcross] << std::endl;
201
202 // Initialize fitting parameters
203 Npar = 1;
204 iFitIndex = -1;
205 chisqRef = 999.;
206
207 jparam = 0; // Set this to be intime crossing [FSM, 7/30/04]
208 // Include in-time crossing (jparam=0) in fit even if it is not the maximum.
209 //if(jparam != 0) iret = tResult.addCross(0);
210
211 // Start loop over fits, adding a new parameter each time until reduced chisq is OK.
212 double rchisq = 999.;
213 icode = -1;
214 double digSigma = tResult.getSigDig();
215 while (Npar < m_nParamMax) {
216 if (m_debug)
217 std::cout << " FilterManager.FitDigits1, while loop. Npar=" << Npar << ", NParamMax=" << m_nParamMax << std::endl;
218 int iret = tResult.addCross(jparam);
219 if (iret != 0) {
220 icode = iret;
221 break;
222 }
223 // if(debug) tResult.SnapShot(0);
224 iFitIndex = getFitIndex(Npar, vcross);
225 // cppcheck-suppress negativeContainerIndex
226 // Npar is changed as a side-effect of calling addCross() above.
227 std::vector<TileFitter>& vFitter = m_vNpFitter.at(Npar - 2);
228 TileFitter& tileFitter = vFitter[iFitIndex];
229 (void) tileFitter.fitAmp(tResult, false);
230 if (m_debug) tResult.snapShot(2);
231 rchisq = chisqRef / (m_nDig - Npar);
232
233 // Chisq is small enough, so the fit has been successful.
234 if (rchisq < m_rChi2Cut) {
235 icode = 0;
236 break;
237 }
238 // Have hit max param even though chisq is still big (problem!).
239 if (Npar == m_nParamMax) {
240 icode = 5;
241 break;
242 }
243 // Find index of the highest residual.
244 jcross = findHighestResidual(residuals);
245 jparam = ((jcross < 0) ? 0 : m_icr2indMap[jcross]);
246 // If jparam is already in list, terminate search (problem?).
247 bool ldup = false;
248 int Namp = vcross.size();
249 for (int i = 1; i < Namp; i++) {
250 if (vcross[i] == jparam) ldup = true;
251 }
252 if (ldup) {
253 icode = 4;
254 break;
255 }
256
257 double chi = ((jcross < 0) ? 0.0 : residuals[jcross] / digSigma);
258 if (chi < m_chiCut) {
259 icode = 3;
260 break;
261 }
262 }
263 if (m_debug) {
264 std::cout << " End of loop. icode =" << icode << ", Npar=" << Npar << std::endl;
265 tResult.snapShot(1);
266 }
267 return icode;
268}
std::vector< std::vector< TileFitter > > m_vNpFitter
int findHighestResidual(CLHEP::HepVector &digits) const
int fitAmp(TileFilterResult &tResult, bool lDebug=false)

◆ fitDigits2()

int TileFilterManager::fitDigits2 ( TileFilterResult & tRes,
bool lDebug = false )

Definition at line 272 of file TileFilterManager.cxx.

272 {
273 //int iret = -1;
274 int icode = 0;
275 m_debug = lDebug;
276 // Get references to the key variable in tResult.
277 CLHEP::HepVector& digits = tResult.getDigRef();
278 CLHEP::HepVector& fitAmp = tResult.getParamRef();
279 CLHEP::HepVector& fitErr = tResult.getErrRef();
280 //CLHEP::HepVector& residuals = tResult.getResidRef();
281 double& chisqRef = tResult.getChi2Ref();
282 int& Npar = tResult.getNparRef();
283 int Namp = Npar - 1;
284 std::vector<int>& vcross = tResult.getVcrossRef();
285 int& iFitIndex = tResult.getFitIndexRef();
286 if (m_debug) {
287 // tResult.SnapShot(0);
288 std::cout << " digits=";
289 for (int i = 0; i < m_nDig; i++) {
290 std::cout << std::format(" {:>6.2g}", digits[i]);
291 }
292 std::cout << std::endl;
293 }
294
295 // Make a crossing vector that contains all allowed amplitudes.
296 Namp = m_filterLevel - 1;
297 for (int iamp = 0; iamp < Namp; iamp++) {
298 /*iret =*/tResult.addCross(iamp);
299 }
300
301 //Namp and Npar could have changed. Npar is incremented by addCross.
302 Namp = Npar - 1;
303 if (m_debug) tResult.snapShot(0);
304
305 // Initialize fitting parameters
306 iFitIndex = -1;
307 chisqRef = 999.;
308
309 // Start loop over fits, removing one or more amplitudes each time.
310 // double rchisq = 999.;
311 icode = -1;
312
313 int Npass = 0;
314 while (Npar > 1) {
315 Npass += 1;
316 if (m_debug)
317 std::cout << " FilterManager.FitDigits2, while loop. Npar=" << Npar << ", NParamMax=" << m_nParamMax << std::endl;
318 // if(debug) tResult.SnapShot(0);
319 iFitIndex = getFitIndex(Npar, vcross);
320 if (m_debug) std::cout << " Npar=" << Npar << ", iFitIndex=" << iFitIndex << std::endl;
321 std::vector<TileFitter>& vFitter = m_vNpFitter[Npar - 2];
322 TileFitter& tileFitter = vFitter[iFitIndex];
323 // if(debug) std::cout << " Ready to call tileFitter.FitAmp" << std::endl;
324 /*iret =*/tileFitter.fitAmp(tResult, false);
325 if (m_debug) tResult.snapShot(2);
326 // If Npar is down to 2 parameters (ped + inTime), terminate fitting search.
327 if (Npar <= 2) {
328 icode = 3;
329 break;
330 }
331
332 // Calculate significance chi of each fit parameter..
333 // double chiCutLow[4] = {chiCut, 1.50, 0.75, 0.};
334 const int Ndim = 12;
335 double chiAmp[Ndim] = {0};
336 int iAmp[Ndim] = {0};
337 int Npile = 0;
338 for (int i = 2; i < Npar; i++) {
339 chiAmp[Npile] = fitAmp[i] / fitErr[i];
340 iAmp[Npile] = vcross[i - 1];
341 if (m_debug)
342 std::cout << " set chiAmp: i=" << i << ", iAmp=" << iAmp[Npile] << ", chi=" << chiAmp[Npile] << std::endl;
343 Npile += 1;
344 }
345 int ndrop = 0;
346 int crdrop = 0;
347 int ndropMax = 4;
348 while (ndrop < ndropMax) {
349 if (m_debug) std::cout << " top of drop loop. ndrop=" << ndrop << ", Npass=" << Npass << std::endl;
350 double chiMin = m_chiCut;
351 // chiMin = chiCutLow[ndrop];
352 int idrop = -1;
353 for (int i = 0; i < Npile; i++) {
354 if (iAmp[i] < 0) continue;
355 if (chiAmp[i] > chiMin) continue;
356 chiMin = chiAmp[i];
357 idrop = i;
358 crdrop = iAmp[i];
359 }
360 if (m_debug)
361 std::cout << " end of Npile loop. idrop=" << idrop << ", crdrop=" << crdrop << ", ndrop=" << ndrop
362 << std::endl;
363 if (idrop > -1) {
364 /*iret =*/tResult.dropCross(crdrop);
365 ndrop += 1;
366 iAmp[idrop] = -iAmp[idrop];
367 icode = 1;
368 if (m_debug)
369 std::cout << " ndrop=" << ndrop << ", idrop=" << idrop << ", crdrop=" << crdrop << ", chiMin=" << chiMin
370 << std::endl;
371 } else {
372 icode = 6;
373 break;
374 }
375 if (m_debug) std::cout << "FitDig2: Npass=" << Npass << ", ndrop=" << ndrop << std::endl;
376 } // end of ndrop loop
377 if (m_debug) std::cout << " have fallen out of drop loop. ndrop=" << ndrop << ", Npass=" << Npass << std::endl;
378 if (ndrop == 0) {
379 icode = 0;
380 break;
381 }
382 } // end of while loop
383
384 if (m_debug) {
385 std::cout << " TileFilterManager: End of pass loop. icode =" << icode << ", Npar=" << Npar << ", Npass=" << Npass
386 << std::endl;
387 tResult.snapShot(2);
388 }
389 return icode;
390}

◆ getCuts()

void TileFilterManager::getCuts ( double & rchisq,
double & chi )

Definition at line 570 of file TileFilterManager.cxx.

570 {
571 rchisqC = m_rChi2Cut;
572 chiC = m_chiCut;
573 return;
574}

◆ getFitIndex()

int TileFilterManager::getFitIndex ( int nParam,
std::vector< int > & vcross )

Definition at line 607 of file TileFilterManager.cxx.

607 {
608
609 int Index = 0;
610 int Namp = nParam - 1;
611 if (Namp <= 0) {
612 std::cout << " TileFilterManager.getFitIndex called when Nparam=" << nParam << std::endl;
613 }
614 for (int ipar = 0; ipar < Namp; ipar++) {
615 int * Offset = m_offsetVector[ipar];
616 int jcr = vcross[ipar];
617 Index += Offset[jcr];
618 }
619
620 // if(debug) {
621 // std::cout << " getFitIndex: Nparam=" << Nparam << ", Index=" << Index
622 // << ", Vcross=";
623 // for(int ipar=0; ipar<Namp; ipar++) {
624 // std::cout << " " << vcross[ipar];
625 // }
626 // std::cout << std::endl;
627 // }
628
629 return Index;
630}
IndexedConstituentUserInfo::Index Index

◆ getFitterErr()

std::vector< double > & TileFilterManager::getFitterErr ( int nParam,
int iconfig )

Definition at line 634 of file TileFilterManager.cxx.

634 {
635 int ipile = nParam - 2;
636 std::vector<TileFitter>& vFitter = m_vNpFitter[ipile];
637 TileFitter& tileFitter = vFitter[iconfig];
638 std::vector<double>& fitErr = tileFitter.getErr();
639 return fitErr;
640}
std::vector< double > & getErr()

◆ getNfitIndex()

std::vector< int > & TileFilterManager::getNfitIndex ( )

Definition at line 564 of file TileFilterManager.cxx.

564 {
565 return m_nFitIndex;
566}

◆ getVcross()

void TileFilterManager::getVcross ( int nPile,
int iconfig,
std::vector< int > & vcross )

Definition at line 578 of file TileFilterManager.cxx.

578 {
579
580 vcross.clear();
581 int kconfig = iconfig;
582 int icrmax = m_nCross - 1;
583 for (int ipile = nPileup; ipile > -1; ipile--) {
584 int * Offset = m_offsetVector[ipile];
585 for (int icross = icrmax; icross >= 0; icross--) {
586 // std::cout << "icross=" << icross << ", Offset[icross]=" << Offset[icross]
587 // << ", kconfig=" << kconfig << ", icrmax=" << icrmax << std::endl;
588 if (Offset[icross] <= kconfig) {
589 int icr = icross;
590 icrmax = icross - 1;
591 kconfig = kconfig - Offset[icross];
592 vcross.push_back(icr);
593 break;
594 }
595 if (kconfig < 0) {
596 std::cout << " ERROR!! In getVcross, kconfig=" << kconfig << std::endl;
597 }
598 }
599 }
600 sort(vcross.begin(), vcross.end());
601
602 return;
603}
void sort(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end)
Specialization of sort for DataVector/List.

◆ makeFitterArrays()

int TileFilterManager::makeFitterArrays ( )

Definition at line 529 of file TileFilterManager.cxx.

529 {
530
531 if (m_debug)
532 std::cout << " TileFilterManager::MakeFitterArrays. Will print out first matrix "
533 << "only for each vFitter vector (one for each value of Nparam)." << std::endl;
534 bool cdebug = false;
535 int NampMax = m_nParamMax - 1;
536 for (int iamp = 0; iamp < NampMax; iamp++) {
537 int Nparam = iamp + 2; // number of parameters in this series of fits.
538 int Nindex = m_nFitIndex[iamp]; // number of configurations for this Nparam.
539 if (m_debug)
540 std::cout << " ===> Nparam=" << Nparam << " => Nindex=" << Nindex << " TileFitter objects:" << std::endl;
541 std::vector<TileFitter> vFitter(Nindex);
542 for (int index = 0; index < Nindex; index++) {
543 // if(debug) cdebug = (index==0)||(index==Nindex-1);
544 if (m_debug) cdebug = (index == Nindex - 1);
545 std::vector<int> vcross;
546 getVcross(iamp, index, vcross);
547 CLHEP::HepMatrix SPD(Nparam, m_nDig);
548 makeSPD(cdebug, vcross, SPD); // fill the matrix elements
549 // If constraints are needed, set Icon.
550 int Icon = 0;
551 if (Nparam > m_nDig - 1) Icon = 1;
552 if (Nparam > m_nDig) Icon = 2;
553 TileFitter * tileFitter = new TileFitter(cdebug, Nparam, m_nDig, index, SPD, Icon);
554 vFitter[index] = *tileFitter;
555 delete tileFitter;
556 }
557 m_vNpFitter.push_back(std::move(vFitter));
558 }
559 return 0;
560}
int makeSPD(bool debug, std::vector< int > &vcross, CLHEP::HepMatrix &SPD)
str index
Definition DeMoScan.py:362

◆ makeFitterOffsetTables()

void TileFilterManager::makeFitterOffsetTables ( )

Definition at line 423 of file TileFilterManager.cxx.

423 {
424
425 int NpileupMax = m_nParamMax - 2;
426 int NampMax = m_nParamMax - 1;
427 int Npileup = NpileupMax;
428 if (m_debug)
429 std::cout << " Enter MakeFitterOffsetTables: Npileup=" << Npileup << ", NampMax=" << NampMax << ", Ncross="
430 << m_nCross << std::endl;
431//For ipileup=0 (special case), offset = index of crossing.
432 int * Offset0 = new int[m_nCross];
433 for (int index = 0; index < m_nCross; index++) {
434 Offset0[index] = index;
435 }
436 m_offsetVector.push_back(Offset0);
437 //
438 //For ipileup=1, number offsets sequentially starting with zero for index=1.
439 int * Offset1 = new int[m_nCross];
440 for (int index = 0; index < m_nCross; index++) {
441 if (index < 2)
442 Offset1[index] = 0;
443 else
444 Offset1[index] = index - 1;
445 }
446 m_offsetVector.push_back(Offset1);
447
448 // For Npileup>1, use iterative formula (offsets = coeff of binary expansion)
449 if (NampMax > 2) {
450 for (int ipile = 2; ipile < NampMax; ipile++) {
451 int * vlast = m_offsetVector[ipile - 1];
452 int * Offset = new int[m_nCross];
453 for (int index = 0; index < m_nCross; index++) {
454 if (index <= ipile) {
455 Offset[index] = 0;
456 } else {
457 //coverity[UNINIT] -- false positive
458 Offset[index] = Offset[index - 1] + vlast[index - 1];
459 }
460 }
461 m_offsetVector.push_back(Offset);
462 }
463 }
464 // Find the number of FitIndex values for each number of parameters.
465 for (int ipile = 0; ipile < NampMax; ipile++) {
466 int Nmax;
467 int * Offset = m_offsetVector[ipile];
468 if (ipile <= 1) Nmax = Offset[m_nCross - 1] + 1;
469 if (ipile > 1) {
470 int * vlast = m_offsetVector[ipile - 1];
471 Nmax = Offset[m_nCross - 1] + vlast[m_nCross - 1];
472 }
473 m_nFitIndex.push_back(Nmax);
474 }
475
476 // Print out the Offset table.
477 if (m_debug) {
478 std::cout << " *** TileFilter Offset table for Npileup=" << Npileup << " and Ncross=" << m_nCross << std::endl;
479 for (int ipile = 0; ipile < NampMax; ipile++) {
480 int * Offset = m_offsetVector[ipile];
481 std::cout << " ipile=" << std::setw(3) << ipile << ": Offsets = ";
482 for (int index = 0; index < m_nCross; index++) {
483 std::cout << " " << std::setw(3) << Offset[index];
484 }
485 std::cout << "; NfitIndex=" << std::setw(3) << m_nFitIndex[ipile] << std::endl;
486 }
487 }
488
489 return;
490}

◆ makeSPD()

int TileFilterManager::makeSPD ( bool debug,
std::vector< int > & vcross,
CLHEP::HepMatrix & SPD )

Definition at line 494 of file TileFilterManager.cxx.

494 {
495 int iret = -1;
496 int Namp = vcross.size();
497 int Nparam = Namp + 1;
498 // First row of SPD is always for the pedestal.
499 for (int idig = 0; idig < m_nDig; idig++) {
500 SPD[0][idig] = 1.0;
501 }
502 // The remaining rows correspond to the crossing amplitudes specified by vcross.
503 for (int ipar = 1; ipar < Nparam; ipar++) {
504 int jcr = vcross[ipar - 1];
505 double * Xshape = m_crossShape[jcr];
506 for (int idig = 0; idig < m_nDig; idig++) {
507 SPD[ipar][idig] = Xshape[idig];
508 }
509 }
510 if (debugMakeSPD) {
511 std::cout << " Make SPD for NP=" << Nparam << ", vcross=";
512 for (int iamp = 0; iamp < Namp; iamp++) {
513 std::cout << " " << vcross[iamp];
514 }
515 std::cout << std::endl;
516 for (int ipar = 0; ipar < Nparam; ipar++) {
517 std::cout << " ip=" << ipar << " SPD=";
518 for (int idig = 0; idig < m_nDig; idig++) {
519 std::cout << " " << SPD[ipar][idig];
520 }
521 std::cout << std::endl;
522 }
523 } // end debugMakeSPD printout
524 return iret;
525}

Member Data Documentation

◆ m_chiCut

double TileFilterManager::m_chiCut
private

Definition at line 103 of file TileFilterManager.h.

◆ m_crossShape

std::vector<double *> TileFilterManager::m_crossShape
private

Definition at line 107 of file TileFilterManager.h.

◆ m_debug

bool TileFilterManager::m_debug
private

Definition at line 90 of file TileFilterManager.h.

◆ m_filterLevel

int TileFilterManager::m_filterLevel
private

Definition at line 89 of file TileFilterManager.h.

◆ m_filterMode

int TileFilterManager::m_filterMode
private

Definition at line 88 of file TileFilterManager.h.

◆ m_icr2indMap

int TileFilterManager::m_icr2indMap[9]
private

Definition at line 109 of file TileFilterManager.h.

◆ m_ind2icrMap

int TileFilterManager::m_ind2icrMap[9]
private

Definition at line 108 of file TileFilterManager.h.

◆ m_infoName

std::string TileFilterManager::m_infoName
private

Definition at line 86 of file TileFilterManager.h.

◆ m_inTcross

int TileFilterManager::m_inTcross
private

Definition at line 99 of file TileFilterManager.h.

◆ m_inTdig

int TileFilterManager::m_inTdig
private

Definition at line 95 of file TileFilterManager.h.

◆ m_inTshape

int TileFilterManager::m_inTshape
private

Definition at line 93 of file TileFilterManager.h.

◆ m_jBcross

int TileFilterManager::m_jBcross
private

Definition at line 100 of file TileFilterManager.h.

◆ m_jBsamp

int TileFilterManager::m_jBsamp
private

Definition at line 96 of file TileFilterManager.h.

◆ m_jEcross

int TileFilterManager::m_jEcross
private

Definition at line 101 of file TileFilterManager.h.

◆ m_jEsamp

int TileFilterManager::m_jEsamp
private

Definition at line 97 of file TileFilterManager.h.

◆ m_nCross

int TileFilterManager::m_nCross
private

Definition at line 98 of file TileFilterManager.h.

◆ m_nDig

int TileFilterManager::m_nDig
private

Definition at line 94 of file TileFilterManager.h.

◆ m_nFitIndex

std::vector<int> TileFilterManager::m_nFitIndex
private

Definition at line 106 of file TileFilterManager.h.

◆ m_nParamMax

int TileFilterManager::m_nParamMax
private

Definition at line 91 of file TileFilterManager.h.

◆ m_nShape

int TileFilterManager::m_nShape
private

Definition at line 92 of file TileFilterManager.h.

◆ m_offsetVector

std::vector<int *> TileFilterManager::m_offsetVector
private

Definition at line 105 of file TileFilterManager.h.

◆ m_rChi2Cut

double TileFilterManager::m_rChi2Cut
private

Definition at line 102 of file TileFilterManager.h.

◆ m_vNparam

std::vector<TileFitter *> TileFilterManager::m_vNparam
private

Definition at line 110 of file TileFilterManager.h.

◆ m_vNpFitter

std::vector<std::vector<TileFitter> > TileFilterManager::m_vNpFitter
private

Definition at line 111 of file TileFilterManager.h.


The documentation for this class was generated from the following files: