14 #define MYSQLPP_SSQLS_NO_STATICS
87 fEnableRegression(source.fEnableRegression),
88 fRegressionMapFile(source.fRegressionMapFile),
89 fErrorFlag(source.fErrorFlag)
107 if (element->second != NULL){
108 delete element->second;
121 const std::string& variable)
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) {
129 type_name.second = variable;
131 std::string type = variable.substr(0,pos1);
132 std::string name = variable.substr(pos2,len-pos2);
135 else if (type ==
"diff")
137 else if (type ==
"mps")
141 type_name.second = name;
161 bool keep_header =
true;
162 std::string section_name;
164 std::pair<EQwRegType,std::string> type_name;
176 std::string current_token;
177 std::string previous_token;
179 previous_token = current_token;
181 if (current_token.size() == 0)
continue;
190 }
while (current_token.size() != 0);
204 for (
size_t dv = current_dv_start; dv <
fDependentName.size(); dv++) {
205 Double_t sensitivity = atof(section->
GetNextToken(
",").c_str());
245 dv_ptr =
event.ReturnInternalValueForFriends(
fDependentName.at(dv));
248 dv_ptr = asym.ReturnInternalValueForFriends(
fDependentName.at(dv));
251 dv_ptr = diff.ReturnInternalValueForFriends(
fDependentName.at(dv));
254 QwWarning <<
"Dependent variable for regression has unknown type."
272 else if(dv_ptr!=NULL){
281 if(new_vqwk != NULL){
302 QwWarning <<
"Independent variable for regression has unknown type."
313 <<
"dependent variable " <<
fDependentName.at(dv) <<
" could not be found."
353 dv_ptr = asym.ReturnInternalValueForFriends(
fDependentName.at(dv));
356 dv_ptr = diff.ReturnInternalValueForFriends(
fDependentName.at(dv));
359 QwWarning <<
"QwRegression::ConnectChannels(QwSubsystemArrayParity& asym, QwSubsystemArrayParity& diff): Dependent variable, "
361 <<
", for asym/diff regression does not have proper type, type=="
379 else if(dv_ptr!=NULL){
388 if(new_vqwk != NULL){
406 QwWarning <<
"Independent variable for regression has unknown type."
417 <<
"dependent variable " <<
fDependentName.at(dv) <<
" could not be found."
451 QwWarning <<
"QwRegression::ConnectChannels(QwSubsystemArrayParity& event): Dependent variable, "
453 <<
", for MPS regression does not have MPS type, type=="
461 dv_ptr =
event.ReturnInternalValueForFriends(
fDependentName.at(dv));
491 QwWarning <<
"Independent variable for MPS regression has unknown type."
501 <<
"dependent variable " <<
fDependentName.at(dv) <<
" could not be found."
517 (
"enable-regression", po::value<bool>()->zero_tokens()->default_value(
false),
518 "enable linear regression");
520 (
"regression-map", po::value<std::string>()->default_value(
"regression.map"),
521 "variables and sensitivities for regression");
587 std::vector<Double_t>& values)
592 element->second->ConstructBranchAndVector(tree, prefix, values);
606 if (element->second == NULL)
continue;
607 element->second->FillTreeVector(values);
643 QwDebug <<
" QwRegression::FillDB: Regression is not enabled!"
647 Bool_t local_print_flag = kTRUE;
651 TString measurement_type;
654 std::vector<QwDBInterface> interface;
656 std::vector<QwParitySSQLS::beam> beamlist;
657 std::vector<QwParitySSQLS::md_data> mdlist;
658 std::vector<QwParitySSQLS::lumi_data> lumilist;
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 );
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 );
677 interface.at(j).AddThisEntryToList( beamlist );
679 interface.at(j).AddThisEntryToList( mdlist );
681 interface.at(j).AddThisEntryToList( lumilist );
683 QwError <<
"QwRegression::FillDB: Unrecognized detector name: "
686 interface.at(j).PrintStatus( local_print_flag);
692 if( beamlist.size() ) {
693 mysqlpp::Query query= db->
Query();
694 query.insert(beamlist.begin(), beamlist.end());
697 QwMessage <<
"QwRegression::FillDB :: This is the case when the beamlist contains nothing for type="<< measurement_type.Data()
700 if( mdlist.size() ) {
701 mysqlpp::Query query= db->
Query();
702 query.insert(mdlist.begin(), mdlist.end());
705 QwMessage <<
"QwRegression::FillDB :: This is the case when the mdlist contains nothing for type="<< measurement_type.Data()
708 if( lumilist.size() ) {
709 mysqlpp::Query query= db->
Query();
710 query.insert(lumilist.begin(), lumilist.end());
713 QwMessage <<
"QwRegression::FillDB :: This is the case when the lumilist contains nothing for type="<< measurement_type.Data()
std::vector< std::string > fDependentName
#define QwMessage
Predefined log drain for regular messages.
const VQwHardwareChannel * ReturnInternalValue(const TString &name) const
Retrieve the variable name from subsystems in this subsystem array.
std::string fRegressionMapFile
Regression dependent and independent variable map.
QwSubsystemArrayParity fDifference
std::pair< EQwRegType, std::string > ParseRegressionVariable(const std::string &variable)
Parse regression variable in type and name.
QwSubsystemArrayParity * fSubsystemArray
Single event pointer.
std::vector< std::vector< Double_t > > fSensitivity
virtual ~QwRegression()
Virtual destructor.
Bool_t Connect()
Open a connection to the database using the predefined parameters.
std::string GetNextToken(const std::string &separatorchars)
Get next token as a string.
EQwRegType
Type of regression variable.
void AccumulateRunningSum(QwRegression value)
std::vector< std::pair< VQwHardwareChannel *, VQwHardwareChannel * > > fDependentVar
void TrimComment(const char commentchar)
QwHelicityPattern * fHelicityPattern
Helicity pattern pointer.
QwSubsystemArrayParity fAsymmetry
void LinearRegression(EQwRegType type)
Linear regression.
std::vector< std::vector< std::pair< Double_t, const VQwHardwareChannel * > > > fIndependentVar
po::options_description_easy_init AddOptions(const std::string &blockname="Specialized options")
Add an option to a named block or create new block.
QwParameterFile * ReadNextSection(std::string &secname, const bool keep_header=false)
void CalculateRunningAverage()
Definition of the pure virtual base class of all data elements.
T GetValue(const std::string &key)
Get a templated value.
Virtual base class for the parity subsystems.
std::vector< std::vector< std::string > > fIndependentName
void FillDB(QwParityDB *db, TString datatype)
#define QwDebug
Predefined log drain for debugging output.
mysqlpp::Query Query(const char *qstr=0)
bool fEnableRegression
Flag to enable regression.
void SetElementName(const TString &name)
Set the name of this element.
static void DefineOptions(QwOptions &options)
Define the configuration options.
void ConstructBranchAndVector(TTree *tree, std::vector< Double_t > &values)
Construct the tree and vector for this subsystem.
UInt_t GetEventcutErrorFlag() const
Return the error flag to the main routine.
Bool_t LineHasSectionHeader()
UInt_t GetEventcutErrorFlag() const
Int_t ConnectChannels(QwSubsystemArrayParity &event, QwSubsystemArrayParity &asym, QwSubsystemArrayParity &diff)
Connect to channels.
static std::ostream & endl(std::ostream &)
End of the line.
void FillTreeVector(std::vector< Double_t > &values) const
Fill the vector for this subsystem.
virtual const TString & GetElementName() const
Get the name of this element.
void TrimWhitespace(TString::EStripType head_tail=TString::kBoth)
static TString DetermineMeasurementTypeID(TString type, TString suffix="", Bool_t forcediffs=kFALSE)
void ProcessOptions(QwOptions &options)
Process the configuration options.
QwRegression()
Private default constructor.
Int_t LoadChannelMap(const std::string &mapfile)
Load the channels and sensitivities.
#define QwWarning
Predefined log drain for warnings.
std::vector< std::vector< EQwRegType > > fIndependentType
std::vector< EQwRegType > fDependentVarType
std::vector< std::pair< VQwHardwareChannel *, VQwHardwareChannel * > >::const_iterator PairConstIterator
#define QwError
Predefined log drain for errors.
std::vector< EQwRegType > fDependentType
List of channels to use in the regression.
std::vector< std::pair< VQwHardwareChannel *, VQwHardwareChannel * > >::iterator PairIterator