00001 #include "TestDisplayer.h"
00002 #include "DisplayManager.h"
00003
00004 #include "SctData/TestResult.h"
00005 #include "Sct/IS/IOManagerIS.h"
00006 #include "Sct/SctNames.h"
00007 #include "Sct/LogicErrors.h"
00008 #include "SummaryWriter/SummaryManager.h"
00009 #include "Sct/Archive/IOManagerArchiveFile.h"
00010 #include "Sct/Archive/IONameArchiveFile.h"
00011
00012 #include <TCanvas.h>
00013
00014 using namespace Sct;
00015 using namespace Sct::IS;
00016 using namespace SctData;
00017 using namespace boost;
00018
00019 namespace SctDataDisplay {
00020
00021 bool TestDisplayer::inList = DisplayManager::addGeneric(shared_ptr<GenericDisplayer>(new TestDisplayer));
00022
00023 shared_ptr<DisplayData> TestDisplayer::display(shared_ptr<const Sct::Serializable> ob, const DisplayInfo& info, std::ostream& os) {
00024 shared_ptr<TestDisplayData> data (new TestDisplayData);
00025 shared_ptr<const TestResult> tr = dynamic_pointer_cast<const TestResult>(ob);
00026 if (!tr) throw InvalidArgumentError("TestDisplayer::display called but argument is not a TestResult", __FILE__, __LINE__);
00027
00028 printSummaryString(*tr, os);
00029 displayTestResult(*tr, *data, info, os);
00030
00031 return data;
00032 }
00033
00034 void TestDisplayer::displayTestResult(const TestResult& result, TestDisplayData& data, const DisplayInfo& info, std::ostream& os) {
00035 displayAllRaws(result, data, info, os);
00036 }
00037
00038
00039
00040 bool TestDisplayer::canDisplay(const Sct::Serializable& ob) {
00041 const TestResult* tr = dynamic_cast<const TestResult*>(&ob);
00042 if (tr != 0) return true;
00043 return false;
00044 }
00045
00046
00047
00048 void TestDisplayer::displayAllRaws(const TestResult& result, TestDisplayData& data, const DisplayInfo& info, std::ostream& os) {
00049 unsigned int runNumber = result.getRunNumber();
00050 string moduleName = result.getModuleName();
00051 for (unsigned int i=0; i<result.getNScans(); ++i) {
00052 unsigned int scanNumber = result.getScanNumberAt(i);
00053
00054 shared_ptr<Serializable> ob;
00055 try {
00056 string isName = SctNames::getEventDataName() + ".SctData::RawScanResult." + ResultHeader::getUniqueID(runNumber, scanNumber, moduleName);
00057 ob = IOManagerIS::instance().read(isName);
00058 }catch (IoException&e){
00059 }
00060 if (!ob.get()){
00061 Sct::Archive::IONameArchiveFile namearch(result.getUniqueID(), result.getClassName());
00062 ob=Sct::Archive::IOManagerArchiveFile::instance().read(namearch.getIOName());
00063 }
00064 data.otherData.push_back(DisplayManager::display(ob, info, os));
00065 }
00066 }
00067
00068 void TestDisplayer::printSummaryString(const TestResult& result, std::ostream& os) {
00069 if (DisplayManager::batchMode()){
00070 SctData::TestSummary::SummaryManager::instance().write(result, os);
00071 }
00072 }
00073
00074 }