86 std::vector<std::vector<double>> digiTiming)
96 double* TCFitSample =
new double [12];
97 double* preped =
new double [4];
99 int nbin_pedestal = 4;
100 int fam_sampling_interval = 125;
110 double IntervaldT = 125 * 0.001 / Nsmalldt;
112 int FitSleepCounter = 100;
113 int FitSleepThreshold = 12;
115 for (
int iTCIdm = 0; iTCIdm < 576; iTCIdm++) {
117 for (
int iShift = 20; iShift < (NSampling - 12); iShift++) {
120 if (FitSleepCounter <= FitSleepThreshold) {
continue;}
121 for (
int iFitSample = 0; iFitSample < 12; iFitSample++) {
122 int iReplace = iFitSample + iShift;
123 TCFitSample[iFitSample] = digiEnergy[iTCIdm][iReplace] * 1000.0;
125 if (pedFlag == 1 && iFitSample < 4) {
127 TCFitSample[iFitSample] = preped[iFitSample];
136 dTBin = (int)(ShiftdTBin + Nsmalldt);
137 if (dTBin < 1) {dTBin = 1;}
138 if (dTBin > 20) {dTBin = 20;}
142 for (
int iFitSample = 0; iFitSample < 12; iFitSample++) {
143 CoeffAAA +=
m_CoeffNoise31[dTBin - 1][iFitSample] * TCFitSample[iFitSample];
144 CoeffBBB +=
m_CoeffNoise32[dTBin - 1][iFitSample] * TCFitSample[iFitSample];
146 double deltaT = CoeffBBB / CoeffAAA;
148 ShiftdTBin = int(deltaT / IntervaldT + dTBin);
150 double fitE = CoeffAAA;
155 double condition_t = -(deltaT + dTBin * IntervaldT - fam_sampling_interval * 0.001);
157 if (fabs(condition_t) < 0.8 * (fam_sampling_interval * 0.001) && fitE >
m_TCEThreshold[iTCIdm]) {
160 (SmallOffset + iShift + nbin_pedestal - 5) * (fam_sampling_interval * 0.001);
164 double rand_sampling_correction =
165 digiTiming[iTCIdm][iShift] +
166 (nbin_pedestal - iShift + 32) * fam_sampling_interval;
171 rand_sampling_correction);
184 delete [] TCFitSample;
193 std::vector<std::vector<double>> TCDigiT)
202 int ta_id[20] = {1000};
203 double ttt_a[20] = {0};
204 double ttt_b[20] = {0};
205 for (
int iTCIdm = 0; iTCIdm < 576; iTCIdm++) {
209 int maxId[500] = {0};
210 for (
int iii = 0 ; iii < 500 ; iii++) {
220 for (
int iSampling = 1; iSampling < NSampling; iSampling++) {
225 if (TCDigiE[iTCIdm][iSampling] >= max) {
227 max = TCDigiE[iTCIdm][iSampling];
228 maxId[noutput] = iSampling;
233 if (count_down >= flag_down) {
234 if (count_up >= flag_up) {
240 double NoiseLevel = 0;
241 double NoiseCount = 0;
242 for (
int iNoise = 0; iNoise < 5; iNoise++) {
243 int iNoiseReplace = (maxId[noutput] - 10) + iNoise;
244 if (iNoiseReplace >= 0) {
245 NoiseLevel += TCDigiE[iTCIdm][iNoiseReplace];
249 if (NoiseCount != 0) { NoiseLevel /= NoiseCount; }
251 m_TCFitEnergy[iTCIdm].push_back(TCDigiE[iTCIdm][maxId[noutput]] - NoiseLevel);
252 if (!(maxId[noutput] - 1)) {
253 for (
int jSampling = 1; jSampling < maxId[noutput] + 3; jSampling++) {
254 TCDigiE[iTCIdm][jSampling] -= NoiseLevel;
257 for (
int jSampling = maxId[noutput] - 1; jSampling < maxId[noutput] + 3; jSampling++) {
258 TCDigiE[iTCIdm][jSampling] -= NoiseLevel;
262 for (
int iSearch = 0; iSearch < 5; iSearch++) {
264 if (TCDigiE[iTCIdm][maxId[noutput] - iSearch] > 0.6 *
m_TCFitEnergy[iTCIdm][noutput] &&
265 TCDigiE[iTCIdm][maxId[noutput] - iSearch - 1] < 0.6 *
m_TCFitEnergy[iTCIdm][noutput]) {
266 ta_id[noutput] = maxId[noutput] - iSearch - 1;
271 if (ta_id[noutput] == 1000) {
272 printf(
"TrgEclFAMFit::digi02> Cannot find TC Timing (TCId=%5i, E=%8.5f)!!!\n", iTCIdm - 1,
m_TCFitEnergy[iTCIdm][0]);
273 B2ERROR(
"TrgEclFAMFit::digi02> Cannot find TC Timing");
275 ttt_a[noutput] = TCDigiT[iTCIdm][ta_id[noutput]];
276 ttt_b[noutput] = TCDigiT[iTCIdm][ta_id[noutput] + 1];
278 (0.6 *
m_TCFitEnergy[iTCIdm][noutput] - TCDigiE[iTCIdm][ta_id[noutput]]) * (ttt_b[noutput] -
280 / (TCDigiE[iTCIdm][ta_id[noutput] + 1] - TCDigiE[iTCIdm][ta_id[noutput]])) - (278.7 + 2) + (
m_DataBase->getTCFLatency(iTCIdm + 1)));
308 std::vector<std::vector<double>> TCDigiTiming)
321 float max_shape_time = 563.48;
323 for (
int iTCIdm = 0; iTCIdm < 576; iTCIdm++) {
325 int maxId[500] = {0};
331 for (
int iSampling = 1; iSampling < NSampling; iSampling++) {
333 if (TCDigiEnergy[iTCIdm][iSampling] >= max) {
335 max = TCDigiEnergy[iTCIdm][iSampling];
336 maxId[noutput] = iSampling;
341 if (count_down >= flag_down) {
342 if (count_up >= flag_up) {
348 float NoiseLevel = 0;
349 float NoiseCount = 0;
350 for (
int iNoise = 0; iNoise < 42; iNoise++) {
351 int iNoiseReplace = (maxId[noutput] - 88) + iNoise;
352 if (iNoiseReplace >= 0) {
353 NoiseLevel += TCDigiEnergy[iTCIdm][iNoiseReplace];
357 if (NoiseCount != 0) { NoiseLevel /= NoiseCount; }
358 m_TCFitEnergy[iTCIdm].push_back(TCDigiEnergy[iTCIdm][maxId[noutput]] - NoiseLevel);
359 m_TCFitTiming[iTCIdm].push_back(TCDigiTiming[iTCIdm][maxId[noutput]] - max_shape_time + (
m_DataBase->getTCFLatency(iTCIdm)));
381 std::vector<int> TCId;
382 std::vector<double> RawTCTiming;
383 std::vector<double> RawTCEnergy;
384 std::vector<double> RawBeamBkgTag;
385 RawBeamBkgTag.clear();
397 for (
int ii = 0; ii < trgeclDigiArray.
getEntries(); ii++) {
401 TCId.push_back(aTRGECLDigi->
getTCId());
402 RawTCTiming.push_back(aTRGECLDigi -> getRawTiming());
403 RawTCEnergy.push_back(aTRGECLDigi -> getRawEnergy());
407 for (
int iTCId = 0; iTCId < 576 ; iTCId ++) {
409 for (
int iHit = 0; iHit < hitsize; iHit++) {
410 const int rawsize = TCId.size();
411 for (
int iDigi = 0; iDigi < rawsize; iDigi++) {
412 if (TCId[iDigi] != (iTCId + 1)) {
continue;}
413 if (abs(
m_TCFitEnergy[iTCId][iHit] - RawTCEnergy[iDigi]) < 12) {
414 if (abs(
m_TCFitTiming[iTCId][iHit] - RawTCTiming[iDigi]) < 30) {
437 double tc_timing_correction = -15;
439 for (
int iTCIdm = 0; iTCIdm < 576; iTCIdm++) {
441 for (
int iHit = 0; iHit < hitsize; iHit++) {
445 TrgEclHitArray[hitNum]->setEventId(eventid);
446 TrgEclHitArray[hitNum]->setTCId(iTCIdm + 1);
447 TrgEclHitArray[hitNum]->setEnergyDep(
m_TCFitEnergy[iTCIdm][iHit]);
448 TrgEclHitArray[hitNum]->setTimeAve(
m_TCFitTiming[iTCIdm][iHit] + tc_timing_correction);
450 TrgEclHitArray[hitNum]->setBeamBkgTag(
m_BeamBkgInfo[iTCIdm][iHit]);
456 for (
int iTCIdm = 0; iTCIdm < 576; iTCIdm++) {
459 for (
int iHit = 0; iHit < hitsize; iHit++) {
463 TrgEclAnaArray[hitNum]->setEventId(eventid);
464 TrgEclAnaArray[hitNum]->setTCId(iTCIdm + 1);
465 TrgEclAnaArray[hitNum]->setPhiId(
m_TCMap->getTCPhiIdFromTCId(iTCIdm + 1));
466 TrgEclAnaArray[hitNum]->setThetaId(
m_TCMap->getTCThetaIdFromTCId(iTCIdm + 1));
467 TrgEclAnaArray[hitNum]->setRawEnergy(
m_TCRawEnergy[iTCIdm][iHit]);
468 TrgEclAnaArray[hitNum]->setRawTiming(
m_TCRawTiming[iTCIdm][iHit]);
472 int ene_i0 = (int)(
m_TCFitEnergy[iTCIdm][iHit] * 100000.0 / p_ene2adc);
473 double ene_d = (double) ene_i0 * p_ene2adc / 100000;
474 TrgEclAnaArray[hitNum]->setFitEnergy(ene_d);
476 TrgEclAnaArray[hitNum]->setFitTiming(
m_TCFitTiming[iTCIdm][iHit] + tc_timing_correction);
477 TrgEclAnaArray[hitNum]->setBeamBkgTag(
m_BeamBkgInfo[iTCIdm][iHit]);