Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00036 #include "TopQuarkAnalysis/TopHitFit/interface/Constraint.h"
00037 #include "TopQuarkAnalysis/TopHitFit/interface/Constraint_Intermed.h"
00038 #include <iostream>
00039 #include <cassert>
00040
00041
00042 using std::auto_ptr;
00043 using std::ostream;
00044 using std::string;
00045
00046 namespace hitfit {
00047
00048
00049 Constraint::Constraint (const Constraint& c)
00050
00051
00052
00053
00054
00055
00056 : _lhs (c._lhs->clone ()),
00057 _rhs (c._rhs->clone ())
00058 {
00059 }
00060
00061
00062 Constraint& Constraint::operator= (const Constraint& c)
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072 {
00073 {
00074 auto_ptr<Constraint_Intermed> ci = c._lhs->clone ();
00075 _lhs = ci;
00076 }
00077 {
00078 auto_ptr<Constraint_Intermed> ci = c._rhs->clone ();
00079 _rhs = ci;
00080 }
00081
00082 return *this;
00083 }
00084
00085
00086 Constraint::Constraint (std::string s)
00087
00088
00089
00090
00091
00092
00093
00094 {
00095
00096 string::size_type i = s.find ('=');
00097 assert (i != string::npos);
00098
00099
00100 {
00101 auto_ptr<Constraint_Intermed> ci =
00102 make_constraint_intermed (s.substr (0, i));
00103 _lhs = ci;
00104 }
00105 {
00106 auto_ptr<Constraint_Intermed> ci =
00107 make_constraint_intermed (s.substr (i+1));
00108 _rhs = ci;
00109 }
00110 }
00111
00112
00113 int Constraint::has_labels (int ilabel, int jlabel) const
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127 {
00128 if (_lhs->has_labels (ilabel, jlabel))
00129 return 1;
00130 else if (_rhs->has_labels (ilabel, jlabel))
00131 return -1;
00132 else
00133 return 0;
00134 }
00135
00136
00137 double Constraint::sum_mass_terms (const Fourvec_Event& ev) const
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148 {
00149 return _lhs->sum_mass_terms (ev) - _rhs->sum_mass_terms (ev);
00150 }
00151
00152
00163 std::ostream& operator<< (std::ostream& s, const Constraint& c)
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174 {
00175 s << *c._lhs.get() << " = " << *c._rhs.get();
00176 return s;
00177 }
00178
00179
00180 }