14 #include <framework/datastore/StoreArray.h>
15 #include <framework/gearbox/Unit.h>
17 #include <ecl/geometry/ECLGeometryPar.h>
18 #include <ecl/dataobjects/ECLSimHit.h>
19 #include <ecl/dataobjects/ECLHit.h>
21 #include "trg/ecl/TrgEclDigitizer.h"
24 #include "trg//ecl/dataobjects/TRGECLDigi0.h"
25 #include "trg/ecl/dataobjects/TRGECLWaveform.h"
37 TrgEclDigitizer::TrgEclDigitizer(): TimeRange(0), _waveform(0), _FADC(1), _BeambkgTag(0)
47 for (
int iTCIdm = 0; iTCIdm < 576; iTCIdm++) {
50 for (
int iTime = 0; iTime < 80; iTime++) {
59 for (
int iii = 0; iii < 60 ; iii++) {
64 for (
int iii = 0; iii < 64 ; iii++) {
108 std::vector< std::vector<float> > E_cell(8736, std::vector<float>(80, 0.0));
109 std::vector< std::vector<float> > T_ave(8736, std::vector<float>(80, 0.0));
110 std::vector< std::vector<float> > Tof_ave(8736, std::vector<float>(80, 0.0));
111 std::vector< std::vector<float> > beambkg_tag(8736, std::vector<float>(80, 0.0));
118 if (TableFlag == 1) {
122 for (
int iHits = 0; iHits < nHits_hit; iHits++) {
124 ECLHit* aECLHit = eclHitArray[iHits];
128 int hitCellId = aECLHit->
getCellId() - 1;
131 if (aveT < - TimeRange || aveT >
TimeRange) {
continue;}
132 int TimeIndex = (int)((aveT +
TimeRange) / 100);
135 TCEnergy[iTCIdm][TimeIndex] += hitE;
136 TCTiming[iTCIdm][TimeIndex] += hitE * aveT;
141 for (
int iTCIdm = 0; iTCIdm < 576; iTCIdm++) {
142 for (
int iTime = 0; iTime < nBinTime; iTime++) {
143 if (
TCEnergy[iTCIdm][iTime] < 1e-9) {
continue;}
153 for (
int iXtalIdm = 0; iXtalIdm < 8736; iXtalIdm++) {
155 if (iTCIdm != iTCId) {
continue;}
156 if (maxbkgE < E_cell[iXtalIdm][iTime]) {
157 maxbkgE = E_cell[iXtalIdm][iTime];
158 maxbkgtag = beambkg_tag[iXtalIdm][iTime];
169 if (TableFlag == 2) {
177 for (
int iHits = 0; iHits < nHits; iHits++) {
181 int hitCellId = aECLSimHit->
getCellId() - 1;
185 G4ThreeVector t = aECLSimHit->
getPosIn();
186 TVector3 HitInPos(t.x(), t.y(), t.z());
189 float local_pos_r = (15.0 - (HitInPos - PosCell) * VecCell);
190 if (hitTOF < - TimeRange || hitTOF >
TimeRange) {
continue;}
191 int TimeIndex = (int)((hitTOF +
TimeRange) / 100);
192 E_cell[hitCellId][TimeIndex] = E_cell[hitCellId][TimeIndex] + hitE;
193 T_ave[hitCellId][TimeIndex] = T_ave[hitCellId][TimeIndex] + hitE * local_pos_r;
194 Tof_ave[hitCellId][TimeIndex] = Tof_ave[hitCellId][TimeIndex] + hitE * hitTOF;
202 for (
int iECLCell = 0; iECLCell < 8736; iECLCell++) {
203 for (
int TimeIndex = 0; TimeIndex < nBinTime; TimeIndex++) {
205 if (E_cell[iECLCell][TimeIndex] < 1e-9) {
continue;}
207 T_ave[iECLCell][TimeIndex] = T_ave[iECLCell][TimeIndex] / E_cell[iECLCell][TimeIndex];
208 T_ave[iECLCell][TimeIndex] =
210 0.0749 * T_ave[iECLCell][TimeIndex] -
211 0.00112 * T_ave[iECLCell][TimeIndex] * T_ave[iECLCell][TimeIndex];
212 Tof_ave[iECLCell][TimeIndex] = Tof_ave[iECLCell][TimeIndex] / E_cell[iECLCell][TimeIndex];
220 for (
int iXtalIdm = 0; iXtalIdm < 8736; iXtalIdm++) {
222 for (
int iTime = 0; iTime < nBinTime; iTime++) {
223 if (E_cell[iXtalIdm][iTime] < 1e-9) {
continue;}
224 TCEnergy[iTCIdm][iTime] += E_cell[iXtalIdm][iTime];
225 TCTiming[iTCIdm][iTime] += E_cell[iXtalIdm][iTime] * (T_ave[iXtalIdm][iTime]);
226 if (beambkg_tag[iXtalIdm][iTime] > 0) {
TCBkgContribution[iTCIdm][iTime] += E_cell[iXtalIdm][iTime];}
227 if (beambkg_tag[iXtalIdm][iTime] == 0) {
TCSigContribution[iTCIdm][iTime] += E_cell[iXtalIdm][iTime];}
231 for (
int iTCIdm = 0; iTCIdm < 576; iTCIdm++) {
232 for (
int iTime = 0; iTime < nBinTime; iTime++) {
237 if (
TCEnergy[iTCIdm][iTime] < 1e-9) {
continue;}
243 for (
int iXtalIdm = 0; iXtalIdm < 8736; iXtalIdm++) {
245 if (iTCIdm != iTCId) {
continue;}
246 if (maxbkgE < E_cell[iXtalIdm][iTime]) {
247 maxbkgE = E_cell[iXtalIdm][iTime];
248 maxbkgtag = beambkg_tag[iXtalIdm][iTime];
265 for (
int iTCIdm = 0; iTCIdm < 576; iTCIdm++) {
266 for (
int iTime = 40; iTime < 50; iTime++) {
284 TCDigiE.resize(576, vector<double>(64 , 0));
286 TCDigiT.resize(576, vector<double>(64 , 0));
289 double cut_energy_tot = 0.03;
290 int nbin_pedestal = 4;
291 double fam_sampling_interval = 125;
295 std::vector< std::vector<float> > noise_pileup(576, std::vector<float>(64, 0.0));
296 std::vector< std::vector<float> > noise_parallel(576, std::vector<float>(64, 0.0));
297 std::vector< std::vector<float> > noise_serial(576, std::vector<float>(64, 0.0));
298 std::vector<float> X_pr(64, 0.0);
299 std::vector<float> X_sr(64, 0.0);
303 double random_sampling_correction = 0;
304 random_sampling_correction = gRandom->Rndm() * fam_sampling_interval;
308 for (
int iTCIdm = 0; iTCIdm < 576; iTCIdm++) {
310 for (
int iTimeBin = 0; iTimeBin < 80; iTimeBin++) {
311 if (
TCEnergy[iTCIdm][iTimeBin] < 0.0001) {
continue;}
312 for (
int iSampling = 0; iSampling < NSampling; iSampling++) {
315 = (-
TCTiming[iTCIdm][iTimeBin] -
TimeRange + (-nbin_pedestal + iSampling) * fam_sampling_interval) * 0.001;
316 inputTiming += random_sampling_correction * 0.001;
317 if (inputTiming < 0 || inputTiming > 2.0) {
continue;}
320 TCDigiE[iTCIdm][iSampling] +=
interFADC(inputTiming) *
TCEnergy[iTCIdm][iTimeBin];
326 for (
int iSampling = 0; iSampling < NSampling; iSampling++) {
327 TCDigiT[iTCIdm][iSampling] = (-nbin_pedestal + iSampling -
TimeRange / fam_sampling_interval) * fam_sampling_interval;
328 TCDigiT[iTCIdm][iSampling] += random_sampling_correction;
336 FILE* f_out_dat = fopen(
"ztsim.no_noise.dat",
"w");
337 for (
int iTCIdm = 0; iTCIdm < 576; iTCIdm++) {
338 if (
TCEnergy_tot[iTCIdm] < cut_energy_tot) {
continue; }
339 fprintf(f_out_dat,
"%5i %8.5f %8.5f %8.1f ",
341 for (
int iSampling = 0; iSampling < NSampling; iSampling++) {
342 fprintf(f_out_dat,
"%7.4f ", TCDigiE[iTCIdm][iSampling]);
344 fprintf(f_out_dat,
"\n");
351 double tmin_noise = -4;
353 int bkg_level = 1030;
360 double frac_pileup = 0.035;
361 double frac_parallel = 0.023;
362 double frac_serial = 0.055;
363 double times_pileup = 1;
364 double times_parallel = 3.15;
365 double times_serial = 3.15;
367 double corr_pileup = times_pileup * frac_pileup * sqrt(fam_sampling_interval * 0.001);
368 double corr_parallel = times_parallel * frac_parallel * sqrt(fam_sampling_interval * 0.001);
369 double corr_serial = times_serial * frac_serial * sqrt(fam_sampling_interval * 0.001);
373 for (
int iTCIdm = 0; iTCIdm < 576; iTCIdm++) {
374 if (
TCEnergy_tot[iTCIdm] < cut_energy_tot) {
continue; }
375 for (
int jjj = 0; jjj < bkg_level; jjj++) {
376 ttt0 = -(tmin_noise + tgen * gRandom->Rndm());
377 ttt1 = -(tmin_noise + tgen * gRandom->Rndm());
378 ttt2 = -(tmin_noise + tgen * gRandom->Rndm());
379 for (
int iSampling = 0; iSampling < NSampling; iSampling++) {
381 if (ttt0 > 0) { TCDigiE[iTCIdm][iSampling] +=
SimplifiedFADC(0, ttt0) * corr_pileup * 0.001; }
383 if (ttt1 > 0) { TCDigiE[iTCIdm][iSampling] +=
SimplifiedFADC(1, ttt1) * corr_parallel; }
385 if (ttt2 > 0) { TCDigiE[iTCIdm][iSampling] +=
SimplifiedFADC(2, ttt2) * corr_serial; }
386 ttt0 += fam_sampling_interval * 0.001;
387 ttt1 += fam_sampling_interval * 0.001;
388 ttt2 += fam_sampling_interval * 0.001;
394 for (
int iTCIdm = 0; iTCIdm < 576; iTCIdm++) {
396 if (
TCEnergy_tot[iTCIdm] < cut_energy_tot) {
continue; }
398 for (
int iSampling = 0; iSampling < NSampling; iSampling++) {
399 X_pr[iSampling] = gRandom ->Gaus(0, 1);
400 X_sr[iSampling] = gRandom ->Gaus(0, 1);
403 for (
int iSampling = 0; iSampling < NSampling; iSampling++) {
404 for (
int jSampling = 0; jSampling < NSampling; jSampling++) {
405 noise_parallel[iTCIdm][iSampling] += 10 * corr_parallel *
MatrixParallel[iSampling][jSampling] * X_pr[jSampling];
406 noise_serial[iTCIdm][iSampling] += 10 * corr_serial *
MatrixSerial[iSampling][jSampling] * X_sr[jSampling];
410 for (
int iSampling = 0; iSampling < NSampling; iSampling++) {
412 TCDigiE[iTCIdm][iSampling] += noise_pileup[iTCIdm][iSampling] + noise_parallel[iTCIdm][iSampling] +
413 noise_serial[iTCIdm][iSampling];
417 for (
int iTCIdm = 0; iTCIdm < 576; iTCIdm++) {
418 if (
TCEnergy_tot[iTCIdm] < cut_energy_tot) {
continue; }
419 for (
int jjj = 0; jjj < bkg_level; jjj++) {
420 ttt0 = -(tmin_noise + tgen * gRandom->Rndm());
421 for (
int iSampling = 0; iSampling < NSampling; iSampling++) {
423 if (ttt0 > 0) { TCDigiE[iTCIdm][iSampling] +=
SimplifiedFADC(0, ttt0) * corr_pileup * 0.001; }
424 ttt0 += fam_sampling_interval * 0.001;
433 for (
int iTCIdm = 0; iTCIdm < 576; iTCIdm++) {
434 for (
int iSampling = 0; iSampling < NSampling; iSampling++) {
435 WaveForm[iTCIdm][iSampling] = TCDigiE[iTCIdm][iSampling];
449 TCDigiE.resize(576, vector<double>(666 , 0));
451 TCDigiT.resize(576, vector<double>(666 , 0));
452 double cut_energy_tot = 0.03;
453 int nbin_pedestal = 100;
454 float fam_sampling_interval = 12;
456 std::vector< std::vector<float> > TCDigiEnergy(576, std::vector<float>(666, 0.0));
457 std::vector< std::vector<float> > TCDigiTiming(576, std::vector<float>(666, 0.0));
461 float random_sampling_correction = 0;
462 random_sampling_correction = gRandom->Rndm() * fam_sampling_interval;
463 for (
int iTCIdm = 0; iTCIdm < 576; iTCIdm++) {
465 for (
int iTimeBin = 0; iTimeBin < 80; iTimeBin++) {
466 if (
TCEnergy[iTCIdm][iTimeBin] < 0.0001) {
continue; }
467 for (
int iSampling = 0; iSampling < NSampling; iSampling++) {
470 = (-
TCTiming[iTCIdm][iTimeBin] -
TimeRange + (-nbin_pedestal + iSampling) * fam_sampling_interval) * 0.001;
472 inputTiming += random_sampling_correction * 0.001;
473 if (inputTiming < 0 || inputTiming > 2.0) {
continue;}
475 TCDigiEnergy[iTCIdm][iSampling] +=
FADC(0, inputTiming) *
TCEnergy[iTCIdm][iTimeBin];
478 for (
int iSampling = 0; iSampling < NSampling; iSampling++) {
479 TCDigiTiming[iTCIdm][iSampling] = (-nbin_pedestal + iSampling -
TimeRange / fam_sampling_interval) * fam_sampling_interval;
480 TCDigiTiming[iTCIdm][iSampling] += random_sampling_correction;
487 double tmin_noise = -4;
489 int bkg_level = 1030;
493 double frac_pileup = 0.035;
494 double frac_parallel = 0.023;
495 double frac_serial = 0.055;
496 double times_pileup = 1;
497 double times_parallel = 1;
498 double times_serial = 1;
499 double corr_pileup = times_pileup * frac_pileup * sqrt(fam_sampling_interval * 0.001);
500 double corr_parallel = times_parallel * frac_parallel * sqrt(fam_sampling_interval * 0.001);
501 double corr_serial = times_serial * frac_serial * sqrt(fam_sampling_interval * 0.001);
502 corr_pileup = 0.011068;
503 corr_parallel = 0.00727324;
504 corr_serial = 0.0173925;
507 for (
int iTCIdm = 0; iTCIdm < 576; iTCIdm++) {
508 if (
TCEnergy_tot[iTCIdm] < cut_energy_tot) {
continue; }
509 for (
int jjj = 0; jjj < bkg_level; jjj++) {
510 ttt0 = -(tmin_noise + tgen * gRandom->Rndm());
511 ttt1 = -(tmin_noise + tgen * gRandom->Rndm());
512 ttt2 = -(tmin_noise + tgen * gRandom->Rndm());
513 for (
int iSampling = 0; iSampling < NSampling; iSampling++) {
515 if (ttt0 > 0) { TCDigiEnergy[iTCIdm][iSampling] +=
FADC(0, ttt0) * corr_pileup * 0.001; }
517 if (ttt1 > 0) { TCDigiEnergy[iTCIdm][iSampling] +=
FADC(1, ttt1) * corr_parallel; }
519 if (ttt2 > 0) { TCDigiEnergy[iTCIdm][iSampling] +=
FADC(2, ttt2) * corr_serial; }
520 ttt0 += fam_sampling_interval * 0.001;
521 ttt1 += fam_sampling_interval * 0.001;
522 ttt2 += fam_sampling_interval * 0.001;
538 for (
int iTCIdm = 0; iTCIdm < 576; iTCIdm++) {
539 for (
int iBinTime = 0; iBinTime < 80; iBinTime++) {
540 if (
TCEnergy[iTCIdm][iBinTime] < 0.001) {
continue;}
545 TCDigiArray[m_hitNum]->setEventId(m_nEvent);
546 TCDigiArray[m_hitNum]->setTCId(iTCIdm + 1);
547 TCDigiArray[m_hitNum]->setiBinTime(iBinTime);
548 TCDigiArray[m_hitNum]->setRawEnergy(
TCEnergy[iTCIdm][iBinTime]);
549 TCDigiArray[m_hitNum]->setRawTiming(
TCTiming[iTCIdm][iBinTime]);
551 TCDigiArray[m_hitNum]->setBeamBkgTag(
TCBeambkgTag[iTCIdm][iBinTime]);
558 for (
int iTCIdm = 0; iTCIdm < 576; iTCIdm++) {
559 if (iTCIdm == 80) iTCIdm = 512;
575 std::vector<double> SignalAmp;
576 std::vector<double> SignalTime;
581 timing = timing * 1000;
582 int startbin = (int)(timing) / 12;
583 int endbin = startbin + 1;
586 SignalAmp = { 0, 3.47505e-06, 0.000133173, 0.000939532, 0.00337321, 0.00845977, 0.0170396, 0.0296601, 0.0465713, 0.0677693, 0.0930545, 0.122086, 0.154429, 0.189595, 0.227068, 0.266331, 0.306882, 0.348243, 0.389971, 0.431664, 0.472959, 0.513539, 0.553127, 0.59149, 0.628431, 0.663791, 0.697445, 0.729297, 0.759281, 0.787354, 0.813494, 0.837698, 0.859982, 0.880372, 0.898908, 0.915639, 0.930622, 0.943919, 0.955598, 0.965731, 0.97439, 0.98165, 0.987587, 0.992275, 0.995788, 0.9982, 0.999581, 1, 0.999525, 0.998219, 0.996143, 0.993356, 0.989846, 0.985364, 0.979439, 0.971558, 0.961304, 0.948421, 0.932809, 0.914509, 0.893664, 0.870494, 0.845267, 0.818279, 0.789837, 0.76025, 0.729815, 0.698815, 0.667511, 0.636141, 0.604919, 0.574035, 0.543654, 0.513915, 0.484939, 0.456822, 0.429643, 0.403462, 0.378324, 0.354259, 0.331286, 0.309412, 0.288633, 0.26894, 0.250316, 0.232736, 0.216174, 0.200597, 0.185972, 0.172262, 0.159428, 0.147431, 0.136232, 0.12579, 0.116067, 0.107022, 0.0986191, 0.0908193, 0.0835871, 0.0768874, 0.0706867, 0.0649528, 0.0596551, 0.0547641, 0.0502523, 0.0460932, 0.042262, 0.0387353, 0.0354909, 0.0325082, 0.0297677, 0.0272511, 0.0249416, 0.0228232, 0.020881, 0.0191014, 0.0174714, 0.0159792, 0.0146138, 0.0133649, 0.012223, 0.0111793, 0.0102258, 0.00935504, 0.00856, 0.00783438, 0.00717232, 0.00656842, 0.00601773, 0.00551567, 0.00505807, 0.00464106, 0.00426114, 0.00391506, 0.00359985, 0.0033128, 0.00305143, 0.00281346, 0.00259681, 0.00239957, 0.00222002, 0.00205655, 0.00190773, 0.00177223, 0.00164885, 0.00153648, 0.00143413, 0.00134087, 0.00125589, 0.00117842, 0.00110777, 0.00104332, 0.000984488, 0.000930766, 0.000881678, 0.000836798, 0.000795734, 0.000758134, 0.000723677, 0.00069207, 0.000663051, 0.000636377, 0.000611832, 0.000589219, 0.000568358, 0.000549086, 0.000531258, 0.000514738, 0.000499407, 0.000485156, 0.000471884, 0.000459502, 0.00044793, 0.000437092, 0.000426923, 0.000417363, 0.000408356, 0.000399853, 0.000391811, 0.000384187, 0.000376946, 0.000370055, 0.000363483, 0.000357203, 0.000351192, 0.000345426, 0.000339886, 0.000334554, 0.000329413, 0.000324448, 0.000319645, 0.000314993, 0.000310481, 0.000306098, 0.000301836, 0.000297686, 0.00029364, 0.000289693, 0.000285837, 0.000282068, 0.00027838, 0.000274768, 0.000271229, 0.000267759, 0.000264354, 0.000261011, 0.000257727, 0.000254499, 0.000251326, 0.000248204, 0.000245132, 0.000242108, 0.000239131, 0.000236198, 0.000233308, 0.00023046, 0.000227653, 0.000224885, 0.000222155, 0.000219463, 0.000216807, 0.000214187, 0.000211602, 0.00020905, 0.000206532, 0.000204046, 0.000201593, 0.00019917, 0.000196779, 0.000194417, 0.000192085, 0.000189782, 0.000187508, 0.000185262, 0.000183044, 0.000180853, 0.000178689, 0.000176552, 0.000174441, 0.000172355, 0.000170295, 0.00016826, 0.000166249, 0.000164263, 0.000162301, };
588 SignalTime = { 0, 12, 24, 36, 48, 60, 72, 84, 96, 108, 120, 132, 144, 156, 168, 180, 192, 204, 216, 228, 240, 252, 264, 276, 288, 300, 312, 324, 336, 348, 360, 372, 384, 396, 408, 420, 432, 444, 456, 468, 480, 492, 504, 516, 528, 540, 552, 564, 576, 588, 600, 612, 624, 636, 648, 660, 672, 684, 696, 708, 720, 732, 744, 756, 768, 780, 792, 804, 816, 828, 840, 852, 864, 876, 888, 900, 912, 924, 936, 948, 960, 972, 984, 996, 1008, 1020, 1032, 1044, 1056, 1068, 1080, 1092, 1104, 1116, 1128, 1140, 1152, 1164, 1176, 1188, 1200, 1212, 1224, 1236, 1248, 1260, 1272, 1284, 1296, 1308, 1320, 1332, 1344, 1356, 1368, 1380, 1392, 1404, 1416, 1428, 1440, 1452, 1464, 1476, 1488, 1500, 1512, 1524, 1536, 1548, 1560, 1572, 1584, 1596, 1608, 1620, 1632, 1644, 1656, 1668, 1680, 1692, 1704, 1716, 1728, 1740, 1752, 1764, 1776, 1788, 1800, 1812, 1824, 1836, 1848, 1860, 1872, 1884, 1896, 1908, 1920, 1932, 1944, 1956, 1968, 1980, 1992, 2004, 2016, 2028, 2040, 2052, 2064, 2076, 2088, 2100, 2112, 2124, 2136, 2148, 2160, 2172, 2184, 2196, 2208, 2220, 2232, 2244, 2256, 2268, 2280, 2292, 2304, 2316, 2328, 2340, 2352, 2364, 2376, 2388, 2400, 2412, 2424, 2436, 2448, 2460, 2472, 2484, 2496, 2508, 2520, 2532, 2544, 2556, 2568, 2580, 2592, 2604, 2616, 2628, 2640, 2652, 2664, 2676, 2688, 2700, 2712, 2724, 2736, 2748, 2760, 2772, 2784, 2796, 2808, 2820, 2832, 2844, 2856, 2868, 2880, 2892, 2904, 2916, 2928, };
592 if (timing < 0 || timing > 2928) {
return E_out;}
594 if (timing > SignalTime[startbin] && timing < SignalTime[endbin]) {
595 E_out = (((SignalAmp[endbin] - SignalAmp[startbin])) / (SignalTime[endbin] - SignalTime[startbin])) *
596 (timing - SignalTime[startbin]) + SignalAmp[startbin];
622 static double tc, tc2, tsc, tris, b1, b2;
623 static double amp, dft, as;
654 while (flag_once == 0) {
655 double dt = tt / 1000;
657 for (
int j = 1; j <= 1000; j++) {
660 (
ShapeF(tc, t1, b1, t2, b2, td, tsc) -
661 ShapeF(tc, t1, b1, t2, b2, td, tris) * 0.01) -
662 (
ShapeF(tc2, t1, b1, t2, b2, td, tsc) -
663 ShapeF(tc2, t1, b1, t2, b2, td, tris) * 0.01) * as;
679 dt = tm * 0.02 / 1000;
695 (
ShapeF(timing, t1, b1, t2, b2, td, tsc) -
696 ShapeF(timing, t1, b1, t2, b2, td, tris) * 0.01) -
697 (
ShapeF(tc2, t1, b1, t2, b2, td, tsc) -
698 ShapeF(tc2, t1, b1, t2, b2, td, tris) * 0.01) * as);
699 }
else if (flag_gen == 1) {
704 ShapeF(timing, t1, b1, t2, b2, td, tsh) -
705 ShapeF(tc2, t1, b1, t2, b2, td, tsh) * as);
712 ShapeF(timing, t1, b1, t2, b2, td, tsh) -
713 ShapeF(tc2, t1, b1, t2, b2, td, tsh) * as);
716 if (tc < 0) { tc = 0; }
720 ShapeF(tc, t1, b1, t2, b2, td, tsh) -
721 ShapeF(tc2, t1, b1, t2, b2, td, tsh) * as) - pdf) / dd;
741 double das1, das0, dac0;
742 double dcs0s, dsn0s, dcs0d, dsn0d;
743 double dcs1s, dsn1s, dcs1d, dsn1d;
746 if (t00 < 0)
return 0;
748 dr = (ts1 - td1) / td1;
749 if (fabs(dr) <= 1.0e-5) {
750 if (ts1 > td1) { ts1 = td1 * 1.00001; }
751 else { ts1 = td1 * 0.99999; }
754 dr = (pow((t01 - t02), 2) + pow((tb1 - tb2), 2)) / (pow((t01), 2) + pow((tb1), 2));
756 if (t01 < t02) { t01 = t02 / 1.00001; }
757 else { t01 = t02 / 0.99999; }
759 if (t00 <= 0.0)
return 0;
770 das0 = b2 * (pow((b1 - a1), 2) + (b2 + a2) * (b2 - a2));
771 dac0 = -2 * (b1 - a1) * a2 * b2;
772 das1 = a2 * (pow((b1 - a1), 2) - (b2 + a2) * (b2 - a2));
774 dsn0s = ((c2 - a1) * das0 - (-a2) * dac0) / (pow(a2, 2) + pow((c2 - a1), 2));
775 dcs0s = ((-a2) * das0 + (c2 - a1) * dac0) / (pow(a2, 2) + pow((c2 - a1), 2));
777 dsn1s = ((c2 - b1) * das1 - (-b2) * (-dac0)) / (pow(b2, 2) + pow((c2 - b1), 2));
778 dcs1s = ((-b2) * das1 + (c2 - b1) * (-dac0)) / (pow(b2, 2) + pow((c2 - b1), 2));
780 dsn0d = ((c1 - a1) * das0 - (-a2) * dac0) / (pow(a2, 2) + pow((c1 - a1), 2));
781 dcs0d = ((-a2) * das0 + (c1 - a1) * dac0) / (pow(a2, 2) + pow((c1 - a1), 2));
783 dsn1d = ((c1 - b1) * das1 - (-b2) * (-dac0)) / (pow(b2, 2) + pow((c1 - b1), 2));
784 dcs1d = ((-b2) * das1 + (c1 - b1) * (-dac0)) / (pow(b2, 2) + pow((c1 - b1), 2));
788 dzna = (pow((b1 - a1), 2) + pow((b2 - a2), 2)) * (pow((b1 - a1), 2) + pow((a2 + b2), 2));
791 (dcs0s + dcs1s) * exp(-c2 * t00) * (-1) +
792 (dcs0d + dcs1d) * exp(-c1 * t00) +
793 ((dsn0s - dsn0d) * sin(a2 * t00) + (dcs0s - dcs0d) * cos(a2 * t00)) * exp(-a1 * t00) +
794 ((dsn1s - dsn1d) * sin(b2 * t00) + (dcs1s - dcs1d) * cos(b2 * t00)) * exp(-b1 * t00)
796 / dzna / (1 / c2 - 1 / c1);
821 static double tc, tc2, tsc, tris;
822 static double amp, td, t1, t2, dft, as;
851 while (flag_once == 0) {
852 double dt = tt / 1000;
855 for (
int j = 1; j <= 1000; j++) {
859 ShapeF(tc, tris) * 0.01) -
861 ShapeF(tc2, tris) * 0.01) * as;
877 dt = tm * 0.02 / 1000;
894 ShapeF(timing, tris) * 0.01) -
896 ShapeF(tc2, tris) * 0.01) * as);
897 }
else if (flag_gen == 1) {
914 if (tc < 0) { tc = 0; }
919 ShapeF(tc2, tsh) * as) - pdf) / dd;
932 double dcs0s, dsn0s, dcs0d, dsn0d;
933 double dcs1s, dsn1s, dcs1d, dsn1d;
934 double a1, a2, b1, b2, c1, c2;
937 if (t00 <= 0.0)
return 0;
966 dcs0s = -0.000204983;
990 (dcs0s + dcs1s) * exp(-c2 * t00) * (-1) +
991 (dcs0d + dcs1d) * exp(-c1 * t00) +
992 ((dsn0s - dsn0d) * sin(a2 * t00) + (dcs0s - dcs0d) * cos(a2 * t00)) * exp(-a1 * t00) +
993 ((dsn1s - dsn1d) * sin(b2 * t00) + (dcs1s - dcs1d) * cos(b2 * t00)) * exp(-b1 * t00)
995 / dzna / (1 / c2 - 1 / c1);
1010 if (aaa > bbb) {
return aaa; }
1011 else {
return bbb; }