CMS 3D CMS Logo

Public Types | Public Member Functions | Private Attributes

CSCFitAFEBThr Class Reference

#include <CSCFitAFEBThr.h>

List of all members.

Public Types

typedef
ROOT::Minuit2::ModularFunctionMinimizer 
ModularFunctionMinimizer

Public Member Functions

 CSCFitAFEBThr ()
virtual bool ThresholdNoise (const std::vector< float > &inputx, const std::vector< float > &inputy, const int &npulses, std::vector< int > &dacoccup, std::vector< float > &mypar, std::vector< float > &ermypar, float &ercorr, float &chisq, int &ndf, int &niter, float &edm) const
virtual ~CSCFitAFEBThr ()

Private Attributes

ModularFunctionMinimizertheFitter
CSCThrTurnOnFcntheOBJfun

Detailed Description

Concrete algorithmic class used to identify threshold and noise in AFEB channel threshold scan in the endcap muon CSCs. Based on CSCFitSCAPulse as an example

Definition at line 15 of file CSCFitAFEBThr.h.


Member Typedef Documentation

typedef ROOT::Minuit2::ModularFunctionMinimizer CSCFitAFEBThr::ModularFunctionMinimizer

Definition at line 18 of file CSCFitAFEBThr.h.


Constructor & Destructor Documentation

CSCFitAFEBThr::CSCFitAFEBThr ( )

Definition at line 14 of file CSCFitAFEBThr.cc.

References theFitter, and theOBJfun.

Referenced by CSCAFEBThrAnalysis::done().

                             {
  theOBJfun = new CSCThrTurnOnFcn();
  theFitter = new VariableMetricMinimizer();
}
CSCFitAFEBThr::~CSCFitAFEBThr ( ) [virtual]

Definition at line 19 of file CSCFitAFEBThr.cc.

References theFitter, and theOBJfun.

                              {
  delete theFitter;
  delete theOBJfun;
}

Member Function Documentation

bool CSCFitAFEBThr::ThresholdNoise ( const std::vector< float > &  inputx,
const std::vector< float > &  inputy,
const int &  npulses,
std::vector< int > &  dacoccup,
std::vector< float > &  mypar,
std::vector< float > &  ermypar,
float &  ercorr,
float &  chisq,
int &  ndf,
int &  niter,
float &  edm 
) const [virtual]

Find the threshold and noise from the threshold turn-on curve. The returned bool is success/fail status.

initial parameters, parinit[0]-threshold, parinit[1]-noise

do not fit input[y]==max and input[y]==0.0; calculate binom. error;

ndf > 0 if there is input data,number of points to fit > 2 and fit did not fail. ndf = 0 if number of points to fit = 2 ndf =-1 .......................... = 1 ndf =-2 .......................... = 0 ndf =-3 fit failed (number of points to fit was > 2) ndf =-4 no input data

do not fit data with less than 3 points

Calculate approximate initial threshold par[0]

store data, errors and npulses for fit

Fit as 1D, <=500 iterations, edm=10**-5 (->0.1)

Definition at line 24 of file CSCFitAFEBThr.cc.

References diffTreeTool::diff, dmin, i, AlCaHLTBitMon_ParallelJobs::p, alignCSCRings::r, alignCSCRings::s, CSCThrTurnOnFcn::setData(), CSCThrTurnOnFcn::setErrors(), CSCThrTurnOnFcn::setNorm(), mathSSE::sqrt(), ntuplemaker::status, theFitter, theOBJfun, x, and detailsBasic3DVector::y.

Referenced by CSCAFEBThrAnalysis::done().

                                          {
  bool status = false;                   
 
  std::vector<double> parinit(2,0);
  std::vector<double> erparinit(2,0);

  parinit[0] = 30.0;
  parinit[1] = 2.0;
  
  erparinit[0] = 20;
  erparinit[1] = 0.5;

  std::vector<float> x;
  std::vector<float> y;
  std::vector<float> ynorm;
  std::vector<float> ery;
  x.clear();
  y.clear();
  ynorm.clear();
  ery.clear();

  
  int sum=0;
  float r;
  for(size_t i=0;i<inputx.size();i++) {
     if(inputy[i]>0.0) sum++;
     r=inputy[i]/(float)dacoccup[i];
     ynorm.push_back(r);
//     std::cout<<" "<<ynorm[i];
  }
//  std::cout<<std::endl;
  if(sum==0) {
    ndf=-4;
    return status;
  }
   

  int nbeg=inputx.size();
  // for(size_t i=inputx.size()-1;i>=0;i--) // Wrong.
  // Because i is unsigned, i>=0 is always true, 
  // and the loop termination condition  is never reached.
  // We offset by 1.
  for(size_t i=inputx.size();i>0;i--) {
    if(ynorm[i-1]<1.0) nbeg--;
    if(ynorm[i-1]==1.0) break;
  }

  for(size_t i=nbeg;i<inputx.size();i++) {
    if(ynorm[i]>0.0) {
      x.push_back(inputx[i]); 
      y.push_back(ynorm[i]);

      float p=inputy[i]/(float)dacoccup[i];
      float s=(float)dacoccup[i] * p * (1.0-p);
      s=sqrt(s)/(float)dacoccup[i];
      ery.push_back(s);
    }                          
  }

  ndf=x.size()-2; 
  if(ndf <=0) return status;

  float half=0.5;
  float dmin=999999.0;
  float diff;
  for(size_t i=0;i<x.size();i++) {
    diff=y[i]-half; if(diff<0.0) diff=-diff;
    if(diff<dmin) {dmin=diff; parinit[0]=x[i];}   // par[0] from data    
    //std::cout<<i+1<<" "<<x[i]<<" "<<y[i]<<" "<<ery[i]<<std::endl;
  }

  theOBJfun->setData(x,y); 
  theOBJfun->setErrors(ery);   
  theOBJfun->setNorm(1.0);

 // for(size_t int i=0;i<x.size();i++) std::cout<<" "<<x[i]<<" "<<y[i]
 //                                               <<" "<<ery[i]<<std::endl; 

  FunctionMinimum fmin=theFitter->Minimize(*theOBJfun,parinit,erparinit,1,500,0.1);

  status = fmin.IsValid();

  if(status) { 
    mypar[0]=(float)fmin.Parameters().Vec()(0);
    mypar[1]=(float)fmin.Parameters().Vec()(1);
    ermypar[0]=(float)sqrt( fmin.Error().Matrix()(0,0) );
    ermypar[1]=(float)sqrt( fmin.Error().Matrix()(1,1) );
    ercorr=0;
    if(ermypar[0] !=0.0 && ermypar[1]!=0.0)
    ercorr=(float)fmin.Error().Matrix()(0,1)/(ermypar[0]*ermypar[1]);

    chisq  = fmin.Fval();
    ndf=y.size()-mypar.size();
    niter=fmin.NFcn();         
    edm=fmin.Edm();
  }
  else ndf=-3;
  return status;
}

Member Data Documentation

Definition at line 37 of file CSCFitAFEBThr.h.

Referenced by CSCFitAFEBThr(), ThresholdNoise(), and ~CSCFitAFEBThr().

Definition at line 38 of file CSCFitAFEBThr.h.

Referenced by CSCFitAFEBThr(), ThresholdNoise(), and ~CSCFitAFEBThr().