diff --git a/core/eventdisplay/CMakeLists.txt b/core/eventdisplay/CMakeLists.txt index eda6b9c199f09e81aacf28458b613cc2c6309e2c..c57246caee8455b57330d2905b75c9a54262f88b 100644 --- a/core/eventdisplay/CMakeLists.txt +++ b/core/eventdisplay/CMakeLists.txt @@ -16,8 +16,8 @@ set(SRCS CbmTimesliceRecoTracks.cxx CbmTsEveAnimationControl.cxx CbmTsEveTransparencyControl.cxx - CbmTsDisTracks.cxx - CbmTsPointSetArrayDraw.cxx + CbmTsDisTofTracklets.cxx + CbmTsPointSetArrayDraw.cxx ) diff --git a/core/eventdisplay/CbmDisplayLinkDef.h b/core/eventdisplay/CbmDisplayLinkDef.h index 9c9351724530828787feb47339518ab0f2b53f86..a2b99fd343c5a1bc8fa6a5b890dc5876ed157f65 100644 --- a/core/eventdisplay/CbmDisplayLinkDef.h +++ b/core/eventdisplay/CbmDisplayLinkDef.h @@ -11,10 +11,7 @@ #pragma link C++ class CbmTrdDigiDraw; #pragma link C++ class CbmPixelHitSetDraw; #pragma link C++ class CbmEvDisTracks + ; -#pragma link C++ class CbmEvManager + ; -#pragma link C++ class CbmEvManagerEditor + ; -#pragma link C++ class CbmEveAnimationControl + ; -#pragma link C++ class CbmTsDisTracks + ; +#pragma link C++ class CbmTsDisTofTracklets + ; #pragma link C++ class CbmRecoTracks; #pragma link C++ class CbmPointSetArray; #pragma link C++ class CbmPointSetArrayDraw; diff --git a/core/eventdisplay/CbmTimesliceManager.cxx b/core/eventdisplay/CbmTimesliceManager.cxx index cef6e1aa8674c458afa8d678ce652ff6228bdacb..a2b4f8e2d7a8bacea225ac1195287831168498c3 100644 --- a/core/eventdisplay/CbmTimesliceManager.cxx +++ b/core/eventdisplay/CbmTimesliceManager.cxx @@ -1,18 +1,17 @@ /* Copyright (C) 2023 Facility for Antiproton and Ion Research in Europe, Darmstadt SPDX-License-Identifier: GPL-3.0-only - Authors: Pierre-Alain Loizeau[committer] */ + Authors: Pierre-Alain Loizeau[committer], Norbert Herrmann */ #include "CbmTimesliceManager.h" #include "CbmEvent.h" // For CbmEvent #include "CbmTimeslicePixelHitSetDraw.h" // For CbmTimeslicePixelHitSetDraw #include "CbmTimesliceRecoTracks.h" // For CbmTimesliceRecoTracks -#include "CbmTsDisTracks.h" // for CbmTofTracklets +#include "CbmTsDisTofTracklets.h" // for CbmTofTracklets #include "CbmTsPointSetArrayDraw.h" // For CbmTsPointSetArrayDraw - -#include "FairRootManager.h" // for FairRootManager -#include "FairTask.h" // for FairTask -#include "FairXMLNode.h" // for FairXMLNode and FairXMLFile +#include "FairRootManager.h" // for FairRootManager +#include "FairTask.h" // for FairTask +#include "FairXMLNode.h" // for FairXMLNode and FairXMLFile #include <TClonesArray.h> // for TClonesArray #include <TDatabasePDG.h> // for TDatabasePDG @@ -116,8 +115,8 @@ void CbmTimesliceManager::SetDisplayMcbm(bool bLowRate, bool bMuch) CbmTimesliceRecoTracks* drawTrack = new CbmTimesliceRecoTracks(); AddTask(drawTrack); - CbmTsDisTracks* TofTracks = - new CbmTsDisTracks("TofTracks", 1, kFALSE, kTRUE); //name, verbosity, RnrChildren points, RnrChildren track + CbmTsDisTofTracklets* TofTracks = + new CbmTsDisTofTracklets("TofTracks", 1, kFALSE, kTRUE); //name, verbosity, RnrChildren points, RnrChildren track AddTask(TofTracks); CbmTsPointSetArrayDraw* drawTofUHit = new CbmTsPointSetArrayDraw( @@ -133,8 +132,8 @@ void CbmTimesliceManager::SetDisplayTofCosmicsHd() CbmTimeslicePixelHitSetDraw* drawTofHit = new CbmTimeslicePixelHitSetDraw("TofHit", kRed, kFullSquare); AddTask(drawTofHit); - CbmTsDisTracks* TofTracks = - new CbmTsDisTracks("TofTracks", 1, kFALSE, kTRUE); //name, verbosity, RnrChildren points, RnrChildren track + CbmTsDisTofTracklets* TofTracks = + new CbmTsDisTofTracklets("TofTracks", 1, kFALSE, kTRUE); //name, verbosity, RnrChildren points, RnrChildren track AddTask(TofTracks); //CbmTsPointSetArrayDraw* drawTofUHit = new CbmTsPointSetArrayDraw("TofUHit", kBlue, kCross, 1, kTRUE); //name, colorMode, markerMode, verbosity, RnrChildren @@ -179,6 +178,19 @@ void CbmTimesliceManager::SwitchBackground(Bool_t /*light*/) gEve->GetViewers()->SwitchColorSet(); } +void CbmTimesliceManager::SwitchPdgColorTrack(Bool_t pdg_color) +{ + /// Get List of tasks from FairRunAna + TList* taskList = FairRunAna::Instance()->GetMainTask()->GetListOfTasks(); + + /// Tell the one(s) displaying reco tracks to use pdg_color or not + for (TObject* task : *taskList) { + if (nullptr != dynamic_cast<CbmTimesliceRecoTracks*>(task)) { + dynamic_cast<CbmTimesliceRecoTracks*>(task)->SwitchPdgColorTrack(pdg_color); + } + } +} + void CbmTimesliceManager::Init(Int_t visopt, Int_t vislvl, Int_t maxvisnds) { TEveManager::Create(); @@ -230,8 +242,7 @@ void CbmTimesliceManager::NextTimeslice() int NbEventsInTs = 0; while (NbEventsInTs == 0) { GotoTimeslice(GetCurrentTimeslice() + 1); - TClonesArray* pCbmEvents = dynamic_cast<TClonesArray*>(fRootManager->GetObject("CbmEvent")); - NbEventsInTs = fCbmEvents->GetEntriesFast(); + NbEventsInTs = fCbmEvents->GetEntriesFast(); } LOG(debug) << "Display TS " << GetCurrentTimeslice() << " with " << NbEventsInTs << " events"; SetTsTimeText(GetTimesliceTime()); @@ -272,9 +283,9 @@ void CbmTimesliceManager::GotoEvent(Int_t event) LOG(debug) << GetName() << ": call " << task->GetName(); //dynamic_cast<CbmTsPointSetArrayDraw*>(task)->GotoEvent(event); // FIXME: does not work yet } - else if (nullptr != dynamic_cast<CbmTsDisTracks*>(task)) { + else if (nullptr != dynamic_cast<CbmTsDisTofTracklets*>(task)) { LOG(debug) << GetName() << ": call " << task->GetName(); - dynamic_cast<CbmTsDisTracks*>(task)->GotoEvent(event); + dynamic_cast<CbmTsDisTofTracklets*>(task)->GotoEvent(event); } } } diff --git a/core/eventdisplay/CbmTimesliceManager.h b/core/eventdisplay/CbmTimesliceManager.h index 367bc02a60eef972ee2dc0c31c1216fd1ecf529a..241eded24c71012871d5f14757d55a8acb319da4 100644 --- a/core/eventdisplay/CbmTimesliceManager.h +++ b/core/eventdisplay/CbmTimesliceManager.h @@ -1,6 +1,6 @@ /* Copyright (C) 2023 Facility for Antiproton and Ion Research in Europe, Darmstadt SPDX-License-Identifier: GPL-3.0-only - Authors: Pierre-Alain Loizeau[committer] */ + Authors: Pierre-Alain Loizeau[committer], Norbert Herrmann */ #ifndef CbmTimesliceManager_H #define CbmTimesliceManager_H @@ -78,6 +78,12 @@ public: **/ virtual void SwitchBackground(Bool_t /*light*/); + /** + ** switch track color: to be called by GUI element + ** @param PDG color if true, red if false (see TimesliceRecoTracks) + **/ + void SwitchPdgColorTrack(Bool_t pdg_color); + virtual void Init(Int_t visopt = 1, Int_t vislvl = 3, Int_t maxvisnds = 10000); void AddTask(FairTask* t) { fRunAna->AddTask(t); } diff --git a/core/eventdisplay/CbmTimesliceManagerEditor.cxx b/core/eventdisplay/CbmTimesliceManagerEditor.cxx index 95d9aed56c4c8795cd81195bf0b04d76aea8b816..3305b44e8244701b39c1a1fb4545437072f73b2c 100644 --- a/core/eventdisplay/CbmTimesliceManagerEditor.cxx +++ b/core/eventdisplay/CbmTimesliceManagerEditor.cxx @@ -62,6 +62,12 @@ void CbmTimesliceManagerEditor::SwitchBackground(Bool_t light_background) fManager->SwitchBackground(light_background); } +void CbmTimesliceManagerEditor::SwitchPdgColorTrack(Bool_t pdg_color) +{ + // Forward to manager class which forwards to track display class + fManager->SwitchPdgColorTrack(pdg_color); +} + void CbmTimesliceManagerEditor::Init() { FairRootManager* rootManager = FairRootManager::Instance(); @@ -183,6 +189,10 @@ void CbmTimesliceManagerEditor::Init() scene_conf->AddFrame(backgroundButton, new TGLayoutHints(kLHintsRight | kLHintsExpandX, 5, 5, 1, 1)); backgroundButton->Connect("Toggled(Bool_t)", this->ClassName(), this, "SwitchBackground(Bool_t)"); + TGCheckButton* pdgColorTrackButton = new TGCheckButton(scene_conf, "Track w/ PDG color"); + scene_conf->AddFrame(pdgColorTrackButton, new TGLayoutHints(kLHintsRight | kLHintsExpandX, 5, 5, 1, 1)); + pdgColorTrackButton->Connect("Toggled(Bool_t)", this->ClassName(), this, "SwitchPdgColorTrack(Bool_t)"); + TGGroupFrame* frame_screenshot = new TGGroupFrame(scene_conf, "Screenshot"); frame_screenshot->SetTitlePos(TGGroupFrame::kCenter); diff --git a/core/eventdisplay/CbmTimesliceManagerEditor.h b/core/eventdisplay/CbmTimesliceManagerEditor.h index 4fc248ab432f609ab30b86c5fc55b3a158d411e4..46256281d4bcaa443448c2a6a65542e5dcd64a61 100644 --- a/core/eventdisplay/CbmTimesliceManagerEditor.h +++ b/core/eventdisplay/CbmTimesliceManagerEditor.h @@ -44,6 +44,12 @@ public: **/ void SwitchBackground(Bool_t light_background); + /** + ** switch track color: to be called by GUI element + ** @param PDG color if true, red if false (see TimesliceRecoTracks) + **/ + void SwitchPdgColorTrack(Bool_t pdg_color); + virtual void Init(); /** diff --git a/core/eventdisplay/CbmTimesliceRecoTracks.cxx b/core/eventdisplay/CbmTimesliceRecoTracks.cxx index 5dd3be018a714c741df7289fd3e43730597083a4..56f478f33e4ca9a62d816de0fc04c18d43db5aa8 100644 --- a/core/eventdisplay/CbmTimesliceRecoTracks.cxx +++ b/core/eventdisplay/CbmTimesliceRecoTracks.cxx @@ -1,6 +1,6 @@ /* Copyright (C) 2023 Facility for Antiproton and Ion Research in Europe, Darmstadt SPDX-License-Identifier: GPL-3.0-only - Authors: Pierre-Alain Loizeau[committer] */ + Authors: Pierre-Alain Loizeau[committer], Norbert Herrmann */ #include "CbmTimesliceRecoTracks.h" #include "CbmEvent.h" // For CbmEvent @@ -52,7 +52,9 @@ InitStatus CbmTimesliceRecoTracks::Init() fTofHits = dynamic_cast<TClonesArray*>(fManager->GetObject("TofHit")); fTofTracks = dynamic_cast<TClonesArray*>(fManager->GetObject("TofTrack")); - if (nullptr == fTofTracks) { LOG(warn) << "TofTracks not found"; } + if (nullptr == fTofTracks) { + LOG(warn) << "TofTracks not found"; + } if (nullptr == fCbmEvents) { LOG(fatal) << "CbmTimesliceRecoTracks::Init() => CbmEvents branch not found! Task will be deactivated"; @@ -187,16 +189,25 @@ void CbmTimesliceRecoTracks::GotoEvent(uint32_t uEventIdx) */ CbmStsTrack* stsTrack = nullptr; - if (stsId > -1) { stsTrack = dynamic_cast<CbmStsTrack*>(fStsTracks->At(stsId)); } + if (stsId > -1) { + stsTrack = dynamic_cast<CbmStsTrack*>(fStsTracks->At(stsId)); + } Int_t n = 0; Int_t pdg = 0; - if (nullptr != stsTrack) { pdg = stsTrack->GetPidHypo(); } + if (nullptr != stsTrack) { + pdg = stsTrack->GetPidHypo(); + } TParticle P; P.SetPdgCode(pdg); fTrList = GetTrGroup(&P); TEveTrack* eveTrack = new TEveTrack(&P, pdg, fTrPr); - eveTrack->SetLineColor(kRed); //fEventManager->Color(pdg)); + if (fbPdgColorTrack && 0 != pdg) { // + fEventManager->Color(pdg); + } + else { + eveTrack->SetLineColor(kRed); + } if (nullptr != stsTrack) { LOG(debug3) << "HandleStsTrack " << stsId; HandleStsTrack(eveTrack, n, stsTrack); @@ -219,7 +230,9 @@ void CbmTimesliceRecoTracks::GotoEvent(uint32_t uEventIdx) LOG(debug3) << "HandleTrdTrack " << trdId; if (-1 < trdId) { - if (nullptr == fTrdTracks) { LOG(error) << GetName() << ": No TrdTrack array, return"; } + if (nullptr == fTrdTracks) { + LOG(error) << GetName() << ": No TrdTrack array, return"; + } else { const CbmTrack* recoTrack = dynamic_cast<const CbmTrack*>(fTrdTracks->At(trdId)); LOG(debug3) << "HandleTrdTrack " << trdId << ", " << recoTrack; @@ -228,7 +241,9 @@ void CbmTimesliceRecoTracks::GotoEvent(uint32_t uEventIdx) } if (-1 < tofId) { - if (nullptr == fTofTracks) { LOG(error) << GetName() << ": No TofTrack array, return"; } + if (nullptr == fTofTracks) { + LOG(error) << GetName() << ": No TofTrack array, return"; + } else { const CbmTrack* recoTrack = dynamic_cast<const CbmTrack*>(fTofTracks->At(tofId)); LOG(debug3) << "HandleTofTrack " << tofId << ", " << recoTrack; diff --git a/core/eventdisplay/CbmTimesliceRecoTracks.h b/core/eventdisplay/CbmTimesliceRecoTracks.h index 9231f35ca0fc810fc638f45c18ef2de86d0f8566..d587c20f210ef3a7dd09b5192de6f077b2f74822 100644 --- a/core/eventdisplay/CbmTimesliceRecoTracks.h +++ b/core/eventdisplay/CbmTimesliceRecoTracks.h @@ -1,6 +1,6 @@ /* Copyright (C) 2023 Facility for Antiproton and Ion Research in Europe, Darmstadt SPDX-License-Identifier: GPL-3.0-only - Authors: Pierre-Alain Loizeau[committer] */ + Authors: Pierre-Alain Loizeau[committer], Norbert Herrmann */ #ifndef CbmTimesliceRecoTracks_H @@ -53,6 +53,12 @@ public: /** Set verbosity level. For this task and all of the subtasks. **/ void SetVerbose(Int_t iVerbose) { fVerbose = iVerbose; } + /** + ** switch track color: to be called by GUI element + ** @param PDG color if true, red if false (see TimesliceRecoTracks) + **/ + void SwitchPdgColorTrack(bool pdg_color) { fbPdgColorTrack = pdg_color; } + virtual InitStatus Init(); virtual void Exec(Option_t* option); virtual void SetParContainers() { ; } @@ -88,8 +94,9 @@ protected: TObjArray* fEveTrList = new TObjArray(16); //! uint32_t fEventIdx = 0; //! TEveTrackList* fTrList = nullptr; //! + bool fbPdgColorTrack = false; //! -private: + private: ClassDef(CbmTimesliceRecoTracks, 1); }; diff --git a/core/eventdisplay/CbmTsDisTracks.cxx b/core/eventdisplay/CbmTsDisTofTracklets.cxx similarity index 81% rename from core/eventdisplay/CbmTsDisTracks.cxx rename to core/eventdisplay/CbmTsDisTofTracklets.cxx index 37c2a754f020898a696e440d4d2cb04e7e5d9cf4..d7136744776398a19f554b5d8a4cacecf72e3db0 100644 --- a/core/eventdisplay/CbmTsDisTracks.cxx +++ b/core/eventdisplay/CbmTsDisTofTracklets.cxx @@ -1,15 +1,11 @@ -/* Copyright (C) 2007-2021 PI-UHd, GSI +/* Copyright (C) 2023 PI-UHd, Heidelberg SPDX-License-Identifier: GPL-3.0-only - Authors: Mohammad Al-Turany, Norbert Herrmann [committer], Florian Uhlig */ + Authors: Norbert Herrmann [committer], Pierre-Alain Loizeau */ -#// ------------------------------------------------------------------------- -// ----- following FairMCTracks source file ----- -// ----- Created 10/12/07 by M. Al-Turany ----- -// ------------------------------------------------------------------------- #define TOFDisplay 1 // =1 means active, other: without Label and not relying on TEvePointSet #define TOFTtErr 1 // =1 means active, other: not relying on VelocityError of CbmTofTracklet -#include "CbmTsDisTracks.h" +#include "CbmTsDisTofTracklets.h" #include "CbmEvent.h" // For CbmEvent #include "CbmTimesliceManager.h" // for CbmTimesliceManager @@ -40,30 +36,16 @@ #include <string.h> // for strcmp -ClassImp(CbmTsDisTracks); -CbmTsDisTracks* CbmTsDisTracks::fInstance = 0; +ClassImp(CbmTsDisTofTracklets); +CbmTsDisTofTracklets* CbmTsDisTofTracklets::fInstance = nullptr; //static TGLAnnotation* anne; static TGLAnnotation* annt; -static CbmTimesliceManager* fTsManager = NULL; -static FairEventManager* fEventManager = NULL; +static CbmTimesliceManager* fTsManager = nullptr; +static FairEventManager* fEventManager = nullptr; // ----- Default constructor ------------------------------------------- -CbmTsDisTracks::CbmTsDisTracks() - : FairTask("CbmTsDisTracks", 0) - , fTrackList(nullptr) - , fTrPr(nullptr) - , fTimesliceManager(nullptr) - , fEveTrList(nullptr) - , fEvent("") - , fTrList(nullptr) - , fEvePSList(nullptr) - , fPSList(nullptr) - , fRenderP(kFALSE) - , fRenderT(kTRUE) - , MinEnergyLimit(-1.) - , MaxEnergyLimit(-1.) - , PEnergy(-1.) +CbmTsDisTofTracklets::CbmTsDisTofTracklets() : FairTask("CbmTsDisTofTracklets", 0) { if (!fInstance) fInstance = this; } @@ -71,41 +53,32 @@ CbmTsDisTracks::CbmTsDisTracks() // ----- Standard constructor ------------------------------------------ -CbmTsDisTracks::CbmTsDisTracks(const char* name, Int_t iVerbose, Bool_t renderP, Bool_t renderT) +CbmTsDisTofTracklets::CbmTsDisTofTracklets(const char* name, Int_t iVerbose, Bool_t renderP, Bool_t renderT) : FairTask(name, iVerbose) - , fTrackList(nullptr) - , fTrPr(nullptr) - , fTimesliceManager(nullptr) , fEveTrList(new TObjArray(16)) - , fEvent("") - , fTrList(nullptr) , fEvePSList(new TObjArray(8)) - , fPSList(nullptr) , fRenderP(renderP) , fRenderT(renderT) - , MinEnergyLimit(-1.) - , MaxEnergyLimit(-1.) - , PEnergy(-1.) { if (!fInstance) fInstance = this; } // ------------------------------------------------------------------------- -InitStatus CbmTsDisTracks::Init() +InitStatus CbmTsDisTofTracklets::Init() { - LOG(info) << "CbmTsDisTracks::Init()"; + LOG(info) << "CbmTsDisTofTracklets::Init()"; FairRootManager* fManager = FairRootManager::Instance(); fCbmEvents = dynamic_cast<TClonesArray*>(fManager->GetObject("CbmEvent")); fTrackList = dynamic_cast<TClonesArray*>(fManager->GetObject("TofTracklets")); if (fTrackList == 0) { - LOG(warn) << "CbmTsDisTracks::Init() branch " << GetName() << " Not found! Task will be deactivated "; + LOG(warn) << "CbmTsDisTofTracklets::Init() branch " << GetName() << " Not found! Task will be deactivated "; SetActive(kFALSE); } - LOG(debug1) << "CbmTsDisTracks::Init() get track list" << fTrackList; + LOG(debug1) << "CbmTsDisTofTracklets::Init() get track list" << fTrackList; /* - LOG(debug1) << "CbmTsDisTracks::Init() create propagator"; + LOG(debug1) << "CbmTsDisTofTracklets::Init() create propagator"; fEventManager = FairEventManager::Instance(); fEventManager = CbmTimesliceManager::Instance(); - LOG(debug1) << "CbmTsDisTracks::Init() get instance of FairEventManager "; + LOG(debug1) << "CbmTsDisTofTracklets::Init() get instance of FairEventManager "; fEvent = "Current Event"; MinEnergyLimit = fEventManager->GetEvtMinEnergy(); MaxEnergyLimit = fEventManager->GetEvtMaxEnergy(); @@ -114,25 +87,29 @@ InitStatus CbmTsDisTracks::Init() fTsManager = CbmTimesliceManager::Instance(); fEventManager = FairEventManager::Instance(); - if (NULL == fEventManager) { LOG(warn) << GetName() << ": no FairEventManager found, use TsManager "; } + if (nullptr == fEventManager) { + LOG(warn) << GetName() << ": no FairEventManager found, use TsManager "; + } else - LOG(info) << "CbmTsDisTracks::Init() got instance of FairEventManager "; + LOG(info) << "CbmTsDisTofTracklets::Init() got instance of FairEventManager "; - if (IsActive()) { return kSUCCESS; } + if (IsActive()) { + return kSUCCESS; + } else { return kERROR; } } // ------------------------------------------------------------------------- -void CbmTsDisTracks::Exec(Option_t* option) +void CbmTsDisTofTracklets::Exec(Option_t* option) { - LOG(debug2) << " CbmTsDisTracks::Exec starting with verbosity " << fVerbose << " and option " << option; + LOG(debug2) << " CbmTsDisTofTracklets::Exec starting with verbosity " << fVerbose << " and option " << option; if (0 < fCbmEvents->GetEntriesFast()) { /// When loading a new TS, load the first event if possible GotoEvent(0); } } -void CbmTsDisTracks::GotoEvent(uint32_t uEventIdx) +void CbmTsDisTofTracklets::GotoEvent(uint32_t uEventIdx) { if (IsActive()) { @@ -160,7 +137,7 @@ void CbmTsDisTracks::GotoEvent(uint32_t uEventIdx) tr = dynamic_cast<CbmTofTracklet*>(fTrackList->At(trkId)); int i = iTrk; // for (Int_t i = 0; i < fTrackList->GetEntriesFast(); i++) { - // LOG(debug4) << "CbmTsDisTracks::Exec " << i; + // LOG(debug4) << "CbmTsDisTofTracklets::Exec " << i; // tr = (CbmTofTracklet*) fTrackList->At(i); if (nullptr == tr) continue; Int_t Np = tr->GetNofHits(); @@ -226,7 +203,8 @@ void CbmTsDisTracks::GotoEvent(uint32_t uEventIdx) TEvePointSetArray* psa = new TEvePointSetArray(Form("TEveTrack Points %d", i), ""); psa->SetMarkerColor(iCol); psa->SetMarkerSize(1.6); - if (iOpt == 0) psa->SetMarkerStyle(4); + if (iOpt == 0) + psa->SetMarkerStyle(4); else psa->SetMarkerStyle(5); psa->InitBins("Hits", Np, 0.5, Np + 0.5); @@ -254,7 +232,7 @@ void CbmTsDisTracks::GotoEvent(uint32_t uEventIdx) } track->SetPoint(n + 1, point[0], point[1], point[2]); /* - LOG(info) << Form(" CbmTsDisTracks::SetPoint Opt %d, n %d, %6.2f, %6.2f, %6.2f, %6.2f ", iOpt, n, point[0], point[1], + LOG(info) << Form(" CbmTsDisTofTracklets::SetPoint Opt %d, n %d, %6.2f, %6.2f, %6.2f, %6.2f ", iOpt, n, point[0], point[1], point[2], point[3]); */ TEveVector pos = TEveVector(point[0], point[1], point[2]); @@ -283,7 +261,9 @@ void CbmTsDisTracks::GotoEvent(uint32_t uEventIdx) LOG(debug4) << "Path marker added " << path; } #if TOFDisplay == 1 - if (iOpt >= 0) { fPSList->AddElement(psa); } + if (iOpt >= 0) { + fPSList->AddElement(psa); + } #endif track->SortPathMarksByTime(); fTrList->AddElement(track); @@ -297,7 +277,8 @@ void CbmTsDisTracks::GotoEvent(uint32_t uEventIdx) //fEventManager->SetEvtMaxEnergy(MaxEnergyLimit); //fEventManager->SetEvtMinEnergy(MinEnergyLimit); TString cEventInfo; - if (NULL == fTsManager) cEventInfo = Form("ev# %d ", fEventManager->GetCurrentEvent()); + if (nullptr == fTsManager) + cEventInfo = Form("ev# %d ", fEventManager->GetCurrentEvent()); else cEventInfo = Form("ev# %d ", fTsManager->GetCurrentEvent()); @@ -307,11 +288,12 @@ void CbmTsDisTracks::GotoEvent(uint32_t uEventIdx) TGLViewer* v = gEve->GetDefaultGLViewer(); /* - if (NULL != anne) anne->SetText(cEventInfo); + if (nullptr != anne) anne->SetText(cEventInfo); else anne = new TGLAnnotation(v, cEventInfo, 0.01, 0.95); */ - if (NULL != annt) annt->SetText(cTrackInfo); + if (nullptr != annt) + annt->SetText(cTrackInfo); else annt = new TGLAnnotation(v, cTrackInfo, 0.01, 0.78); //anne->SetTextSize(0.03); // % of window diagonal @@ -325,14 +307,14 @@ void CbmTsDisTracks::GotoEvent(uint32_t uEventIdx) } } // ----- Destructor ---------------------------------------------------- -CbmTsDisTracks::~CbmTsDisTracks() {} +CbmTsDisTofTracklets::~CbmTsDisTofTracklets() {} // ------------------------------------------------------------------------- -void CbmTsDisTracks::SetParContainers() {} +void CbmTsDisTofTracklets::SetParContainers() {} // ------------------------------------------------------------------------- -void CbmTsDisTracks::Finish() {} +void CbmTsDisTofTracklets::Finish() {} // ------------------------------------------------------------------------- -void CbmTsDisTracks::Reset() +void CbmTsDisTofTracklets::Reset() { for (Int_t i = 0; i < fEveTrList->GetEntriesFast(); i++) { TEveTrackList* ele = (TEveTrackList*) fEveTrList->At(i); @@ -355,7 +337,7 @@ void CbmTsDisTracks::Reset() } Char_t* gs; -TEveTrackList* CbmTsDisTracks::GetTrGroup(Int_t ihmul, Int_t iOpt) +TEveTrackList* CbmTsDisTofTracklets::GetTrGroup(Int_t ihmul, Int_t iOpt) { switch (iOpt) { case 0: gs = Form("Trkl_hmul%d", ihmul); break; @@ -404,9 +386,10 @@ TEveTrackList* CbmTsDisTracks::GetTrGroup(Int_t ihmul, Int_t iOpt) return fTrList; } #if TOFDisplay == 1 -TEveElementList* CbmTsDisTracks::GetPSGroup(Int_t ihmul, Int_t iOpt) +TEveElementList* CbmTsDisTofTracklets::GetPSGroup(Int_t ihmul, Int_t iOpt) { - if (iOpt == 0) gs = Form("PTrkl_hmul%d", ihmul); + if (iOpt == 0) + gs = Form("PTrkl_hmul%d", ihmul); else gs = Form("FTrkl_hmul%d", ihmul); fPSList = 0; @@ -431,4 +414,4 @@ TEveElementList* CbmTsDisTracks::GetPSGroup(Int_t ihmul, Int_t iOpt) } #endif -ClassImp(CbmTsDisTracks) +ClassImp(CbmTsDisTofTracklets) diff --git a/core/eventdisplay/CbmTsDisTracks.h b/core/eventdisplay/CbmTsDisTofTracklets.h similarity index 57% rename from core/eventdisplay/CbmTsDisTracks.h rename to core/eventdisplay/CbmTsDisTofTracklets.h index ac1f6f74d97df87aeea077c209416637e0302c47..6cf9c0e153e87266b0da2d5dbb72f3cb6a409633 100644 --- a/core/eventdisplay/CbmTsDisTracks.h +++ b/core/eventdisplay/CbmTsDisTofTracklets.h @@ -1,19 +1,15 @@ -/* Copyright (C) 2015-2020 PI-UHd, GSI +/* Copyright (C) 2023 PI-UHd, Heidelberg SPDX-License-Identifier: GPL-3.0-only - Authors: Mohammad Al-Turany, Norbert Herrmann [committer], Florian Uhlig */ + Authors: Norbert Herrmann [committer], Pierre-Alain Loizeau */ -// ------------------------------------------------------------------------- -// ----- FairMCTracks header file ----- -// ----- Created 10/12/07 by M. Al-Turany ----- -// ------------------------------------------------------------------------- - - -/** from FairMCTracks - * @author M. Al-Turany - * @since 10.12.07 - * MVD event display object +/** CbmTsDisTofTracklets + * @author N. Herrmann + * @since 05.11.23 + * Task to display TOF Tracklets + * Timeslice compatible version of CbmEvDisTracks ** **/ + #define TOFDisplay 1 // =1 means active, other: without Label and not relying on TEvePointSet #ifndef CBMTSDISTRACKS_H @@ -33,23 +29,23 @@ class TEveElementList; class TEveTrackList; class TObjArray; -class CbmTsDisTracks : public FairTask { +class CbmTsDisTofTracklets : public FairTask { -public: + public: /** Default constructor **/ - CbmTsDisTracks(); + CbmTsDisTofTracklets(); /** Standard constructor *@param name Name of task *@param iVerbose Verbosity level **/ - CbmTsDisTracks(const char* name, Int_t iVerbose = 1, Bool_t renderP = kFALSE, Bool_t renderT = kTRUE); + CbmTsDisTofTracklets(const char* name, Int_t iVerbose = 1, Bool_t renderP = kFALSE, Bool_t renderT = kTRUE); /** Destructor **/ - virtual ~CbmTsDisTracks(); + virtual ~CbmTsDisTofTracklets(); - inline static CbmTsDisTracks* Instance() { return fInstance; } + inline static CbmTsDisTofTracklets* Instance() { return fInstance; } /** Set verbosity level. For this task and all of the subtasks. **/ void SetVerbose(Int_t iVerbose) { fVerbose = iVerbose; } @@ -69,31 +65,31 @@ public: TEveElementList* GetPSGroup(Int_t ihuml, Int_t iOpt); #endif -protected: + protected: TClonesArray* fCbmEvents = nullptr; //! TClonesArray* fTrackList = nullptr; //! TEveTrackPropagator* fTrPr = nullptr; //! CbmTimesliceManager* fTimesliceManager = nullptr; //! TObjArray* fEveTrList = nullptr; //! - TString fEvent; //! - TEveTrackList* fTrList = nullptr; //! - TObjArray* fEvePSList = nullptr; //! - TEveElementList* fPSList = nullptr; //! + TString fEvent = ""; //! + TEveTrackList* fTrList = nullptr; //! + TObjArray* fEvePSList = nullptr; //! + TEveElementList* fPSList = nullptr; //! //TEveElementList *fTrackCont; - Bool_t fRenderP; - Bool_t fRenderT; - Double_t MinEnergyLimit; - Double_t MaxEnergyLimit; - Double_t PEnergy; - uint32_t fEventIdx = 0; //! + Bool_t fRenderP = kFALSE; + Bool_t fRenderT = kFALSE; + Double_t MinEnergyLimit = -1.; + Double_t MaxEnergyLimit = -1.; + Double_t PEnergy = -1.; + uint32_t fEventIdx = 0; -private: - static CbmTsDisTracks* fInstance; - CbmTsDisTracks(const CbmTsDisTracks&); - CbmTsDisTracks& operator=(const CbmTsDisTracks&); + private: + static CbmTsDisTofTracklets* fInstance; + CbmTsDisTofTracklets(const CbmTsDisTofTracklets&); + CbmTsDisTofTracklets& operator=(const CbmTsDisTofTracklets&); - ClassDef(CbmTsDisTracks, 1); + ClassDef(CbmTsDisTofTracklets, 1); }; diff --git a/core/eventdisplay/CbmTsPointSetArrayDraw.cxx b/core/eventdisplay/CbmTsPointSetArrayDraw.cxx index 0040c34838adce53d5196e985d7a641a7c63650a..6eb88be814d185143a0c9dcf979003b3f8837238 100644 --- a/core/eventdisplay/CbmTsPointSetArrayDraw.cxx +++ b/core/eventdisplay/CbmTsPointSetArrayDraw.cxx @@ -1,6 +1,6 @@ -/* Copyright (C) 2019-2020 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt +/* Copyright (C) 2023 PI-UHd, Heidelberg SPDX-License-Identifier: GPL-3.0-only - Authors: J. Brandt, Florian Uhlig [committer] */ + Authors: Norbert Herrmann [committer], Pierre-Alain Loizeau */ // ------------------------------------------------------------------------- // ----- CbmTsPointSetArrayDraw source file ----- @@ -28,53 +28,27 @@ #include <iomanip> // for operator<<, setprecision -// ----- Default constructor ------------------------------------------- -CbmTsPointSetArrayDraw::CbmTsPointSetArrayDraw() - : FairTask("CbmTsPointSetArrayDraw", 0) - , fVerbose(0) - , fPointList(nullptr) - , fTsManager(nullptr) - , fl(nullptr) - , fColor(0) - , fStyle(0) - , fTimeOffset(0) - , fTimeMax(0) - , fColorMode(1) - , fMarkerMode(1) - , fRender(kTRUE) -{ -} -// ------------------------------------------------------------------------- - - // ----- Standard constructor ------------------------------------------ CbmTsPointSetArrayDraw::CbmTsPointSetArrayDraw(const char* name, Int_t colorMode, Int_t markerMode, Int_t iVerbose, Bool_t render) : FairTask(name, iVerbose) , fVerbose(iVerbose) - , fPointList(nullptr) - , fTsManager(nullptr) - , fl(nullptr) - , fColor(kRed) - , fStyle(4) - , fTimeOffset(0) - , fTimeMax(0) , fColorMode(colorMode) , fMarkerMode(markerMode) , fRender(render) { } -static TString cTofHit = "TofUHit"; // ------------------------------------------------------------------------- InitStatus CbmTsPointSetArrayDraw::Init() { - LOG(debug) << "CbmTsPointSetArrayDraw::Init() for " << cTofHit; + LOG(debug) << "CbmTsPointSetArrayDraw::Init() for " << fTofHitArrayName; FairRootManager* fManager = FairRootManager::Instance(); fCbmEvents = dynamic_cast<TClonesArray*>(fManager->GetObject("CbmEvent")); - fTsPointList = static_cast<TClonesArray*>(fManager->GetObject(cTofHit.Data())); - if (fTsPointList == NULL) { - LOG(warn) << "CbmTsPointSetArrayDraw::Init() branch " << cTofHit.Data() << " not found! Task will be deactivated "; + fTsPointList = static_cast<TClonesArray*>(fManager->GetObject(fTofHitArrayName.Data())); + if (fTsPointList == nullptr) { + LOG(warn) << "CbmTsPointSetArrayDraw::Init() branch " << fTofHitArrayName + << " not found! Task will be deactivated "; SetActive(kFALSE); } //LOG(info) << "CbmTsPointSetArrayDraw::Init() get track list" << fTsPointList->GetName(); @@ -103,14 +77,14 @@ void CbmTsPointSetArrayDraw::GotoEvent(uint32_t uEventIdx) } CbmEvent* event = dynamic_cast<CbmEvent*>(fCbmEvents->At(uEventIdx)); - if (NULL == fTsPointList) { - fTsPointList = static_cast<TClonesArray*>(FairRootManager::Instance()->GetObject(cTofHit.Data())); - if (NULL == fTsPointList) { - LOG(warn) << " No " << cTofHit.Data(); + if (nullptr == fTsPointList) { + fTsPointList = static_cast<TClonesArray*>(FairRootManager::Instance()->GetObject(fTofHitArrayName.Data())); + if (nullptr == fTsPointList) { + LOG(warn) << " No " << fTofHitArrayName; return; } } - if (NULL != fPointList) fPointList->Clear(); + if (nullptr != fPointList) fPointList->Clear(); int nofPoints = fTsPointList->GetEntriesFast(); int nPoints = 0; LOG(debug3) << " Fill TofUhit from " << nofPoints << " hits in Ts."; @@ -118,14 +92,14 @@ void CbmTsPointSetArrayDraw::GotoEvent(uint32_t uEventIdx) Int_t iPId = event->GetIndex(ECbmDataType::kTofUHit, iP); // make this generic!! CbmTofHit* tHit = dynamic_cast<CbmTofHit*>(fTsPointList->At(iPId)); LOG(debug3) << "Add Hit " << iP << ", " << iPId << ", " << tHit << " at " << nPoints; - if (NULL != tHit && iPId > -1) new ((*fPointList)[nPoints++]) CbmTofHit(*tHit); + if (nullptr != tHit && iPId > -1) new ((*fPointList)[nPoints++]) CbmTofHit(*tHit); } nPoints = fPointList->GetEntriesFast(); //Reset(); // initialize CbmPointSetArray to display set of hits - CbmPointSetArray* l = new CbmPointSetArray("TofUHit", ""); + CbmPointSetArray* l = new CbmPointSetArray(fTofHitArrayName, ""); l->SetColorMode(fColorMode); l->SetMarkerMode(fMarkerMode); l->SetSourceCS(TEvePointSelectorConsumer::kTVT_XYZ); @@ -215,7 +189,9 @@ void CbmTsPointSetArrayDraw::DetermineTimeOffset() for (Int_t i = 0; i < nPoints; i++) { //loop over all hits in event hit = static_cast<CbmPixelHit*>(fPointList->At(i)); currtime = hit->GetTime(); - if (currtime < fTimeOffset) { fTimeOffset = currtime; } + if (currtime < fTimeOffset) { + fTimeOffset = currtime; + } else if (currtime > fTimeMax) { fTimeMax = currtime; } diff --git a/core/eventdisplay/CbmTsPointSetArrayDraw.h b/core/eventdisplay/CbmTsPointSetArrayDraw.h index 7421e730e34e03dcd9f92c68ec88457f37ebacf1..4f290a3be73b2154f440535ba890651b281b3146 100644 --- a/core/eventdisplay/CbmTsPointSetArrayDraw.h +++ b/core/eventdisplay/CbmTsPointSetArrayDraw.h @@ -1,18 +1,12 @@ -/* Copyright (C) 2019-2020 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt +/* Copyright (C) 2023 PI-UHd, Heidelberg SPDX-License-Identifier: GPL-3.0-only - Authors: J. Brandt, Florian Uhlig [committer] */ + Authors: Norbert Herrmann [committer], Pierre-Alain Loizeau */ -// ------------------------------------------------------------------------- -// ----- CbmPointSetArrayDraw header file ----- -// ----- Created 18/06/22 by J. Brandt ----- -// ----- Following class FairPointSetDraw ----- -// ------------------------------------------------------------------------- - - -/** CbmPointSetArrayDraw - * @author J. Brandt - * @since 22.06.18 - * Task to display pointsets in array +/** CbmTsPointSetArrayDraw + * @author N. Herrmann + * @since 05.11.23 + * Task to display unused TOF hits (pointsets in array) + * Timeslice compatible version of CbmPointSetArrayDraw ** **/ @@ -32,10 +26,9 @@ class TVector3; class CbmTsPointSetArrayDraw : public FairTask { -public: + public: /** Default constructor **/ - CbmTsPointSetArrayDraw(); - + CbmTsPointSetArrayDraw() : FairTask("CbmTsPointSetArrayDraw", 0) {} /** Standard constructor *@param name Name of task @@ -65,7 +58,7 @@ public: void Reset(); void GotoEvent(uint32_t uEventIdx); -protected: + protected: TVector3 GetVector(TObject* obj); //Get 3D Vector of Hit Double_t GetTime(TObject* obj); //Get Time of Hit Int_t GetClusterSize(TObject* obj); //Get ClusterSize of TofHit @@ -80,22 +73,23 @@ protected: /** Action after each event **/ virtual void Finish(); - Int_t fVerbose; //Verbosity level - TClonesArray* fCbmEvents = nullptr; //! - TClonesArray* fTsPointList; //Array containing list of hits - TClonesArray* fPointList; //Array containing list of hits - CbmTimesliceManager* fTsManager; //Pointer to Event Manager - CbmPointSetArray* - fl; //Pointer to CbmPointSetArray -> Cbm class for displaying array of Hit-sets -> TEvePointSetArray - Color_t fColor; //Color of Hit-Markers - Style_t fStyle; //Style of Hit-Markers - Double_t fTimeOffset; //Time Offset on Hits to scale first hit to 0 - Double_t fTimeMax; //Max Time of Hits in TofHit - Int_t fColorMode; //Int determining how points get color-coded - Int_t fMarkerMode; //Int determining how marker-size of points gets coded - Bool_t fRender; //Boolean whether points shown on default - -private: + Int_t fVerbose = 0; // Verbosity level + TClonesArray* fCbmEvents = nullptr; //! + TString fTofHitArrayName = "TofUHit"; + TClonesArray* fTsPointList = nullptr; // Array containing list of hits + TClonesArray* fPointList = nullptr; // Array containing list of hits + CbmTimesliceManager* fTsManager = nullptr; // Pointer to Event Manager + CbmPointSetArray* fl = nullptr; // Pointer to CbmPointSetArray + // -> Cbm class for displaying array of Hit-sets -> TEvePointSetArray + Color_t fColor = kRed; // Color of Hit-Markers + Style_t fStyle = 4; // Style of Hit-Markers + Double_t fTimeOffset = 0; // Time Offset on Hits to scale first hit to 0 + Double_t fTimeMax = 0; // Max Time of Hits in TofHit + Int_t fColorMode = 1; // Int determining how points get color-coded + Int_t fMarkerMode = 1; // Int determining how marker-size of points gets coded + Bool_t fRender = kTRUE; // Boolean whether points shown on default + + private: CbmTsPointSetArrayDraw(const CbmTsPointSetArrayDraw&); CbmTsPointSetArrayDraw& operator=(const CbmTsPointSetArrayDraw&);