diff --git a/include/MGUIOptionsEventSaver.h b/include/MGUIOptionsEventSaver.h index fe466302..a6f79050 100644 --- a/include/MGUIOptionsEventSaver.h +++ b/include/MGUIOptionsEventSaver.h @@ -81,6 +81,9 @@ class MGUIOptionsEventSaver : public MGUIOptions //! Checkbutton to save or reject bad events TGCheckButton* m_SaveBadEvents; + //! Checkbutton to save or reject quality flag events + TGCheckButton* m_SavePoorQualityEvents; + //! Checkbutton to save veto events TGCheckButton* m_SaveVetoEvents; diff --git a/include/MModuleEventSaver.h b/include/MModuleEventSaver.h index e3f1d952..44064268 100644 --- a/include/MModuleEventSaver.h +++ b/include/MModuleEventSaver.h @@ -63,6 +63,11 @@ class MModuleEventSaver : public MModule //! Set whether the Bad events should be saved void SetSaveBadEvents(bool SaveBadEvents) { m_SaveBadEvents = SaveBadEvents; } + //! Return true if the Poor Quality events should be saved + bool GetSavePoorQualityEvents() const { return m_SavePoorQualityEvents; } + //! Set whether the Poor Quality events should be saved + void SetSavePoorQualityEvents(bool SavePoorQualityEvents) { m_SavePoorQualityEvents = SavePoorQualityEvents; } + //! Return true if the Veto events should be saved bool GetSaveVetoEvents() const { return m_SaveVetoEvents; } //! Set whether the Veto events should be saved @@ -193,6 +198,9 @@ class MModuleEventSaver : public MModule //! Save bad events bool m_SaveBadEvents; + //! Save poor quality events + bool m_SavePoorQualityEvents; + //! Save Veto events bool m_SaveVetoEvents; diff --git a/include/MReadOutAssembly.h b/include/MReadOutAssembly.h index 9d5005f5..1da4a236 100644 --- a/include/MReadOutAssembly.h +++ b/include/MReadOutAssembly.h @@ -249,6 +249,8 @@ class MReadOutAssembly : public MReadOutSequence bool IsGood() const; //! Returns true if any of the "bad" or "Error" flags has been set bool IsBad() const; + //! Returns true if any of the Quality flags have been set + bool IsPoorQuality() const; //! Set a specific analysis progress void SetAnalysisProgress(uint64_t Progress) { m_AnalysisProgress |= Progress; } diff --git a/src/MGUIOptionsEventSaver.cxx b/src/MGUIOptionsEventSaver.cxx index ab913a43..20328f33 100644 --- a/src/MGUIOptionsEventSaver.cxx +++ b/src/MGUIOptionsEventSaver.cxx @@ -108,6 +108,10 @@ void MGUIOptionsEventSaver::Create() m_SaveBadEvents->SetOn(dynamic_cast(m_Module)->GetSaveBadEvents()); GeneralFrame->AddFrame(m_SaveBadEvents, FirstLabelLayout); + m_SavePoorQualityEvents = new TGCheckButton(GeneralFrame, "Save events with quality flag (QA)", 1); + m_SavePoorQualityEvents->SetOn(dynamic_cast(m_Module)->GetSavePoorQualityEvents()); + GeneralFrame->AddFrame(m_SavePoorQualityEvents, TightButtonLayout); + m_SaveVetoEvents = new TGCheckButton(GeneralFrame, "Save guard ring and shield veto events (Veto)", 1); m_SaveVetoEvents->SetOn(dynamic_cast(m_Module)->GetSaveVetoEvents()); GeneralFrame->AddFrame(m_SaveVetoEvents, TightButtonLayout); @@ -229,6 +233,7 @@ bool MGUIOptionsEventSaver::OnApply() dynamic_cast(m_Module)->SetFileName(m_FileSelector->GetFileName()); dynamic_cast(m_Module)->SetSaveBadEvents(m_SaveBadEvents->IsOn()); + dynamic_cast(m_Module)->SetSavePoorQualityEvents(m_SavePoorQualityEvents->IsOn()); dynamic_cast(m_Module)->SetSaveVetoEvents(m_SaveVetoEvents->IsOn()); dynamic_cast(m_Module)->SetAddTimeTag(m_AddTimeTag->IsOn()); dynamic_cast(m_Module)->SetSplitFile(m_SplitFile->IsOn()); diff --git a/src/MModuleEventSaver.cxx b/src/MModuleEventSaver.cxx index dc7671c3..c1ff7e08 100644 --- a/src/MModuleEventSaver.cxx +++ b/src/MModuleEventSaver.cxx @@ -75,6 +75,7 @@ MModuleEventSaver::MModuleEventSaver() : MModule() m_InternalFileName = ""; m_Zip = false; m_SaveBadEvents = true; + m_SavePoorQualityEvents = true; m_SaveVetoEvents = true; m_AddTimeTag = false; @@ -345,6 +346,10 @@ bool MModuleEventSaver::AnalyzeEvent(MReadOutAssembly* Event) if (Event->IsBad() == true) return true; } + if (m_SavePoorQualityEvents == false) { + if (Event->IsPoorQuality() == true) return true; + } + if (m_SaveVetoEvents == false) { if (Event->IsVeto() == true) return true; } @@ -415,6 +420,10 @@ bool MModuleEventSaver::ReadXmlConfiguration(MXmlNode* Node) if (SaveBadEventsNode != 0) { m_SaveBadEvents = SaveBadEventsNode->GetValueAsBoolean(); } + MXmlNode* SavePoorQualityEventsNode = Node->GetNode("SavePoorQualityEvents"); + if (SavePoorQualityEventsNode != 0) { + m_SavePoorQualityEvents = SavePoorQualityEventsNode->GetValueAsBoolean(); + } MXmlNode* SaveVetoEventsNode = Node->GetNode("SaveVetoEvents"); if (SaveVetoEventsNode != 0) { m_SaveVetoEvents = SaveVetoEventsNode->GetValueAsBoolean(); @@ -480,6 +489,7 @@ MXmlNode* MModuleEventSaver::CreateXmlConfiguration() new MXmlNode(Node, "FileName", m_FileName); new MXmlNode(Node, "Mode", m_Mode); new MXmlNode(Node, "SaveBadEvents", m_SaveBadEvents); + new MXmlNode(Node, "SavePoorQualityEvents", m_SavePoorQualityEvents); new MXmlNode(Node, "SaveVetoEvents", m_SaveVetoEvents); new MXmlNode(Node, "AddTimeTag", m_AddTimeTag); new MXmlNode(Node, "SplitFile", m_SplitFile); diff --git a/src/MReadOutAssembly.cxx b/src/MReadOutAssembly.cxx index d4084d83..905e327f 100644 --- a/src/MReadOutAssembly.cxx +++ b/src/MReadOutAssembly.cxx @@ -618,7 +618,13 @@ void MReadOutAssembly::StreamEvta(ostream& S) } for (unsigned int h = 0; h < m_Hits.size(); ++h) { - m_Hits[h]->StreamEvta(S); + // Don't print Guard Ring hits as normal strip hits as they don't have positions defined + // the corresponding energy is saved in the StripPairing QA message + if (m_Hits[h]->GetGuardRingHitFlag() == true) { + continue; + } else { + m_Hits[h]->StreamEvta(S); + } } S<<"CC NStripHits "<