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

AnalysisAlgorithm.cpp

Go to the documentation of this file.
00001 #include "AnalysisAlgorithm.h"
00002 #include "SctData/TestResult.h"
00003 #include "SctData/FitScanResult.h"
00004 #include "SctData/RawScanResult.h"
00005 #include "SctData/ConfigurationVariable.h"
00006 #include "Sct/SctNames.h"
00007 #include "Sct/IS/IOManagerIS.h"
00008 #include "SummaryWriter/SummaryManager.h"
00009 #include "SummaryWriter/SummaryWriter.h"
00010 #include "CalibrationController/IS/TestData.h"
00011 #include "TestSummaryIS.h"
00012 #include <sstream>
00013 #include <string>
00014 
00015 using namespace SctData;
00016 using std::string;
00017 
00018 namespace SctAnalysis {
00019     
00020     AnalysisAlgorithm::AnalysisAlgorithm() : m_test(*new TestData) {}
00021     
00022     AnalysisAlgorithm::~AnalysisAlgorithm() throw() {
00023     boost::recursive_mutex::scoped_lock lock(m_access);
00024     //Need to explicitly delete so that lock is in force
00025     m_result.reset();
00026     }
00027 
00028     void AnalysisAlgorithm::checkTestResultExists() const throw(Sct::LogicError) {
00029     if (m_result.get()==0){
00030         throw IllegalStateError("AnalysisAlgorithm cannot initialize - no test exists", __FILE__, __LINE__);
00031     }
00032     }
00033 
00034     void AnalysisAlgorithm::initializeTestResult() throw(Sct::LogicError) {
00035     checkTestResultExists();
00036 
00037     m_result->setRunNumber(m_test.runNumber);
00038     m_result->setModuleName(m_modulename);
00039     m_result->setTestVariable(*SctData::ConfigurationVariableIOHelper::getFromTypeRep(m_test.testVariable));
00040     
00041     //Now add all the scans:
00042     for (unsigned int i=0; i<m_test.testPoints_size; ++i) {
00043         m_result->addScan(m_test.startScanNumber+i, m_test.testPoints[i]);
00044         //cout << "Analysis algorithm adding scan number ... "<<m_test->startScanNumber+i<<" to test"<<endl;
00045     }
00046     }
00047 
00048     void AnalysisAlgorithm::addFit(const string& name) throw(Sct::LogicError, Sct::IoError) {
00049     boost::recursive_mutex::scoped_lock lock(m_access);
00050     checkTestResultExists();
00051     //cerr << "adding fit "<<name<<endl;
00052     Sct::IS::IOParamsIS param(Sct::SctNames::getFittedDataName());
00053     boost::shared_ptr<const Sct::Streamable> ob = Sct::IS::IOManagerIS::instance().read(name, &param);
00054     boost::shared_ptr<const FitScanResult> fit = boost::dynamic_pointer_cast<const FitScanResult>(ob);
00055     if (!fit) throw InvalidArgumentError("AnalsisAlogrithm::addFit: " + name + " is not a valid FitScanResult", __FILE__, __LINE__);
00056     getTestResult()->addFit(fit);
00057     }
00058 
00059     void AnalysisAlgorithm::addRaw(const string& name) throw(Sct::LogicError, Sct::IoError) {
00060     boost::recursive_mutex::scoped_lock lock(m_access);
00061     checkTestResultExists();
00062     //cerr << "adding raw "<<name<<endl;
00063     Sct::IS::IOParamsIS param(Sct::SctNames::getEventDataName());
00064     boost::shared_ptr<const Sct::Streamable> ob = Sct::IS::IOManagerIS::instance().read(name, &param);
00065     boost::shared_ptr<const RawScanResult> raw = boost::dynamic_pointer_cast<const RawScanResult>(ob);
00066     if (!raw) throw InvalidArgumentError("AnalsisAlogrithm::addRaw: " + name + " is not a valid RawScanResult", __FILE__, __LINE__);
00067     getTestResult()->addRaw(raw);
00068     }
00069     
00070     void AnalysisAlgorithm::finish() throw(Sct::IoError, Sct::LogicError) {
00071     checkTestResultExists();
00072     m_done=true;
00073     cout <<"Algorithm done"<<endl;
00074     try {
00075         Sct::IS::IOParamsIS param(Sct::SctNames::getTestDataName());
00076         Sct::IS::IOManagerIS::instance().write(*m_result, &param);
00077         cout <<"TestResult published"<<endl;
00078     } catch (Throwable& e) {
00079         e.sendToMrs(MRS_ERROR); 
00080     } 
00081     
00082     try{
00083         TestSummaryIS t;
00084         t.dataString = SctData::TestSummary::SummaryManager::instance().write(*m_result);
00085         string name = SctNames::getTestDataName();
00086         name += ".";
00087         name += "Summary.";
00088         name += m_result->getUniqueID();
00089         ISInfoDictionary& is = SctNames::getISDictionary();
00090         ISInfo::Status stat;
00091         
00092         if (is.contains(name.c_str())) {
00093         stat = is.update(name.c_str(), t);
00094         } else {
00095         stat = is.insert(name.c_str(), t);
00096         }
00097     } catch (Throwable& e) {
00098         e.sendToMrs(MRS_ERROR); 
00099     }
00100     }
00101 }

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