11 #include <top/dataobjects/TOPDigit.h>
12 #include <top/dataobjects/TOPRawDigit.h>
13 #include <top/dataobjects/TOPSimHit.h>
14 #include <mdst/dataobjects/MCParticle.h>
15 #include <framework/datastore/RelationVector.h>
25 float TOPDigit::s_doubleHitResolution = 0;
26 float TOPDigit::s_pileupTime = 0;
28 int TOPDigit::getModulo256Sample()
const
30 int sample = int(m_rawTime);
31 if (m_rawTime < 0) sample--;
32 sample += (int) m_firstWindow * 64;
33 if (sample < 0)
return 256 + sample % 256;
40 const auto* bgDigit =
static_cast<const TOPDigit*
>(bg);
41 double diff = m_time - bgDigit->
getTime();
43 if (fabs(diff) > s_doubleHitResolution)
return DigitBase::c_Append;
45 if (fabs(diff) < s_pileupTime) {
46 double time[2] = {m_time, bgDigit->getTime()};
47 double rawTime[2] = {m_rawTime, bgDigit->getRawTime()};
48 int pulseHeight[2] = {m_pulseHeight, bgDigit->getPulseHeight()};
49 double sum = pulseHeight[0] + pulseHeight[1];
51 m_time = (time[0] * pulseHeight[0] + time[1] * pulseHeight[1]) / sum;
52 m_rawTime = (rawTime[0] * pulseHeight[0] + rawTime[1] * pulseHeight[1]) / sum;
57 m_time = (time[0] + time[1]) / 2;
58 m_rawTime = (rawTime[0] + rawTime[1]) / 2;
63 m_pulseHeight = int(sum);
64 double reweight = sum > 0 ? pulseHeight[0] / sum : 0.5;
65 auto relSimHits = this->getRelationsTo<TOPSimHit>();
66 for (
size_t i = 0; i < relSimHits.size(); ++i) {
67 float weight = relSimHits.weight(i) * reweight;
68 relSimHits.setWeight(i, weight);
70 auto relRawDigits = this->getRelationsTo<TOPRawDigit>();
71 for (
size_t i = 0; i < relRawDigits.size(); ++i) {
72 float weight = relRawDigits.weight(i) * reweight;
73 relRawDigits.setWeight(i, weight);
75 auto relMCParticles = this->getRelationsTo<MCParticle>();
76 for (
size_t i = 0; i < relMCParticles.size(); ++i) {
77 float weight = relMCParticles.weight(i) * reweight;
78 relMCParticles.setWeight(i, weight);
86 auto relSimHits = this->getRelationsTo<TOPSimHit>();
87 for (
int i = relSimHits.size() - 1; i >= 0; --i) {
90 auto relRawDigits = this->getRelationsTo<TOPRawDigit>();
91 for (
int i = relRawDigits.size() - 1; i >= 0; --i) {
92 relRawDigits.remove(i);
94 auto relMCParticles = this->getRelationsTo<MCParticle>();
95 for (
int i = relMCParticles.size() - 1; i >= 0; --i) {
96 relMCParticles.remove(i);
100 return DigitBase::c_DontAppend;