00001 #include "NoiseOccupancyDisplayer.h"
00002 #include "DisplayManager.h"
00003 #include "DisplayInfo.h"
00004
00005 #include "SctData/NoiseOccupancyTestResult.h"
00006 #include "SctData/DefectList.h"
00007
00008 #include "TF1.h"
00009 #include "TGraph.h"
00010 #include "TCanvas.h"
00011
00012 #include <iostream>
00013 #include <string>
00014 #include <boost/shared_ptr.hpp>
00015
00016 using namespace std;
00017 using namespace SctData;
00018 using namespace Sct;
00019 using namespace boost;
00020
00021 namespace SctDataDisplay {
00022
00023
00024 class NoiseOccupancyDisplayData : public DisplayData {
00025 public:
00026 vector<shared_ptr<TCanvas> > canvas;
00027 shared_ptr<const NoiseOccupancyTestResult> test;
00028 };
00029
00030 bool NoiseOccupancyDisplayer::inMap = DisplayManager::addToMap("SctData::NoiseOccupancyTestResult", shared_ptr<Displayer>(new NoiseOccupancyDisplayer()));
00031
00032
00033 shared_ptr<DisplayData> NoiseOccupancyDisplayer::display(shared_ptr<const Sct::Serializable> serial, const DisplayInfo& info, std::ostream& os) {
00034 shared_ptr<NoiseOccupancyDisplayData> data (new NoiseOccupancyDisplayData());
00035 data->test = dynamic_pointer_cast<const NoiseOccupancyTestResult>(serial);
00036
00037
00038 os << endl << "Defects: " << endl;
00039 printDefectList(data->test->getDefects(), os);
00040 os << endl;
00041
00042 if (info.displayChips.size() > 0) displayChips(*data, info, os);
00043
00044 return data;
00045 }
00046
00047 void NoiseOccupancyDisplayer::displayChips(NoiseOccupancyDisplayData& data, const DisplayInfo& info, std::ostream& os) {
00048 shared_ptr<TCanvas> c = createCanvas(data.test->getModuleName() + "_NO", "Noise Occupancy plots for " + data.test->getModuleName());
00049 data.canvas.push_back(c);
00050 divideCanvas(info.displayChips.size(), *c);
00051
00052 for (unsigned int i=0; i<info.displayChips.size(); ++i) {
00053 const ChipNOResult& r = data.test->getChipResult(info.displayChips[i]);
00054 os << "Chip " << i << " noise: " << r.getNoise() << " Fit params: ";
00055 for (int j=0; j<r.fit->GetNpar(); ++j) os << r.fit->GetParameter(j) << " ";
00056 os << endl;
00057 c->cd(i+1);
00058 if (r.graph.get()){
00059 if (r.graph->GetN()!=0){
00060 r.graph->Draw("ap");
00061 if (r.graph->GetHistogram()){
00062 r.graph->GetHistogram()->SetXTitle("Q^2");
00063 r.graph->GetHistogram()->SetYTitle("Log Occ");
00064 }
00065 }
00066 }
00067 if (r.fit.get()) {
00068 r.fit->SetLineWidth(1);
00069 r.fit->SetLineColor(2);
00070 r.fit->SetFillStyle(0);
00071 r.fit->Draw("lsame");
00072 }
00073 }
00074
00075 }
00076 }