JAPAn
Just Another Parity Analyzer
Loading...
Searching...
No Matches
QwAlarmHandler Class Reference

Data handler that evaluates alarm conditions and writes status outputs. More...

#include <QwAlarmHandler.h>

+ Inheritance diagram for QwAlarmHandler:
+ Collaboration diagram for QwAlarmHandler:

Data Structures

struct  alarmObject
 

Public Types

typedef std::vector< VQwHardwareChannel * >::iterator Iterator_HdwChan
 
typedef std::vector< VQwHardwareChannel * >::const_iterator ConstIterator_HdwChan
 
- Public Types inherited from VQwDataHandler
enum  EQwHandleType {
  kHandleTypeUnknown =0 , kHandleTypeMps , kHandleTypeAsym , kHandleTypeDiff ,
  kHandleTypeYield
}
 
typedef std::vector< VQwHardwareChannel * >::iterator Iterator_HdwChan
 
typedef std::vector< VQwHardwareChannel * >::const_iterator ConstIterator_HdwChan
 

Public Member Functions

 QwAlarmHandler (const TString &name)
 Constructor with name.
 
 QwAlarmHandler (const QwAlarmHandler &source)
 Copy constructor.
 
 ~QwAlarmHandler () override
 Virtual destructor.
 
Int_t LoadChannelMap (const std::string &mapfile) override
 Load the channels and sensitivities.
 
Int_t ConnectChannels (QwSubsystemArrayParity &yield, QwSubsystemArrayParity &asym, QwSubsystemArrayParity &diff) override
 Connect to Channels (event only)
 
void ProcessData () override
 Process a single event: update alarm states and outputs.
 
void CheckAlarms ()
 
void UpdateAlarmFile ()
 
void ParseConfigFile (QwParameterFile &) override
 
- Public Member Functions inherited from VQwDataHandler
 VQwDataHandler (const TString &name)
 
 VQwDataHandler (const VQwDataHandler &source)
 
void SetPointer (QwHelicityPattern *ptr)
 
void SetPointer (QwSubsystemArrayParity *ptr)
 
virtual Int_t ConnectChannels (QwSubsystemArrayParity &)
 
Int_t ConnectChannels (QwHelicityPattern &helicitypattern)
 
virtual void UpdateBurstCounter (Short_t burstcounter)
 
virtual void FinishDataHandler ()
 
 ~VQwDataHandler () override
 
TString GetName ()
 
virtual void ClearEventData ()
 
void InitRunningSum ()
 
void AccumulateRunningSum ()
 
virtual void AccumulateRunningSum (VQwDataHandler &value, Int_t count=0, Int_t ErrorMask=0xFFFFFFF)
 
void CalculateRunningAverage ()
 
void PrintValue () const
 
void WritePromptSummary (QwPromptSummary *ps, TString type)
 
virtual void ConstructTreeBranches (QwRootFile *treerootfile, const std::string &treeprefix="", const std::string &branchprefix="")
 
virtual void FillTreeBranches (QwRootFile *treerootfile)
 
virtual void ConstructNTupleFields (QwRootFile *treerootfile, const std::string &treeprefix="", const std::string &branchprefix="")
 RNTuple methods.
 
virtual void FillNTupleFields (QwRootFile *treerootfile)
 
virtual void ConstructHistograms (TDirectory *, TString &)
 Construct the histograms in a folder with a prefix.
 
virtual void FillHistograms ()
 Fill the histograms.
 
void FillTreeVector (QwRootTreeBranchVector &values) const
 
void ConstructBranchAndVector (TTree *tree, TString &prefix, QwRootTreeBranchVector &values)
 
void SetRunLabel (TString x)
 
Int_t LoadChannelMap ()
 
Bool_t PublishInternalValues () const override
 Publish all variables of the subsystem.
 
Bool_t PublishByRequest (TString device_name) override
 Try to publish an internal variable matching the submitted name.
 
- Public Member Functions inherited from MQwPublishable_child< QwDataHandlerArray, VQwDataHandler >
 MQwPublishable_child ()
 Default constructor Initializes the child object and sets up self-reference for publishing.
 
 MQwPublishable_child (const MQwPublishable_child &source)
 Copy constructor.
 
virtual ~MQwPublishable_child ()
 Virtual destructor.
 
void SetParent (QwDataHandlerArray *parent)
 Set the parent container for this child object.
 
QwDataHandlerArrayGetParent () const
 Get the parent container for this child object.
 
- Public Member Functions inherited from MQwCloneable< VQwDataHandler, QwAlarmHandler >
 ~MQwCloneable () override
 Virtual destructor.
 
VQwDataHandlerClone () const override
 Concrete clone method.
 
const VQwFactory< VQwDataHandler > * Factory () const override
 Factory getter.
 
- Public Member Functions inherited from VQwCloneable< VQwDataHandler >
virtual ~VQwCloneable ()
 Virtual destructor.
 
std::string GetClassName () const
 Get demangled name of this class.
 

Protected Member Functions

 QwAlarmHandler ()
 Default constructor (Protected for child class access)
 
std::pair< std::string, std::string > ParseAlarmMapVariable (const string &, char)
 
- Protected Member Functions inherited from VQwDataHandler
 VQwDataHandler ()
 
virtual Int_t ConnectChannels (QwSubsystemArrayParity &asym, QwSubsystemArrayParity &diff)
 
void SetEventcutErrorFlagPointer (const UInt_t *errorflagptr)
 
UInt_t GetEventcutErrorFlag () const
 
std::pair< EQwHandleType, std::string > ParseHandledVariable (const std::string &variable)
 
void CalcOneOutput (const VQwHardwareChannel *dv, VQwHardwareChannel *output, std::vector< const VQwHardwareChannel * > &ivs, std::vector< Double_t > &sens)
 
- Protected Member Functions inherited from MQwPublishable_child< QwDataHandlerArray, VQwDataHandler >
Bool_t RequestExternalValue (const TString &name, VQwHardwareChannel *value) const
 Retrieve the variable name from other subsystem arrays Get the value corresponding to some variable name from a different data array.
 
const VQwHardwareChannelRequestExternalPointer (const TString &name) const
 Retrieve a pointer to an external variable by name Requests a direct pointer to a variable from sibling subsystems via the parent container.
 
Bool_t PublishInternalValue (const TString name, const TString desc, const VQwHardwareChannel *element) const
 Publish a variable from this child into the parent container.
 

Protected Attributes

std::string fAlarmOutputFile = "adaqfs/home/apar/bin/onlineAlarms.csv"
 
UInt_t fCounter = 0
 
int fAlarmNupdate = 350
 
int fAlarmActive = 0
 
std::vector< alarmObjectfAlarmObjectList
 
- Protected Attributes inherited from VQwDataHandler
Int_t fPriority
 
Short_t fBurstCounter
 When a datahandler array is processed, handlers with lower priority will be processed before handlers with higher priority.
 
TString fName
 
std::string fMapFile
 
std::string fTreeName
 
std::string fTreeComment
 
std::string fPrefix
 
TString run_label
 
const UInt_t * fErrorFlagPtr
 Error flag pointer.
 
QwSubsystemArrayParityfSubsystemArray
 Single event pointer.
 
QwHelicityPatternfHelicityPattern
 Helicity pattern pointer.
 
std::vector< std::string > fDependentFull
 
std::vector< EQwHandleTypefDependentType
 
std::vector< std::string > fDependentName
 
std::vector< const VQwHardwareChannel * > fDependentVar
 
std::vector< Double_t > fDependentValues
 
std::vector< VQwHardwareChannel * > fOutputVar
 
std::vector< Double_t > fOutputValues
 
std::vector< std::vector< TString > > fPublishList
 
std::string ParseSeparator
 
Bool_t fKeepRunningSum
 
Bool_t fRunningsumFillsTree
 
VQwDataHandlerfRunningsum
 

Additional Inherited Members

- Static Public Member Functions inherited from MQwCloneable< VQwDataHandler, QwAlarmHandler >
static VQwDataHandlerCreate (const std::string &name)
 Object creation.
 
static QwAlarmHandlerCast (QwAlarmHandler *type)
 Object dynamic cast.
 

Detailed Description

Data handler that evaluates alarm conditions and writes status outputs.

Connects to configured variables and checks them against user-defined alarm thresholds or patterns. Can periodically write a CSV status file for online monitoring and provides simple state tracking to avoid flapping.

Definition at line 22 of file QwAlarmHandler.h.

Member Typedef Documentation

◆ ConstIterator_HdwChan

typedef std::vector<VQwHardwareChannel*>::const_iterator QwAlarmHandler::ConstIterator_HdwChan

Definition at line 26 of file QwAlarmHandler.h.

◆ Iterator_HdwChan

typedef std::vector<VQwHardwareChannel*>::iterator QwAlarmHandler::Iterator_HdwChan

Definition at line 25 of file QwAlarmHandler.h.

Constructor & Destructor Documentation

◆ QwAlarmHandler() [1/3]

QwAlarmHandler::QwAlarmHandler ( const TString & name)

Constructor with name.

Definition at line 21 of file QwAlarmHandler.cc.

21 :VQwDataHandler(name)
22{
23 ParseSeparator = "_";
24 //fKeepRunningSum = kTRUE;
25}
std::string ParseSeparator

References VQwDataHandler::ParseSeparator, and VQwDataHandler::VQwDataHandler().

Referenced by QwAlarmHandler().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ QwAlarmHandler() [2/3]

QwAlarmHandler::QwAlarmHandler ( const QwAlarmHandler & source)

Copy constructor.

Definition at line 27 of file QwAlarmHandler.cc.

27 :VQwDataHandler(source)
28{
29}

References QwAlarmHandler(), and VQwDataHandler::VQwDataHandler().

+ Here is the call graph for this function:

◆ ~QwAlarmHandler()

QwAlarmHandler::~QwAlarmHandler ( )
inlineoverride

Virtual destructor.

Definition at line 35 of file QwAlarmHandler.h.

35{};

◆ QwAlarmHandler() [3/3]

QwAlarmHandler::QwAlarmHandler ( )
inlineprotected

Default constructor (Protected for child class access)

Definition at line 76 of file QwAlarmHandler.h.

76{ };

Member Function Documentation

◆ CheckAlarms()

void QwAlarmHandler::CheckAlarms ( )

Definition at line 323 of file QwAlarmHandler.cc.

323 {
324 // If user-name-of-variable exists then grab it, grab its value from memory, and then compare to the upper and lower limits defined by user (if they were defined)
325 std::string tmpAlarmStat = "OK";
326 for ( size_t numAna = 0; numAna < fAlarmObjectList.size() ; numAna++ ) {
327 if (fAlarmObjectList.at(numAna).value != NULL){
328 //QwWarning << "fAlarmObjectList.at("<<numAna<<").value == " << fAlarmObjectList.at(numAna).value <<QwLog::endl;
329 //QwWarning << "fAlarmObjectList.at("<<numAna<<").value->GetValue() == " << fAlarmObjectList.at(numAna).value->GetValue() <<QwLog::endl;
330 if ( fAlarmObjectList.at(numAna).alarmParameterMapStr.count("Error-Code") != 0
331 && ((TString)fAlarmObjectList.at(numAna).alarmParameterMapStr.at("Error-Code")).IsHex() && ((std::stoul(fAlarmObjectList.at(numAna).alarmParameterMapStr.at("Error-Code"),nullptr,16)) & *fAlarmObjectList.at(numAna).eventcutErrorFlag) != 0 ) {
332 fAlarmObjectList.at(numAna).Nviolated++;
333 fAlarmObjectList.at(numAna).NsinceLastViolation = 0;
334 tmpAlarmStat = "Error-Code";
335 }
336 else if (fAlarmObjectList.at(numAna).alarmParameterMap.count("Exactly") != 0
337 && fAlarmObjectList.at(numAna).value->GetValue() != fAlarmObjectList.at(numAna).alarmParameterMap.at("Exactly")) {
338 fAlarmObjectList.at(numAna).Nviolated++;
339 fAlarmObjectList.at(numAna).NsinceLastViolation = 0;
340 tmpAlarmStat = "Not-Exactly";
341 }
342 else if ( fAlarmObjectList.at(numAna).alarmParameterMap.count("HighHigh") != 0
343 && fAlarmObjectList.at(numAna).value->GetValue() >= fAlarmObjectList.at(numAna).alarmParameterMap.at("HighHigh") ) {
344 fAlarmObjectList.at(numAna).Nviolated++;
345 fAlarmObjectList.at(numAna).NsinceLastViolation = 0;
346 tmpAlarmStat = "HighHigh";
347 }
348 else if ( fAlarmObjectList.at(numAna).alarmParameterMap.count("High") != 0
349 && fAlarmObjectList.at(numAna).value->GetValue() >= fAlarmObjectList.at(numAna).alarmParameterMap.at("High") ) {
350 fAlarmObjectList.at(numAna).Nviolated++;
351 fAlarmObjectList.at(numAna).NsinceLastViolation = 0;
352 tmpAlarmStat = "High";
353 }
354 else if ( fAlarmObjectList.at(numAna).alarmParameterMap.count("LowLow") != 0
355 && fAlarmObjectList.at(numAna).value->GetValue() <= fAlarmObjectList.at(numAna).alarmParameterMap.at("LowLow") ) {
356 fAlarmObjectList.at(numAna).Nviolated++;
357 fAlarmObjectList.at(numAna).NsinceLastViolation = 0;
358 tmpAlarmStat = "LowLow";
359 }
360 else if ( fAlarmObjectList.at(numAna).alarmParameterMap.count("Low") != 0
361 && fAlarmObjectList.at(numAna).value->GetValue() <= fAlarmObjectList.at(numAna).alarmParameterMap.at("Low") ) {
362 fAlarmObjectList.at(numAna).Nviolated++;
363 fAlarmObjectList.at(numAna).NsinceLastViolation = 0;
364 tmpAlarmStat = "Low";
365 }
366 else {
367 fAlarmObjectList.at(numAna).NsinceLastViolation++;
368 }
369 if ( fAlarmObjectList.at(numAna).Nviolated > 0 && fAlarmObjectList.at(numAna).NsinceLastViolation > fAlarmObjectList.at(numAna).alarmParameterMap.at("Ring-Length") ) {
370 fAlarmObjectList.at(numAna).Nviolated--;
371 }
372 if ( fAlarmObjectList.at(numAna).Nviolated > fAlarmObjectList.at(numAna).alarmParameterMap.at("Tolerance") ) {
373 fAlarmObjectList.at(numAna).alarmStatus = tmpAlarmStat;
374 }
375 else {
376 fAlarmObjectList.at(numAna).alarmStatus = "OK";
377 }
378 }
379 else {
380 QwError << "Null: fAlarmObjectList.at("<<numAna<<").value == NULL" <<QwLog::endl;
381 }
382 }
383}
#define QwError
Predefined log drain for errors.
Definition QwLog.h:39
static std::ostream & endl(std::ostream &)
End of the line.
Definition QwLog.cc:297
std::vector< alarmObject > fAlarmObjectList

References QwLog::endl(), fAlarmObjectList, and QwError.

Referenced by ProcessData().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ ConnectChannels()

Int_t QwAlarmHandler::ConnectChannels ( QwSubsystemArrayParity & yield,
QwSubsystemArrayParity & asym,
QwSubsystemArrayParity & diff )
overridevirtual

Connect to Channels (event only)

Connect to channels across subsystem arrays

Establish pointers to input variables (yield/asym/diff) and prepare output channels for alarm evaluation.

Parameters
yieldSubsystem array containing per-MPS yields
asymSubsystem array containing asymmetries
diffSubsystem array containing differences
Returns
0 on success, non-zero on failure

Fill vector of pointers to the relevant data elements

Reimplemented from VQwDataHandler.

Definition at line 157 of file QwAlarmHandler.cc.

161{
162 /// Fill vector of pointers to the relevant data elements
163 for (size_t anaInd = 0; anaInd < fAlarmObjectList.size(); anaInd++) {
164 // Get the dependent variables
165 if (fAlarmObjectList.at(anaInd).analysisType==kHandleTypeMps || fAlarmObjectList.at(anaInd).alarmParameterMapStr.count("Channel-Name") == 0){
166 // Quietly ignore the MPS type when we're connecting the asym & diff
167 continue;
168 }
169 const VQwHardwareChannel* ana_ptr = NULL;
170 const UInt_t* eventcut = NULL;
171 switch (fAlarmObjectList.at(anaInd).analysisType) {
172 case kHandleTypeYield:
174 ana_ptr = yield.ReturnInternalValue(fAlarmObjectList.at(anaInd).alarmParameterMapStr.at("Channel-Name"));
175 eventcut = yield.GetEventcutErrorFlagPointer();
176 break;
177 case kHandleTypeAsym:
179 ana_ptr = asym.ReturnInternalValue(fAlarmObjectList.at(anaInd).alarmParameterMapStr.at("Channel-Name"));
180 eventcut = asym.GetEventcutErrorFlagPointer();
181 break;
182 case kHandleTypeDiff:
184 ana_ptr = diff.ReturnInternalValue(fAlarmObjectList.at(anaInd).alarmParameterMapStr.at("Channel-Name"));
185 eventcut = diff.GetEventcutErrorFlagPointer();
186 break;
187 default:
188 QwWarning << "Independent variable for AlarmHandler has unknown type."
189 << QwLog::endl;
190 break;
191 }
192 if (ana_ptr != NULL) {
193 fAlarmObjectList.at(anaInd).value = ana_ptr;
194 //QwError << "ana_ptr = " << ana_ptr <<QwLog::endl;
195 //QwError << "fAlarmObjectList.at(" << anaInd << ").value = " << fAlarmObjectList.at(anaInd).value <<QwLog::endl;
196 fAlarmObjectList.at(anaInd).eventcutErrorFlag = eventcut;
197 } else {
198 fAlarmObjectList.at(anaInd).value = NULL;
199 //QwWarning << "Independent variable " << fAlarmObjectList.at(anaInd).alarmParameterMapStr.at("Channel-Name") << " missing in alarm map "
200 // << QwLog::endl;
201 }
202 }
203 return 0;
204}
#define QwWarning
Predefined log drain for warnings.
Definition QwLog.h:44
virtual const VQwHardwareChannel * ReturnInternalValue(const TString &name) const
Retrieve an internal variable by name (pointer version) Searches for the named variable among publish...
const UInt_t * GetEventcutErrorFlagPointer() const
void SetEventcutErrorFlagPointer(const UInt_t *errorflagptr)

References QwLog::endl(), fAlarmObjectList, QwSubsystemArrayParity::GetEventcutErrorFlagPointer(), VQwDataHandler::kHandleTypeAsym, VQwDataHandler::kHandleTypeDiff, VQwDataHandler::kHandleTypeMps, VQwDataHandler::kHandleTypeYield, QwWarning, MQwPublishable< U, T >::ReturnInternalValue(), and VQwDataHandler::SetEventcutErrorFlagPointer().

+ Here is the call graph for this function:

◆ LoadChannelMap()

Int_t QwAlarmHandler::LoadChannelMap ( const std::string & mapfile)
overridevirtual

Load the channels and sensitivities.

Load the channel map

Parameters
mapfileFilename of map file
Returns
Zero when success

Reimplemented from VQwDataHandler.

Definition at line 70 of file QwAlarmHandler.cc.

71{
72 // Open the file
73 QwParameterFile map(mapfile);
74
75 // Read the sections of dependent variables
76 std::pair<EQwHandleType,std::string> type_name;
77 std::pair<std::string,std::string> tmpPair;
78
79 // Add independent variables and sensitivities
80 while (map.ReadNextLine()) {
81 // Throw away comments, whitespace, empty lines
82 map.TrimComment();
83 map.TrimWhitespace();
84 if (map.LineIsEmpty()) continue;
85 // Get first token: label (dv or iv), second token is the name like "asym_blah"
86// Type, Channel, Ana, tree, channel, highhigh, high, low, lowlow, ringLength, pat-tolerance
87// Kind=Main-Det Chan=usr Tree=mul Channel=asym_usr HighHigh=1000 High=100 Low=-100 LowLow=-1000 Ring-Length=200 Tolerance=2
88 alarmObject tmpAlarmObject;
89 // Do while tmpVal = map.GetNextToken parse
90 // Do map[tmpVal.type] = tmpVal.value
91 std::string tmpToken = map.GetNextToken(" ");
92 while ( tmpToken != "" ) {
93 tmpPair = ParseAlarmMapVariable(tmpToken,'='); // This refers to the object under scrutiny, finds type of object - asym, yield, diff, etc. Check on yields FIXME
94 if (tmpPair.first=="Channel") {
95 type_name = ParseHandledVariable(tmpPair.second);
96 tmpAlarmObject.alarmParameterMapStr["Analysis"] = tmpPair.second;
97 tmpAlarmObject.analysisType = type_name.first;
98 tmpAlarmObject.alarmParameterMapStr["Channel-Name"] = type_name.second;
99 tmpAlarmObject.alarmParameterMapStr["Type-Name"] = tmpPair.second;
100 }
101 else if (tmpPair.first == "Kind") {
102 tmpAlarmObject.alarmParameterMapStr[tmpPair.first] = tmpPair.second;
103 }
104 else if (tmpPair.first == "Chan") {
105 tmpAlarmObject.alarmParameterMapStr[tmpPair.first] = tmpPair.second;
106 }
107 else if (tmpPair.first == "Error-Code") {
108 tmpAlarmObject.alarmParameterMapStr[tmpPair.first] = tmpPair.second;
109 }
110 else {
111 tmpAlarmObject.alarmParameterMap[tmpPair.first] = std::stod(tmpPair.second);
112 }
113 tmpToken = map.GetNextToken(" ");
114 }
115 if (!tmpAlarmObject.alarmParameterMap.count("Ring-Length")) {
116 tmpAlarmObject.alarmParameterMap["Ring-Length"] = 1e9;
117 }
118 if (!tmpAlarmObject.alarmParameterMap.count("Tolerance")) {
119 tmpAlarmObject.alarmParameterMap["Tolerance"] = 0;
120 }
121
122 /* tmpAlarmObject.type = map.GetNextToken(" ");
123 tmpAlarmObject.channel = map.GetNextToken(" ");
124 tmpAlarmObject.ana = map.GetNextToken(" ");
125 tmpAlarmObject.tree = map.GetNextToken(" ");
126 std::string localAna_token = map.GetNextToken(" ");
127 // Parse current token into independent variable type and name
128 type_name = ParseHandledVariable(localAna_token); // This refers to the object under scrutiny, finds type of object - asym, yield, diff, etc. Check on yields FIXME
129 tmpAlarmObject.analysisType = type_name.first;
130 tmpAlarmObject.analysisName = type_name.second;
131 tmpAlarmObject.highHigh = map.GetNextToken(" ");
132 tmpAlarmObject.high = map.GetNextToken(" ");
133 tmpAlarmObject.low = map.GetNextToken(" ");
134 tmpAlarmObject.lowLow = map.GetNextToken(" ");
135 tmpAlarmObject.ringLength = map.GetNextToken(" ");
136 tmpAlarmObject.tolerance = map.GetNextToken(" "); // This is all hardcoded.... how to do with keywords? FIXME
137 */
138 // Default Initializations
139 tmpAlarmObject.alarmStatus = "OK";
140 tmpAlarmObject.Nviolated = 0;
141 tmpAlarmObject.NsinceLastViolation = 1e9;
142 tmpAlarmObject.value = NULL;
143 tmpAlarmObject.eventcutErrorFlag = NULL;
144 fAlarmObjectList.push_back(tmpAlarmObject);
145
146 /*else if (primary_token == "treetype") {
147 QwMessage << "Tree Type read, ignoring." << QwLog::endl;
148 }
149 else {
150 QwError << "Function LoadChannelMap in QwCorrelator.cc read in invalid primary_token." << QwLog::endl;
151 }*/
152 }
153 return 0;
154}
std::pair< std::string, std::string > ParseAlarmMapVariable(const string &, char)
std::pair< EQwHandleType, std::string > ParseHandledVariable(const std::string &variable)

References QwAlarmHandler::alarmObject::alarmParameterMap, QwAlarmHandler::alarmObject::alarmParameterMapStr, QwAlarmHandler::alarmObject::alarmStatus, QwAlarmHandler::alarmObject::analysisType, QwAlarmHandler::alarmObject::eventcutErrorFlag, fAlarmObjectList, QwParameterFile::GetNextToken(), QwParameterFile::LineIsEmpty(), QwAlarmHandler::alarmObject::NsinceLastViolation, QwAlarmHandler::alarmObject::Nviolated, ParseAlarmMapVariable(), VQwDataHandler::ParseHandledVariable(), QwParameterFile::ReadNextLine(), QwParameterFile::TrimComment(), QwParameterFile::TrimWhitespace(), and QwAlarmHandler::alarmObject::value.

+ Here is the call graph for this function:

◆ ParseAlarmMapVariable()

std::pair< std::string, std::string > QwAlarmHandler::ParseAlarmMapVariable ( const string & variable,
char delim )
protected

Definition at line 46 of file QwAlarmHandler.cc.

46 {
47 std::pair<std::string,std::string> type_name;
48 size_t len = variable.length();
49 size_t pos1 = variable.find_first_of(delim);
50 size_t pos2 = variable.find_first_not_of(delim,pos1);
51 if (pos1 == string::npos) {
52 type_name.first = "NULL";
53 type_name.second = "NULL";
54 } else {
55 string type = variable.substr(0,pos1);
56 string name = variable.substr(pos2,len-pos2);
57 type_name.first = type;
58 type_name.second = name;
59 }
60 return type_name;
61}

Referenced by LoadChannelMap().

+ Here is the caller graph for this function:

◆ ParseConfigFile()

void QwAlarmHandler::ParseConfigFile ( QwParameterFile & file)
overridevirtual

Parse configuration file for map file, priority, tree settings.

Reimplemented from VQwDataHandler.

Definition at line 33 of file QwAlarmHandler.cc.

34{
36 //name = MyAlarmHandler
37 //priority = 20
38 //map = prex_alarm_handler.map
39 file.PopValue("alarm-output-file",fAlarmOutputFile);
40 file.PopValue("alarm-loop-N-update",fAlarmNupdate);
41 file.PopValue("alarm-active",fAlarmActive);
42 // Check for and process key-value pairs
43 //file.PopValue("new-key-word",fsomething); // These need = signs in map files
44}
Bool_t PopValue(const std::string keyname, T &retvalue)
std::string fAlarmOutputFile
virtual void ParseConfigFile(QwParameterFile &file)

References fAlarmActive, fAlarmNupdate, fAlarmOutputFile, VQwDataHandler::ParseConfigFile(), and QwParameterFile::PopValue().

+ Here is the call graph for this function:

◆ ProcessData()

void QwAlarmHandler::ProcessData ( )
overridevirtual

Process a single event: update alarm states and outputs.

Checks all configured alarm conditions against current inputs and updates any associated status channels. May periodically write an overview CSV if enabled by configuration.

Reimplemented from VQwDataHandler.

Definition at line 262 of file QwAlarmHandler.cc.

262 {
263 // for (size_t i = 0; i < fDependentVar.size(); ++i) {
264 // *(fOutputVar.at(i)) = *(fDependentVar[i]);
265 // }
266 // for (size_t i = 0; i < fDependentValues.size(); ++i) {
267 // fValue.at(i) = fDependentValues[i];
268 // }
269 fCounter++;
270 if (fAlarmActive) {
271 CheckAlarms();
272 if (fCounter % fAlarmNupdate == 0) {
274 }
275 }
276} // FIXME do I even need a process data method? Probably not

References CheckAlarms(), fAlarmActive, fAlarmNupdate, fCounter, and UpdateAlarmFile().

+ Here is the call graph for this function:

◆ UpdateAlarmFile()

void QwAlarmHandler::UpdateAlarmFile ( )

Definition at line 385 of file QwAlarmHandler.cc.

385 {
386 std::ofstream file_out;
387 // Format of alarmObject struct contents
388 // std::map <std::string,std::string> alarmParameterMap;
389 // VQwDataHandler::EQwHandleType analysisType;
390 // const VQwHardwareChannel* value;
391 // UInt_t eventcutErrorFlag;
392 // std::string alarmStatus;
393 // int Nviolated; // Vector of 0's for history tracking
394 // int NsinceLastViolation; // Vector of 0's for history tracking
395
396 file_out.open(fAlarmOutputFile,std::ofstream::trunc);
397 for (size_t ite = 0 ; ite<fAlarmObjectList.size(); ite++){
398 if (fAlarmObjectList.at(ite).value != NULL && fAlarmObjectList.at(ite).alarmParameterMapStr.count("Kind") && fAlarmObjectList.at(ite).alarmParameterMapStr.count("Chan") && fAlarmObjectList.at(ite).alarmParameterMapStr.count("Analysis")) {
399 if (fAlarmObjectList.at(ite).value != 0) { // Check if non-trivial value object...
400 file_out<<fAlarmObjectList.at(ite).alarmParameterMapStr.at("Kind")<<","<<fAlarmObjectList.at(ite).alarmParameterMapStr.at("Chan")<<","<<fAlarmObjectList.at(ite).alarmParameterMapStr.at("Analysis")<<","<<"Value"<<","<<fAlarmObjectList.at(ite).value->GetValue()<<std::endl;
401 }
402 else continue;
403 if (fAlarmObjectList.at(ite).alarmStatus != "") { // Check if non-trivial value object...
404 file_out<<fAlarmObjectList.at(ite).alarmParameterMapStr.at("Kind")<<","<<fAlarmObjectList.at(ite).alarmParameterMapStr.at("Chan")<<","<<fAlarmObjectList.at(ite).alarmParameterMapStr.at("Analysis")<<","<<"Alarm Status"<<","<<fAlarmObjectList.at(ite).alarmStatus<<std::endl;
405 }
406 else continue;
407 if (fAlarmObjectList.at(ite).alarmParameterMapStr.count("Error-Code")) { // Check if non-trivial value object...
408 file_out<<fAlarmObjectList.at(ite).alarmParameterMapStr.at("Kind")<<","<<fAlarmObjectList.at(ite).alarmParameterMapStr.at("Chan")<<","<<fAlarmObjectList.at(ite).alarmParameterMapStr.at("Analysis")<<","<<"Error-Code"<<","<<fAlarmObjectList.at(ite).alarmParameterMapStr.at("Error-Code")<<std::endl;
409 }
410 }
411 else continue;
412 for (auto jte : fAlarmObjectList.at(ite).alarmParameterMap){ // Loop through parameter list
413 file_out<<fAlarmObjectList.at(ite).alarmParameterMapStr.at("Kind")<<","<<fAlarmObjectList.at(ite).alarmParameterMapStr.at("Chan")<<","<<fAlarmObjectList.at(ite).alarmParameterMapStr.at("Analysis")<<","<<jte.first<<","<<jte.second<<std::endl;
414 }
415 }
416 file_out.close();
417}

References fAlarmObjectList, and fAlarmOutputFile.

Referenced by ProcessData().

+ Here is the caller graph for this function:

Field Documentation

◆ fAlarmActive

int QwAlarmHandler::fAlarmActive = 0
protected

Definition at line 81 of file QwAlarmHandler.h.

Referenced by ParseConfigFile(), and ProcessData().

◆ fAlarmNupdate

int QwAlarmHandler::fAlarmNupdate = 350
protected

Definition at line 80 of file QwAlarmHandler.h.

Referenced by ParseConfigFile(), and ProcessData().

◆ fAlarmObjectList

std::vector<alarmObject> QwAlarmHandler::fAlarmObjectList
protected

Definition at line 112 of file QwAlarmHandler.h.

Referenced by CheckAlarms(), ConnectChannels(), LoadChannelMap(), and UpdateAlarmFile().

◆ fAlarmOutputFile

std::string QwAlarmHandler::fAlarmOutputFile = "adaqfs/home/apar/bin/onlineAlarms.csv"
protected

Definition at line 78 of file QwAlarmHandler.h.

Referenced by ParseConfigFile(), and UpdateAlarmFile().

◆ fCounter

UInt_t QwAlarmHandler::fCounter = 0
protected

Definition at line 79 of file QwAlarmHandler.h.

Referenced by ProcessData().


The documentation for this class was generated from the following files: