@@ -199,7 +199,7 @@ InitStatus R3BActafOnlineSpectra::Init()
199199
200200 countsPerRing[iside][iring] = 0 ;
201201
202- std::string sideName = iside == 0 ? " DOWN " : " UP " ;
202+ std::string sideName = iside == 0 ? " UP " : " DOWN " ;
203203
204204 std::string nameCanvas = sideName + " _RING_" + std::to_string (iring + 1 ) + " _traces_map" ;
205205 auto * cMap = new TCanvas (nameCanvas.c_str (), " mapped info" , 10 , 10 , 500 , 500 );
@@ -814,6 +814,10 @@ InitStatus R3BActafOnlineSpectra::Init()
814814 // Register command to reset histograms
815815 run->GetHttpServer ()->RegisterCommand (" Reset_Actaf_HIST" , Form (" /Objects/%s/->Reset_Histo()" , GetName ()));
816816
817+ run->GetHttpServer ()->RegisterCommand (" Next_event" , Form (" /Objects/%s/->Next_event()" , GetName ()));
818+ run->GetHttpServer ()->RegisterCommand (" Prev_event" , Form (" /Objects/%s/->Prev_event()" , GetName ()));
819+ run->GetHttpServer ()->RegisterCommand (" Reset_event" , Form (" /Objects/%s/->Reset_event()" , GetName ()));
820+
817821 return kSUCCESS ;
818822}
819823
@@ -825,6 +829,67 @@ InitStatus R3BActafOnlineSpectra::ReInit()
825829 return kSUCCESS ;
826830}
827831
832+ // Event viewer controls
833+
834+ void R3BActafOnlineSpectra::plotSingleEventCanvas ()
835+ {
836+ if (eventViewerNb >= maxEventViewerBatch)
837+ {
838+
839+ fh2_XYPos_Evts[0 ]->Reset (" " );
840+ fh2_XYPos_Evts[1 ]->Reset (" " );
841+
842+ for (int ipad = 0 ; ipad < 128 ; ipad++)
843+ {
844+ int iside = ipad > 63 ? 1 : 0 ;
845+
846+ double x = eventCountsX[selectEvent][ipad];
847+ double y = eventCountsY[selectEvent][ipad];
848+ double energy = eventCountsE[selectEvent][ipad];
849+
850+ if (energy > 0 )
851+ {
852+ auto bin = fh2_XYPos_Evts[iside]->FindBin (x, y);
853+ fh2_XYPos_Evts[iside]->SetBinContent (bin, energy);
854+ }
855+ }
856+ }
857+ else
858+ {
859+ std::cout << " The buffer is being filled. Please wait some events more.\n " ;
860+ }
861+ }
862+
863+ void R3BActafOnlineSpectra::Next_event ()
864+ {
865+ if (selectEvent < maxEventViewerBatch - 1 )
866+ selectEvent++;
867+ else
868+ {
869+ std::cout << " You have reached the last event of the buffer. Time to reset!\n " ;
870+ }
871+
872+ plotSingleEventCanvas ();
873+ }
874+
875+ void R3BActafOnlineSpectra::Prev_event ()
876+ {
877+ if (selectEvent > 0 )
878+ selectEvent--;
879+ else
880+ {
881+ std::cout << " You are already in the first event of the buffer.\n " ;
882+ }
883+
884+ plotSingleEventCanvas ();
885+ }
886+
887+ void R3BActafOnlineSpectra::Reset_event ()
888+ {
889+ eventViewerNb = 0 ;
890+ selectEvent = 0 ;
891+ }
892+
828893void R3BActafOnlineSpectra::Reset_Histo ()
829894{
830895 R3BLOG (info, " " );
@@ -1076,11 +1141,15 @@ void R3BActafOnlineSpectra::Exec(Option_t* /*option*/)
10761141 }
10771142
10781143 // Fill hit data
1144+ /*
10791145 if (fNEvents % updateRate == 0)
10801146 {
10811147 for (auto& hist : fh2_XYPos_Evts)
10821148 hist->Reset("");
10831149 }
1150+ */
1151+
1152+ bool goodEventForView = false ;
10841153
10851154 if (fHitItems && fHitItems ->GetEntriesFast () > 0 )
10861155 {
@@ -1108,8 +1177,18 @@ void R3BActafOnlineSpectra::Exec(Option_t* /*option*/)
11081177 fh1_RingCounts[side]->Fill (ring);
11091178 fh2_XYPos[side]->Fill (x, y);
11101179
1111- auto bin = fh2_XYPos_Evts[side]->FindBin (x, y);
1112- fh2_XYPos_Evts[side]->SetBinContent (bin, energy);
1180+ if (eventViewerNb < maxEventViewerBatch)
1181+ {
1182+ if (energy < 10 )
1183+ continue ;
1184+
1185+ goodEventForView = true ;
1186+ eventCountsX[eventViewerNb][pad - 1 ] = x;
1187+ eventCountsY[eventViewerNb][pad - 1 ] = y;
1188+ eventCountsE[eventViewerNb][pad - 1 ] = energy;
1189+ }
1190+ // auto bin = fh2_XYPos_Evts[side]->FindBin(x, y);
1191+ // fh2_XYPos_Evts[side]->SetBinContent(bin, energy);
11131192
11141193 fh1_PhiCounts[side]->Fill (phi);
11151194 fh1_CountsPerSide->Fill (side + 1 );
@@ -1196,6 +1275,8 @@ void R3BActafOnlineSpectra::Exec(Option_t* /*option*/)
11961275 }
11971276
11981277 fNEvents ++;
1278+ if (goodEventForView)
1279+ eventViewerNb++;
11991280 return ;
12001281}
12011282
0 commit comments