5 #include "boost/foreach.hpp"
9 TH1* fake = (TH1*)(candidates[0]->Clone(basename.c_str()));
14 BOOST_FOREACH(
const TH1* candidate, candidates) {
21 if(status) {
delete combined.
chi2_; combined.
chi2_=0;}
22 return combined.
chi2_;
37 minmaxUsable_(findUsableMinMax()),
57 unsigned NEAR(0), FAR(0);
59 for(
unsigned L=0;
L<cont.size();
L++) {
if( cont[
L].
first >
range_.first)
continue;
60 for(
unsigned R=
L;
R<cont.size();
R++) {
if( cont[
R].
second <
range_.second)
continue;
63 cont[
R].second -
range_.second );
64 const unsigned near =
std::max(
range_.second<cont[L].second ? 0 :
range_.second - cont[L].second,
67 if ( (far>near) && (far-near)>(FAR-NEAR) ) { FAR = far; NEAR = near;}
70 return std::make_pair(NEAR,FAR);
75 std::vector<std::pair<unsigned,unsigned> >
ranges;
80 std::pair<unsigned,unsigned> range(i,i+1);
81 while(++i<=Nbins && symm_candidate_->GetBinError(i)) range.second++;
82 ranges.push_back(range);
93 for(
int i=1;
i<=
chi2_->GetNbinsX() ; ++
i) {
95 chi2_->SetBinContent(
i,
chi2( std::make_pair(
L,R)) );
121 return pow(y0-y1, 2)/(e0*e0+e1*e1);
128 p[0] <
chi2_->GetBinCenter(1) ||
129 p[0] >
chi2_->GetBinCenter(
chi2_->GetNbinsX()))
133 f->SetParameter(0, p[0]); f->SetParLimits(0, p[0], p[0]);
134 f->SetParameter(1, p[1]); f->SetParLimits(1, p[1], p[1]);
135 f->SetParameter(2, p[2]); f->SetParLimits(2, p[2], p[2]);
136 f->SetParameter(3,
ndf_); f->SetParLimits(3,
ndf_,
ndf_);
137 chi2_->Fit(f.get(),
"WQ");
143 TF1*
f =
new TF1(
"SymmetryFit",
"((x-[0])/[1])**2+[2]+0*[3]");
144 f->SetParName(0,
"middle");
145 f->SetParName(1,
"uncertainty");
146 f->SetParName(2,
"chi2");
147 f->SetParName(3,
"NDF");
153 std::vector<double>
v;
156 TF1 func(
"mypol2",
"pol2");
157 int status = hist->Fit(&func,
"WQ");
159 std::vector<double>
p;
160 p.push_back(func.GetParameter(0));
161 p.push_back(func.GetParameter(1));
162 p.push_back(func.GetParameter(2));
164 v.push_back( -0.5*p[1]/p[2] );
165 v.push_back( 1./
sqrt(p[2]) );
166 v.push_back( p[0]-0.25*p[1]*p[1]/p[2] );
173 std::vector<double>
v;
175 std::unique_ptr<TF1> func(
new TF1(
"mypol3",
"pol3"));
176 int status = hist->Fit(func.get(),
"WQ");
178 std::vector<double>
p;
179 p.push_back(func->GetParameter(0));
180 p.push_back(func->GetParameter(1));
181 p.push_back(func->GetParameter(2));
182 p.push_back(func->GetParameter(3));
183 double radical = p[2]*p[2] - 3*p[1]*p[3] ;
185 double x0 = ( -p[2] +
sqrt(radical) ) / ( 3*p[3] ) ;
187 v.push_back(
pow( radical, -0.25) );
188 v.push_back( p[0] + p[1]*x0 + p[2]*x0*x0 + p[3]*x0*x0*x0 );
const std::pair< unsigned, unsigned > minmaxUsable_
SymmetryFit(const TH1 *, const std::pair< unsigned, unsigned >)
static std::string name(std::string base)
std::pair< unsigned, unsigned > findUsableMinMax() const
const std::pair< unsigned, unsigned > range_
static TH1 * symmetryChi2(std::string, const std::vector< TH1 * > &, const std::pair< unsigned, unsigned >)
static std::vector< double > pol2_from_pol2(TH1 *hist)
float chi2_element(std::pair< unsigned, unsigned >)
U second(std::pair< T, U > const &p)
static std::vector< double > pol2_from_pol3(TH1 *hist)
float chi2(std::pair< unsigned, unsigned >)
static TF1 * fitfunction()
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
const TH1 * symm_candidate_
std::vector< std::pair< unsigned, unsigned > > continuousRanges() const
Power< A, B >::type pow(const A &a, const B &b)
*vegas h *****************************************************used in the default bin number in original ***version of VEGAS is ***a higher bin number might help to derive a more precise ***grade subtle point