//////////////////////////////////////////////////////////////////// /// \file PlotNhit.cc /// /// \brief Functions to plot nhit (various definitions) /// /// \author P G Jones /// /// REVISION HISTORY:\n /// 2014-08-18 : P G Jones - First Revision.\n /// /// \details Nhit could be the MC photoelectrons, the MC hits, the /// EV uncalibrated or the EV calibrated. All examples are included. /// //////////////////////////////////////////////////////////////////// #include #include #include #include #include #include #include #include using namespace std; /// Plot the CAEN trigger sums for a specified event /// /// @param[in] fileName of the RAT::DS root file to analyse /// @param[in] eventID to analyse /// @return the canvas TCanvas* PlotCAEN( const char* fileName, size_t eventID ) { RAT::DU::DSReader dsReader( fileName ); const RAT::DS::Entry& rDS = dsReader.GetEntry( eventID ); if( rDS.GetEVCount() == 0 ) // No events to plot return NULL; TCanvas* c1 = new TCanvas(); const RAT::DS::Digitiser& digitiser = rDS.GetEV( 0 ).GetDigitiser(); std::vectorids = digitiser.GetIDs(); // Calculate a good way to divide the canvas base upon the number of signals size_t size = ids.size(); int y = size<4 ? 1 : 2; int x = ceil(float(size)/y); c1->Divide(x, y); for( size_t iWaveform = 0; iWaveform < ids.size(); iWaveform++ ) { if( !digitiser.ExistsWaveform( ids[iWaveform] ) ) continue; c1->cd( iWaveform + 1 ); TGraph* graph = new TGraph(); int id = ids[iWaveform]; std::vector waveform = digitiser.GetWaveform(id); for( size_t iSample = 0; iSample < waveform.size(); iSample++ ) { graph->SetPoint( iSample, iSample, waveform.at( iSample ) ); } // Assign a title to the plot by parsing the ID. // The ID type*10+gain where type and gain are enumerated as specified // in CAENBits.hh string title; int type = id - (id%10); // Round to the nearest multiple of 10 if(type == RAT::NH100Lo) {title = "N100";} else if(type == RAT::NH20Lo) {title = "N20";} else if(type == RAT::ESLoLo) {title = "ESUML";} else if(type == RAT::ESHiLo) {title = "ESUMH";} else if(type == RAT::OWLNLo) {title = "OWLN";} else if(type == RAT::OWLELoLo) {title = "OWLEL";} else if(type == RAT::OWLEHiLo) {title = "OWLEH";} else {title = "Unknown";} graph->SetTitle(title.c_str()); graph->Draw("AL*"); } c1->cd(); return c1; }