Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions include/MModuleDepthCalibration.h
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,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
89 changes: 50 additions & 39 deletions src/MHit.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -193,54 +193,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;
S<<endl;
}
S<<endl;
}


Expand Down
Loading
Loading