ATLAS Offline Software
Loading...
Searching...
No Matches
TFCS2DFunctionTemplateInterpolationExpHistogram.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_TFCS2DFunctionTemplateInterpolationExpHistogram_h
6#define ISF_FASTCALOSIMEVENT_TFCS2DFunctionTemplateInterpolationExpHistogram_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
36 virtual void rnd_to_fct(float &valuex, float &valuey, float rnd,
37 float rnd2) const {
38 size_t nbins = get_nbins();
39 if (nbins == 0) {
40 valuex = 0.0;
41 valuey = 0.0;
42 return;
43 }
44 Trandom residual_rnd;
45 size_t ibin = m_HistoContents.get_bin(rnd, residual_rnd);
46
47 Trandom frac = m_HistoContents.get_fraction(ibin);
48
49 size_t ibiny =
50 ibin % m_HistoBordersy
51 .get_nbins(); // printf("%d ", m_HistoBordersy.get_nbins() );
52 size_t ibinx = ibin / m_HistoBordersy.get_nbins();
53 // size_t nbinsx = m_HistoBordersx.get_nbins();
54 size_t nbinsy = m_HistoBordersy.get_nbins();
55
56 Trandom dfrac = 0.0;
57 auto l = m_HistoBordersy.GetBinLength(ibiny);
58 Trandom dfracprev = 0.0;
59 Trandom ldfrac = 0.0;
60 auto lprev = l;
61 if (ibiny > 0) {
62 Trandom fracprev = m_HistoContents.get_fraction(ibin - 1);
63 dfrac = frac - fracprev;
64 if (ibiny > 1) {
65 dfracprev = fracprev - m_HistoContents.get_fraction(ibin - 2);
66 } else {
67 dfracprev = fracprev;
68 if (ibinx > 0)
69 dfracprev -= m_HistoContents.get_fraction(ibin - 2);
70 }
71 lprev = m_HistoBordersy.GetBinLength(ibiny - 1);
72 } else {
73 dfrac = frac;
74 if (ibinx > 0)
75 dfrac -= m_HistoContents.get_fraction(ibin - 1);
76 dfracprev = dfrac;
77 }
78
79 if (dfrac > 0.0 && dfracprev > 0.0) {
80 ldfrac = log(dfrac / l) - log(dfracprev / lprev);
81 }
82
83 Trandom dfracnext = 0.0;
84 Trandom ldfracnext = 0.0;
85 auto lnext = l;
86 if (ibiny < nbinsy - 1) {
87 dfracnext = m_HistoContents.get_fraction(ibin + 1) - frac;
88 lnext = m_HistoBordersy.GetBinLength(ibiny + 1);
89 } else {
90 dfracnext = dfrac;
91 }
92
93 if (dfrac > 0.0 && dfracnext > 0.0) {
94 ldfracnext = log(dfracnext / lnext) - log(dfrac / l);
95 }
96
97 Trandom beta = 0.0, betaprev = 0.0, betanext = 0.0;
98 betanext = ldfracnext / (lnext + l) / 0.5;
99 betaprev = ldfrac / (lprev + l) / 0.5;
100 beta = 0.5 * (betaprev + betanext);
101 // printf("betaprev=%13.5e betanext=%13.5e beta=%13.5e\n", betaprev,
102 // betanext, beta); printf("l=%13.5e lnext=%13.5e\n", l, lnext);
103 // printf("log=%13.5e lognext=%13.5e logprev=%13.5e\n", log(dfrac/l),
104 // log(dfracnext/lnext), log(dfracprev/lprev) ); printf("ldfrac=%13.5e
105 // ldfracnext=%13.5e\n", ldfrac, ldfracnext );
106
107 valuey = m_HistoBordersy.position_exp(ibiny, beta, residual_rnd);
108 valuex = m_HistoBordersx.position(ibinx, rnd2);
109 }
110
112 1) // TFCS1DFunctionTemplateInterpolationExpHistogram
113};
114
117 TFCS1DFunction_HistogramInt8BinEdges,
118 TFCS1DFunction_HistogramInt8BinEdges, uint8_t, float> {
119public:
124
126 1) // TFCS2DFunctionInt8Int8Int8InterpolationExpHistogram
127};
130 TFCS1DFunction_HistogramInt8BinEdges,
131 TFCS1DFunction_HistogramInt8BinEdges, uint16_t, float> {
132public:
137
139 1) // TFCS2DFunctionInt8Int8Int16InterpolationExpHistogram
140};
143 TFCS1DFunction_HistogramInt8BinEdges,
144 TFCS1DFunction_HistogramInt8BinEdges, uint32_t, float> {
145public:
150
152 1) // TFCS2DFunctionInt8Int8Int32InterpolationExpHistogram
153};
154
156
159 TFCS1DFunction_HistogramInt8BinEdges,
160 TFCS1DFunction_HistogramInt16BinEdges, uint8_t, float> {
161public:
166
168 1) // TFCS2DFunctionInt8Int16Int8InterpolationExpHistogram
169};
172 TFCS1DFunction_HistogramInt8BinEdges,
173 TFCS1DFunction_HistogramInt16BinEdges, uint16_t, float> {
174public:
179
181 1) // TFCS2DFunctionInt8Int16Int16InterpolationExpHistogram
182};
185 TFCS1DFunction_HistogramInt8BinEdges,
186 TFCS1DFunction_HistogramInt16BinEdges, uint32_t, float> {
187public:
192
194 1) // TFCS2DFunctionInt8Int16Int32InterpolationExpHistogram
195};
196
199 TFCS1DFunction_HistogramInt8BinEdges,
200 TFCS1DFunction_HistogramInt32BinEdges, uint8_t, float> {
201public:
206
208 1) // TFCS2DFunctionInt8Int32Int8InterpolationExpHistogram
209};
212 TFCS1DFunction_HistogramInt8BinEdges,
213 TFCS1DFunction_HistogramInt32BinEdges, uint16_t, float> {
214public:
219
221 1) // TFCS2DFunctionInt8Int32Int16InterpolationExpHistogram
222};
225 TFCS1DFunction_HistogramInt8BinEdges,
226 TFCS1DFunction_HistogramInt32BinEdges, uint32_t, float> {
227public:
232
234 1) // TFCS2DFunctionInt8Int32Int32InterpolationExpHistogram
235};
236
239 TFCS1DFunction_HistogramInt16BinEdges,
240 TFCS1DFunction_HistogramInt8BinEdges, uint8_t, float> {
241public:
246
248 1) // TFCS2DFunctionInt16Int8Int8InterpolationExpHistogram
249};
252 TFCS1DFunction_HistogramInt16BinEdges,
253 TFCS1DFunction_HistogramInt8BinEdges, uint16_t, float> {
254public:
259
261 1) // TFCS2DFunctionInt16Int8Int16InterpolationExpHistogram
262};
265 TFCS1DFunction_HistogramInt16BinEdges,
266 TFCS1DFunction_HistogramInt8BinEdges, uint32_t, float> {
267public:
272
274 1) // TFCS2DFunctionInt16Int8Int32InterpolationExpHistogram
275};
276
278
281 TFCS1DFunction_HistogramInt16BinEdges,
282 TFCS1DFunction_HistogramInt16BinEdges, uint8_t, float> {
283public:
288
290 1) // TFCS2DFunctionInt16Int16Int8InterpolationExpHistogram
291};
294 TFCS1DFunction_HistogramInt16BinEdges,
295 TFCS1DFunction_HistogramInt16BinEdges, uint16_t, float> {
296public:
301
303 1) // TFCS2DFunctionInt16Int16Int16InterpolationExpHistogram
304};
307 TFCS1DFunction_HistogramInt16BinEdges,
308 TFCS1DFunction_HistogramInt16BinEdges, uint32_t, float> {
309public:
314
316 1) // TFCS2DFunctionInt16Int16Int32InterpolationExpHistogram
317};
318
321 TFCS1DFunction_HistogramInt16BinEdges,
322 TFCS1DFunction_HistogramInt32BinEdges, uint8_t, float> {
323public:
328
330 1) // TFCS2DFunctionInt16Int32Int8InterpolationExpHistogram
331};
334 TFCS1DFunction_HistogramInt16BinEdges,
335 TFCS1DFunction_HistogramInt32BinEdges, uint16_t, float> {
336public:
341
343 1) // TFCS2DFunctionInt16Int32Int16InterpolationExpHistogram
344};
347 TFCS1DFunction_HistogramInt16BinEdges,
348 TFCS1DFunction_HistogramInt32BinEdges, uint32_t, float> {
349public:
354
356 1) // TFCS2DFunctionInt16Int32Int32InterpolationExpHistogram
357};
358
361 TFCS1DFunction_HistogramInt32BinEdges,
362 TFCS1DFunction_HistogramInt8BinEdges, uint8_t, float> {
363public:
368
370 1) // TFCS2DFunctionInt32Int8Int8InterpolationExpHistogram
371};
374 TFCS1DFunction_HistogramInt32BinEdges,
375 TFCS1DFunction_HistogramInt8BinEdges, uint16_t, float> {
376public:
381
383 1) // TFCS2DFunctionInt32Int8Int16InterpolationExpHistogram
384};
387 TFCS1DFunction_HistogramInt32BinEdges,
388 TFCS1DFunction_HistogramInt8BinEdges, uint32_t, float> {
389public:
394
396 1) // TFCS2DFunctionInt32Int8Int32InterpolationExpHistogram
397};
398
400
403 TFCS1DFunction_HistogramInt32BinEdges,
404 TFCS1DFunction_HistogramInt16BinEdges, uint8_t, float> {
405public:
410
412 1) // TFCS2DFunctionInt32Int16Int8InterpolationExpHistogram
413};
416 TFCS1DFunction_HistogramInt32BinEdges,
417 TFCS1DFunction_HistogramInt16BinEdges, uint16_t, float> {
418public:
423
425 1) // TFCS2DFunctionInt32Int16Int16InterpolationExpHistogram
426};
429 TFCS1DFunction_HistogramInt32BinEdges,
430 TFCS1DFunction_HistogramInt16BinEdges, uint32_t, float> {
431public:
436
438 1) // TFCS2DFunctionInt32Int16Int32InterpolationExpHistogram
439};
440
443 TFCS1DFunction_HistogramInt32BinEdges,
444 TFCS1DFunction_HistogramInt32BinEdges, uint8_t, float> {
445public:
450
452 1) // TFCS2DFunctionInt32Int32Int8InterpolationExpHistogram
453};
456 TFCS1DFunction_HistogramInt32BinEdges,
457 TFCS1DFunction_HistogramInt32BinEdges, uint16_t, float> {
458public:
463
465 1) // TFCS2DFunctionInt32Int32Int16InterpolationExpHistogram
466};
469 TFCS1DFunction_HistogramInt32BinEdges,
470 TFCS1DFunction_HistogramInt32BinEdges, uint32_t, float> {
471public:
476
478 1) // TFCS2DFunctionInt32Int32Int32InterpolationExpHistogram
479};
480
481#if defined(__ROOTCLING__) && defined(__FastCaloSimStandAlone__)
482#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram < \
483 TFCS1DFunction_HistogramInt8BinEdges, \
484 TFCS1DFunction_HistogramInt8BinEdges, uint8_t, float> + \
485 ;
486#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram < \
487 TFCS1DFunction_HistogramInt8BinEdges, \
488 TFCS1DFunction_HistogramInt8BinEdges, uint16_t, float> + \
489 ;
490#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram < \
491 TFCS1DFunction_HistogramInt8BinEdges, \
492 TFCS1DFunction_HistogramInt8BinEdges, uint32_t, float> + \
493 ;
494#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram < \
495 TFCS1DFunction_HistogramInt8BinEdges, \
496 TFCS1DFunction_HistogramInt16BinEdges, uint8_t, float> + \
497 ;
498#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram < \
499 TFCS1DFunction_HistogramInt8BinEdges, \
500 TFCS1DFunction_HistogramInt16BinEdges, uint16_t, float> + \
501 ;
502#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram < \
503 TFCS1DFunction_HistogramInt8BinEdges, \
504 TFCS1DFunction_HistogramInt16BinEdges, uint32_t, float> + \
505 ;
506#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram < \
507 TFCS1DFunction_HistogramInt8BinEdges, \
508 TFCS1DFunction_HistogramInt32BinEdges, uint8_t, float> + \
509 ;
510#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram < \
511 TFCS1DFunction_HistogramInt8BinEdges, \
512 TFCS1DFunction_HistogramInt32BinEdges, uint16_t, float> + \
513 ;
514#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram < \
515 TFCS1DFunction_HistogramInt8BinEdges, \
516 TFCS1DFunction_HistogramInt32BinEdges, uint32_t, float> + \
517 ;
518#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram < \
519 TFCS1DFunction_HistogramInt16BinEdges, \
520 TFCS1DFunction_HistogramInt8BinEdges, uint8_t, float> + \
521 ;
522#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram < \
523 TFCS1DFunction_HistogramInt16BinEdges, \
524 TFCS1DFunction_HistogramInt8BinEdges, uint16_t, float> + \
525 ;
526#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram < \
527 TFCS1DFunction_HistogramInt16BinEdges, \
528 TFCS1DFunction_HistogramInt8BinEdges, uint32_t, float> + \
529 ;
530#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram < \
531 TFCS1DFunction_HistogramInt16BinEdges, \
532 TFCS1DFunction_HistogramInt16BinEdges, uint8_t, float> + \
533 ;
534#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram < \
535 TFCS1DFunction_HistogramInt16BinEdges, \
536 TFCS1DFunction_HistogramInt16BinEdges, uint16_t, float> + \
537 ;
538#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram < \
539 TFCS1DFunction_HistogramInt16BinEdges, \
540 TFCS1DFunction_HistogramInt16BinEdges, uint32_t, float> + \
541 ;
542#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram < \
543 TFCS1DFunction_HistogramInt16BinEdges, \
544 TFCS1DFunction_HistogramInt32BinEdges, uint8_t, float> + \
545 ;
546#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram < \
547 TFCS1DFunction_HistogramInt16BinEdges, \
548 TFCS1DFunction_HistogramInt32BinEdges, uint16_t, float> + \
549 ;
550#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram < \
551 TFCS1DFunction_HistogramInt16BinEdges, \
552 TFCS1DFunction_HistogramInt32BinEdges, uint32_t, float> + \
553 ;
554#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram < \
555 TFCS1DFunction_HistogramInt32BinEdges, \
556 TFCS1DFunction_HistogramInt8BinEdges, uint8_t, float> + \
557 ;
558#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram < \
559 TFCS1DFunction_HistogramInt32BinEdges, \
560 TFCS1DFunction_HistogramInt8BinEdges, uint16_t, float> + \
561 ;
562#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram < \
563 TFCS1DFunction_HistogramInt32BinEdges, \
564 TFCS1DFunction_HistogramInt8BinEdges, uint32_t, float> + \
565 ;
566#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram < \
567 TFCS1DFunction_HistogramInt32BinEdges, \
568 TFCS1DFunction_HistogramInt16BinEdges, uint8_t, float> + \
569 ;
570#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram < \
571 TFCS1DFunction_HistogramInt32BinEdges, \
572 TFCS1DFunction_HistogramInt16BinEdges, uint16_t, float> + \
573 ;
574#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram < \
575 TFCS1DFunction_HistogramInt32BinEdges, \
576 TFCS1DFunction_HistogramInt16BinEdges, uint32_t, float> + \
577 ;
578#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram < \
579 TFCS1DFunction_HistogramInt32BinEdges, \
580 TFCS1DFunction_HistogramInt32BinEdges, uint8_t, float> + \
581 ;
582#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram < \
583 TFCS1DFunction_HistogramInt32BinEdges, \
584 TFCS1DFunction_HistogramInt32BinEdges, uint16_t, float> + \
585 ;
586#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram < \
587 TFCS1DFunction_HistogramInt32BinEdges, \
588 TFCS1DFunction_HistogramInt32BinEdges, uint32_t, float> + \
589 ;
590
591#pragma link C++ class TFCS2DFunctionInt8Int8Int8InterpolationExpHistogram + ;
592#pragma link C++ class TFCS2DFunctionInt8Int8Int16InterpolationExpHistogram + ;
593#pragma link C++ class TFCS2DFunctionInt8Int8Int32InterpolationExpHistogram + ;
594#pragma link C++ class TFCS2DFunctionInt8Int16Int8InterpolationExpHistogram + ;
595#pragma link C++ class TFCS2DFunctionInt8Int16Int16InterpolationExpHistogram + ;
596#pragma link C++ class TFCS2DFunctionInt8Int16Int32InterpolationExpHistogram + ;
597#pragma link C++ class TFCS2DFunctionInt8Int32Int8InterpolationExpHistogram + ;
598#pragma link C++ class TFCS2DFunctionInt8Int32Int16InterpolationExpHistogram + ;
599#pragma link C++ class TFCS2DFunctionInt8Int32Int32InterpolationExpHistogram + ;
600#pragma link C++ class TFCS2DFunctionInt16Int8Int8InterpolationExpHistogram + ;
601#pragma link C++ class TFCS2DFunctionInt16Int8Int16InterpolationExpHistogram + ;
602#pragma link C++ class TFCS2DFunctionInt16Int8Int32InterpolationExpHistogram + ;
603#pragma link C++ class TFCS2DFunctionInt16Int16Int8InterpolationExpHistogram + ;
604#pragma link \
605 C++ class TFCS2DFunctionInt16Int16Int16InterpolationExpHistogram + \
606 ;
607#pragma link \
608 C++ class TFCS2DFunctionInt16Int16Int32InterpolationExpHistogram + \
609 ;
610#pragma link C++ class TFCS2DFunctionInt16Int32Int8InterpolationExpHistogram + ;
611#pragma link \
612 C++ class TFCS2DFunctionInt16Int32Int16InterpolationExpHistogram + \
613 ;
614#pragma link \
615 C++ class TFCS2DFunctionInt16Int32Int32InterpolationExpHistogram + \
616 ;
617#pragma link C++ class TFCS2DFunctionInt32Int8Int8InterpolationExpHistogram + ;
618#pragma link C++ class TFCS2DFunctionInt32Int8Int16InterpolationExpHistogram + ;
619#pragma link C++ class TFCS2DFunctionInt32Int8Int32InterpolationExpHistogram + ;
620#pragma link C++ class TFCS2DFunctionInt32Int16Int8InterpolationExpHistogram + ;
621#pragma link \
622 C++ class TFCS2DFunctionInt32Int16Int16InterpolationExpHistogram + \
623 ;
624#pragma link \
625 C++ class TFCS2DFunctionInt32Int16Int32InterpolationExpHistogram + \
626 ;
627#pragma link C++ class TFCS2DFunctionInt32Int32Int8InterpolationExpHistogram + ;
628#pragma link \
629 C++ class TFCS2DFunctionInt32Int32Int16InterpolationExpHistogram + \
630 ;
631#pragma link \
632 C++ class TFCS2DFunctionInt32Int32Int32InterpolationExpHistogram + \
633 ;
634
635#endif
636
637#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...