Skip to content
1 change: 1 addition & 0 deletions include/MModuleDepthCalibration.h
Original file line number Diff line number Diff line change
Expand Up @@ -197,6 +197,7 @@ class MModuleDepthCalibration : public MModule
uint64_t m_ErrorNullSH;
uint64_t m_ErrorNoE;
unordered_map<int, MDDetector*> m_Detectors;
unordered_map<int, MDDetector*> m_GRDetectors;
vector<unsigned int> m_DetectorIDs;
MModuleEnergyCalibration* m_EnergyCalibration;
MGUIExpoDepthCalibration* m_ExpoDepthCalibration;
Expand Down
102 changes: 62 additions & 40 deletions src/MHit.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,18 @@ bool MHit::StreamDat(ostream& S, int Version)
}
} else if (Version == 3) {
// Stream the hit information, including low-voltage and high-voltage energy, then stream the strip hit information
S<<"HT "<<m_Position.GetX()<<" "<<m_Position.GetY()<<" "<<m_Position.GetZ()<<" "<<m_Energy<<" "<<m_LVEnergy<<" "<<m_HVEnergy<<endl;
if ((m_GuardRingHit == false) && (m_NoDepth == false)) {
S<<"HT "<<m_Position.GetX()<<" "<<m_Position.GetY()<<" "<<m_Position.GetZ()<<" "<<m_Energy<<" "<<m_LVEnergy<<" "<<m_HVEnergy<<endl;

} else if (m_GuardRingHit == true) {
S<<"GR "<<m_Position.GetX()<<";"<<m_Position.GetY()<<";"<<m_Position.GetZ()<<";"<<m_Energy;
S<<endl;

} else if (m_NoDepth == true) {
S<<"XE "<<m_Position.GetX()<<";"<<m_Position.GetY()<<";"<<m_Position.GetZ()<<";"<<m_Energy;
Comment thread
fhagemann marked this conversation as resolved.
S<<endl;
}

for (auto SH : m_StripHits) {
SH->StreamDat(S, 0);
}
Expand All @@ -230,54 +241,65 @@ void MHit::StreamEvta(ostream& S)
{
// Stream the hit in MEGAlib's EVTA format

// Assemble the origin information
vector<int> Origins;

// Only origins existing on both low-voltage and high-voltage strips count
vector<int> LVOrigins;
vector<int> HVOrigins;
for (unsigned int s = 0; s < GetNStripHits(); ++s) {
MStripHit* StripHit = m_StripHits[s];
vector<int> NewOrigins = StripHit->GetOrigins();
if (StripHit->IsLowVoltageStrip() == true) {
for (int o: NewOrigins) {
LVOrigins.push_back(o);
}
} else {
for (int o: NewOrigins) {
HVOrigins.push_back(o);
}
}
}

sort(LVOrigins.begin(), LVOrigins.end());
LVOrigins.erase(unique(LVOrigins.begin(), LVOrigins.end()), LVOrigins.end());
sort(HVOrigins.begin(), HVOrigins.end());
HVOrigins.erase(unique(HVOrigins.begin(), HVOrigins.end()), HVOrigins.end());
if ((m_GuardRingHit == false) && (m_NoDepth == false)) {

set_intersection(LVOrigins.begin(), LVOrigins.end(),
HVOrigins.begin(), HVOrigins.end(),
std::back_inserter(Origins));
// Assemble the origin information
vector<int> Origins;

if ((LVOrigins.size() != 0 || HVOrigins.size() != 0) && Origins.size() == 0) {
// If strip pairing mixed the hits completely, keep the mixed origin information
// Only origins existing on both low-voltage and high-voltage strips count
vector<int> LVOrigins;
vector<int> HVOrigins;
for (unsigned int s = 0; s < GetNStripHits(); ++s) {
MStripHit* StripHit = m_StripHits[s];
vector<int> NewOrigins = StripHit->GetOrigins();
for (int o: NewOrigins) {
Origins.push_back(o);
if (StripHit->IsLowVoltageStrip() == true) {
for (int o: NewOrigins) {
LVOrigins.push_back(o);
}
} else {
for (int o: NewOrigins) {
HVOrigins.push_back(o);
}
}
}
sort(Origins.begin(), Origins.end());
Origins.erase(unique(Origins.begin(), Origins.end()), Origins.end());
}

S<<"HT 3;"<<m_Position.GetX()<<";"<<m_Position.GetY()<<";"<<m_Position.GetZ()<<";"<<m_Energy
<<";"<<m_PositionResolution.GetX()<<";"<<m_PositionResolution.GetY()<<";"<<m_PositionResolution.GetZ()<<";"<<m_EnergyResolution;
for (unsigned int i = 0; i < Origins.size(); ++i) {
S<<";"<<Origins[i];
sort(LVOrigins.begin(), LVOrigins.end());
LVOrigins.erase(unique(LVOrigins.begin(), LVOrigins.end()), LVOrigins.end());
sort(HVOrigins.begin(), HVOrigins.end());
HVOrigins.erase(unique(HVOrigins.begin(), HVOrigins.end()), HVOrigins.end());

set_intersection(LVOrigins.begin(), LVOrigins.end(),
HVOrigins.begin(), HVOrigins.end(),
std::back_inserter(Origins));

if ((LVOrigins.size() != 0 || HVOrigins.size() != 0) && Origins.size() == 0) {
// If strip pairing mixed the hits completely, keep the mixed origin information
for (unsigned int s = 0; s < GetNStripHits(); ++s) {
MStripHit* StripHit = m_StripHits[s];
vector<int> NewOrigins = StripHit->GetOrigins();
for (int o: NewOrigins) {
Origins.push_back(o);
}
}
sort(Origins.begin(), Origins.end());
Origins.erase(unique(Origins.begin(), Origins.end()), Origins.end());
}

S<<"HT 3;"<<m_Position.GetX()<<";"<<m_Position.GetY()<<";"<<m_Position.GetZ()<<";"<<m_Energy
<<";"<<m_PositionResolution.GetX()<<";"<<m_PositionResolution.GetY()<<";"<<m_PositionResolution.GetZ()<<";"<<m_EnergyResolution;
for (unsigned int i = 0; i < Origins.size(); ++i) {
S<<";"<<Origins[i];
}
S<<endl;

} else if (m_GuardRingHit == true) {
S<<"GR "<<m_Position.GetX()<<";"<<m_Position.GetY()<<";"<<m_Position.GetZ()<<";"<<m_Energy;
S<<endl;

} else if (m_NoDepth == true) {
S<<"XE "<<m_Position.GetX()<<";"<<m_Position.GetY()<<";"<<m_Position.GetZ()<<";"<<m_Energy;
Comment thread
fhagemann marked this conversation as resolved.
S<<endl;
}
S<<endl;
}


Expand Down
Loading
Loading