NoiseOccupancyDisplayer.cpp

00001 #include "NoiseOccupancyDisplayer.h"
00002 #include "DisplayManager.h"
00003 #include "DisplayInfo.h"
00004 #include "OpeDisplayer.h"
00005 #include "SctData/OpeResult.h" 
00006 
00007 #include "SctData/NoiseOccupancyTestResult.h"
00008 #include "SctData/DefectList.h"
00009 
00010 #include "TF1.h"
00011 #include "TGraph.h"
00012 #include "TCanvas.h"
00013 #include "TLatex.h"
00014 
00015 #include <iomanip>
00016 #include <string>
00017 #include <boost/shared_ptr.hpp>
00018 
00019 using namespace std;
00020 using namespace SctData;
00021 using namespace Sct;
00022 using namespace boost;
00023 
00024 namespace SctDataDisplay {
00025 
00026 
00027 class NoiseOccupancyDisplayData : public DisplayData {
00028 public:
00029     vector<shared_ptr<TCanvas> > canvas;
00030     shared_ptr<const NoiseOccupancyTestResult> test;
00031     vector<shared_ptr<const DisplayData> > otherData;
00032 };        
00033     
00034 bool NoiseOccupancyDisplayer::inMap = DisplayManager::addToMap("SctData::NoiseOccupancyTestResult", shared_ptr<Displayer>(new NoiseOccupancyDisplayer()));
00035     
00036     
00037 shared_ptr<DisplayData> NoiseOccupancyDisplayer::display(shared_ptr<const Sct::Serializable> serial, const DisplayInfo& info, std::ostream& os) { 
00038     shared_ptr<NoiseOccupancyDisplayData> data (new NoiseOccupancyDisplayData());    
00039     data->test = dynamic_pointer_cast<const NoiseOccupancyTestResult>(serial);
00040     
00041     //Now print out defects:
00042     //os << endl << "Defects: " << endl;
00043     //printDefectList(data->test->getDefects(), os);
00044     //os << endl;
00045 
00046     if (info.displayChips.size() > 0) displayChips(*data, info, os);
00047     
00048     shared_ptr<const SctData::OpeResult> ope = data->test->getOpeResult();
00049 
00050     if (ope.get() && info.occupancyHistograms) {
00051       
00052       shared_ptr<DisplayData> dd = DisplayManager::instance().display(ope, info, os); 
00053       data->otherData.push_back(dd);
00054     }
00055     return data;
00056 }
00057 
00058 void NoiseOccupancyDisplayer::displayChips(NoiseOccupancyDisplayData& data, const DisplayInfo& info, std::ostream& os) {
00059     shared_ptr<TCanvas> c = createCanvas((string)data.test->getUniqueID() + "_chipNO", "Noise Occupancy plots for " + data.test->getModuleName());
00060     data.canvas.push_back(c);
00061     divideCanvas(info.displayChips.size(), *c);
00062     
00063     for (unsigned int i=0; i<info.displayChips.size(); ++i) {
00064         const ChipNOResult& r = data.test->getChipResult(info.displayChips[i]);
00065     os << "Chip " << i << " noise: " << r.getNoise() << "  Fit params: ";
00066     for (int j=0; j<r.fit->GetNpar(); ++j) os << r.fit->GetParameter(j) << "   ";
00067     os << endl;
00068         c->cd(i+1);
00069     gPad->SetLeftMargin(0.15);
00070     gPad->SetBottomMargin(0.15);
00071     gPad->SetTopMargin(0.03);
00072     gPad->SetRightMargin(0.03);
00073 
00074     if (r.graph.get()){
00075       if (r.graph->GetN()!=0){
00076         if (DisplayManager::rootMode()){
00077           shared_ptr<TDirectory> file=DisplayManager::getTDirectory();
00078           if (file) {
00079         file->cd();
00080         std::ostringstream obname;
00081         obname << data.test->getUniqueID() << "_chipNO_" << i;
00082         r.graph->Write(obname.str().c_str());
00083           }
00084         }else{
00085           r.graph->Draw("ap");
00086         }
00087         if (r.graph->GetHistogram()){
00088           r.graph->GetHistogram()->SetXTitle("Threshold^2 (fC^2)");
00089           r.graph->GetHistogram()->SetYTitle("Ln Occupancy");
00090           r.graph->GetHistogram()->GetXaxis()->SetLabelSize(0.06);
00091           r.graph->GetHistogram()->GetYaxis()->SetLabelSize(0.06);
00092           r.graph->GetHistogram()->GetXaxis()->SetTitleSize(0.06);
00093           r.graph->GetHistogram()->GetYaxis()->SetTitleSize(0.06);
00094         }
00095         try{
00096           std::ostringstream text;
00097           text << std::scientific << std::setprecision(1) << r.mean;
00098           TLatex* l=new TLatex();
00099           l->SetTextAlign(11);
00100           l->SetTextSize(0.07);
00101           l->DrawLatex(1.1,log(r.mean*1.5),text.str().c_str());
00102         }catch(Sct::Throwable& e){
00103           std::cerr << e.what();
00104         }
00105       }
00106     }
00107     if (r.fit.get()) {
00108       r.fit->SetLineWidth(1);
00109       r.fit->SetLineColor(2);
00110       r.fit->SetFillStyle(0);
00111       r.fit->Draw("lsame");
00112     }   
00113     }
00114 
00115 }
00116 }

Generated on Mon Feb 6 14:01:23 2006 for SCT DAQ/DCS Software - C++ by  doxygen 1.4.6