1 #ifndef __CONTROL_UTILS__ 
    2 #define __CONTROL_UTILS__ 
   12 #include "RooDerivative.h" 
   37   sprintf(name , 
"refs_Run_%d_%2.1fV", run_number , voltage) ;
 
   41   sprintf(title , 
"Used reference PMTs") ;
 
   43   TH2D* refs = 
new TH2D(name , title , 18 , 0.5 , 18.5 , 12 , -0.5 , 11.5) ;
 
   45   for (
auto & sm : SuperMods) {
 
   47     if (sm->get_ref_pmts().size()>0) {
 
   49       for (
auto & ref : sm->get_ref_pmts()) {
 
   51         refs->Fill(sm->getFloor() , ref->getChannel()) ;
 
   59   refs->GetXaxis()->SetTitle(
"Nanobeacon Floor") ;
 
   61   refs->GetYaxis()->SetTitle(
"PMT Channel (FPGA)") ;
 
   63   refs->SetOption(
"colz") ;
 
   89   sprintf(name , 
"refs_Run_%d_%2.1fV", run_number , voltage) ;
 
   93   sprintf(title , 
"Used reference PMTs") ;
 
   95   TH2D* refs = 
new TH2D(name , title , 18 , 0.5 , 18.5 , 12 , -0.5 , 11.5) ;
 
   97   for (
auto & sm : SuperMods) {
 
   99     if (sm->get_ref_pmts().size()>0) {
 
  101       for (
auto & ref : sm->get_ref_pmts()) {
 
  103         refs->Fill(sm->getFloor() , ref->getChannel()) ;
 
  105         if (ref->getNBPulse()->IsGood()==
true){
 
  107           refs->Fill(sm->getFloor() , ref->getChannel()) ;
 
  117   refs->GetXaxis()->SetTitle(
"Nanobeacon Floor") ;
 
  119   refs->GetYaxis()->SetTitle(
"PMT Channel (FPGA)") ;
 
  121   refs->SetOption(
"colz") ;
 
  146   sprintf(name , 
"tgt_pmts_Run_%d_%2.1fV", run_number , voltage) ;
 
  150   sprintf(title , 
"Target PMTs used for the closest good source.") ;
 
  152   TH2D* tgts = 
new TH2D(name , title , 18 , 0.5 , 18.5 , 19 , 11.5 , 30.5) ;
 
  154   for (
auto & sm : SuperMods) {
 
  156     if(sm->has_good_sources()==
true){
 
  158       for (
auto & spm : sm->get_closest_good_source().second){
 
  160         tgts->Fill(sm->getFloor() , spm->getChannel());
 
  162         if (spm->getNBPulse()->IsGood()==
true){
 
  164           tgts->Fill(sm->getFloor() , spm->getChannel());         
 
  174   tgts->GetXaxis()->SetTitle(
"Nanobeacon Floor") ;
 
  176   tgts->GetYaxis()->SetTitle(
"PMT Channel (FPGA)") ;
 
  178   tgts->SetOption(
"colz") ;
 
  204   sprintf(name , 
"srcs_Run_%d_%2.1fV", run_number , voltage) ;
 
  208   sprintf(title , 
"Sources for each target module.") ;
 
  210   TH2D* srcs = 
new TH2D(name , title , 18 , 0.5 , 18.5 , 18 , 0.5 , 18.5);
 
  212   for(
auto & sm : SuperMods){
 
  214     int thisfloor = sm->getFloor() ;
 
  216     if(sm->get_sources().size()>0){
 
  218       for (
auto & src : sm->get_sources()){
 
  220         int thatfloor = src.first->getFloor();
 
  222         srcs->Fill(thisfloor , thatfloor ) ;
 
  227     if(sm->get_good_sources().size()>0){
 
  229       for (
auto & src : sm->get_good_sources()){
 
  231         int thatfloor = src.first->getFloor();
 
  233         srcs->Fill(thisfloor , thatfloor) ;
 
  236       int thatfloor = sm->get_closest_good_source().first->getFloor();
 
  238       srcs->Fill(thisfloor , thatfloor) ;
 
  243   srcs->GetXaxis()->SetTitle(
"Target Floor") ;
 
  245   srcs->GetYaxis()->SetTitle(
"Source Floor") ;
 
  247   srcs->SetOption(
"colz") ;
 
  272   sprintf(name , 
"tgts_Run_%d_%2.1fV", run_number , voltage) ;
 
  276   sprintf(title , 
"Targets for each source module.") ;
 
  278   TH2D* tgts = 
new TH2D(name , title , 18 , 0.5 , 18.5 , 18 , 0.5 , 18.5) ;
 
  280   for(
auto & sm : SuperMods){
 
  282     int thisfloor = sm->getFloor() ;
 
  284     if(sm->get_targets().size()>0){
 
  286       for (
auto & tgt : sm->get_targets()){
 
  288         int thatfloor = tgt.first->getFloor() ;
 
  290         tgts->Fill(thisfloor , thatfloor ) ;
 
  295     if(sm->get_good_targets().size()>0){
 
  297       for (
auto & tgt : sm->get_good_targets()){
 
  299         int thatfloor = tgt.first->getFloor() ;
 
  301         tgts->Fill(thisfloor , thatfloor) ;
 
  305       int thatfloor = sm->get_closest_good_target().first->getFloor() ;
 
  307       tgts->Fill(thisfloor , thatfloor) ;
 
  312   tgts->SetOption(
"colz") ;
 
  314   tgts->GetXaxis()->SetTitle(
"Source Floor") ;
 
  316   tgts->GetYaxis()->SetTitle(
"Target Floor") ;
 
  318   tgts->SetOption(
"colz") ;
 
  336   TCanvas * c = 
new TCanvas( (std::string(
"canvas_")+h->GetName()).c_str() , (std::string(
"canvas_")+h->GetName()).c_str() );
 
  340   RooPlot* frame = w.var(
"time")->frame() ;
 
  342   RooDataHist Data (
"data" , 
"data" , *w.var(
"time") , Import(*h)) ;
 
  346   w.function(
"Model")->plotOn(frame) ;
 
  348   w.function(
"L1")->plotOn(frame , LineStyle(kDashed)) ;
 
  350   w.function(
"G1")->plotOn(frame , LineStyle(kDashed) , LineColor(kRed)) ;
 
  354   TLine* line = 
new TLine ( w.var(
"mpv")->getVal() , 1 , w.var(
"mpv")->getVal() , 1e5) ;
 
  356   line->SetLineColor(kBlue) ;
 
  358   TLine* line2 = 
new TLine ( w.var(
"tpeak")->getVal() , 1 , w.var(
"tpeak")->getVal() , 1e5) ;
 
  360   line2->SetLineColor(kBlack) ;
 
  364   line2->Draw(
"same") ;
 
vector< SuperModule * > getSuperModules()
Get the SuperModules in the DU. 
 
TH2D * refs_th2(NBRun *Run)
Produces a TH2 to be read as a table that summarizes which pmts were used as references for each modu...
 
TH2D * good_refs_th2(NBRun *Run)
Produces a TH2 to be read as a table that summarizes which pmts were used as good references for each...
 
TH2D * good_tgt_pmts_th2(NBRun *Run)
Produces a TH2 to be read as a table that summarizes which pmts were used as good references for each...
 
double getVoltage()
Get nanobeacon voltage. 
 
int getRunNumber()
Get run number. 
 
TH2D * tgts_th2(NBRun *Run)
Produces a TH2 to be interpreted as a table that summarizes which modules were targets for each sourc...
 
Class dedicated to the nanobeacon analyses, where the Modules in the detector are not regarded as sin...
 
TCanvas * RooCanvas(RooWorkspace w, TH1D *h)
Produces a TCanvas with the nanobeacon peak and the fit performed with Roofit. 
 
TH2D * srcs_th2(NBRun *Run)
Produces a TH2 to be read as a table that summarizes which modules were used as good sources for each...