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   std::string canvasname = "Fit."+ fit.getHeader().getUniqueID() + "_chipfits";
00079   shared_ptr<TCanvas> c = createCanvas(canvasname, "Chip Fits for module " + fit.getHeader().getModuleName());
00080     data.canvas.push_back(c);
00081     divideCanvas(info.displayChips.size(), *c);
00082  
00083     auto_ptr<OccupancyProjector> occ;
00084     if (data.raw) {
00085     occ.reset(new OccupancyProjector(*data.raw));
00086     occ->vetoSeriousDefects(fit.getDefects());
00087     }
00088     
00089     for (unsigned int i=0; i<info.displayChips.size(); ++i) {
00090         c->cd(i+1);
00091         ostringstream histName;
00092     histName << "chipHist" << info.displayChips[i];
00093     
00094         auto_ptr<TH1> h;
00095     if (data.raw) {
00096         auto_ptr<TH1> htemp = occ->getOccupancy(histName.str().c_str(), ModuleElement::Chip(info.displayChips[i]));
00097             h = htemp;
00098     }
00099         FitObject& fo = fit.getChipFit(info.displayChips[i]);
00100 
00101     displayFit(fo, h, data, os);
00102     fo.print();
00103     }
00104     
00105 }
00106 
00107 
00108 void FitDisplayer::displayChannels(const FitScanResult& fit, const DisplayInfo& info, FitDisplayData& data, std::ostream& os) {
00109     shared_ptr<TCanvas> c;
00110     unsigned int nMax = min((unsigned int)25, info.displayChannels.size());
00111  
00112     auto_ptr<OccupancyProjector> occ;
00113     if (data.raw) 
00114     occ.reset(new OccupancyProjector(*data.raw));
00115 
00116     int j=0;
00117         
00118     for (unsigned int i=0; i<info.displayChannels.size(); ++i) {
00119         if (j%nMax == 0) {
00120         std::string canvasname= "Fit." + fit.getHeader().getUniqueID() + "_channelfits";
00121         c = createCanvas(canvasname,"Channel Fits for module " + fit.getHeader().getModuleName());
00122         data.canvas.push_back(c);
00123         divideCanvas(nMax, *c);
00124             j=0;
00125         }
00126         c->cd(j+1);
00127         ostringstream histName;
00128     histName << "channelHist" << info.displayChannels[i];
00129     
00130         auto_ptr<TH1> h;
00131     if (data.raw) {
00132         auto_ptr<TH1> htemp = occ->getOccupancy(histName.str().c_str(), ModuleElement::Channel(info.displayChannels[i]));
00133         h = htemp;
00134     }
00135     FitObject& fo = fit.getChannelFit(info.displayChannels[i]);
00136     fo.print();
00137     displayFit(fo, h, data, os);
00138     ++j;
00139     }
00140 }
00141 
00142 void FitDisplayer::displayFit(FitObject& fo, auto_ptr<TH1> h, FitDisplayData& data, std::ostream& os) {
00143   gPad->SetLeftMargin(0.17);
00144   gPad->SetBottomMargin(0.15);
00145   gPad->SetTopMargin(0.03);
00146   gPad->SetRightMargin(0.03);
00147 
00148   if (h.get()) {
00149     h->GetYaxis()->SetTitleOffset(1.2);
00150     h->GetXaxis()->SetLabelSize(0.05);
00151     h->GetYaxis()->SetLabelSize(0.05);
00152     h->GetXaxis()->SetTitleSize(0.06);
00153     h->GetYaxis()->SetTitleSize(0.06);
00154     h->GetYaxis()->SetNdivisions(505);
00155     h->GetXaxis()->CenterTitle();
00156     h->GetYaxis()->CenterTitle();
00157     h->Draw();
00158   }
00159     auto_ptr<TF1> f ( fo.makeRootTF1() );
00160     f->SetLineColor(2);
00161     f->SetLineWidth(1);
00162     f->SetFillStyle(0);
00163     if (h.get()) f->Draw("same");
00164     else f->Draw();
00165     
00166     for (unsigned int i=0; i<fo.getNPar(); ++i) {
00167     os << fo.getParameter(i) << "  " << f->GetParameter(i) << "  ";
00168     }
00169     os << endl;
00170     
00171     data.hists.push_back(shared_ptr<TH1>(h));
00172     data.funcs.push_back(shared_ptr<TF1>(f));
00173 
00174 }
00175 
00176 }

Generated on Fri Jan 14 12:47:02 2005 for SCT DAQ/DCS Software - C++ by doxygen 1.3.5