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

StrobeDelayAlgorithm.cpp

00001 #include "StrobeDelayAlgorithm.h"
00002 #include "AnalysisAlgorithmMap.h"
00003 #include "SctData/StrobeDelayTestResult.h"
00004 #include "SctData/FitScanResult.h"
00005 #include "SctData/FitObject.h"
00006 #include "SctData/TopHatFitObject.h"
00007 #include "SctData/DefectList.h"
00008 #include "SctData/StandardDefects.h"
00009 #include <string>
00010 
00011 using namespace std;
00012 using namespace boost;
00013 using namespace SctData;
00014 using namespace Sct;
00015 
00016 namespace SctAnalysis {
00017     
00018 bool StrobeDelayAlgorithm::inMap = AnalysisAlgorithmMap::instance().setAlgorithm("StrobeDelayTest", auto_ptr<AnalysisAlgorithm>(new StrobeDelayAlgorithm()));
00019 
00020 shared_ptr<AnalysisAlgorithm> StrobeDelayAlgorithm::clone(const TestData& testData, const string& moduleName) const throw(){
00021     return shared_ptr<AnalysisAlgorithm>(new StrobeDelayAlgorithm(testData, moduleName, *this));
00022 }
00023 
00024 shared_ptr<TestResult> StrobeDelayAlgorithm::createTestResult() const {
00025     return shared_ptr<StrobeDelayTestResult> (new StrobeDelayTestResult()) ;
00026 }
00027 
00028 void StrobeDelayAlgorithm::loadData() {
00029     loadAllFits();
00030 }
00031 
00032 bool StrobeDelayAlgorithm::canAnalyze() const {
00033     return hasAllFits();
00034 }
00035 
00036 void StrobeDelayAlgorithm::analyze() {
00037     const double fraction=0.25;
00038     
00039     StrobeDelayTestResult& result = *dynamic_pointer_cast<StrobeDelayTestResult>(getTestResult());
00040     const FitScanResult& fitted = *getFit(0);
00041     result.setScanVariable(fitted.getHeader().getVariable());   
00042 
00043     bool pass = true;
00044     result.setNOptima(nChipModule);
00045     for (short unsigned int ichip=0; ichip<nChipModule; ++ichip ) {
00046       const DefectSeverity& severity = result.getDefects().defectSeverityAffectingElement(ModuleElement::Chip(ichip));
00047       if (severity>=SERIOUS) pass=false;
00048       FitObject& fit = fitted.getChipFit(ichip);
00049       try {
00050     dynamic_cast<TopHatFitObject&> (fit);
00051       } catch(std::exception& e) {
00052     throw InvariantViolatedError("StrobeDelayAlgorithm::optimize ERROR not a TopHat function", __FILE__, __LINE__);
00053       }
00054       double rise=fit.getParameter(1), fall=fit.getParameter(3);
00055       result.setOptimum(ichip, rise + fraction*(fall-rise));
00056       if (rise < 0 || fall < StandardDefects::SD_LO.getParameter()) {
00057     result.getDefects().addDefect(Defect(StandardDefects::SD_LO, ModuleElement::Chip(ichip)));
00058     pass = false;
00059       } 
00060       if (rise > StandardDefects::SD_HI.getParameter() || fall > 63) {
00061     result.getDefects().addDefect(Defect(StandardDefects::SD_HI, ModuleElement::Chip(ichip)));
00062     pass = false;
00063       }
00064     }
00065     result.setPassed(pass);
00066 }
00067 
00068 
00069 }

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