Select Git revision
CbmTrdTrackingInterface.cxx
CbmTrdTrackingInterface.cxx 6.71 KiB
/* Copyright (C) 2022-2024 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
SPDX-License-Identifier: GPL-3.0-only
Authors: Sergey Gorbunov, Sergei Zharko [committer] */
/***************************************************************************************************
* @file CbmTrdTrackingInterface.cxx
* @brief Input data and parameters interface from TRD subsystem used in L1 tracker (definition)
* @since 31.05.2022
* @author S.Zharko <s.zharko@gsi.de>
***************************************************************************************************/
#include "CbmTrdTrackingInterface.h"
#include "CbmTrdHit.h"
#include "FairDetector.h"
#include "FairRunAna.h"
#include "TGeoManager.h"
#include "TString.h"
#include <Logger.h>
#include <regex>
ClassImp(CbmTrdTrackingInterface)
// ---------------------------------------------------------------------------------------------------------------------
//
CbmTrdTrackingInterface::CbmTrdTrackingInterface()
: FairTask("CbmTrdTrackingInterface")
{
if (!fpInstance) { fpInstance = this; }
}
// ---------------------------------------------------------------------------------------------------------------------
//
CbmTrdTrackingInterface::~CbmTrdTrackingInterface()
{
if (fpInstance == this) { fpInstance = nullptr; }
}
// ---------------------------------------------------------------------------------------------------------------------
//
std::tuple<double, double> CbmTrdTrackingInterface::GetStereoAnglesSensor(int address) const
{
const CbmTrdParModDigi* par = dynamic_cast<const CbmTrdParModDigi*>(fTrdDigiPar->GetModulePar(address));
if (!par) {
LOG(fatal) << "CbmTrdTrackingInterface::Init: error accessing the TRD module for address " << address
<< " (failed dynamic cast to CbmTrdParModDigi)";
}
if ((par->GetOrientation() == 1) || (par->GetOrientation() == 3)) {
// swap X & Y for orientations 1 or 3
return std::tuple(TMath::Pi() / 2., 0.);
}
return std::tuple(0., TMath::Pi() / 2.);
}
// ---------------------------------------------------------------------------------------------------------------------
//
std::tuple<double, double, double> CbmTrdTrackingInterface::GetHitRanges(const CbmPixelHit& hit) const
{
const CbmTrdHit* trdHit = dynamic_cast<const CbmTrdHit*>(&hit);
if (!trdHit) { LOG(fatal) << "CbmTrdTrackingInterface::GetHitRange: input hit is not of type CbmTrdHit"; }
const CbmTrdParModDigi* par = dynamic_cast<const CbmTrdParModDigi*>(fTrdDigiPar->GetModulePar(trdHit->GetAddress()));
auto [rangeX, rangeY, rangeT] = CbmTrackingDetectorInterfaceBase::GetHitRanges(hit);
if (trdHit->GetClassType() == 1) {
// TRD 2D hit
// TODO: replace with more sophisticated values once the errors are correct
rangeX = 1.7;