QwAnalysis
QwRegression Class Reference

#include <QwRegression.h>

+ Inheritance diagram for QwRegression:
+ Collaboration diagram for QwRegression:

Public Types

enum  EQwRegType { kRegTypeUnknown =0, kRegTypeMps, kRegTypeAsym, kRegTypeDiff }
 Type of regression variable. More...
 
typedef std::vector< std::pair
< VQwHardwareChannel
*, VQwHardwareChannel * >
>::iterator 
PairIterator
 
typedef std::vector< std::pair
< VQwHardwareChannel
*, VQwHardwareChannel * >
>::const_iterator 
PairConstIterator
 

Public Member Functions

 QwRegression (QwOptions &options, QwSubsystemArrayParity &event, QwHelicityPattern &helicitypattern)
 Constructor with single event and helicity pattern. More...
 
 QwRegression (QwOptions &options, QwSubsystemArrayParity &event)
 Constructor with single event. More...
 
 QwRegression (QwOptions &options, QwHelicityPattern &helicitypattern)
 Constructor with helicity pattern. More...
 
 QwRegression (QwOptions &options)
 Constructor with only options. More...
 
 QwRegression (const QwRegression &source)
 Copy constructor. More...
 
virtual ~QwRegression ()
 Virtual destructor. More...
 
void ProcessOptions (QwOptions &options)
 Process the configuration options. More...
 
Int_t LoadChannelMap (const std::string &mapfile)
 Load the channels and sensitivities. More...
 
Int_t ConnectChannels (QwSubsystemArrayParity &event, QwSubsystemArrayParity &asym, QwSubsystemArrayParity &diff)
 Connect to channels. More...
 
Int_t ConnectChannels (QwSubsystemArrayParity &event)
 Connect to Channels (event only) More...
 
Int_t ConnectChannels (QwSubsystemArrayParity &asym, QwSubsystemArrayParity &diff)
 Connect to Channels (asymmetry/difference only) More...
 
void LinearRegression (EQwRegType type)
 Linear regression. More...
 
void AccumulateRunningSum (QwRegression value)
 
void CalculateRunningAverage ()
 
void PrintValue () const
 
void FillDB (QwParityDB *db, TString datatype)
 
Tree and vector construction and maintenance
void ConstructBranchAndVector (TTree *tree, std::vector< Double_t > &values)
 Construct the tree and vector for this subsystem. More...
 
void ConstructBranchAndVector (TTree *tree, TString &prefix, std::vector< Double_t > &values)
 Construct a branch and vector for this subsystem with a prefix. More...
 
void FillTreeVector (std::vector< Double_t > &values) const
 Fill the vector for this subsystem. More...
 

Static Public Member Functions

static void DefineOptions (QwOptions &options)
 Define the configuration options. More...
 

Protected Member Functions

std::pair< EQwRegType,
std::string > 
ParseRegressionVariable (const std::string &variable)
 Parse regression variable in type and name. More...
 

Protected Attributes

bool fEnableRegression
 Flag to enable regression. More...
 
std::string fRegressionMapFile
 Regression dependent and independent variable map. More...
 
QwSubsystemArrayParityfSubsystemArray
 Single event pointer. More...
 
QwHelicityPatternfHelicityPattern
 Helicity pattern pointer. More...
 
UInt_t fErrorFlag
 
std::vector< EQwRegTypefDependentType
 List of channels to use in the regression. More...
 
std::vector< std::string > fDependentName
 
std::vector< std::vector
< EQwRegType > > 
fIndependentType
 
std::vector< std::vector
< std::string > > 
fIndependentName
 
std::vector< std::vector
< Double_t > > 
fSensitivity
 
std::vector< EQwRegTypefDependentVarType
 
std::vector< std::pair
< VQwHardwareChannel
*, VQwHardwareChannel * > > 
fDependentVar
 
std::vector< std::vector
< std::pair< Double_t, const
VQwHardwareChannel * > > > 
fIndependentVar
 

Private Member Functions

 QwRegression ()
 Private default constructor. More...
 

Detailed Description

... info to follow ... really, I promise ...

Definition at line 19 of file QwRegression.h.

Member Typedef Documentation

typedef std::vector< std::pair< VQwHardwareChannel*,VQwHardwareChannel*> >::const_iterator QwRegression::PairConstIterator

Definition at line 29 of file QwRegression.h.

typedef std::vector< std::pair< VQwHardwareChannel*,VQwHardwareChannel*> >::iterator QwRegression::PairIterator

Definition at line 28 of file QwRegression.h.

Member Enumeration Documentation

Type of regression variable.

Enumerator
kRegTypeUnknown 
kRegTypeMps 
kRegTypeAsym 
kRegTypeDiff 

Definition at line 24 of file QwRegression.h.

Constructor & Destructor Documentation

QwRegression::QwRegression ( QwOptions options,
QwSubsystemArrayParity event,
QwHelicityPattern helicitypattern 
)

Constructor with single event and helicity pattern.

Constructor with single event and helicity pattern

Parameters
optionsOptions object
eventSingle event
helicitypatternHelicity pattern

Definition at line 25 of file QwRegression.cc.

References ConnectChannels(), QwHelicityPattern::fAsymmetry, QwHelicityPattern::fDifference, fEnableRegression, fHelicityPattern, fRegressionMapFile, fSubsystemArray, LoadChannelMap(), and ProcessOptions().

29 {
30  fEnableRegression = false;
31  ProcessOptions(options);
32  fSubsystemArray = &event;
33  fHelicityPattern = &helicitypattern;
35  QwSubsystemArrayParity& asym = helicitypattern.fAsymmetry;
36  QwSubsystemArrayParity& diff = helicitypattern.fDifference;
37  ConnectChannels(event,asym,diff);
38 }
std::string fRegressionMapFile
Regression dependent and independent variable map.
Definition: QwRegression.h:101
QwSubsystemArrayParity fDifference
QwSubsystemArrayParity * fSubsystemArray
Single event pointer.
Definition: QwRegression.h:104
QwHelicityPattern * fHelicityPattern
Helicity pattern pointer.
Definition: QwRegression.h:106
QwSubsystemArrayParity fAsymmetry
Virtual base class for the parity subsystems.
bool fEnableRegression
Flag to enable regression.
Definition: QwRegression.h:94
Int_t ConnectChannels(QwSubsystemArrayParity &event, QwSubsystemArrayParity &asym, QwSubsystemArrayParity &diff)
Connect to channels.
void ProcessOptions(QwOptions &options)
Process the configuration options.
Int_t LoadChannelMap(const std::string &mapfile)
Load the channels and sensitivities.

+ Here is the call graph for this function:

QwRegression::QwRegression ( QwOptions options,
QwSubsystemArrayParity event 
)

Constructor with single event.

Constructor with single event

Parameters
optionsOptions object
eventSingle event

Definition at line 46 of file QwRegression.cc.

References ConnectChannels(), fEnableRegression, fRegressionMapFile, fSubsystemArray, LoadChannelMap(), and ProcessOptions().

46  :fHelicityPattern(NULL)
47 {
48  fEnableRegression = false;
49  ProcessOptions(options);
50  fSubsystemArray = &event;
52  ConnectChannels(event);
53 
54 }
std::string fRegressionMapFile
Regression dependent and independent variable map.
Definition: QwRegression.h:101
QwSubsystemArrayParity * fSubsystemArray
Single event pointer.
Definition: QwRegression.h:104
QwHelicityPattern * fHelicityPattern
Helicity pattern pointer.
Definition: QwRegression.h:106
bool fEnableRegression
Flag to enable regression.
Definition: QwRegression.h:94
Int_t ConnectChannels(QwSubsystemArrayParity &event, QwSubsystemArrayParity &asym, QwSubsystemArrayParity &diff)
Connect to channels.
void ProcessOptions(QwOptions &options)
Process the configuration options.
Int_t LoadChannelMap(const std::string &mapfile)
Load the channels and sensitivities.

+ Here is the call graph for this function:

QwRegression::QwRegression ( QwOptions options,
QwHelicityPattern helicitypattern 
)

Constructor with helicity pattern.

Constructor with only helicity pattern

Parameters
optionsObtions object
helicitypatternHelicity Pattern

Definition at line 62 of file QwRegression.cc.

References ConnectChannels(), QwHelicityPattern::fAsymmetry, QwHelicityPattern::fDifference, fEnableRegression, fHelicityPattern, fRegressionMapFile, LoadChannelMap(), and ProcessOptions().

62  :fSubsystemArray(NULL)
63 {
64  fEnableRegression = false;
65  ProcessOptions(options);
67  fHelicityPattern = &helicitypattern;
68  QwSubsystemArrayParity& asym = helicitypattern.fAsymmetry;
69  QwSubsystemArrayParity& diff = helicitypattern.fDifference;
70  ConnectChannels(asym,diff);
71 }
std::string fRegressionMapFile
Regression dependent and independent variable map.
Definition: QwRegression.h:101
QwSubsystemArrayParity fDifference
QwSubsystemArrayParity * fSubsystemArray
Single event pointer.
Definition: QwRegression.h:104
QwHelicityPattern * fHelicityPattern
Helicity pattern pointer.
Definition: QwRegression.h:106
QwSubsystemArrayParity fAsymmetry
Virtual base class for the parity subsystems.
bool fEnableRegression
Flag to enable regression.
Definition: QwRegression.h:94
Int_t ConnectChannels(QwSubsystemArrayParity &event, QwSubsystemArrayParity &asym, QwSubsystemArrayParity &diff)
Connect to channels.
void ProcessOptions(QwOptions &options)
Process the configuration options.
Int_t LoadChannelMap(const std::string &mapfile)
Load the channels and sensitivities.

+ Here is the call graph for this function:

QwRegression::QwRegression ( QwOptions options)

Constructor with only options.

Constructor with options

Parameters
optionsObtions object

Definition at line 78 of file QwRegression.cc.

References fEnableRegression, fRegressionMapFile, LoadChannelMap(), and ProcessOptions().

79 {
80  fEnableRegression = false;
81  ProcessOptions(options);
83 }
std::string fRegressionMapFile
Regression dependent and independent variable map.
Definition: QwRegression.h:101
bool fEnableRegression
Flag to enable regression.
Definition: QwRegression.h:94
void ProcessOptions(QwOptions &options)
Process the configuration options.
Int_t LoadChannelMap(const std::string &mapfile)
Load the channels and sensitivities.

+ Here is the call graph for this function:

QwRegression::QwRegression ( const QwRegression source)

Copy constructor.

Definition at line 86 of file QwRegression.cc.

References fDependentVar, fDependentVarType, and VQwDataElement::kDerived.

86  :
89  fErrorFlag(source.fErrorFlag)
90 {
91  this->fDependentVar.resize(source.fDependentVar.size());
92  fDependentVarType.resize(source.fDependentVar.size());
93  for (size_t i = 0; i < this->fDependentVar.size(); i++) {
94  const QwVQWK_Channel* vqwk = dynamic_cast<const QwVQWK_Channel*>(source.fDependentVar[i].second);
95  this->fDependentVar[i].first = NULL;
96  this->fDependentVar[i].second = new QwVQWK_Channel(*vqwk, VQwDataElement::kDerived);
97  fDependentVarType[i] = source.fDependentVarType[i];
98  }
99 }
std::string fRegressionMapFile
Regression dependent and independent variable map.
Definition: QwRegression.h:101
std::vector< std::pair< VQwHardwareChannel *, VQwHardwareChannel * > > fDependentVar
Definition: QwRegression.h:121
UInt_t fErrorFlag
Definition: QwRegression.h:108
bool fEnableRegression
Flag to enable regression.
Definition: QwRegression.h:94
std::vector< EQwRegType > fDependentVarType
Definition: QwRegression.h:120
QwRegression::~QwRegression ( )
virtual

Virtual destructor.

Destructor.

Definition at line 102 of file QwRegression.cc.

References fDependentVar.

103 {
104  PairIterator element;
105  for (element = fDependentVar.begin();
106  element != fDependentVar.end(); element++) {
107  if (element->second != NULL){
108  delete element->second;
109  }
110  }
111  fDependentVar.clear();
112 }
std::vector< std::pair< VQwHardwareChannel *, VQwHardwareChannel * > > fDependentVar
Definition: QwRegression.h:121
std::vector< std::pair< VQwHardwareChannel *, VQwHardwareChannel * > >::iterator PairIterator
Definition: QwRegression.h:28
QwRegression::QwRegression ( )
inlineprivate

Private default constructor.

Definition at line 94 of file QwRegression.h.

94 { };

Member Function Documentation

void QwRegression::AccumulateRunningSum ( QwRegression  value)

Definition at line 612 of file QwRegression.cc.

References fDependentVar, and fErrorFlag.

Referenced by QwRegressionSubsystem::AccumulateRunningSum(), and main().

613 {
614  if (value.fErrorFlag==0){
615  for (size_t i = 0; i < value.fDependentVar.size(); i++){
616  this->fDependentVar[i].second->AccumulateRunningSum(value.fDependentVar[i].second);
617  }
618  }
619 }
std::vector< std::pair< VQwHardwareChannel *, VQwHardwareChannel * > > fDependentVar
Definition: QwRegression.h:121
UInt_t fErrorFlag
Definition: QwRegression.h:108

+ Here is the caller graph for this function:

void QwRegression::CalculateRunningAverage ( )

Definition at line 622 of file QwRegression.cc.

References fDependentVar.

Referenced by QwRegressionSubsystem::CalculateRunningAverage(), and main().

623 {
624  for(size_t i = 0; i < fDependentVar.size(); i++) {
625  fDependentVar[i].second->CalculateRunningAverage();
626  }
627 
628  return;
629 }
std::vector< std::pair< VQwHardwareChannel *, VQwHardwareChannel * > > fDependentVar
Definition: QwRegression.h:121

+ Here is the caller graph for this function:

Int_t QwRegression::ConnectChannels ( QwSubsystemArrayParity event,
QwSubsystemArrayParity asym,
QwSubsystemArrayParity diff 
)

Connect to channels.

Connect to the dependent and independent channels

Parameters
eventHelicity event structure
asymAsymmetry event structure
diffDifference event structure
Returns
Zero on success

Fill vector of pointers to the relevant data elements

Definition at line 222 of file QwRegression.cc.

References QwLog::endl(), fDependentName, fDependentType, fDependentVar, fDependentVarType, fEnableRegression, fIndependentName, fIndependentType, fIndependentVar, fSensitivity, VQwDataElement::GetElementName(), VQwDataElement::kDerived, kRegTypeAsym, kRegTypeDiff, kRegTypeMps, QwMessage, QwWarning, QwSubsystemArray::ReturnInternalValue(), and VQwDataElement::SetElementName().

Referenced by QwRegression().

226 {
227  // Return if regression is not enabled
228  if (! fEnableRegression) return 0;
229 
230  /// Fill vector of pointers to the relevant data elements
231  for (size_t dv = 0; dv < fDependentName.size(); dv++) {
232  // Get the dependent variables
233 
234  VQwHardwareChannel* dv_ptr = 0;
235  QwVQWK_Channel* new_vqwk = NULL;
236  QwVQWK_Channel* vqwk = NULL;
237  string name = "";
238  string reg = "reg_";
239 
240  if(fDependentName.at(dv).at(0) == '@' ){
241  name = fDependentName.at(dv).substr(1,fDependentName.at(dv).length());
242  }else{
243  switch (fDependentType.at(dv)) {
244  case kRegTypeMps:
245  dv_ptr = event.ReturnInternalValueForFriends(fDependentName.at(dv));
246  break;
247  case kRegTypeAsym:
248  dv_ptr = asym.ReturnInternalValueForFriends(fDependentName.at(dv));
249  break;
250  case kRegTypeDiff:
251  dv_ptr = diff.ReturnInternalValueForFriends(fDependentName.at(dv));
252  break;
253  default:
254  QwWarning << "Dependent variable for regression has unknown type."
255  << QwLog::endl;
256  break;
257  }
258 
259  vqwk = dynamic_cast<QwVQWK_Channel*>(dv_ptr);
260  name = vqwk->GetElementName().Data();
261  name.insert(0, reg);
262  new_vqwk = new QwVQWK_Channel(*vqwk, VQwDataElement::kDerived);
263  new_vqwk->SetElementName(name);
264  }
265 
266  // alias
267  if(fDependentName.at(dv).at(0) == '@'){
268  QwMessage << "dv: " << name << QwLog::endl;
269  new_vqwk = new QwVQWK_Channel(name, VQwDataElement::kDerived);
270  }
271  // defined type
272  else if(dv_ptr!=NULL){
273  QwMessage << "dv: " << fDependentName.at(dv) << QwLog::endl;
274  }else {
275  QwWarning << "Dependent variable " << fDependentName.at(dv) << " could not be found, "
276  << "or is not a VQWK channel." << QwLog::endl;
277  continue;
278  }
279 
280  // pair creation
281  if(new_vqwk != NULL){
282  fDependentVarType.push_back(fDependentType.at(dv));
283  fDependentVar.push_back(std::make_pair(vqwk, new_vqwk));
284  }
285 
286  // Add independent variables
287  fIndependentVar.resize(fDependentVar.size());
288  for (size_t iv = 0; iv < fIndependentName.at(dv).size(); iv++) {
289  // Get the independent variables
290  const VQwHardwareChannel* iv_ptr = 0;
291  switch (fIndependentType.at(dv).at(iv)) {
292  case kRegTypeMps:
293  iv_ptr = event.ReturnInternalValue(fIndependentName.at(dv).at(iv));
294  break;
295  case kRegTypeAsym:
296  iv_ptr = asym.ReturnInternalValue(fIndependentName.at(dv).at(iv));
297  break;
298  case kRegTypeDiff:
299  iv_ptr = diff.ReturnInternalValue(fIndependentName.at(dv).at(iv));
300  break;
301  default:
302  QwWarning << "Independent variable for regression has unknown type."
303  << QwLog::endl;
304  break;
305  }
306  if (iv_ptr) {
307  QwMessage << " iv: " << fIndependentName.at(dv).at(iv) << " (sens = "
308  << fSensitivity.at(dv).at(iv) << ")" << QwLog::endl;
309  fIndependentVar.back().push_back(std::make_pair(fSensitivity.at(dv).at(iv),
310  iv_ptr));
311  } else {
312  QwWarning << "Independent variable " << fIndependentName.at(dv).at(iv) << " for regression of "
313  << "dependent variable " << fDependentName.at(dv) << " could not be found."
314  << QwLog::endl;
315  }
316  }
317  }
318 
319  return 0;
320 
321 }
std::vector< std::string > fDependentName
Definition: QwRegression.h:115
#define QwMessage
Predefined log drain for regular messages.
Definition: QwLog.h:50
const VQwHardwareChannel * ReturnInternalValue(const TString &name) const
Retrieve the variable name from subsystems in this subsystem array.
std::vector< std::vector< Double_t > > fSensitivity
Definition: QwRegression.h:118
std::vector< std::pair< VQwHardwareChannel *, VQwHardwareChannel * > > fDependentVar
Definition: QwRegression.h:121
std::vector< std::vector< std::pair< Double_t, const VQwHardwareChannel * > > > fIndependentVar
Definition: QwRegression.h:122
std::vector< std::vector< std::string > > fIndependentName
Definition: QwRegression.h:117
bool fEnableRegression
Flag to enable regression.
Definition: QwRegression.h:94
void SetElementName(const TString &name)
Set the name of this element.
static std::ostream & endl(std::ostream &)
End of the line.
Definition: QwLog.cc:299
virtual const TString & GetElementName() const
Get the name of this element.
#define QwWarning
Predefined log drain for warnings.
Definition: QwLog.h:45
std::vector< std::vector< EQwRegType > > fIndependentType
Definition: QwRegression.h:116
std::vector< EQwRegType > fDependentVarType
Definition: QwRegression.h:120
std::vector< EQwRegType > fDependentType
List of channels to use in the regression.
Definition: QwRegression.h:114

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

Int_t QwRegression::ConnectChannels ( QwSubsystemArrayParity event)

Connect to Channels (event only)

Connect to the dependent and independent channels

Parameters
eventHelicity event structure
Returns
Zero on success

Fill vector of pointers to the relevant data elements

Definition at line 432 of file QwRegression.cc.

References QwLog::endl(), fDependentName, fDependentType, fDependentVar, fDependentVarType, fEnableRegression, fIndependentName, fIndependentType, fIndependentVar, fSensitivity, VQwDataElement::GetElementName(), VQwDataElement::kDerived, kRegTypeAsym, kRegTypeDiff, kRegTypeMps, QwMessage, QwWarning, and VQwDataElement::SetElementName().

433 {
434  // Return if regression is not enabled
435  if (! fEnableRegression) return 0;
436 
437  /// Fill vector of pointers to the relevant data elements
438  for (size_t dv = 0; dv < fDependentName.size(); dv++) {
439  // Get the dependent variables
440 
441  VQwHardwareChannel* dv_ptr = 0;
442  QwVQWK_Channel* new_vqwk = NULL;
443  QwVQWK_Channel* vqwk = NULL;
444  string name = " s";
445  string reg = "reg_";
446 
447  if (fDependentType.at(dv)==kRegTypeAsym || fDependentType.at(dv)==kRegTypeDiff){
448  // Quietly skip the asymmetry or difference types.
449  continue;
450  } else if(fDependentType.at(dv) != kRegTypeMps){
451  QwWarning << "QwRegression::ConnectChannels(QwSubsystemArrayParity& event): Dependent variable, "
452  << fDependentName.at(dv)
453  << ", for MPS regression does not have MPS type, type=="
454  << fDependentType.at(dv) << "."<< QwLog::endl;
455  continue;
456  } else {
457  if(fDependentName.at(dv).at(0) == '@' ){
458  name = fDependentName.at(dv).substr(1,fDependentName.at(dv).length());
459  new_vqwk = new QwVQWK_Channel(name, VQwDataElement::kDerived);
460  } else {
461  dv_ptr = event.ReturnInternalValueForFriends(fDependentName.at(dv));
462 
463  vqwk = dynamic_cast<QwVQWK_Channel*>(dv_ptr);
464  name = vqwk->GetElementName().Data();
465  name.insert(0,reg);
466  new_vqwk = new QwVQWK_Channel(*vqwk, VQwDataElement::kDerived);
467  new_vqwk->SetElementName(name);
468  }
469  }
470 
471  // alias
472  if(new_vqwk==NULL){
473  QwWarning << "Dependent variable " << fDependentName.at(dv) << " could not be found, "
474  << "or is not a VQWK channel." << QwLog::endl;
475  continue;
476  } else {
477  QwMessage << "dv: " << new_vqwk->GetElementName() << QwLog::endl;
478  // pair creation
479  fDependentVarType.push_back(fDependentType.at(dv));
480  fDependentVar.push_back(std::make_pair(vqwk, new_vqwk));
481  }
482 
483  // Add independent variables
484  fIndependentVar.resize(fDependentVar.size());
485  for (size_t iv = 0; iv < fIndependentName.at(dv).size(); iv++) {
486  // Get the independent variables
487  const VQwHardwareChannel* iv_ptr = 0;
488  if(fIndependentType.at(dv).at(iv) == kRegTypeMps){
489  iv_ptr = event.ReturnInternalValue(fIndependentName.at(dv).at(iv));
490  }else{
491  QwWarning << "Independent variable for MPS regression has unknown type."
492  << QwLog::endl;
493  }
494  if (iv_ptr) {
495  QwMessage << " iv: " << fIndependentName.at(dv).at(iv) << " (sens = "
496  << fSensitivity.at(dv).at(iv) << ")" << QwLog::endl;
497  fIndependentVar.back().push_back(std::make_pair(fSensitivity.at(dv).at(iv),
498  iv_ptr));
499  } else {
500  QwWarning << "Independent variable " << fIndependentName.at(dv).at(iv) << " for regression of "
501  << "dependent variable " << fDependentName.at(dv) << " could not be found."
502  << QwLog::endl;
503  }
504  }
505  }
506 
507  return 0;
508 }
std::vector< std::string > fDependentName
Definition: QwRegression.h:115
#define QwMessage
Predefined log drain for regular messages.
Definition: QwLog.h:50
std::vector< std::vector< Double_t > > fSensitivity
Definition: QwRegression.h:118
std::vector< std::pair< VQwHardwareChannel *, VQwHardwareChannel * > > fDependentVar
Definition: QwRegression.h:121
std::vector< std::vector< std::pair< Double_t, const VQwHardwareChannel * > > > fIndependentVar
Definition: QwRegression.h:122
std::vector< std::vector< std::string > > fIndependentName
Definition: QwRegression.h:117
bool fEnableRegression
Flag to enable regression.
Definition: QwRegression.h:94
void SetElementName(const TString &name)
Set the name of this element.
static std::ostream & endl(std::ostream &)
End of the line.
Definition: QwLog.cc:299
virtual const TString & GetElementName() const
Get the name of this element.
#define QwWarning
Predefined log drain for warnings.
Definition: QwLog.h:45
std::vector< std::vector< EQwRegType > > fIndependentType
Definition: QwRegression.h:116
std::vector< EQwRegType > fDependentVarType
Definition: QwRegression.h:120
std::vector< EQwRegType > fDependentType
List of channels to use in the regression.
Definition: QwRegression.h:114

+ Here is the call graph for this function:

Int_t QwRegression::ConnectChannels ( QwSubsystemArrayParity asym,
QwSubsystemArrayParity diff 
)

Connect to Channels (asymmetry/difference only)

Connect to the dependent and independent channels

Parameters
asymAsymmetry event structure
diffDifference event structure
Returns
Zero on success

Fill vector of pointers to the relevant data elements

Definition at line 328 of file QwRegression.cc.

References QwLog::endl(), fDependentName, fDependentType, fDependentVar, fDependentVarType, fEnableRegression, fIndependentName, fIndependentType, fIndependentVar, fSensitivity, VQwDataElement::GetElementName(), VQwDataElement::kDerived, kRegTypeAsym, kRegTypeDiff, kRegTypeMps, QwMessage, QwWarning, QwSubsystemArray::ReturnInternalValue(), and VQwDataElement::SetElementName().

331 {
332  // Return if regression is not enabled
333  if (! fEnableRegression) return 0;
334 
335  /// Fill vector of pointers to the relevant data elements
336  for (size_t dv = 0; dv < fDependentName.size(); dv++) {
337  // Get the dependent variables
338 
339  VQwHardwareChannel* dv_ptr = 0;
340  QwVQWK_Channel* new_vqwk = NULL;
341  QwVQWK_Channel* vqwk = NULL;
342  string name = "";
343  string reg = "reg_";
344 
345  if (fDependentType.at(dv)==kRegTypeMps){
346  // Quietly ignore the MPS type when we're connecting the asym & diff
347  continue;
348  } else if(fDependentName.at(dv).at(0) == '@' ){
349  name = fDependentName.at(dv).substr(1,fDependentName.at(dv).length());
350  }else{
351  switch (fDependentType.at(dv)) {
352  case kRegTypeAsym:
353  dv_ptr = asym.ReturnInternalValueForFriends(fDependentName.at(dv));
354  break;
355  case kRegTypeDiff:
356  dv_ptr = diff.ReturnInternalValueForFriends(fDependentName.at(dv));
357  break;
358  default:
359  QwWarning << "QwRegression::ConnectChannels(QwSubsystemArrayParity& asym, QwSubsystemArrayParity& diff): Dependent variable, "
360  << fDependentName.at(dv)
361  << ", for asym/diff regression does not have proper type, type=="
362  << fDependentType.at(dv) << "."<< QwLog::endl;
363  break;
364  }
365 
366  vqwk = dynamic_cast<QwVQWK_Channel*>(dv_ptr);
367  name = vqwk->GetElementName().Data();
368  name.insert(0, reg);
369  new_vqwk = new QwVQWK_Channel(*vqwk, VQwDataElement::kDerived);
370  new_vqwk->SetElementName(name);
371  }
372 
373  // alias
374  if(fDependentName.at(dv).at(0) == '@'){
375  QwMessage << "dv: " << name << QwLog::endl;
376  new_vqwk = new QwVQWK_Channel(name, VQwDataElement::kDerived);
377  }
378  // defined type
379  else if(dv_ptr!=NULL){
380  QwMessage << "dv: " << fDependentName.at(dv) << QwLog::endl;
381  }else {
382  QwWarning << "Dependent variable " << fDependentName.at(dv) << " could not be found, "
383  << "or is not a VQWK channel." << QwLog::endl;
384  continue;
385  }
386 
387  // pair creation
388  if(new_vqwk != NULL){
389  fDependentVarType.push_back(fDependentType.at(dv));
390  fDependentVar.push_back(std::make_pair(vqwk, new_vqwk));
391  }
392 
393  // Add independent variables
394  fIndependentVar.resize(fDependentVar.size());
395  for (size_t iv = 0; iv < fIndependentName.at(dv).size(); iv++) {
396  // Get the independent variables
397  const VQwHardwareChannel* iv_ptr = 0;
398  switch (fIndependentType.at(dv).at(iv)) {
399  case kRegTypeAsym:
400  iv_ptr = asym.ReturnInternalValue(fIndependentName.at(dv).at(iv));
401  break;
402  case kRegTypeDiff:
403  iv_ptr = diff.ReturnInternalValue(fIndependentName.at(dv).at(iv));
404  break;
405  default:
406  QwWarning << "Independent variable for regression has unknown type."
407  << QwLog::endl;
408  break;
409  }
410  if (iv_ptr) {
411  QwMessage << " iv: " << fIndependentName.at(dv).at(iv) << " (sens = "
412  << fSensitivity.at(dv).at(iv) << ")" << QwLog::endl;
413  fIndependentVar.back().push_back(std::make_pair(fSensitivity.at(dv).at(iv),
414  iv_ptr));
415  } else {
416  QwWarning << "Independent variable " << fIndependentName.at(dv).at(iv) << " for regression of "
417  << "dependent variable " << fDependentName.at(dv) << " could not be found."
418  << QwLog::endl;
419  }
420  }
421  }
422 
423  return 0;
424 
425 }
std::vector< std::string > fDependentName
Definition: QwRegression.h:115
#define QwMessage
Predefined log drain for regular messages.
Definition: QwLog.h:50
const VQwHardwareChannel * ReturnInternalValue(const TString &name) const
Retrieve the variable name from subsystems in this subsystem array.
std::vector< std::vector< Double_t > > fSensitivity
Definition: QwRegression.h:118
std::vector< std::pair< VQwHardwareChannel *, VQwHardwareChannel * > > fDependentVar
Definition: QwRegression.h:121
std::vector< std::vector< std::pair< Double_t, const VQwHardwareChannel * > > > fIndependentVar
Definition: QwRegression.h:122
std::vector< std::vector< std::string > > fIndependentName
Definition: QwRegression.h:117
bool fEnableRegression
Flag to enable regression.
Definition: QwRegression.h:94
void SetElementName(const TString &name)
Set the name of this element.
static std::ostream & endl(std::ostream &)
End of the line.
Definition: QwLog.cc:299
virtual const TString & GetElementName() const
Get the name of this element.
#define QwWarning
Predefined log drain for warnings.
Definition: QwLog.h:45
std::vector< std::vector< EQwRegType > > fIndependentType
Definition: QwRegression.h:116
std::vector< EQwRegType > fDependentVarType
Definition: QwRegression.h:120
std::vector< EQwRegType > fDependentType
List of channels to use in the regression.
Definition: QwRegression.h:114

+ Here is the call graph for this function:

void QwRegression::ConstructBranchAndVector ( TTree *  tree,
std::vector< Double_t > &  values 
)
inline

Construct the tree and vector for this subsystem.

Definition at line 74 of file QwRegression.h.

Referenced by QwRegressionSubsystem::ConstructBranchAndVector().

74  {
75  TString tmpstr("");
76  ConstructBranchAndVector(tree,tmpstr,values);
77  };
void ConstructBranchAndVector(TTree *tree, std::vector< Double_t > &values)
Construct the tree and vector for this subsystem.
Definition: QwRegression.h:74

+ Here is the caller graph for this function:

void QwRegression::ConstructBranchAndVector ( TTree *  tree,
TString &  prefix,
std::vector< Double_t > &  values 
)

Construct a branch and vector for this subsystem with a prefix.

Construct the branch and tree vector

Parameters
treeTree
prefixPrefix
valuesVector of values

Definition at line 584 of file QwRegression.cc.

References fDependentVar.

588 {
589  PairConstIterator element;
590  for (element = fDependentVar.begin();
591  element != fDependentVar.end(); ++element) {
592  element->second->ConstructBranchAndVector(tree, prefix, values);
593  }
594 };
std::vector< std::pair< VQwHardwareChannel *, VQwHardwareChannel * > > fDependentVar
Definition: QwRegression.h:121
std::vector< std::pair< VQwHardwareChannel *, VQwHardwareChannel * > >::const_iterator PairConstIterator
Definition: QwRegression.h:29
void QwRegression::DefineOptions ( QwOptions options)
static

Define the configuration options.

Defines configuration options using QwOptions functionality.

Parameters
optionsOptions object

Definition at line 514 of file QwRegression.cc.

References QwOptions::AddOptions().

Referenced by DefineOptionsParity().

515 {
516  options.AddOptions("Linear regression")
517  ("enable-regression", po::value<bool>()->zero_tokens()->default_value(false),
518  "enable linear regression");
519  options.AddOptions("Linear regression")
520  ("regression-map", po::value<std::string>()->default_value("regression.map"),
521  "variables and sensitivities for regression");
522 }
po::options_description_easy_init AddOptions(const std::string &blockname="Specialized options")
Add an option to a named block or create new block.
Definition: QwOptions.h:164

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void QwRegression::FillDB ( QwParityDB db,
TString  datatype 
)

Definition at line 640 of file QwRegression.cc.

References QwDatabase::Connect(), QwDBInterface::DetermineMeasurementTypeID(), QwDatabase::Disconnect(), QwLog::endl(), fDependentVar, fEnableRegression, QwParityDB::GetAnalysisID(), QwDBInterface::kQwDBI_BeamTable, QwDBInterface::kQwDBI_LumiTable, QwDBInterface::kQwDBI_MDTable, QwDBInterface::kQwDBI_OtherTable, QwDatabase::Query(), QwDebug, QwError, and QwMessage.

Referenced by main().

641 {
642  if (! fEnableRegression){
643  QwDebug << " QwRegression::FillDB: Regression is not enabled!"
644  << QwLog::endl;
645  return;
646  }
647  Bool_t local_print_flag = kTRUE;
648 
649  UInt_t analysis_id = db->GetAnalysisID();
650 
651  TString measurement_type;
652  measurement_type = QwDBInterface::DetermineMeasurementTypeID(datatype);
653 
654  std::vector<QwDBInterface> interface;
655 
656  std::vector<QwParitySSQLS::beam> beamlist;
657  std::vector<QwParitySSQLS::md_data> mdlist;
658  std::vector<QwParitySSQLS::lumi_data> lumilist;
659 
661 
662 
663  for(size_t i = 0; i < fDependentVar.size(); i++) {
664  interface.clear();
665  fDependentVar[i].second->AddEntriesToList(interface);
666  for(size_t j=0; j<interface.size(); j++) {
667  interface.at(j).SetAnalysisID( analysis_id ) ;
668  interface.at(j).SetMeasurementTypeID( measurement_type );
669  tabletype = interface.at(j).SetDetectorID( db );
670  if (tabletype==QwDBInterface::kQwDBI_OtherTable){
671  TString tmp_name = interface.at(j).GetDeviceName();
672  tmp_name.Remove(0,5);
673  interface.at(j).SetDetectorName(tmp_name);
674  tabletype = interface.at(j).SetDetectorID( db );
675  }
676  if (tabletype==QwDBInterface::kQwDBI_BeamTable){
677  interface.at(j).AddThisEntryToList( beamlist );
678  } else if (tabletype==QwDBInterface::kQwDBI_MDTable){
679  interface.at(j).AddThisEntryToList( mdlist );
680  } else if (tabletype==QwDBInterface::kQwDBI_LumiTable){
681  interface.at(j).AddThisEntryToList( lumilist );
682  } else {
683  QwError << "QwRegression::FillDB: Unrecognized detector name: "
684  << interface.at(j).GetDeviceName() << QwLog::endl;
685  }
686  interface.at(j).PrintStatus( local_print_flag);
687  }
688  }
689 
690  db->Connect();
691  // Check the entrylist size, if it isn't zero, start to query..
692  if( beamlist.size() ) {
693  mysqlpp::Query query= db->Query();
694  query.insert(beamlist.begin(), beamlist.end());
695  query.execute();
696  } else {
697  QwMessage << "QwRegression::FillDB :: This is the case when the beamlist contains nothing for type="<< measurement_type.Data()
698  << QwLog::endl;
699  }
700  if( mdlist.size() ) {
701  mysqlpp::Query query= db->Query();
702  query.insert(mdlist.begin(), mdlist.end());
703  query.execute();
704  } else {
705  QwMessage << "QwRegression::FillDB :: This is the case when the mdlist contains nothing for type="<< measurement_type.Data()
706  << QwLog::endl;
707  }
708  if( lumilist.size() ) {
709  mysqlpp::Query query= db->Query();
710  query.insert(lumilist.begin(), lumilist.end());
711  query.execute();
712  } else {
713  QwMessage << "QwRegression::FillDB :: This is the case when the lumilist contains nothing for type="<< measurement_type.Data()
714  << QwLog::endl;
715  }
716  db->Disconnect();
717  return;
718 }
#define QwMessage
Predefined log drain for regular messages.
Definition: QwLog.h:50
void Disconnect()
Definition: QwDatabase.h:59
Bool_t Connect()
Open a connection to the database using the predefined parameters.
Definition: QwDatabase.cc:175
std::vector< std::pair< VQwHardwareChannel *, VQwHardwareChannel * > > fDependentVar
Definition: QwRegression.h:121
UInt_t GetAnalysisID()
Definition: QwParityDB.h:71
#define QwDebug
Predefined log drain for debugging output.
Definition: QwLog.h:60
mysqlpp::Query Query(const char *qstr=0)
Definition: QwDatabase.h:66
bool fEnableRegression
Flag to enable regression.
Definition: QwRegression.h:94
static std::ostream & endl(std::ostream &)
End of the line.
Definition: QwLog.cc:299
static TString DetermineMeasurementTypeID(TString type, TString suffix="", Bool_t forcediffs=kFALSE)
#define QwError
Predefined log drain for errors.
Definition: QwLog.h:40

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void QwRegression::FillTreeVector ( std::vector< Double_t > &  values) const

Fill the vector for this subsystem.

Fill the tree vector

Parameters
valuesVector of values

Definition at line 600 of file QwRegression.cc.

References fDependentVar.

Referenced by QwRegressionSubsystem::FillTreeVector().

601 {
602  // Fill the data element
603  PairConstIterator element;
604  for (element = fDependentVar.begin();
605  element != fDependentVar.end(); ++element) {
606  if (element->second == NULL) continue;
607  element->second->FillTreeVector(values);
608  }
609 };
std::vector< std::pair< VQwHardwareChannel *, VQwHardwareChannel * > > fDependentVar
Definition: QwRegression.h:121
std::vector< std::pair< VQwHardwareChannel *, VQwHardwareChannel * > >::const_iterator PairConstIterator
Definition: QwRegression.h:29

+ Here is the caller graph for this function:

void QwRegression::LinearRegression ( EQwRegType  type)

Linear regression.

Do the linear regression.

Definition at line 536 of file QwRegression.cc.

References QwLog::endl(), fDependentVar, fDependentVarType, fEnableRegression, fErrorFlag, fHelicityPattern, fIndependentVar, fSubsystemArray, QwSubsystemArrayParity::GetEventcutErrorFlag(), QwHelicityPattern::GetEventcutErrorFlag(), QwDebug, and QwError.

Referenced by QwRegressionSubsystem::LinearRegression(), and main().

537 {
538  // Return if regression is not enabled
539  if (! fEnableRegression){
540  QwDebug << "Regression is not enabled!" << QwLog::endl;
541  return;
542  }
543  // Get error flag from QwHelicityPattern
544  if (fHelicityPattern != NULL){
546  } else if (fSubsystemArray != NULL){
548  } else {
549  QwError << "QwRegression::LinearRegression: Can't set fErrorFlag" << QwLog::endl;
550  fErrorFlag = 0;
551  }
552  // Linear regression for each dependent variable
553  for (size_t dv = 0; dv < fDependentVar.size(); dv++) {
554  // if second is NULL, can't do regression
555  if (fDependentVar.at(dv).second == NULL){
556  QwError<<"Second is value is NULL, unable to calculate regression."<<QwLog::endl;
557  continue;
558  }
559  // For correct type (asym, diff, mps)
560  if (fDependentVarType.at(dv) != type) continue;
561 
562  // Clear data in second, if first is NULL
563  if (fDependentVar.at(dv).first == NULL){
564  fDependentVar.at(dv).second->ClearEventData();
565  }else{
566  // Update second value
567  fDependentVar.at(dv).second->AssignValueFrom(fDependentVar.at(dv).first);
568  }
569  // Add corrections
570  for (size_t iv = 0; iv < fIndependentVar.at(dv).size(); iv++) {
571  fDependentVar.at(dv).second->ScaledAdd(fIndependentVar.at(dv).at(iv).first,
572  fIndependentVar.at(dv).at(iv).second);
573  }
574  }
575 }
QwSubsystemArrayParity * fSubsystemArray
Single event pointer.
Definition: QwRegression.h:104
std::vector< std::pair< VQwHardwareChannel *, VQwHardwareChannel * > > fDependentVar
Definition: QwRegression.h:121
QwHelicityPattern * fHelicityPattern
Helicity pattern pointer.
Definition: QwRegression.h:106
UInt_t fErrorFlag
Definition: QwRegression.h:108
std::vector< std::vector< std::pair< Double_t, const VQwHardwareChannel * > > > fIndependentVar
Definition: QwRegression.h:122
#define QwDebug
Predefined log drain for debugging output.
Definition: QwLog.h:60
bool fEnableRegression
Flag to enable regression.
Definition: QwRegression.h:94
UInt_t GetEventcutErrorFlag() const
Return the error flag to the main routine.
UInt_t GetEventcutErrorFlag() const
static std::ostream & endl(std::ostream &)
End of the line.
Definition: QwLog.cc:299
std::vector< EQwRegType > fDependentVarType
Definition: QwRegression.h:120
#define QwError
Predefined log drain for errors.
Definition: QwLog.h:40

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

Int_t QwRegression::LoadChannelMap ( const std::string &  mapfile)

Load the channels and sensitivities.

Load the channel map

Parameters
mapfileFilename of map file
Returns
Zero when success

Definition at line 152 of file QwRegression.cc.

References QwLog::endl(), fDependentName, fDependentType, fEnableRegression, fIndependentName, fIndependentType, fSensitivity, QwParameterFile::GetNextToken(), QwParameterFile::LineHasSectionHeader(), QwParameterFile::LineIsEmpty(), ParseRegressionVariable(), QwError, QwParameterFile::ReadNextLine(), QwParameterFile::ReadNextSection(), QwParameterFile::TrimComment(), QwParameterFile::TrimSectionHeader(), and QwParameterFile::TrimWhitespace().

Referenced by QwRegression().

153 {
154  // Return if regression is not enabled
155  if (! fEnableRegression) return 0;
156 
157  // Open the file
158  QwParameterFile map(mapfile);
159 
160  // Read the sections of dependent variables
161  bool keep_header = true;
162  std::string section_name;
163  QwParameterFile* section = 0;
164  std::pair<EQwRegType,std::string> type_name;
165  while ((section = map.ReadNextSection(section_name,keep_header))) {
166 
167  // Store index to the current position in the dv vector
168  size_t current_dv_start = fDependentName.size();
169 
170  // Add dependent variables from the section header
171  section->ReadNextLine();
172  if (section->LineHasSectionHeader()) {
173  section->TrimSectionHeader();
174  section->TrimWhitespace();
175  // Parse section header into tokens separated by a comma
176  std::string current_token;
177  std::string previous_token;
178  do {
179  previous_token = current_token;
180  current_token = section->GetNextToken(",");
181  if (current_token.size() == 0) continue;
182  // Parse current token into dependent variable type and name
183  type_name = ParseRegressionVariable(current_token);
184  fDependentType.push_back(type_name.first);
185  fDependentName.push_back(type_name.second);
186  // Resize the vectors of sensitivities and independent variables
187  fSensitivity.resize(fDependentName.size());
188  fIndependentType.resize(fDependentName.size());
189  fIndependentName.resize(fDependentName.size());
190  } while (current_token.size() != 0);
191  } else QwError << "Section does not start with header." << QwLog::endl;
192 
193  // Add independent variables and sensitivities
194  while (section->ReadNextLine()) {
195  // Throw away comments, whitespace, empty lines
196  section->TrimComment();
197  section->TrimWhitespace();
198  if (section->LineIsEmpty()) continue;
199  // Get first token: independent variable
200  std::string current_token = section->GetNextToken(",");
201  // Parse current token into independent variable type and name
202  type_name = ParseRegressionVariable(current_token);
203  // Loop over dependent variables to set sensitivities
204  for (size_t dv = current_dv_start; dv < fDependentName.size(); dv++) {
205  Double_t sensitivity = atof(section->GetNextToken(",").c_str());
206  fSensitivity.at(dv).push_back(sensitivity);
207  fIndependentType.at(dv).push_back(type_name.first);
208  fIndependentName.at(dv).push_back(type_name.second);
209  }
210  }
211  }
212  return 0;
213 }
std::vector< std::string > fDependentName
Definition: QwRegression.h:115
std::pair< EQwRegType, std::string > ParseRegressionVariable(const std::string &variable)
Parse regression variable in type and name.
std::vector< std::vector< Double_t > > fSensitivity
Definition: QwRegression.h:118
std::string GetNextToken(const std::string &separatorchars)
Get next token as a string.
void TrimComment(const char commentchar)
QwParameterFile * ReadNextSection(std::string &secname, const bool keep_header=false)
std::vector< std::vector< std::string > > fIndependentName
Definition: QwRegression.h:117
Bool_t ReadNextLine()
bool fEnableRegression
Flag to enable regression.
Definition: QwRegression.h:94
Bool_t LineHasSectionHeader()
static std::ostream & endl(std::ostream &)
End of the line.
Definition: QwLog.cc:299
void TrimWhitespace(TString::EStripType head_tail=TString::kBoth)
std::vector< std::vector< EQwRegType > > fIndependentType
Definition: QwRegression.h:116
#define QwError
Predefined log drain for errors.
Definition: QwLog.h:40
std::vector< EQwRegType > fDependentType
List of channels to use in the regression.
Definition: QwRegression.h:114

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

std::pair< QwRegression::EQwRegType, std::string > QwRegression::ParseRegressionVariable ( const std::string &  variable)
protected

Parse regression variable in type and name.

Parse the variable type and name from a section header

Parameters
variableString with variable type and name
Returns
Pair of variable type and name

Definition at line 120 of file QwRegression.cc.

References kRegTypeAsym, kRegTypeDiff, kRegTypeMps, and kRegTypeUnknown.

Referenced by LoadChannelMap().

122 {
123  std::pair<EQwRegType,std::string> type_name;
124  size_t len = variable.length();
125  size_t pos1 = variable.find_first_of(":");
126  size_t pos2 = variable.find_first_not_of(":",pos1);
127  if (pos1 == std::string::npos) {
128  type_name.first = kRegTypeUnknown;
129  type_name.second = variable;
130  } else {
131  std::string type = variable.substr(0,pos1);
132  std::string name = variable.substr(pos2,len-pos2);
133  if (type == "asym")
134  type_name.first = kRegTypeAsym;
135  else if (type == "diff")
136  type_name.first = kRegTypeDiff;
137  else if (type == "mps")
138  type_name.first = kRegTypeMps;
139  else
140  type_name.first = kRegTypeUnknown;
141  type_name.second = name;
142  }
143  return type_name;
144 }

+ Here is the caller graph for this function:

void QwRegression::PrintValue ( ) const

Definition at line 632 of file QwRegression.cc.

References QwLog::endl(), fDependentVar, and QwMessage.

Referenced by main(), and QwRegressionSubsystem::PrintValue().

633 {
634  QwMessage<<"=== QwRegression ==="<<QwLog::endl<<QwLog::endl;
635  for(size_t i = 0; i < fDependentVar.size(); i++) {
636  fDependentVar[i].second->PrintValue();
637  }
638 }
#define QwMessage
Predefined log drain for regular messages.
Definition: QwLog.h:50
std::vector< std::pair< VQwHardwareChannel *, VQwHardwareChannel * > > fDependentVar
Definition: QwRegression.h:121
static std::ostream & endl(std::ostream &)
End of the line.
Definition: QwLog.cc:299

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void QwRegression::ProcessOptions ( QwOptions options)

Process the configuration options.

Process configuration options using QwOptions functionality.

Parameters
optionsOptions object

Definition at line 528 of file QwRegression.cc.

References fEnableRegression, fRegressionMapFile, and QwOptions::GetValue().

Referenced by QwRegressionSubsystem::ProcessOptions(), and QwRegression().

529 {
530  fEnableRegression = options.GetValue<bool>("enable-regression");
531  fRegressionMapFile = options.GetValue<std::string>("regression-map");
532 }
std::string fRegressionMapFile
Regression dependent and independent variable map.
Definition: QwRegression.h:101
T GetValue(const std::string &key)
Get a templated value.
Definition: QwOptions.h:240
bool fEnableRegression
Flag to enable regression.
Definition: QwRegression.h:94

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

Field Documentation

std::vector< std::string > QwRegression::fDependentName
protected

Definition at line 115 of file QwRegression.h.

Referenced by ConnectChannels(), and LoadChannelMap().

std::vector< EQwRegType > QwRegression::fDependentType
protected

List of channels to use in the regression.

Definition at line 114 of file QwRegression.h.

Referenced by ConnectChannels(), and LoadChannelMap().

std::vector< EQwRegType > QwRegression::fDependentVarType
protected

Definition at line 120 of file QwRegression.h.

Referenced by ConnectChannels(), LinearRegression(), and QwRegression().

bool QwRegression::fEnableRegression
protected

Flag to enable regression.

Definition at line 94 of file QwRegression.h.

Referenced by ConnectChannels(), FillDB(), LinearRegression(), LoadChannelMap(), ProcessOptions(), and QwRegression().

UInt_t QwRegression::fErrorFlag
protected

Definition at line 108 of file QwRegression.h.

Referenced by AccumulateRunningSum(), and LinearRegression().

QwHelicityPattern* QwRegression::fHelicityPattern
protected

Helicity pattern pointer.

Definition at line 106 of file QwRegression.h.

Referenced by LinearRegression(), and QwRegression().

std::vector< std::vector< std::string > > QwRegression::fIndependentName
protected

Definition at line 117 of file QwRegression.h.

Referenced by ConnectChannels(), and LoadChannelMap().

std::vector< std::vector< EQwRegType > > QwRegression::fIndependentType
protected

Definition at line 116 of file QwRegression.h.

Referenced by ConnectChannels(), and LoadChannelMap().

std::vector< std::vector< std::pair< Double_t, const VQwHardwareChannel* > > > QwRegression::fIndependentVar
protected

Definition at line 122 of file QwRegression.h.

Referenced by ConnectChannels(), and LinearRegression().

std::string QwRegression::fRegressionMapFile
protected

Regression dependent and independent variable map.

Definition at line 101 of file QwRegression.h.

Referenced by ProcessOptions(), and QwRegression().

std::vector< std::vector< Double_t> > QwRegression::fSensitivity
protected

Definition at line 118 of file QwRegression.h.

Referenced by ConnectChannels(), and LoadChannelMap().

QwSubsystemArrayParity* QwRegression::fSubsystemArray
protected

Single event pointer.

Definition at line 104 of file QwRegression.h.

Referenced by LinearRegression(), and QwRegression().


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