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

RawDisplayer.cpp

00001 #include "RawDisplayer.h"
00002 #include "DisplayManager.h"
00003 #include "DisplayInfo.h"
00004 
00005 #include "SctData/ModuleConfiguration.h"
00006 #include "SctData/ResultHeader.h"
00007 #include "SctData/ConfigurationVariable.h"
00008 #include "SctData/RawScanResult.h"
00009 #include "SctData/OccupancyProjector.h"
00010 #include "SctData/ModuleElement.h"
00011 #include "SctData/DefaultVariable.h"
00012 #include "ScanResultWriter/dataTypes.h"
00013 #include "CommonWithDsp/ABCD/ABCDscans.h"
00014 #include <TH1.h>
00015 #include <TH2.h>
00016 #include <TCanvas.h>
00017 #include <TApplication.h>
00018 
00019 #include <iostream>
00020 #include <vector>
00021 #include <boost/lexical_cast.hpp>
00022 
00023 using namespace Sct;
00024 using namespace SctData;
00025 using namespace boost;
00026 
00027 namespace SctDataDisplay {
00028     
00029 
00030 class RawDisplayData : public DisplayData {
00031 public:
00032     vector<shared_ptr<TCanvas> > canvas;
00033     shared_ptr<const RawScanResult> scan;
00034     vector<shared_ptr<TH1> > histos;
00035 };     
00036 
00037 bool RawDisplayer::inMap = DisplayManager::addToMap("SctData::RawScanResult", shared_ptr<Displayer>(new RawDisplayer()));
00038     
00039 shared_ptr<DisplayData> RawDisplayer::display(shared_ptr<const Sct::Serializable> serial, const DisplayInfo& info, std::ostream& os) {
00040     
00041     shared_ptr<RawDisplayData> data (new RawDisplayData());
00042     data->scan = dynamic_pointer_cast<const RawScanResult>(serial);
00043     
00044     //cout << "Scan: " << endl;
00045     const ConfigurationVariable& var = data->scan->getHeader().getVariable();
00046     //cout << "Variable: " << var.getVariableName() << "  Strategy: " << var.getStrategyDescription() << endl;
00047     //cout << data->scan->getUniqueID() << endl ;
00048     //cout << data->scan->getHeader().getScanNumber() << endl << data->scan->getHeader().getRunNumber() << endl << data->scan->getHeader().getModuleName() << endl;
00049     
00050     //const ScanPoints& s = data->scan->getPoints();    
00051     //for (unsigned int i=0; i<s.getNPoints(); ++i) {
00052     //cout << s.getPoint(i) << "  " << s.getNEvents(i) << endl;
00053     //}
00054     //cout << endl;
00055     
00056     string name = var.getVariableName() + data->scan->getUniqueID();
00057     shared_ptr<TCanvas> c = createCanvas(name, name);
00058     data->canvas.push_back(c);
00059     c->Divide(1,2);
00060     for (int ilink=0; ilink<2; ++ilink){
00061       c->cd(ilink+1);
00062       data->scan->getScanData(ilink).SetMinimum(0.);
00063       string x_title;
00064       switch(data->scan->getDataType()) {
00065       case SR_DT_RAWHIST: { x_title="Raw Data"; break;}
00066       case SR_DT_SLICE: case SR_DT_SLICE_COMPRESSED: { x_title="Channel"; break;}
00067       }
00068       data->scan->getScanData(ilink).SetXTitle(x_title.c_str());
00069       data->scan->getScanData(ilink).SetYTitle(var.getVariableName().c_str());
00070       data->scan->getScanData(ilink).SetStats(false);
00071       data->scan->getScanData(ilink).Draw("colz");
00072     }
00073     
00074     if (data->scan->getDataType() != SR_DT_RAWHIST  && 
00075     var != *DefaultVariable::instance(ST_NMASK) &&
00076     var != *DefaultVariable::instance(ST_TOKEN) &&
00077     info.displayChannels.size() + info.displayChips.size() != 0) {
00078       displayProjs(info, *data);
00079     }
00080 
00081     return data;
00082 }
00083     
00084 void RawDisplayer::displayProjs(const DisplayInfo& info, RawDisplayData& data) {
00085     unsigned int nMax = min((unsigned int)25, info.displayChannels.size() + info.displayChips.size());
00086     unsigned int j=0;
00087     shared_ptr<TCanvas> c;
00088     
00089     //Now show some projections for channels and chips
00090     OccupancyProjector occ(*data.scan);
00091 
00092     for (unsigned int i=0; i<info.displayChips.size(); ++i, ++j) {
00093     if (j%nMax == 0) {
00094         c = createCanvas("Projections", "Projections for module " + data.scan->getHeader().getModuleName());
00095         data.canvas.push_back(c);
00096         divideCanvas(nMax, *c);
00097             j=0;
00098         }
00099     c->cd(j+1);
00100     
00101     string name = "chip" + lexical_cast<string>(info.displayChips[i]) + data.scan->getUniqueID();
00102     auto_ptr<TH1> chip = occ.getOccupancy(name.c_str(), ModuleElement::Chip(info.displayChips[i]));
00103     chip->Draw();
00104     data.histos.push_back(shared_ptr<TH1>(chip));
00105     }
00106     
00107     
00108     for (unsigned int i=0; i<info.displayChannels.size(); ++i, ++j) {
00109     if (j%nMax == 0) {
00110         c = createCanvas("Projections", "Projections for module " + data.scan->getHeader().getModuleName());
00111         data.canvas.push_back(c);
00112         divideCanvas(nMax, *c);
00113             j=0;
00114         }
00115     c->cd(j+1);
00116     
00117     string name = "channel" + lexical_cast<string>(info.displayChannels[i]) + data.scan->getUniqueID();
00118     auto_ptr<TH1> channel = occ.getOccupancy(name.c_str(), ModuleElement::Channel(info.displayChannels[i]));
00119     channel->Draw();
00120     data.histos.push_back(shared_ptr<TH1>(channel));
00121     }
00122 }   
00123 }

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