3 /**************************************************************************
4 * This file is property of and copyright by the Experimental Nuclear *
5 * Physics Group, Dep. of Physics *
6 * University of Oslo, Norway, 2007 *
8 * Author: Per Thomas Hille <perthi@fys.uio.no> for the ALICE HLT Project.*
9 * Contributors are mentioned in the code where appropriate. *
10 * Please report bugs to perthi@fys.uio.no *
12 * Permission to use, copy, modify and distribute this software and its *
13 * documentation strictly for non-commercial purposes is hereby granted *
14 * without fee, provided that the above copyright notice appears in all *
15 * copies and that both the copyright notice and this permission notice *
16 * appear in the supporting documentation. The authors make no claims *
17 * about the suitability of this software for any purpose. It is *
18 * provided "as is" without express or implied warranty. *
19 **************************************************************************/
20 #include "AliHLTPHOSOnlineDisplayTH2D.h"
21 #include "AliHLTPHOSOnlineDisplay.h"
22 #include "AliHLTPHOSOnlineDisplayEventTab.h"
23 //#include "AliHLTPHOSBase.h"
40 AliHLTPHOSOnlineDisplayTH2D::AliHLTPHOSOnlineDisplayTH2D()
46 AliHLTPHOSOnlineDisplayTH2D::AliHLTPHOSOnlineDisplayTH2D(AliHLTPHOSOnlineDisplay *onlineDisplayPtr, const char* name,
47 const char* title, Int_t nbinsx,
48 Double_t xlow, Double_t xup, Int_t nbinsy,
49 Double_t ylow, Double_t yup) : TH2D(name, title, nbinsx,
53 // fIsSetRunNumber(false)
55 fOnlineDisplayPtr = onlineDisplayPtr;
59 AliHLTPHOSOnlineDisplayTH2D::~AliHLTPHOSOnlineDisplayTH2D()
67 AliHLTPHOS2DHistogram::ExecuteEvent(Int_t event, Int_t px, Int_t pz)
69 if(event == 61) // CRAP PTH, use root enumerator instead
73 EvaluateBinPosition( GetObjectInfo(px, pz), &zbin, &xbin);
74 printf("\nThe bin that was double clicked was z = %d, x = %d\n", zbin, xbin);
76 HandleDoubleClick(zbin, xbin);
82 AliHLTPHOSOnlineDisplayTH2D::EvaluateBinPosition(const char *info, int *z, int *x)
87 sscanf(info,"(x=%f, y=%f, binx=%d, biny=%d, binc=%2.4f)\n", &zpos, &xpos, z, x, &bincnt);
92 AliHLTPHOSOnlineDisplayTH2D::ExecuteEvent(Int_t event, Int_t px, Int_t pz)
97 for(int gain = 0; gain < NGAINS; gain++)
103 fOnlineDisplayPtr->Gain2Text(gain,gainLabel);
104 sprintf(label, "%s_PHOS_HLT_Online_rawdatadisplay",gainLabel);
105 fgRawDataCanvasPtr[gain] = new TCanvas(label, label, 1200, 1000); ;
108 tmpZBin = GetZBin(pz);
109 tmpXBin = GetXBin(px);
111 if(tmpZBin > 54) {tmpZBin = 54;}
112 if(tmpZBin < 1) {tmpZBin = 1;}
118 EvaluateBinPosition( GetObjectInfo(px, pz), &tmpZBin, &tmpXBin);
120 cout << "px = " << px << "pz =" << pz << endl;
121 cout << __FILE__ << ":" <<__LINE__ << " ObjectInfo IS !!" << GetObjectInfo(px, pz) << endl;
123 fgRawDataCanvasPtr[gain]->Divide(ZROWS, XCOLS);
126 for(int z= 1; z > -2; z--)
128 for(int x=-1; x < XCOLS -1; x ++)
130 fOnlineDisplayPtr->Gain2Text(gain,gainLabel);
134 sprintf(label, "(z = %d, x = %d) %s , run %d", tmpZBin + z, (tmpXBin + x)%64 , gainLabel, fRunNumber);
139 sprintf(label, "(z = %d, x = %d) %s, unknow run number", tmpZBin + z, (tmpXBin + x)%64, gainLabel);
144 fgRawDataPlotsPtr[cnt][gain] = new TH1D(label, label, ALTROMAXSAMPLES, 0, ALTROMAXSAMPLES -1);
145 fgRawDataCanvasPtr[gain]->cd(cnt);
146 fgRawDataPlotsPtr[cnt][gain]->SetFillColor(1);
147 fgRawDataPlotsPtr[cnt][gain]->Reset();
148 Int_t nSamples = fOnlineDisplayPtr->fgEventTabPtr->GetRawData( fgRawDataPlotsPtr[cnt][gain], tmpXBin +x, tmpZBin +z, gain);
149 fgRawDataPlotsPtr[cnt][gain]->GetXaxis()->SetRangeUser(0, nSamples);
150 fgRawDataPlotsPtr[cnt][gain]->GetYaxis()->SetRangeUser(fgRawDataPlotsPtr[cnt][gain]->GetMinimum() - fgRawDataPlotsPtr[cnt][gain]->GetMinimum()*0.1, fgRawDataPlotsPtr[cnt][gain]->GetMaximum() + fgRawDataPlotsPtr[cnt][gain]->GetMaximum()*0.1 + 5);
151 fgRawDataPlotsPtr[cnt][gain]->SetXTitle("Time / samples");
152 fgRawDataPlotsPtr[cnt][gain]->SetYTitle("Amplitude / ADC counts");
153 fgRawDataPlotsPtr[cnt][gain]->Draw();
157 sprintf(label, "%s_PHOS_HLT__Online_rawdatadisplay",gainLabel);
158 fgRawDataCanvasSinglePtr[gain] = new TCanvas(label, label, 1200, 1000); ;
159 fgRawDataCanvasSinglePtr[gain]->cd();
160 // sprintf(label, "Z_%d_X_%d__%s", tmpZBin, tmpXBin, gainLabel);
165 sprintf(label, "(z = %d, x = %d) %s , run %d", tmpZBin, tmpXBin%64, gainLabel, fRunNumber);
169 sprintf(label, "(z = %d, x = %d) %s, unknow run number", tmpZBin, tmpXBin%64, gainLabel);
174 fgRawDataPlotsSinglePtr[gain] = new TH1D(label, label, ALTROMAXSAMPLES, 0, ALTROMAXSAMPLES -1);
175 fgRawDataPlotsSinglePtr[gain]->SetFillColor(1);
176 fgRawDataPlotsSinglePtr[gain]->Reset();
177 Int_t nSamples = fOnlineDisplayPtr->fgEventTabPtr->GetRawData(fgRawDataPlotsSinglePtr[gain], tmpXBin, tmpZBin, gain);
178 fgRawDataPlotsSinglePtr[gain]->GetXaxis()->SetRangeUser(0, nSamples - 1);
179 fgRawDataPlotsSinglePtr[gain]->GetYaxis()->SetRangeUser(fgRawDataPlotsSinglePtr[gain]->GetMinimum() - fgRawDataPlotsSinglePtr[gain]->GetMinimum()*0.1, fgRawDataPlotsSinglePtr[gain]->GetMaximum() + fgRawDataPlotsSinglePtr[gain]->GetMaximum()*0.1 + 5);
180 //SetXTitle(const char* title)
181 fgRawDataPlotsSinglePtr[gain]->SetXTitle("Time/samples");
182 fgRawDataPlotsSinglePtr[gain]->SetYTitle("Amplitude/ADC counts");
184 fgRawDataPlotsSinglePtr[gain]->Draw();
186 // fgRawDataPlotsPtr[cnt]->GetYaxis()->SetRangeUser(-30, fgRawDataPlotsPtr[cnt]->GetMaximum() + fgRawDataPlotsPtr[cnt]->GetMaximum()*0.1 + 5);
188 fgRawDataCanvasPtr[gain]->Update();
195 AliHLTPHOSOnlineDisplayTH2D::GetXBin(Int_t px)
197 float tmpBinRange = GetXaxis()->GetLast() - GetXaxis()->GetFirst();
198 float tmpPixelRange = PXMAX - PXMIN;
199 float tmpPixRelative = (px - PXMIN)/tmpPixelRange ;
200 int xBin = ((int)((tmpPixRelative)*tmpBinRange) + (float)GetXaxis()->GetFirst());
205 AliHLTPHOSOnlineDisplayTH2D::GetZBin(Int_t pz)
207 float tmpBinRange = GetYaxis()->GetLast() - GetYaxis()->GetFirst();
208 float tmpPixelRange = PZMAX - PZMIN;
209 float tmpPixRelative = (pz - PZMIN)/tmpPixelRange;
210 int zBin = (int)((1-tmpPixRelative)*tmpBinRange);