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

FitDisplayer.cpp

00001 #include "FitDisplayer.h"
00002 #include "DisplayManager.h"
00003 #include "DisplayInfo.h"
00004 
00005 #include "SctData/RawScanResult.h"
00006 #include "SctData/FitScanResult.h"
00007 #include "SctData/FitObject.h"
00008 #include "Sct/IS/IOManagerIS.h"
00009 #include "Sct/Archive/IONameArchiveFile.h"
00010 #include "Sct/Archive/IOManagerArchiveFile.h"
00011 #include "SctData/OccupancyProjector.h"
00012 #include "SctData/ModuleElement.h"
00013 
00014 #include <vector>
00015 #include <sstream>
00016 #include <algorithm>
00017 #include <boost/shared_ptr.hpp>
00018 
00019 #include <TH1.h>
00020 #include <TF1.h>
00021 #include <TCanvas.h>
00022 
00023 using namespace std;
00024 using namespace SctData;
00025 using namespace Sct;
00026 using namespace Sct::IS;
00027 using namespace boost;
00028 
00029 namespace SctDataDisplay {
00030 
00031 class FitDisplayData : public DisplayData {
00032 public:
00033     shared_ptr<const RawScanResult> raw;
00034     vector<shared_ptr<TCanvas> > canvas;
00035     vector<shared_ptr<TH1> > hists;
00036     vector<shared_ptr<TF1> > funcs;
00037 };    
00038     
00039 bool FitDisplayer::inMap = DisplayManager::addToMap("SctData::FitScanResult", shared_ptr<Displayer>(new FitDisplayer()));
00040 
00041 shared_ptr<DisplayData> FitDisplayer::display(shared_ptr<const Sct::Serializable> serial, const DisplayInfo& info, std::ostream& os) {  
00042     shared_ptr<FitDisplayData> data (new FitDisplayData());
00043     const FitScanResult& fit = dynamic_cast<const FitScanResult&>(*serial);
00044     os << fit.getHeader().getScanNumber() << endl;
00045     
00046     try {
00047     string rawName = RawScanResult::getUniqueID(fit.getHeader());
00048     shared_ptr<Serializable> ob = IOManagerIS::instance().read("EventData.SctData::RawScanResult."+ rawName);
00049     data->raw = dynamic_pointer_cast<const RawScanResult>(ob);
00050     } catch (Sct::IoException& e) {
00051     e.sendToMrs(MRS_DIAGNOSTIC);
00052     }
00053     if (data->raw==0) try {
00054       Sct::Archive::IONameArchiveFile name(fit.getHeader().getUniqueID(),"SctData::RawScanResult");
00055       shared_ptr<Serializable> ob = Sct::Archive::IOManagerArchiveFile::instance().read(name.getIOName());
00056       data->raw = dynamic_pointer_cast<const RawScanResult>(ob);
00057     } catch (Sct::IoException& e) {
00058     e.sendToMrs(MRS_DIAGNOSTIC);
00059     }
00060 
00061     if (data->raw == 0)
00062         cerr << "Couldn't get RawScanResult associated with this FitScanResult" << endl;    
00063     
00064     if (info.displayChips.size() > 0)
00065     displayChips(fit, info, *data, os);
00066     
00067     if (info.displayChannels.size() > 0)
00068     displayChannels(fit, info, *data, os);
00069     
00070     //Now print out defects:
00071     os << endl << "Defects: " << endl;
00072     printDefectList(fit.getDefects(), os);   
00073     
00074     return data;
00075 }
00076 
00077 void FitDisplayer::displayChips(const FitScanResult& fit, const DisplayInfo& info, FitDisplayData& data, std::ostream& os) {
00078     shared_ptr<TCanvas> c = createCanvas("chipFits", "Chip Fits for module " + fit.getHeader().getModuleName());
00079     data.canvas.push_back(c);
00080     divideCanvas(info.displayChips.size(), *c);
00081  
00082     auto_ptr<OccupancyProjector> occ;
00083     if (data.raw) {
00084     occ.reset(new OccupancyProjector(*data.raw));
00085     occ->vetoSeriousDefects(fit.getDefects());
00086     }
00087     
00088     for (unsigned int i=0; i<info.displayChips.size(); ++i) {
00089         c->cd(i+1);
00090         ostringstream histName;
00091     histName << "chipHist" << info.displayChips[i];
00092     
00093         auto_ptr<TH1> h;
00094     if (data.raw) {
00095         auto_ptr<TH1> htemp = occ->getOccupancy(histName.str().c_str(), ModuleElement::Chip(info.displayChips[i]));
00096             h = htemp;
00097     }
00098         FitObject& fo = fit.getChipFit(info.displayChips[i]);
00099 
00100     displayFit(fo, h, data, os);
00101     fo.print();
00102     }
00103     
00104 }
00105 
00106 
00107 void FitDisplayer::displayChannels(const FitScanResult& fit, const DisplayInfo& info, FitDisplayData& data, std::ostream& os) {
00108     shared_ptr<TCanvas> c;
00109     unsigned int nMax = min((unsigned int)25, info.displayChannels.size());
00110  
00111     auto_ptr<OccupancyProjector> occ;
00112     if (data.raw) 
00113     occ.reset(new OccupancyProjector(*data.raw));
00114 
00115     int j=0;
00116         
00117     for (unsigned int i=0; i<info.displayChannels.size(); ++i) {
00118         if (j%nMax == 0) {
00119         c = createCanvas("channelFits", "Channel Fits for module " + fit.getHeader().getModuleName());
00120         data.canvas.push_back(c);
00121         divideCanvas(nMax, *c);
00122             j=0;
00123         }
00124         c->cd(j+1);
00125 
00126         ostringstream histName;
00127     histName << "channelHist" << info.displayChannels[i];
00128     
00129         auto_ptr<TH1> h;
00130     if (data.raw) {
00131         auto_ptr<TH1> htemp = occ->getOccupancy(histName.str().c_str(), ModuleElement::Channel(info.displayChannels[i]));
00132         h = htemp;
00133     }
00134     FitObject& fo = fit.getChannelFit(info.displayChannels[i]);
00135     fo.print();
00136     displayFit(fo, h, data, os);
00137     ++j;
00138     }
00139 }
00140 
00141 void FitDisplayer::displayFit(FitObject& fo, auto_ptr<TH1> h, FitDisplayData& data, std::ostream& os) {
00142     if (h.get()) h->Draw();
00143     
00144     auto_ptr<TF1> f ( fo.makeRootTF1() );
00145     f->SetLineColor(2);
00146     f->SetLineWidth(1);
00147     f->SetFillStyle(0);
00148     if (h.get()) f->Draw("same");
00149     else f->Draw();
00150     
00151     for (unsigned int i=0; i<fo.getNPar(); ++i) {
00152     os << fo.getParameter(i) << "  " << f->GetParameter(i) << "  ";
00153     }
00154     os << endl;
00155     
00156     data.hists.push_back(shared_ptr<TH1>(h));
00157     data.funcs.push_back(shared_ptr<TF1>(f));
00158 
00159 }
00160 
00161 }

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