CMS 3D CMS Logo

SaturationFcn.h
Go to the documentation of this file.
1 #ifndef SaturationFcn_h
2 #define SaturationFcn_h
3 
4 #include "Minuit2/FCNBase.h"
5 #include <vector>
6 
7 class SaturationFcn : public FCNBase{
8 
9  public:
10 
12 
14 
15 
16  void set_data(int N,float *charge_ptr,float *adc_ptr){
17 
18  float x[20],y[20];
19 
20  for(int i=0;i<N;i++){
21  x[i]=charge_ptr[i];
22  y[i]=adc_ptr[i];
23  datx[i]=x[i];
24  daty[i]=y[i];
25  //printf("%d datx daty %f %f \n",i,datx[i],daty[i]);
26  }
27 
28  x3start=(y[4]*x[1]-y[1]*x[4])/(x[1]-x[4]);
29  x0start=daty[13]-x3start;
30  x1start=(y[4]-y[1])/(x[4]-x[1])/x0start;
31  x2start=20.;
32  //printf(" x0-2start %f %f %f %f\n",x0start,x1start,x2start,x3start);
33  }
34 
35  virtual double Up() const {return 1.;}
36 
37  virtual double operator()(const std::vector<double>& x) const {
38  double chisq = 0.0;
39  int N=20;
40  for(int i=0;i<N;i++){
41  double val=1.0+pow(x[1]*datx[i],x[2]);
42  double val2=1.0/x[2];
43  val=x[0]*x[1]*datx[i]/pow(val,val2);
44  double tmp=(daty[i]-x[3]-val);
45  //printf(" dat: %d %f %f %f %f \n",i,datx[i],daty[i]-x[3],val,tmp);
46  chisq=chisq+tmp*tmp;
47  }
48  //printf("x0-3 %f %f %f %f chisq %f \n",x[0],x[1],x[2],x[3],chisq);
49  return chisq;
50  }
51 
52  double x0start;
53  double x1start;
54  double x2start;
55  double x3start;
56 
57  private:
58  double datx[20],daty[20];
59 };
60 
61 #endif
double daty[20]
Definition: SaturationFcn.h:58
virtual double Up() const
Definition: SaturationFcn.h:35
void set_data(int N, float *charge_ptr, float *adc_ptr)
Definition: SaturationFcn.h:16
virtual double operator()(const std::vector< double > &x) const
Definition: SaturationFcn.h:37
#define N
Definition: blowfish.cc:9
std::vector< std::vector< double > > tmp
Definition: MVATrainer.cc:100
double datx[20]
Definition: SaturationFcn.h:58
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:40