StrobeDelayFitAlgorithm.cpp

00001 #include "StrobeDelayFitAlgorithm.h"
00002 #include "FitAlgorithmMap.h"
00003 #include "SctData/FitScanResult.h"
00004 #include "SctData/StrobeDelayVariable.h"
00005 #include "SctData/StandardDefects.h"
00006 #include "SctData/TopHatFitObject.h"
00007 #include <TH1.h>
00008 
00009 using namespace SctData;
00010 
00011 namespace SctFitter {
00012     
00013 bool StrobeDelayFitAlgorithm::inMap = FitAlgorithmMap::instance().setAlgorithm(StrobeDelayVariable::instance().getVariableName(), auto_ptr<FitAlgorithm>(new StrobeDelayFitAlgorithm));
00014 
00015 StrobeDelayFitAlgorithm::StrobeDelayFitAlgorithm() throw() {
00016     FitterMode mode = getMode();
00017     mode.fitNone(); 
00018     mode.fitChips(); 
00019     mode.doSummary(false); 
00020     setMode(mode);
00021 }
00022 
00023 auto_ptr<FitObject> StrobeDelayFitAlgorithm::getPrototype() const throw() {
00024     return auto_ptr<FitObject> (new TopHatFitObject());
00025 }
00026 
00027 void StrobeDelayFitAlgorithm::guessParameters(const TH1& hist, FitObject& fitOb) const throw (LogicError, MathsError) {
00028     fitOb.setParameter(0, hist.GetMaximum() ) ;
00029     // mid-rise and rise-width
00030     fitOb.setParameter(1, findLevel(hist,0.5,true)) ;                 // 50% level
00031     double p2 = findLevel(hist, 0.82, true) - fitOb.getParameter(1);    // level 1-sigma away from 50%
00032     if (p2<0.) p2=-p2;
00033     fitOb.setParameter(2, p2 ) ;
00034     
00035     // mid-fall and fall-width
00036     fitOb.setParameter(3, findLevel(hist,0.5,false)) ;                 // 50% level
00037     double p4 = findLevel(hist, 0.82, false) - fitOb.getParameter(3);    // level 1-sigma away from 50%
00038     if (p4<0.) p4=-p4;
00039     fitOb.setParameter(4, p4 ) ;
00040     
00041     int lbin=findBin(hist, 0.01, true, false); if ( (lbin-1) >= 1 ) lbin--;
00042     int ubin=findBin(hist, 0.01, false, false); if ( (ubin+1) <= hist.GetNbinsX() ) ubin++;
00043     fitOb.setVarMin(0 , hist.GetBinLowEdge( lbin ) );
00044     fitOb.setVarMax(0 , hist.GetBinLowEdge( ubin + 1 ) );    
00045 }
00046 
00047 void StrobeDelayFitAlgorithm::checkForDefects(const FitObject& fo, const ModuleElement& element,
00048                         DefectList& defects) const {
00049   if (fo.getNDF() &&  fo.getChiSquared()/fo.getNDF() > StandardDefects::BADFIT.getParameter() ) {
00050       cout << "Chi-squared: " << fo.getChiSquared() << " NDF: " << fo.getNDF() << endl;
00051       defects.addDefect(Defect(StandardDefects::BADFIT,element));
00052   }
00053 }
00054 
00055 void StrobeDelayFitAlgorithm::checkForDefects(const TH1& hist, const ModuleElement& element, 
00056                           DefectList& defects) const throw (LogicError) {
00057     double maxVal = hist.GetMaximum();
00058     double minVal = hist.GetMinimum();
00059     
00060     if ( maxVal < StandardDefects::DEAD.getParameter() ){
00061     defects.addDefect(Defect(StandardDefects::DEAD, element));
00062     if (debug()) {
00063       hist.Print();
00064       std::cout << "MAXVAL=" << maxVal << std::endl;
00065     }
00066     }
00067     if( minVal > StandardDefects::STUCKON.getParameter() ){
00068     defects.addDefect(Defect(StandardDefects::STUCKON, element));
00069     if (debug()) {
00070       std::cout << "MINVAL=" << minVal << std::endl;
00071     }
00072     } 
00073     if( maxVal < StandardDefects::UNDER.getParameter() ){
00074     defects.addDefect(Defect(StandardDefects::UNDER,element));
00075     }else if( maxVal > StandardDefects::OVER.getParameter() ){
00076     defects.addDefect(Defect(StandardDefects::OVER,element));
00077     }
00078 }
00079 
00080 void StrobeDelayFitAlgorithm::createSummaryHistograms(FitScanResult& fits) const throw() {
00081 }    
00082     
00083 }

Generated on Mon Feb 6 14:01:30 2006 for SCT DAQ/DCS Software - C++ by  doxygen 1.4.6