- moved AliHLTDisplay files from TPCLib to TPCLib/OnlineDisplay
[u/mrichter/AliRoot.git] / HLT / TPCLib / OnlineDisplay / AliHLTTPCDisplayPad.cxx
1 // $Id$
2
3 /** \class AliHLTTPCDisplayPad
4 <pre>
5 //_____________________________________________________________
6 // AliHLTTPCDisplayPad
7 //
8 // Display class for the HLT TPC-Pad events.
9 </pre>
10 */
11 // Author: Jochen Thaeder <mailto:thaeder@kip.uni-heidelberg.de>
12 //*-- Copyright &copy ALICE HLT Group 
13
14 #include <TH2.h>
15 #include <TFile.h>
16 #include <TStyle.h>
17 #include <TAttText.h>
18 #include <TAxis.h>
19 #include <TCanvas.h>
20
21 #ifdef use_aliroot
22 #include <TClonesArray.h>
23 #include <AliRun.h>
24 #include <AliSimDigits.h>
25 #include <AliTPCParam.h>
26 #endif
27
28 #include "AliHLTStdIncludes.h"
29 #include "AliHLTTPCDefinitions.h"
30 #include "AliHLTDataTypes.h"
31 #include "AliHLTTPCSpacePointData.h"
32 #include "AliHLTTPCClusterDataFormat.h"
33 #include "AliHLTTPCLogging.h"
34 #include "AliHLTTPCTransform.h"
35 #include "AliHLTTPCDigitReaderPacked.h"
36 #include "AliHLTTPCDigitReaderRaw.h"
37
38 #include "AliHLTTPCDisplayMain.h"
39 #include "AliHLTTPCDisplayPad.h"
40
41 #if __GNUC__ >= 3
42 using namespace std;
43 #endif
44
45 ClassImp(AliHLTTPCDisplayPad)
46
47 //____________________________________________________________________________________________________
48 AliHLTTPCDisplayPad::AliHLTTPCDisplayPad(AliHLTTPCDisplayMain* display) {
49     // constructor
50     fDisplay = display;
51
52     fNTimes = AliHLTTPCTransform::GetNTimeBins();
53
54     fBinX[0] = 0;      
55     fBinX[1] = fNTimes -1; 
56     fTmpEvent = 0;    
57
58     fHistpad1 = new TH1F ("fHistpad1","Selected Pad -1;Timebin #",fNTimes,0,fNTimes-1);
59     fHistpad2 = new TH1F ("fHistpad2","Selected Pad;Timebin #",fNTimes,0,fNTimes-1); 
60     fHistpad3 = new TH1F ("fHistpad3","Selected Pad +1;Timebin #",fNTimes,0,fNTimes-1);
61
62     fHistpad1->SetTitleSize(0.03);
63     fHistpad1->GetXaxis()->SetLabelSize(0.03);
64     fHistpad1->GetXaxis()->SetTitleSize(0.03);
65     fHistpad1->GetYaxis()->SetLabelSize(0.03);
66     fHistpad1->GetYaxis()->SetTitleSize(0.03);
67
68     fHistpad2->SetTitleSize(0.03);
69     fHistpad2->GetXaxis()->SetLabelSize(0.03);
70     fHistpad2->GetXaxis()->SetTitleSize(0.03);
71     fHistpad2->GetYaxis()->SetLabelSize(0.03);
72     fHistpad2->GetYaxis()->SetTitleSize(0.03);
73
74     fHistpad3->SetTitleSize(0.03);
75     fHistpad3->GetXaxis()->SetLabelSize(0.03);
76     fHistpad3->GetXaxis()->SetTitleSize(0.03);
77     fHistpad3->GetYaxis()->SetLabelSize(0.03);
78     fHistpad3->GetYaxis()->SetTitleSize(0.03);
79 }
80
81 //____________________________________________________________________________________________________
82 AliHLTTPCDisplayPad::~AliHLTTPCDisplayPad() {
83     // destructor   
84     if ( fHistpad1 ){
85         delete fHistpad1;
86         fHistpad1 = NULL;
87     }
88
89     if ( fHistpad2 ){
90         delete fHistpad2;
91         fHistpad2 = NULL;
92     }
93
94     if ( fHistpad3 ){
95         delete fHistpad3;
96         fHistpad3 = NULL;
97     }  
98 }
99
100 //____________________________________________________________________________________________________
101 void AliHLTTPCDisplayPad::Reset(){  
102     fHistpad1->Reset(); 
103     fHistpad2->Reset();  
104     fHistpad3->Reset(); 
105 }
106
107 //____________________________________________________________________________________________________
108 void AliHLTTPCDisplayPad::Save(){  
109     fDisplay->GetCanvasPad()->SaveAs("HLT-PadView.eps"); 
110 }
111
112 //____________________________________________________________________________________________________
113 void AliHLTTPCDisplayPad::Fill(Int_t patch, ULong_t dataBlock, ULong_t dataLen){
114     // Fill Pad Histogram
115
116 #if defined(HAVE_TPC_MAPPING)    
117     AliHLTTPCDigitReaderRaw digitReader(0);
118
119     bool readValue = true;
120     Int_t rowOffset = 0;
121     
122     Int_t slice = fDisplay->GetSlicePadRow();
123     Int_t padRow = fDisplay->GetPadRow();
124     Int_t pad = fDisplay->GetPad();
125
126     // Initialize RAW DATA
127     Int_t firstRow = AliHLTTPCTransform::GetFirstRow(patch);
128     Int_t lastRow = AliHLTTPCTransform::GetLastRow(patch);
129
130     // Outer sector, patches 2, 3, 4, 5 -  start counting in patch 2 with row 0
131     if ( patch >= 2 ) rowOffset = AliHLTTPCTransform::GetFirstRow( 2 );
132
133     // Initialize block for reading packed data
134     void* tmpdataBlock = (void*) dataBlock;
135     digitReader.InitBlock(tmpdataBlock,dataLen,firstRow,lastRow,patch,slice);
136
137     readValue = digitReader.Next();
138
139     if (!readValue){    
140         LOG(AliHLTTPCLog::kError,"AliHLTTPCDisplayPadRow::Fill","Read first value") << "No value in data block" << ENDLOG;
141         return;
142     }
143
144     // -- Fill Raw Data
145     while ( readValue ){ 
146
147         Int_t row = digitReader.GetRow() + rowOffset;
148
149         // select padrow to fill in histogramm
150         if (row == padRow){    
151             UChar_t tmppad = digitReader.GetPad();
152             UShort_t time = digitReader.GetTime();
153             UInt_t charge = digitReader.GetSignal();
154
155             if (tmppad == (pad-1) ) fHistpad1->Fill(time,charge);
156             if (tmppad == pad) fHistpad2->Fill(time,charge);
157             if (tmppad == (pad+1) ) fHistpad3->Fill(time,charge);
158         }
159         
160         // read next value
161         readValue = digitReader.Next();
162       
163         //Check where to stop:
164         if(!readValue) break; //No more value
165     } 
166 #else //! defined(HAVE_TPC_MAPPING)
167       HLTFatal("DigitReaderRaw not available - check your build");
168 #endif //defined(HAVE_TPC_MAPPING)
169
170 }
171
172 //____________________________________________________________________________________________________
173 void AliHLTTPCDisplayPad::Draw(){
174     Char_t title[256];
175
176     fDisplay->GetCanvasPad()->cd();
177     fDisplay->GetCanvasPad()->Clear();
178     fDisplay->GetCanvasPad()->Divide(1,3);
179     
180     // Keep Zoom
181     if (!fDisplay->GetKeepView() || (fBinX[1]>fNTimes)){
182         fBinX[0] = 0;
183         fBinX[1] = fNTimes -1;
184     }
185     
186     fHistpad1->SetAxisRange(fBinX[0],fBinX[1]);
187     fHistpad2->SetAxisRange(fBinX[0],fBinX[1]);
188     fHistpad3->SetAxisRange(fBinX[0],fBinX[1]);
189
190
191     fDisplay->GetCanvasPad()->cd(1);
192     sprintf(title,"Selected Pad %d",fDisplay->GetPad() -1);
193     fHistpad1->SetStats(kFALSE);
194     fHistpad1->SetTitle(title);
195     fHistpad1->Draw();
196
197     fDisplay->GetCanvasPad()->cd(2); 
198     sprintf(title,"Selected Pad %d",fDisplay->GetPad() );
199     fHistpad2->SetStats(kFALSE);
200     fHistpad2->SetTitle(title);
201     fHistpad2->Draw();
202
203     fDisplay->GetCanvasPad()->cd(3);
204     sprintf(title,"Selected Pad %d",fDisplay->GetPad() +1);
205     fHistpad3->SetStats(kFALSE);
206     fHistpad3->SetTitle(title);
207     fHistpad3->Draw();
208
209     fDisplay->GetCanvasPad()->Modified();
210     fDisplay->GetCanvasPad()->Update();
211
212     // Keep Zoom
213     fDisplay->GetCanvasPad()->Connect("ProcessedEvent(Int_t,Int_t,Int_t,TObject*)","AliHLTTPCDisplayPad",(void*) this,"ExecEvent(Int_t,Int_t,Int_t,TObject*)");
214 }
215
216 //____________________________________________________________________________________________________
217 void AliHLTTPCDisplayPad::ExecEvent(Int_t event, Int_t px, Int_t py, TObject *selected){
218    // Saves the Zoom Position of the Histogram 
219
220    // - Mouse down on Axis : StartPoint of Range
221    if (event == 1 && selected->InheritsFrom("TAxis"))
222        fTmpEvent = 1;
223
224    // - Mouse pressed on Axis : Real Zoom process not only click
225    else if (event == 21 && selected->InheritsFrom("TAxis") && fTmpEvent == 1)
226        fTmpEvent = 21;
227
228    // - Mouse pressed on Axis : Still pressed
229    else if (event == 21 && selected->InheritsFrom("TAxis") && fTmpEvent == 21) 
230        return;
231
232     // - Mouse up on Axis : End Point of Rangex
233    else if (event == 11 && selected->InheritsFrom("TAxis") && fTmpEvent == 21){
234        TAxis * axis = (TAxis*) selected;
235        
236        if (selected == fHistpad1->GetXaxis() || selected == fHistpad2->GetXaxis() || selected == fHistpad3->GetXaxis()){ 
237            fBinX[0] = axis->GetFirst() -1;
238            fBinX[1] = axis->GetLast() -1;
239        }
240
241        fTmpEvent = 0; 
242    }
243    else fTmpEvent = 0;
244 }