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

StrobeDelayFitAlgorithm.cpp

Go to the documentation of this file.
00001 #include "StrobeDelayFitAlgorithm.h"
00002 #include "FitAlgorithmMap.h"
00003 #include "SctData/FitScanResult.h"
00004 #include "SctData/StrobeDelayVariable.h"
00005 #include "SctData/ModuleDefect.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 }
00021 
00022 auto_ptr<FitObject> StrobeDelayFitAlgorithm::getPrototype() const throw() {
00023     return auto_ptr<FitObject> (new TopHatFitObject());
00024 }
00025 
00026 void StrobeDelayFitAlgorithm::guessParameters(const TH1& hist, FitObject& fitOb) const throw (LogicError, MathsError) {
00027     fitOb.setParameter(0, hist.GetMaximum() ) ;
00028     // mid-rise and rise-width
00029     fitOb.setParameter(1, findLevel(hist,0.5,true)) ;                 // 50% level
00030     double p2 = findLevel(hist, 0.82, true) - fitOb.getParameter(1);    // level 1-sigma away from 50%
00031     if (p2<0.) p2=-p2;
00032     fitOb.setParameter(2, p2 ) ;
00033     
00034     // mid-fall and fall-width
00035     fitOb.setParameter(3, findLevel(hist,0.5,false)) ;                 // 50% level
00036     double p4 = findLevel(hist, 0.82, false) - fitOb.getParameter(3);    // level 1-sigma away from 50%
00037     if (p4<0.) p4=-p4;
00038     fitOb.setParameter(4, p4 ) ;
00039     
00040     int lbin=findBin(hist, 0.01, true); if ( (lbin-1) >= 1 ) lbin--;
00041     int ubin=findBin(hist, 0.01, false); if ( (ubin+1) <= hist.GetNbinsX() ) ubin++;
00042     fitOb.setVarMin(0 , hist.GetBinLowEdge( lbin ) );
00043     fitOb.setVarMax(0 , hist.GetBinLowEdge( ubin + 1 ) );    
00044 }
00045 
00046 void StrobeDelayFitAlgorithm::checkForDefects(const TH1& hist, const ModuleElement& element, 
00047                           ModuleDefectList& defects) const throw (LogicError) {
00048     double maxVal = hist.GetMaximum();
00049     double minVal = hist.GetMinimum();
00050     
00051     if ( maxVal < ModuleDefect::DEAD.getParameter() ){
00052     defects.addDefect(ModuleDefect::DEAD, element);
00053     } 
00054     if( minVal > ModuleDefect::STUCKON.getParameter() ){
00055     defects.addDefect(ModuleDefect::STUCKON, element);
00056     } 
00057     if( maxVal < ModuleDefect::UNDER.getParameter() ){
00058     defects.addDefect(ModuleDefect::UNDER,element);
00059     }else if( maxVal > ModuleDefect::OVER.getParameter() ){
00060     defects.addDefect(ModuleDefect::OVER,element);
00061     }
00062 }
00063 
00064 void StrobeDelayFitAlgorithm::createSummaryHistograms(FitScanResult& fits) const throw() {
00065 }    
00066     
00067 }

Generated on Mon Dec 15 19:36:18 2003 for SCT DAQ/DCS Software by doxygen1.3-rc3