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     vector<shared_ptr<TH2> > event_occ;
00036 };
00037 
00038 bool RawDisplayer::inMap = DisplayManager::addToMap("SctData::RawScanResult", shared_ptr<Displayer>(new RawDisplayer()));
00039     
00040 shared_ptr<DisplayData> RawDisplayer::display(shared_ptr<const Sct::Serializable> serial, const DisplayInfo& info, std::ostream& os) {
00041     
00042     shared_ptr<RawDisplayData> data (new RawDisplayData());
00043     data->scan = dynamic_pointer_cast<const RawScanResult>(serial);
00044     
00045     const ConfigurationVariable& var = data->scan->getHeader().getVariable();
00046     
00047     string name = var.getVariableName() + data->scan->getUniqueID();
00048     shared_ptr<TCanvas> c = createCanvas(name, name);
00049     data->canvas.push_back(c);
00050     c->Divide(1,2);
00051     for (int ilink=0; ilink<2; ++ilink){
00052       c->cd(ilink+1);
00053       data->scan->getScanData(ilink).SetMinimum(0.);
00054       string x_title;
00055       switch(data->scan->getDataType()) {
00056       case SR_DT_RAWHIST: { x_title="Raw Data"; break;}
00057       case SR_DT_SLICE: case SR_DT_SLICE_COMPRESSED: { x_title="Channel"; break;}
00058       }
00059       data->scan->getScanData(ilink).SetXTitle(x_title.c_str());
00060       data->scan->getScanData(ilink).SetYTitle(var.getVariableName().c_str());
00061       data->scan->getScanData(ilink).SetStats(false);
00062       data->scan->getScanData(ilink).Draw("colz");
00063     }
00064     
00065     if (data->scan->getDataType() != SR_DT_RAWHIST  && 
00066     var != *DefaultVariable::instance(ST_NMASK) &&
00067     var != *DefaultVariable::instance(ST_TOKEN) &&
00068     info.displayChannels.size() + info.displayChips.size() != 0) {
00069       displayProjs(info, *data);
00070     }
00071 
00072     if (info.occupancyHistograms && data->scan->nOccupancyPerEvent()!=0){
00073       displayOccupancyPerEvent(info, *data);
00074     }else if(info.occupancyHistograms){
00075       std::cout << "No OPE data available" << std::endl;
00076     }else{
00077       std::cout << "No OPE data requested" << std::endl;
00078     }
00079 
00080     return data;
00081 }
00082 
00083 void RawDisplayer::displayOccupancyPerEvent(const DisplayInfo& info, RawDisplayData& data){
00084   ostringstream oss;
00085   oss << data.scan->getHeader().getModuleName() << " Occupancy per event";
00086   const char*const name = oss.str().c_str();
00087   shared_ptr<TCanvas> canvas_occ = createCanvas(name, name);
00088   data.canvas.push_back(canvas_occ);
00089   const unsigned n=data.scan->nOccupancyPerEvent();
00090   divideCanvas(n, *canvas_occ);
00091   for (unsigned i=0; i<n; ++i){
00092     canvas_occ->cd(i+1);
00093     gPad->SetLogz();
00094     TH2D& hist = const_cast<TH2D&> ( data.scan->getOccupancyPerEvent(i) );
00095     hist.Draw("colz");
00096   }
00097 }
00098     
00099 void RawDisplayer::displayProjs(const DisplayInfo& info, RawDisplayData& data) {
00100     unsigned int nMax = min((unsigned int)25, info.displayChannels.size() + info.displayChips.size());
00101     unsigned int j=0;
00102     shared_ptr<TCanvas> c;
00103     
00104     //Now show some projections for channels and chips
00105     OccupancyProjector occ(*data.scan);
00106 
00107     for (unsigned int i=0; i<info.displayChips.size(); ++i, ++j) {
00108     if (j%nMax == 0) {
00109         c = createCanvas("Projections", "Projections for module " + data.scan->getHeader().getModuleName());
00110         data.canvas.push_back(c);
00111         divideCanvas(nMax, *c);
00112             j=0;
00113         }
00114     c->cd(j+1);
00115     
00116     string name = "chip" + lexical_cast<string>(info.displayChips[i]) + data.scan->getUniqueID();
00117     auto_ptr<TH1> chip = occ.getOccupancy(name.c_str(), ModuleElement::Chip(info.displayChips[i]));
00118     chip->Draw();
00119     data.histos.push_back(shared_ptr<TH1>(chip));
00120     }
00121     
00122     
00123     for (unsigned int i=0; i<info.displayChannels.size(); ++i, ++j) {
00124     if (j%nMax == 0) {
00125         c = createCanvas("Projections", "Projections for module " + data.scan->getHeader().getModuleName());
00126         data.canvas.push_back(c);
00127         divideCanvas(nMax, *c);
00128             j=0;
00129         }
00130     c->cd(j+1);
00131     
00132     string name = "channel" + lexical_cast<string>(info.displayChannels[i]) + data.scan->getUniqueID();
00133     auto_ptr<TH1> channel = occ.getOccupancy(name.c_str(), ModuleElement::Channel(info.displayChannels[i]));
00134     channel->Draw();
00135     data.histos.push_back(shared_ptr<TH1>(channel));
00136     }
00137 }   
00138 }

Generated on Sat Jul 31 14:18:10 2004 for SCT DAQ/DCS Software - C++ by doxygen 1.3.5