64void TileSampleGenerator::fillNSamples(
double t0,
double pedestal,
double amp_it,
const std::vector<float>& amp_pu, TF1* pdf,
bool addNoise,
double itOffset,
int nSamples,
int nPul) {
66 std::unique_ptr<TileSampleBuffer> bufall = std::make_unique<TileSampleBuffer>(nPul, -25*((nPul-1)/2), 25.);
69 cout <<
"Pileup pulses:" << std::endl;
70 for (std::vector<float>::const_iterator i = amp_pu.begin(); i != amp_pu.end(); ++i)
71 std::cout << *i <<
' ';
72 std::cout << std::endl;
76 double tin, amp_it_out;
77 int nAmp = amp_pu.size();
79 vector<float> amp_pu_out(nAmp);
80 int x = (nAmp-1)/2 + nSamples;
81 double amp_total = pedestal;
83 for (
int i = 0; i < nSamples; i++) {
86 cout <<
"sample to compute: " << i <<
" " << amp_total << std::endl;
88 for (
int j = 0; j < nAmp ; j++) {
90 t[j] = bufall->getTime(
x + i - j) -
t0;
93 cout <<
"pileupsample to compute " << j << std::endl;
95 cout <<
" time in " << i <<
" " << j <<
" " << (
x + i - j) <<
" " <<
" buf " << bufall->getTime(
x + i - j) <<
" time_out " << t[j] << std::endl;
97 if (t[j] < -((nSamples-1)/2)*25. || t[j] > ((nSamples+1)/2)*25.)
99 amp_pu_out[j] =
m_ps->eval(t[j]) * amp_pu.at(j);
100 amp_total += amp_pu_out[j];
103 cout <<
" amp_pu " << amp_pu.at(j) <<
" ps " <<
m_ps->eval(t[j]) <<
" amp_out " << amp_pu_out[j] << std::endl;
105 cout <<
" amp_total " << amp_total << std::endl;
108 tin =
m_buf->getTime(i) -
t0 + itOffset;
109 amp_it_out =
m_ps->eval(tin) * amp_it;
110 amp_total += amp_it_out;
113 cout <<
" INTIME amp_it " << amp_it <<
" ps " <<
m_ps->eval(tin) <<
" amp_it_out " << amp_it_out << std::endl;
115 std::cout <<
" amp_total " << amp_total << std::endl;
117 double noise(0), val(amp_total);
119 noise = pdf->GetRandom();
123 cout <<
" FINAL " << amp_total << std::endl;
124 m_buf->setValueNoise(i, (noise));
125 m_buf->setValue(i, val);
133 std::unique_ptr<TileSampleBuffer> bufall = std::make_unique<TileSampleBuffer>(nPul, -25*((nPul-1)/2), 25.);
136 std::cout <<
"Pileup pulses:" << std::endl;
137 for (std::vector<float>::const_iterator i = amp_pu.begin(); i != amp_pu.end(); ++i)
138 std::cout << *i <<
' ';
139 std::cout << std::endl;
142 double amp_it_out = pedestal;
145 for (
int pul=0; pul < nPul; pul++){
147 t[pul] = bufall->getTime(pul) -
t0;
150 amp_it_out +=
m_ps->eval(t[pul],
false,
true) * amp_pu.at(pul);
153 amp_it_out += (
m_ps->eval(t[pul],
false,
true) * amp_pu.at(pul)) / 40;
157 std::cout <<
"nPul-1-pul: " << pul <<
" getTime(nPul-1-pul) " << bufall->getTime(pul) <<
" ps " <<
m_ps->eval(bufall->getTime(pul),
false,
true) << std::endl;
158 std::cout <<
"PU sample " << pul <<
", pulse shape evaluated for t'=" << t[pul] << std::endl;
159 std::cout <<
"Contribution for in time amp " <<
m_ps->eval(t[pul],
false,
true) <<
" * " << amp_pu.at(pul) << std::endl;
160 std::cout << std::endl;
165 amp_it_out += pdf->GetRandom();
186 float amp_total[7] = { 0, 0, 0, 0, 0, 0, 0 };
188 const float Q_1pe = 17.;
189 const float tail_prob = 0.18;
191 for (
int i = 0; i < 7; i++) {
197 tail_Q = Q_1pe *
m_rndm->Binomial((
int) (amp_pu[i] / Q_1pe), tail_prob);
199 amp_total[i] += amp_pu[i] - tail_Q;
201 amp_total[i + 1] += tail_Q;
205 tail_Q = Q_1pe *
m_rndm->Binomial((
int) amp_it / Q_1pe, tail_prob);
207 amp_total[3] += amp_it - tail_Q;
208 amp_total[4] += tail_Q;
223 for (
unsigned int i = 0; i < 7; i++) {
224 m_buf->setValueNoise(i, 0);
225 m_buf->setValue(i, amp_total[i]);
void fillSamples(double t0, double pedestal, double amplitude1, double amplitude2, TF1 *pdf, bool addNoise, double itOffset=0, double otOffset=50)
void fillNSamples(double t0, double pedestal, double amp_it, const std::vector< float > &_pu, TF1 *pdf, bool addNoise, double itOffset=0, int nSamples=7, int nPul=21)
float fillSample(double t0, double pedestal, const std::vector< float > &_pu, TF1 *pdf, bool addNoise, int nPul=21, int gain=1)