ATLAS Offline Software
Loading...
Searching...
No Matches
TFCS2DFunctionTemplateInterpolationHistogram.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
3*/
4
5#ifndef ISF_FASTCALOSIMEVENT_TFCS2DFunctionTemplateInterpolationHistogram_h
6#define ISF_FASTCALOSIMEVENT_TFCS2DFunctionTemplateInterpolationHistogram_h
7
8#include "TFCS2DFunction.h"
10#include "TH1.h"
11#include "TH2.h"
12#include "TBuffer.h"
13
14#include <iostream>
15
16template <typename Txvec, typename Tyvec, typename Tz, typename Trandom = float>
18 : public TFCS2DFunctionTemplateHistogram<Txvec, Tyvec, Tz, Trandom> {
19public:
21 : TFCS2DFunctionTemplateHistogram<Txvec, Tyvec, Tz, Trandom>(hist){};
22
23 using TFCS2DFunctionTemplateHistogram<Txvec, Tyvec, Tz, Trandom>::rnd_to_fct;
24 using TFCS2DFunctionTemplateHistogram<Txvec, Tyvec, Tz, Trandom>::get_nbins;
25 using TFCS2DFunctionTemplateHistogram<Txvec, Tyvec, Tz,
26 Trandom>::m_HistoContents;
27 using TFCS2DFunctionTemplateHistogram<Txvec, Tyvec, Tz,
28 Trandom>::m_HistoBordersx;
29 using TFCS2DFunctionTemplateHistogram<Txvec, Tyvec, Tz,
30 Trandom>::m_HistoBordersy;
31
35
39 virtual void rnd_to_fct(float &valuex, float &valuey, float rnd,
40 float rnd2) const {
41 size_t nbins = get_nbins();
42 if (nbins == 0) {
43 valuex = 0.0;
44 valuey = 0.0;
45 return;
46 }
47 Trandom residual_rnd;
48 size_t ibin = m_HistoContents.get_bin(rnd, residual_rnd);
49
50 Trandom frac = m_HistoContents.get_fraction(ibin);
51
52 size_t ibiny =
53 ibin % m_HistoBordersy
54 .get_nbins(); // printf("%d ", m_HistoBordersy.get_nbins() );
55 size_t ibinx = ibin / m_HistoBordersy.get_nbins();
56 // size_t nbinsx = m_HistoBordersx.get_nbins();
57 size_t nbinsy = m_HistoBordersy.get_nbins();
58
59 Trandom dfrac;
60 auto l = m_HistoBordersy.GetBinLength(ibiny);
61 Trandom dfracprev;
62 auto lprev = l;
63 if (ibiny > 0) {
64 Trandom fracprev = m_HistoContents.get_fraction(ibin - 1);
65 dfrac = frac - fracprev;
66 if (ibiny > 1) {
67 dfracprev = fracprev - m_HistoContents.get_fraction(ibin - 2);
68 } else {
69 dfracprev = fracprev;
70 if (ibinx > 0)
71 dfracprev -= m_HistoContents.get_fraction(ibin - 2);
72 }
73 lprev = m_HistoBordersy.GetBinLength(ibiny - 1);
74 } else {
75 dfrac = frac;
76 if (ibinx > 0)
77 dfrac -= m_HistoContents.get_fraction(ibin - 1);
78 dfracprev = dfrac;
79 }
80
81 Trandom dfracnext;
82 auto lnext = l;
83 if (ibiny < nbinsy - 1) {
84 dfracnext = m_HistoContents.get_fraction(ibin + 1) - frac;
85 lnext = m_HistoBordersy.GetBinLength(ibiny + 1);
86 } else {
87 dfracnext = dfrac;
88 }
89
90 Trandom m;
91 if (dfrac > 0) {
92 Trandom mnext = dfracnext / lnext - dfrac / l;
93 mnext /= l + lnext;
94 Trandom mprev = dfrac / l - dfracprev / lprev;
95 mprev /= l + lprev;
96 m = (mnext + mprev) * l * l / dfrac;
97 } else
98 m = 0;
99
100 valuey = m_HistoBordersy.position_lin(ibiny, m, residual_rnd);
101 valuex = m_HistoBordersx.position(ibinx, rnd2);
102 }
103
105 1) // TFCS1DFunctionTemplateInterpolationHistogram
106};
107
110 TFCS1DFunction_HistogramInt8BinEdges,
111 TFCS1DFunction_HistogramInt8BinEdges, uint8_t, float> {
112public:
117
119 1) // TFCS2DFunctionInt8Int8Int8InterpolationHistogram
120};
123 TFCS1DFunction_HistogramInt8BinEdges,
124 TFCS1DFunction_HistogramInt8BinEdges, uint16_t, float> {
125public:
130
132 1) // TFCS2DFunctionInt8Int8Int16InterpolationHistogram
133};
136 TFCS1DFunction_HistogramInt8BinEdges,
137 TFCS1DFunction_HistogramInt8BinEdges, uint32_t, float> {
138public:
143
145 1) // TFCS2DFunctionInt8Int8Int32InterpolationHistogram
146};
147
149
152 TFCS1DFunction_HistogramInt8BinEdges,
153 TFCS1DFunction_HistogramInt16BinEdges, uint8_t, float> {
154public:
159
161 1) // TFCS2DFunctionInt8Int16Int8InterpolationHistogram
162};
165 TFCS1DFunction_HistogramInt8BinEdges,
166 TFCS1DFunction_HistogramInt16BinEdges, uint16_t, float> {
167public:
172
174 1) // TFCS2DFunctionInt8Int16Int16InterpolationHistogram
175};
178 TFCS1DFunction_HistogramInt8BinEdges,
179 TFCS1DFunction_HistogramInt16BinEdges, uint32_t, float> {
180public:
185
187 1) // TFCS2DFunctionInt8Int16Int32InterpolationHistogram
188};
189
192 TFCS1DFunction_HistogramInt8BinEdges,
193 TFCS1DFunction_HistogramInt32BinEdges, uint8_t, float> {
194public:
199
201 1) // TFCS2DFunctionInt8Int32Int8InterpolationHistogram
202};
205 TFCS1DFunction_HistogramInt8BinEdges,
206 TFCS1DFunction_HistogramInt32BinEdges, uint16_t, float> {
207public:
212
214 1) // TFCS2DFunctionInt8Int32Int16InterpolationHistogram
215};
218 TFCS1DFunction_HistogramInt8BinEdges,
219 TFCS1DFunction_HistogramInt32BinEdges, uint32_t, float> {
220public:
225
227 1) // TFCS2DFunctionInt8Int32Int32InterpolationHistogram
228};
229
232 TFCS1DFunction_HistogramInt16BinEdges,
233 TFCS1DFunction_HistogramInt8BinEdges, uint8_t, float> {
234public:
239
241 1) // TFCS2DFunctionInt16Int8Int8InterpolationHistogram
242};
245 TFCS1DFunction_HistogramInt16BinEdges,
246 TFCS1DFunction_HistogramInt8BinEdges, uint16_t, float> {
247public:
252
254 1) // TFCS2DFunctionInt16Int8Int16InterpolationHistogram
255};
258 TFCS1DFunction_HistogramInt16BinEdges,
259 TFCS1DFunction_HistogramInt8BinEdges, uint32_t, float> {
260public:
265
267 1) // TFCS2DFunctionInt16Int8Int32InterpolationHistogram
268};
269
271
274 TFCS1DFunction_HistogramInt16BinEdges,
275 TFCS1DFunction_HistogramInt16BinEdges, uint8_t, float> {
276public:
281
283 1) // TFCS2DFunctionInt16Int16Int8InterpolationHistogram
284};
287 TFCS1DFunction_HistogramInt16BinEdges,
288 TFCS1DFunction_HistogramInt16BinEdges, uint16_t, float> {
289public:
294
296 1) // TFCS2DFunctionInt16Int16Int16InterpolationHistogram
297};
300 TFCS1DFunction_HistogramInt16BinEdges,
301 TFCS1DFunction_HistogramInt16BinEdges, uint32_t, float> {
302public:
307
309 1) // TFCS2DFunctionInt16Int16Int32InterpolationHistogram
310};
311
314 TFCS1DFunction_HistogramInt16BinEdges,
315 TFCS1DFunction_HistogramInt32BinEdges, uint8_t, float> {
316public:
321
323 1) // TFCS2DFunctionInt16Int32Int8InterpolationHistogram
324};
327 TFCS1DFunction_HistogramInt16BinEdges,
328 TFCS1DFunction_HistogramInt32BinEdges, uint16_t, float> {
329public:
334
336 1) // TFCS2DFunctionInt16Int32Int16InterpolationHistogram
337};
340 TFCS1DFunction_HistogramInt16BinEdges,
341 TFCS1DFunction_HistogramInt32BinEdges, uint32_t, float> {
342public:
347
349 1) // TFCS2DFunctionInt16Int32Int32InterpolationHistogram
350};
351
354 TFCS1DFunction_HistogramInt32BinEdges,
355 TFCS1DFunction_HistogramInt8BinEdges, uint8_t, float> {
356public:
361
363 1) // TFCS2DFunctionInt32Int8Int8InterpolationHistogram
364};
367 TFCS1DFunction_HistogramInt32BinEdges,
368 TFCS1DFunction_HistogramInt8BinEdges, uint16_t, float> {
369public:
374
376 1) // TFCS2DFunctionInt32Int8Int16InterpolationHistogram
377};
380 TFCS1DFunction_HistogramInt32BinEdges,
381 TFCS1DFunction_HistogramInt8BinEdges, uint32_t, float> {
382public:
387
389 1) // TFCS2DFunctionInt32Int8Int32InterpolationHistogram
390};
391
393
396 TFCS1DFunction_HistogramInt32BinEdges,
397 TFCS1DFunction_HistogramInt16BinEdges, uint8_t, float> {
398public:
403
405 1) // TFCS2DFunctionInt32Int16Int8InterpolationHistogram
406};
409 TFCS1DFunction_HistogramInt32BinEdges,
410 TFCS1DFunction_HistogramInt16BinEdges, uint16_t, float> {
411public:
416
418 1) // TFCS2DFunctionInt32Int16Int16InterpolationHistogram
419};
422 TFCS1DFunction_HistogramInt32BinEdges,
423 TFCS1DFunction_HistogramInt16BinEdges, uint32_t, float> {
424public:
429
431 1) // TFCS2DFunctionInt32Int16Int32InterpolationHistogram
432};
433
436 TFCS1DFunction_HistogramInt32BinEdges,
437 TFCS1DFunction_HistogramInt32BinEdges, uint8_t, float> {
438public:
443
445 1) // TFCS2DFunctionInt32Int32Int8InterpolationHistogram
446};
449 TFCS1DFunction_HistogramInt32BinEdges,
450 TFCS1DFunction_HistogramInt32BinEdges, uint16_t, float> {
451public:
456
458 1) // TFCS2DFunctionInt32Int32Int16InterpolationHistogram
459};
462 TFCS1DFunction_HistogramInt32BinEdges,
463 TFCS1DFunction_HistogramInt32BinEdges, uint32_t, float> {
464public:
469
471 1) // TFCS2DFunctionInt32Int32Int32InterpolationHistogram
472};
473
474#if defined(__ROOTCLING__) && defined(__FastCaloSimStandAlone__)
475#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram < \
476 TFCS1DFunction_HistogramInt8BinEdges, \
477 TFCS1DFunction_HistogramInt8BinEdges, uint8_t, float> + \
478 ;
479#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram < \
480 TFCS1DFunction_HistogramInt8BinEdges, \
481 TFCS1DFunction_HistogramInt8BinEdges, uint16_t, float> + \
482 ;
483#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram < \
484 TFCS1DFunction_HistogramInt8BinEdges, \
485 TFCS1DFunction_HistogramInt8BinEdges, uint32_t, float> + \
486 ;
487#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram < \
488 TFCS1DFunction_HistogramInt8BinEdges, \
489 TFCS1DFunction_HistogramInt16BinEdges, uint8_t, float> + \
490 ;
491#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram < \
492 TFCS1DFunction_HistogramInt8BinEdges, \
493 TFCS1DFunction_HistogramInt16BinEdges, uint16_t, float> + \
494 ;
495#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram < \
496 TFCS1DFunction_HistogramInt8BinEdges, \
497 TFCS1DFunction_HistogramInt16BinEdges, uint32_t, float> + \
498 ;
499#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram < \
500 TFCS1DFunction_HistogramInt8BinEdges, \
501 TFCS1DFunction_HistogramInt32BinEdges, uint8_t, float> + \
502 ;
503#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram < \
504 TFCS1DFunction_HistogramInt8BinEdges, \
505 TFCS1DFunction_HistogramInt32BinEdges, uint16_t, float> + \
506 ;
507#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram < \
508 TFCS1DFunction_HistogramInt8BinEdges, \
509 TFCS1DFunction_HistogramInt32BinEdges, uint32_t, float> + \
510 ;
511#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram < \
512 TFCS1DFunction_HistogramInt16BinEdges, \
513 TFCS1DFunction_HistogramInt8BinEdges, uint8_t, float> + \
514 ;
515#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram < \
516 TFCS1DFunction_HistogramInt16BinEdges, \
517 TFCS1DFunction_HistogramInt8BinEdges, uint16_t, float> + \
518 ;
519#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram < \
520 TFCS1DFunction_HistogramInt16BinEdges, \
521 TFCS1DFunction_HistogramInt8BinEdges, uint32_t, float> + \
522 ;
523#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram < \
524 TFCS1DFunction_HistogramInt16BinEdges, \
525 TFCS1DFunction_HistogramInt16BinEdges, uint8_t, float> + \
526 ;
527#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram < \
528 TFCS1DFunction_HistogramInt16BinEdges, \
529 TFCS1DFunction_HistogramInt16BinEdges, uint16_t, float> + \
530 ;
531#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram < \
532 TFCS1DFunction_HistogramInt16BinEdges, \
533 TFCS1DFunction_HistogramInt16BinEdges, uint32_t, float> + \
534 ;
535#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram < \
536 TFCS1DFunction_HistogramInt16BinEdges, \
537 TFCS1DFunction_HistogramInt32BinEdges, uint8_t, float> + \
538 ;
539#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram < \
540 TFCS1DFunction_HistogramInt16BinEdges, \
541 TFCS1DFunction_HistogramInt32BinEdges, uint16_t, float> + \
542 ;
543#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram < \
544 TFCS1DFunction_HistogramInt16BinEdges, \
545 TFCS1DFunction_HistogramInt32BinEdges, uint32_t, float> + \
546 ;
547#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram < \
548 TFCS1DFunction_HistogramInt32BinEdges, \
549 TFCS1DFunction_HistogramInt8BinEdges, uint8_t, float> + \
550 ;
551#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram < \
552 TFCS1DFunction_HistogramInt32BinEdges, \
553 TFCS1DFunction_HistogramInt8BinEdges, uint16_t, float> + \
554 ;
555#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram < \
556 TFCS1DFunction_HistogramInt32BinEdges, \
557 TFCS1DFunction_HistogramInt8BinEdges, uint32_t, float> + \
558 ;
559#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram < \
560 TFCS1DFunction_HistogramInt32BinEdges, \
561 TFCS1DFunction_HistogramInt16BinEdges, uint8_t, float> + \
562 ;
563#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram < \
564 TFCS1DFunction_HistogramInt32BinEdges, \
565 TFCS1DFunction_HistogramInt16BinEdges, uint16_t, float> + \
566 ;
567#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram < \
568 TFCS1DFunction_HistogramInt32BinEdges, \
569 TFCS1DFunction_HistogramInt16BinEdges, uint32_t, float> + \
570 ;
571#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram < \
572 TFCS1DFunction_HistogramInt32BinEdges, \
573 TFCS1DFunction_HistogramInt32BinEdges, uint8_t, float> + \
574 ;
575#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram < \
576 TFCS1DFunction_HistogramInt32BinEdges, \
577 TFCS1DFunction_HistogramInt32BinEdges, uint16_t, float> + \
578 ;
579#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram < \
580 TFCS1DFunction_HistogramInt32BinEdges, \
581 TFCS1DFunction_HistogramInt32BinEdges, uint32_t, float> + \
582 ;
583
584#pragma link C++ class TFCS2DFunctionInt8Int8Int8InterpolationHistogram + ;
585#pragma link C++ class TFCS2DFunctionInt8Int8Int16InterpolationHistogram + ;
586#pragma link C++ class TFCS2DFunctionInt8Int8Int32InterpolationHistogram + ;
587#pragma link C++ class TFCS2DFunctionInt8Int16Int8InterpolationHistogram + ;
588#pragma link C++ class TFCS2DFunctionInt8Int16Int16InterpolationHistogram + ;
589#pragma link C++ class TFCS2DFunctionInt8Int16Int32InterpolationHistogram + ;
590#pragma link C++ class TFCS2DFunctionInt8Int32Int8InterpolationHistogram + ;
591#pragma link C++ class TFCS2DFunctionInt8Int32Int16InterpolationHistogram + ;
592#pragma link C++ class TFCS2DFunctionInt8Int32Int32InterpolationHistogram + ;
593#pragma link C++ class TFCS2DFunctionInt16Int8Int8InterpolationHistogram + ;
594#pragma link C++ class TFCS2DFunctionInt16Int8Int16InterpolationHistogram + ;
595#pragma link C++ class TFCS2DFunctionInt16Int8Int32InterpolationHistogram + ;
596#pragma link C++ class TFCS2DFunctionInt16Int16Int8InterpolationHistogram + ;
597#pragma link C++ class TFCS2DFunctionInt16Int16Int16InterpolationHistogram + ;
598#pragma link C++ class TFCS2DFunctionInt16Int16Int32InterpolationHistogram + ;
599#pragma link C++ class TFCS2DFunctionInt16Int32Int8InterpolationHistogram + ;
600#pragma link C++ class TFCS2DFunctionInt16Int32Int16InterpolationHistogram + ;
601#pragma link C++ class TFCS2DFunctionInt16Int32Int32InterpolationHistogram + ;
602#pragma link C++ class TFCS2DFunctionInt32Int8Int8InterpolationHistogram + ;
603#pragma link C++ class TFCS2DFunctionInt32Int8Int16InterpolationHistogram + ;
604#pragma link C++ class TFCS2DFunctionInt32Int8Int32InterpolationHistogram + ;
605#pragma link C++ class TFCS2DFunctionInt32Int16Int8InterpolationHistogram + ;
606#pragma link C++ class TFCS2DFunctionInt32Int16Int16InterpolationHistogram + ;
607#pragma link C++ class TFCS2DFunctionInt32Int16Int32InterpolationHistogram + ;
608#pragma link C++ class TFCS2DFunctionInt32Int32Int8InterpolationHistogram + ;
609#pragma link C++ class TFCS2DFunctionInt32Int32Int16InterpolationHistogram + ;
610#pragma link C++ class TFCS2DFunctionInt32Int32Int32InterpolationHistogram + ;
611
612#endif
613
614#endif
static TRandom * rnd
Header file for AthHistogramAlgorithm.
virtual void rnd_to_fct(float &valuex, float &valuey, float rnd, float rnd2) const
Function gets random number rnd in the range [0,1) as argument and returns function value according t...