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
00029 fitOb.setParameter(1, findLevel(hist,0.5,true)) ;
00030 double p2 = findLevel(hist, 0.82, true) - fitOb.getParameter(1);
00031 if (p2<0.) p2=-p2;
00032 fitOb.setParameter(2, p2 ) ;
00033
00034
00035 fitOb.setParameter(3, findLevel(hist,0.5,false)) ;
00036 double p4 = findLevel(hist, 0.82, false) - fitOb.getParameter(3);
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 }