From ad080421f118a677c9d7629f4b9bf1933f5b0f28 Mon Sep 17 00:00:00 2001 From: cvetan Date: Thu, 18 Sep 2008 17:03:37 +0000 Subject: [PATCH] New code for full visualization of the vzero raw data. ctrl-alt-letf-button shows all the 21 adc samples and the TDC time and width in the selected cell in a form of a histogram. The vzero module object has an editor in which one can use the slider in order to visualize a particular time sample. --- EVE/EveDet/AliEveVZEROModule.cxx | 150 +++++++++++++++++++++++++ EVE/EveDet/AliEveVZEROModule.h | 47 ++++++++ EVE/EveDet/AliEveVZEROModuleEditor.cxx | 75 +++++++++++++ EVE/EveDet/AliEveVZEROModuleEditor.h | 44 ++++++++ EVE/EveDet/LinkDef.h | 4 + EVE/libEveDet.pkg | 3 +- EVE/macros/anyscan_init.C | 1 + 7 files changed, 323 insertions(+), 1 deletion(-) create mode 100644 EVE/EveDet/AliEveVZEROModule.cxx create mode 100644 EVE/EveDet/AliEveVZEROModule.h create mode 100644 EVE/EveDet/AliEveVZEROModuleEditor.cxx create mode 100644 EVE/EveDet/AliEveVZEROModuleEditor.h diff --git a/EVE/EveDet/AliEveVZEROModule.cxx b/EVE/EveDet/AliEveVZEROModule.cxx new file mode 100644 index 00000000000..dd61766296c --- /dev/null +++ b/EVE/EveDet/AliEveVZEROModule.cxx @@ -0,0 +1,150 @@ +/************************************************************************** + * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. * + * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for * + * full copyright notice. * + **************************************************************************/ + +////////////////////////////////////////////////////////////////////////// +// // +// The drawing module for the VZERO detector // +// // +////////////////////////////////////////////////////////////////////////// + +#include "AliEveVZEROModule.h" + +#include +#include +#include +#include + +#include +#include +#include + +static const Float_t RadC[] = { 4.6, 7.1, 11.5, 18.9, 31.4 }; +static const Float_t RadA[] = { 4.2, 7.6, 13.8, 22.7, 41.4 }; +static const Float_t RadEps = 0.4; +static const Float_t PhiEps = 0.025; +static const Float_t PhiStp = TMath::TwoPi()/8.0; + +ClassImp(AliEveVZEROModule) + +/******************************************************************************/ +AliEveVZEROModule::AliEveVZEROModule(const Text_t* n, Bool_t side) + : TEveQuadSet(n), + fStream(NULL), + fSampleIndex(AliVZERORawStream::kNEvOfInt/2), + fIsASide(side) +{ + // + // Default constructor + // + TEveRGBAPalette* rawPalette = new TEveRGBAPalette(0, 1023); + rawPalette->SetLimits(0, 1023); + SetPalette(rawPalette); + Reset(TEveQuadSet::kQT_FreeQuad, kFALSE, 32); +} + +/******************************************************************************/ +AliEveVZEROModule::~AliEveVZEROModule() +{ + // + // Destructor + // + delete fStream; +} + +/******************************************************************************/ +void AliEveVZEROModule::LoadRaw(AliRawReader *rawReader) +{ + // + // Load VZERO raw-data + // + if (fStream) delete fStream; + fStream = new AliVZERORawStream(rawReader); + if (!fStream->Next()) { + delete fStream; + fStream = NULL; + return; + } + + for (Int_t iChannel=0; iChannel < AliVZERORawStream::kNChannels; ++iChannel) { + Int_t offChannel = fStream->GetOfflineChannel(iChannel); + Float_t minR,maxR,minP,maxP; + if (fIsASide) { + if (offChannel < 32) continue; + + Int_t ri = (offChannel-32) / 8; + Int_t pi = (offChannel-32) % 8; + minR = RadA[ri] + RadEps, maxR = RadA[ri+1] - RadEps; + minP = pi*PhiStp + PhiEps, maxP = (pi+1)*PhiStp - PhiEps; + } + else { + if (offChannel >= 32) continue; + + Int_t ri = offChannel / 8; + Int_t pi = offChannel % 8; + minR = RadC[ri] + RadEps, maxR = RadC[ri+1] - RadEps; + minP = pi*PhiStp + PhiEps, maxP = (pi+1)*PhiStp - PhiEps; + } + Float_t v[12]; + v[ 0] = minR*TMath::Cos(minP); v[ 1] = minR*TMath::Sin(minP); v[ 2] = 0; + v[ 3] = maxR*TMath::Cos(minP); v[ 4] = maxR*TMath::Sin(minP); v[ 5] = 0; + v[ 6] = maxR*TMath::Cos(maxP); v[ 7] = maxR*TMath::Sin(maxP); v[ 8] = 0; + v[ 9] = minR*TMath::Cos(maxP); v[10] = minR*TMath::Sin(maxP); v[11] = 0; + + AddQuad(v); + QuadValue(fStream->GetPedestal(iChannel,fSampleIndex)); + } + + if (fIsASide) + RefMainTrans().SetPos(0, 0, 324); + else + RefMainTrans().SetPos(0, 0, -84); + + gEve->AddElement(this); + gEve->Redraw3D(); +} + +/******************************************************************************/ +void AliEveVZEROModule::DigitSelected(Int_t idx) +{ + // + // Override control-click from TEveQuadSet + // + if (!fStream) return; + + Int_t iPMT = idx; + if (!fIsASide) iPMT += 32; + printf("PMT = %2d ADC = ",iPMT); + TH1S *hADC = new TH1S(Form("VZERO_ADC_%d",iPMT), + Form("ADC samples for PMT %d, Time/Width = %3.1f/%3.1f ns", + iPMT, + (Float_t)fStream->GetTime(iPMT)/10.,(Float_t)fStream->GetWidth(iPMT)/10.), + AliVZERORawStream::kNEvOfInt,-0.5,(Float_t)AliVZERORawStream::kNEvOfInt-0.5); + hADC->SetXTitle("Sample index"); + hADC->SetYTitle("ADC value"); + hADC->SetStats(kFALSE); + for (Int_t iEv = 0; iEv < AliVZERORawStream::kNEvOfInt; ++iEv) { + printf("%4d ",fStream->GetPedestal(iPMT,iEv)); + hADC->SetBinContent(iEv+1,fStream->GetPedestal(iPMT,iEv)); + } + printf("\nTime = %3.1f ns Width = %3.1f ns\n",(Float_t)fStream->GetTime(iPMT)/10.,(Float_t)fStream->GetWidth(iPMT)/10.); + hADC->Draw(); + gPad->Modified(); + gPad->Update(); +} + +/******************************************************************************/ +void AliEveVZEROModule::SetSampleIndex(Int_t index) +{ + fSampleIndex = index; + if (!fStream) return; + + for(Int_t idx = 0; idx < (AliVZERORawStream::kNChannels/2); ++idx) { + Int_t iPMT = idx; + if (!fIsASide) iPMT += 32; + DigitBase_t *qb = GetDigit(idx); + qb->fValue = fStream->GetPedestal(iPMT,fSampleIndex); + } +} diff --git a/EVE/EveDet/AliEveVZEROModule.h b/EVE/EveDet/AliEveVZEROModule.h new file mode 100644 index 00000000000..5414229c0d7 --- /dev/null +++ b/EVE/EveDet/AliEveVZEROModule.h @@ -0,0 +1,47 @@ +/************************************************************************** + * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. * + * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for * + * full copyright notice. * + **************************************************************************/ +#ifndef AliEveVZEROModule_H +#define AliEveVZEROModule_H + +////////////////////////////////////////////////////////////////////////// +// // +// The drawing module for the VZERO detector // +// // +////////////////////////////////////////////////////////////////////////// + +#include + +class AliRawReader; +class AliVZERORawStream; +class AliESDEvent; + +class AliEveVZEROModule : public TEveQuadSet +{ +public: + AliEveVZEROModule(const Text_t* n="AliEveVZEROModule", Bool_t side = kTRUE); + virtual ~AliEveVZEROModule(); + + virtual void DigitSelected(Int_t idx); + + void LoadRaw(AliRawReader *rawReader); + + Int_t GetSampleIndex() const { return fSampleIndex; } + void SetSampleIndex(Int_t index); + +protected: + + AliVZERORawStream *fStream; // Raw-stream + Int_t fSampleIndex; // Current sample index used + Bool_t fIsASide; // A or C side module + +private: + AliEveVZEROModule(const AliEveVZEROModule&); + AliEveVZEROModule& operator=(const AliEveVZEROModule&); + + ClassDef(AliEveVZEROModule,0) // Representation of a VZERO module +}; + +#endif diff --git a/EVE/EveDet/AliEveVZEROModuleEditor.cxx b/EVE/EveDet/AliEveVZEROModuleEditor.cxx new file mode 100644 index 00000000000..efd9ad54433 --- /dev/null +++ b/EVE/EveDet/AliEveVZEROModuleEditor.cxx @@ -0,0 +1,75 @@ +/************************************************************************** + * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. * + * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for * + * full copyright notice. * + **************************************************************************/ + +#include "AliEveVZEROModuleEditor.h" +#include + +#include + +#include +#include + +//______________________________________________________________________________ +// +// Editor for AliEveVZEROModule. + +ClassImp(AliEveVZEROModuleEditor) + +AliEveVZEROModuleEditor::AliEveVZEROModuleEditor(const TGWindow *p, + Int_t width, Int_t height, + UInt_t options, Pixel_t back) : + TGedFrame(p, width, height, options | kVerticalFrame, back), + fM(0), + fSampleIndex(NULL) +{ + // Constructor. + + MakeTitle("AliEveVZEROModule"); + + fSampleIndex = new TEveGValuator(this,"Sample", 200, 0); + fSampleIndex->SetNELength(4); + fSampleIndex->SetLabelWidth(60); + fSampleIndex->Build(); + fSampleIndex->GetSlider()->SetWidth(120); + fSampleIndex->SetLimits(0, AliVZERORawStream::kNEvOfInt-1, AliVZERORawStream::kNEvOfInt, TGNumberFormat::kNESInteger); + fSampleIndex->Connect("ValueSet(Double_t)", + "AliEveVZEROModuleEditor", this, "DoSampleIndex()"); + AddFrame(fSampleIndex, new TGLayoutHints(kLHintsTop, 1, 1, 2, 1)); + + /* + fSampleIndex = new TGNumberEntry(this, + AliVZERORawStream::kNEvOfInt/2, 3, -1, + TGNumberFormat::kNESInteger, + TGNumberFormat::kNEANonNegative, + TGNumberFormat::kNELLimitMinMax, + 0,AliVZERORawStream::kNEvOfInt); + AddFrame(fSampleIndex, new TGLayoutHints(kLHintsNormal, 10, 2, 0, 0)); + fSampleIndex->Connect("ValueSet(Double_t)", + "AliEveVZEROModuleEditor", this, "DoSampleIndex()"); + fSampleIndex->SetText("ADC sample index (between 0 and 21)"); + */ +} + +/******************************************************************************/ + +void AliEveVZEROModuleEditor::SetModel(TObject* obj) +{ + // Set model object. + + fM = dynamic_cast(obj); + + fSampleIndex->SetValue(fM->GetSampleIndex()); +} + +/******************************************************************************/ + +void AliEveVZEROModuleEditor::DoSampleIndex() +{ + // Slot for SampleIndex. + + fM->SetSampleIndex((Int_t)fSampleIndex->GetValue()); + Update(); +} diff --git a/EVE/EveDet/AliEveVZEROModuleEditor.h b/EVE/EveDet/AliEveVZEROModuleEditor.h new file mode 100644 index 00000000000..4da4af842a3 --- /dev/null +++ b/EVE/EveDet/AliEveVZEROModuleEditor.h @@ -0,0 +1,44 @@ +/************************************************************************** + * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. * + * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for * + * full copyright notice. * + **************************************************************************/ + +#ifndef AliEveVZEROModuleEditor_H +#define AliEveVZEROModuleEditor_H + +#include + +class TEveGValuator; + +class AliEveVZEROModule; + +//------------------------------------------------------------------------------ +// AliEveVZEROModuleEditor +// +// Editor for AliEveVZEROModule. + +class AliEveVZEROModuleEditor : public TGedFrame +{ +public: + AliEveVZEROModuleEditor(const TGWindow* p=0, Int_t width=170, Int_t height=30, + UInt_t options=kChildFrame, Pixel_t back=GetDefaultFrameBackground()); + virtual ~AliEveVZEROModuleEditor() {} + + virtual void SetModel(TObject* obj); + + void DoSampleIndex(); + +protected: + AliEveVZEROModule *fM; // Model dynamic-casted to AliEveVZEROModuleEditor + + TEveGValuator *fSampleIndex; // Widget for ADC sample index. + +private: + AliEveVZEROModuleEditor(const AliEveVZEROModuleEditor&); // Not implemented + AliEveVZEROModuleEditor& operator=(const AliEveVZEROModuleEditor&); // Not implemented + + ClassDef(AliEveVZEROModuleEditor, 0) // Editor for AliEveVZEROModule +}; + +#endif diff --git a/EVE/EveDet/LinkDef.h b/EVE/EveDet/LinkDef.h index b60fb1746e8..5370b695b13 100644 --- a/EVE/EveDet/LinkDef.h +++ b/EVE/EveDet/LinkDef.h @@ -99,3 +99,7 @@ // FMD #pragma link C++ class AliEveFMDLoader+; + +// VZERO +#pragma link C++ class AliEveVZEROModule+; +#pragma link C++ class AliEveVZEROModuleEditor+; diff --git a/EVE/libEveDet.pkg b/EVE/libEveDet.pkg index af7153a16ad..cfc5b8557ba 100644 --- a/EVE/libEveDet.pkg +++ b/EVE/libEveDet.pkg @@ -6,7 +6,7 @@ HDRS := $(SRCS:.cxx=.h) DHDR := EveDet/LinkDef.h -EINCLUDE := RAW EMCAL ITS TPC TRD TOF T0 MUON MUON/mapping PMD HLT/BASE HLT/BASE/HOMER +EINCLUDE := RAW EMCAL ITS TPC TRD TOF T0 MUON MUON/mapping PMD HLT/BASE HLT/BASE/HOMER VZERO ifeq (win32gcc,$(ALICE_TARGET)) PACKCXXFLAGS:= $(CXXFLAGS) -I/usr/X11R6/include @@ -16,6 +16,7 @@ PACKSOFLAGS:= $(SOFLAGS) -L$(ALICE_ROOT)/lib/tgt_$(ALICE_TARGET) \ -lMUONgeometry -lMUONmapping -lMUONrec -lMUONsim -lMUONbase -lMUONcore \ -lPMDbase -lT0base -lTOFbase -lTOFsim -lTPCbase -lTRDbase -lTRDrec \ -lFMDbase -lFMDrec -lEMCALbase \ + -lVZERObase -lVZEROrec \ -lRAWDatarec -lRAWDatabase \ -L$(shell root-config --libdir) -lEve -lRGL -lGed -lGui -lGeom -lEG diff --git a/EVE/macros/anyscan_init.C b/EVE/macros/anyscan_init.C index 87633b14d64..bb52239cf24 100644 --- a/EVE/macros/anyscan_init.C +++ b/EVE/macros/anyscan_init.C @@ -82,6 +82,7 @@ void anyscan_init() exec->AddMacro(new AliEveMacro(AliEveMacro::kRawReader, "FMD RAW", "fmd_raw.C", "fmd_raw", "", kFALSE)); exec->AddMacro(new AliEveMacro(AliEveMacro::kRunLoader, "FMD DIGITS", "fmd_digits.C", "fmd_digits", "", kFALSE)); exec->AddMacro(new AliEveMacro(AliEveMacro::kRunLoader, "FMD Hits", "fmd_hits.C", "fmd_hits", "", kFALSE)); + exec->AddMacro(new AliEveMacro(AliEveMacro::kRawReader, "VZERO RAW", "vzero_raw.C", "vzero_raw", "", kFALSE)); exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC PVTX", "primary_vertex.C", "primary_vertex", "", kTRUE)); exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC PVTX Ellipse", "primary_vertex.C", "primary_vertex_ellipse", "", kTRUE)); -- 2.43.0