// $Id$
/** \class AliHLTTPCDisplayPad
//_____________________________________________________________
// AliHLTTPCDisplayPad
//
// Display class for the HLT TPC-Pad events.
*/
// Author: Jochen Thaeder
//*-- Copyright © ALICE HLT Group
#include
#include
#include
#include
#include
#include
#ifdef use_aliroot
#include
#include
#include
#include
#endif
#include "AliHLTStdIncludes.h"
#include "AliHLTTPCDefinitions.h"
#include "AliHLTDataTypes.h"
#include "AliHLTTPCSpacePointData.h"
#include "AliHLTTPCClusterDataFormat.h"
#include "AliHLTTPCLogging.h"
#include "AliHLTTPCTransform.h"
#include "AliHLTTPCDisplayMain.h"
#include "AliHLTTPCDisplayPad.h"
#if __GNUC__ >= 3
using namespace std;
#endif
ClassImp(AliHLTTPCDisplayPad)
//____________________________________________________________________________________________________
AliHLTTPCDisplayPad::AliHLTTPCDisplayPad(AliHLTTPCDisplayMain* display) {
// constructor
fDisplay = display;
fNTimes = AliHLTTPCTransform::GetNTimeBins();
fBinX[0] = 0;
fBinX[1] = fNTimes -1;
fTmpEvent = 0;
fHistpad1 = new TH1F ("fHistpad1","Selected Pad -1;Timebin #",fNTimes,0,fNTimes-1);
fHistpad2 = new TH1F ("fHistpad2","Selected Pad;Timebin #",fNTimes,0,fNTimes-1);
fHistpad3 = new TH1F ("fHistpad3","Selected Pad +1;Timebin #",fNTimes,0,fNTimes-1);
fHistpad1->SetTitleSize(0.03);
fHistpad1->GetXaxis()->SetLabelSize(0.03);
fHistpad1->GetXaxis()->SetTitleSize(0.03);
fHistpad1->GetYaxis()->SetLabelSize(0.03);
fHistpad1->GetYaxis()->SetTitleSize(0.03);
fHistpad2->SetTitleSize(0.03);
fHistpad2->GetXaxis()->SetLabelSize(0.03);
fHistpad2->GetXaxis()->SetTitleSize(0.03);
fHistpad2->GetYaxis()->SetLabelSize(0.03);
fHistpad2->GetYaxis()->SetTitleSize(0.03);
fHistpad3->SetTitleSize(0.03);
fHistpad3->GetXaxis()->SetLabelSize(0.03);
fHistpad3->GetXaxis()->SetTitleSize(0.03);
fHistpad3->GetYaxis()->SetLabelSize(0.03);
fHistpad3->GetYaxis()->SetTitleSize(0.03);
}
//____________________________________________________________________________________________________
AliHLTTPCDisplayPad::~AliHLTTPCDisplayPad() {
// destructor
if ( fHistpad1 ){
delete fHistpad1;
fHistpad1 = NULL;
}
if ( fHistpad2 ){
delete fHistpad2;
fHistpad2 = NULL;
}
if ( fHistpad3 ){
delete fHistpad3;
fHistpad3 = NULL;
}
}
//____________________________________________________________________________________________________
void AliHLTTPCDisplayPad::Reset(){
fHistpad1->Reset();
fHistpad2->Reset();
fHistpad3->Reset();
}
//____________________________________________________________________________________________________
void AliHLTTPCDisplayPad::Save(){
fDisplay->GetCanvasPad()->SaveAs("HLT-PadView.eps");
}
//____________________________________________________________________________________________________
void AliHLTTPCDisplayPad::Fill(Int_t patch, ULong_t dataBlock, ULong_t dataLen){
// Fill Pad Histogram
Int_t padRow = fDisplay->GetPadRow();
Int_t pad = fDisplay->GetPad();
Int_t nextPad = pad + 1;
Int_t prevPad = pad - 1;
// !!
// !! DO unrolling because of cache effects (avoid cache trashing) !!
// !!
if ( fDisplay->GetZeroSuppression() ){
for (Int_t timeBin=0; timeBin <= fDisplay->GetNTimeBins(); timeBin++){
fHistpad1->Fill( timeBin, fDisplay->fRawDataZeroSuppressed[padRow][prevPad][timeBin] );
} // end time
for (Int_t timeBin=0; timeBin <= fDisplay->GetNTimeBins(); timeBin++){
fHistpad2->Fill( timeBin, fDisplay->fRawDataZeroSuppressed[padRow][pad][timeBin] );
} // end time
for (Int_t timeBin=0; timeBin <= fDisplay->GetNTimeBins(); timeBin++){
fHistpad3->Fill( timeBin, fDisplay->fRawDataZeroSuppressed[padRow][nextPad][timeBin] );
} // end time
} // end - if ( fDisplay->GetZeroSuppression() ){
else {
for (Int_t timeBin=0; timeBin <= fDisplay->GetNTimeBins(); timeBin++){
fHistpad1->Fill( timeBin, fDisplay->fRawData[padRow][prevPad][timeBin] );
} // end time
for (Int_t timeBin=0; timeBin <= fDisplay->GetNTimeBins(); timeBin++){
fHistpad2->Fill( timeBin, fDisplay->fRawData[padRow][pad][timeBin] );
} // end time
for (Int_t timeBin=0; timeBin <= fDisplay->GetNTimeBins(); timeBin++){
fHistpad3->Fill( timeBin, fDisplay->fRawData[padRow][nextPad][timeBin] );
} // end time
} // end - else of if ( fDisplay->GetZeroSuppression() ){
}
//____________________________________________________________________________________________________
void AliHLTTPCDisplayPad::Draw(){
Char_t title[256];
fDisplay->GetCanvasPad()->cd();
fDisplay->GetCanvasPad()->Clear();
fDisplay->GetCanvasPad()->Divide(1,3);
// Keep Zoom
if (!fDisplay->GetKeepView() || (fBinX[1]>fNTimes)){
fBinX[0] = 0;
fBinX[1] = fNTimes -1;
}
fHistpad1->SetAxisRange(fBinX[0],fBinX[1]);
fHistpad2->SetAxisRange(fBinX[0],fBinX[1]);
fHistpad3->SetAxisRange(fBinX[0],fBinX[1]);
fDisplay->GetCanvasPad()->cd(1);
sprintf(title,"Selected Pad %d",fDisplay->GetPad() -1);
fHistpad1->SetStats(kFALSE);
fHistpad1->SetTitle(title);
fHistpad1->Draw();
fDisplay->GetCanvasPad()->cd(2);
sprintf(title,"Selected Pad %d",fDisplay->GetPad() );
fHistpad2->SetStats(kFALSE);
fHistpad2->SetTitle(title);
fHistpad2->Draw();
fDisplay->GetCanvasPad()->cd(3);
sprintf(title,"Selected Pad %d",fDisplay->GetPad() +1);
fHistpad3->SetStats(kFALSE);
fHistpad3->SetTitle(title);
fHistpad3->Draw();
fDisplay->GetCanvasPad()->Modified();
fDisplay->GetCanvasPad()->Update();
// Keep Zoom
fDisplay->GetCanvasPad()->Connect("ProcessedEvent(Int_t,Int_t,Int_t,TObject*)","AliHLTTPCDisplayPad",(void*) this,"ExecEvent(Int_t,Int_t,Int_t,TObject*)");
}
//____________________________________________________________________________________________________
void AliHLTTPCDisplayPad::ExecEvent(Int_t event, Int_t px, Int_t py, TObject *selected){
// Saves the Zoom Position of the Histogram
// - Mouse down on Axis : StartPoint of Range
if (event == 1 && selected->InheritsFrom("TAxis"))
fTmpEvent = 1;
// - Mouse pressed on Axis : Real Zoom process not only click
else if (event == 21 && selected->InheritsFrom("TAxis") && fTmpEvent == 1)
fTmpEvent = 21;
// - Mouse pressed on Axis : Still pressed
else if (event == 21 && selected->InheritsFrom("TAxis") && fTmpEvent == 21)
return;
// - Mouse up on Axis : End Point of Rangex
else if (event == 11 && selected->InheritsFrom("TAxis") && fTmpEvent == 21){
TAxis * axis = (TAxis*) selected;
if (selected == fHistpad1->GetXaxis() || selected == fHistpad2->GetXaxis() || selected == fHistpad3->GetXaxis()){
fBinX[0] = axis->GetFirst() -1;
fBinX[1] = axis->GetLast() -1;
}
fTmpEvent = 0;
}
else fTmpEvent = 0;
}