Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Data Structures | File List | Namespace Members | Data Fields | Related Pages

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); if ( (lbin-1) >= 1 ) lbin--;
00042     int ubin=findBin(hist, 0.01, 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() << " so claiming is DEAD" << 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     } 
00063     if( minVal > StandardDefects::STUCKON.getParameter() ){
00064     defects.addDefect(Defect(StandardDefects::STUCKON, element));
00065     } 
00066     if( maxVal < StandardDefects::UNDER.getParameter() ){
00067     defects.addDefect(Defect(StandardDefects::UNDER,element));
00068     }else if( maxVal > StandardDefects::OVER.getParameter() ){
00069     defects.addDefect(Defect(StandardDefects::OVER,element));
00070     }
00071 }
00072 
00073 void StrobeDelayFitAlgorithm::createSummaryHistograms(FitScanResult& fits) const throw() {
00074 }    
00075     
00076 }

Generated on Thu Jul 15 09:50:54 2004 for SCT DAQ/DCS Software - C++ by doxygen 1.3.5