Skip to content
Snippets Groups Projects
Commit d0197b5f authored by Axel Puntke's avatar Axel Puntke Committed by Florian Uhlig
Browse files

TRD Incomplete cluster recognition

parent 681bc153
No related branches found
No related tags found
1 merge request!1246TRD Incomplete cluster recognition
Pipeline #23891 passed
......@@ -440,7 +440,7 @@ void CbmTrdModuleRecR::addClusters(std::deque<std::pair<Int_t, const CbmTrdDigi*
Bool_t CbmTrdModuleRecR::MakeHits() { return kTRUE; }
//_______________________________________________________________________________
CbmTrdHit* CbmTrdModuleRecR::MakeHit(Int_t clusterId, const CbmTrdCluster* /*cluster*/,
CbmTrdHit* CbmTrdModuleRecR::MakeHit(Int_t clusterId, const CbmTrdCluster* cluster,
std::vector<const CbmTrdDigi*>* digis)
{
......@@ -541,6 +541,9 @@ CbmTrdHit* CbmTrdModuleRecR::MakeHit(Int_t clusterId, const CbmTrdCluster* /*clu
cluster_pad_dposV[1] = sqrt(fDigiPar->GetPadSizeY(1));
}
// Set charge of incomplete clusters (missing NTs) to -1 (not deleting them because they are still relevant for tracking)
if (!IsClusterComplete(cluster)) totalCharge = -1.0;
Int_t nofHits = fHits->GetEntriesFast();
// return new ((*fHits)[nofHits]) CbmTrdHit(fModAddress, global,
......@@ -579,4 +582,53 @@ Double_t CbmTrdModuleRecR::GetSpaceResolution(Double_t val)
return selval;
}
bool CbmTrdModuleRecR::IsClusterComplete(const CbmTrdCluster* cluster)
{
uint32_t colMin = fDigiPar->GetNofColumns();
uint32_t rowMin = fDigiPar->GetNofRows();
for (int i = 0; i < cluster->GetNofDigis(); ++i) {
const CbmTrdDigi* digi = CbmDigiManager::Instance()->Get<CbmTrdDigi>(cluster->GetDigi(i));
int digiCol = fDigiPar->GetPadColumn(digi->GetAddressChannel());
int digiRow = fDigiPar->GetPadRow(digi->GetAddressChannel());
if (digiCol < colMin) colMin = digiCol;
if (digiRow < rowMin) rowMin = digiRow;
}
const UShort_t nCols = cluster->GetNCols();
const UShort_t nRows = cluster->GetNRows();
CbmTrdDigi* digiMap[nRows][nCols]; //create array on stack for optimal performance
memset(digiMap, 0, sizeof(CbmTrdDigi*) * nCols * nRows); //init with nullpointers
for (int i = 0; i < cluster->GetNofDigis(); ++i) {
const CbmTrdDigi* digi = CbmDigiManager::Instance()->Get<CbmTrdDigi>(cluster->GetDigi(i));
int digiCol = fDigiPar->GetPadColumn(digi->GetAddressChannel());
int digiRow = fDigiPar->GetPadRow(digi->GetAddressChannel());
if (digiMap[digiRow - rowMin][digiCol - colMin])
return false; // To be investigated why this sometimes happens (Redmin Issue 2914)
digiMap[digiRow - rowMin][digiCol - colMin] = const_cast<CbmTrdDigi*>(digi);
}
// check if each row of the cluster starts and ends with a kNeighbor digi
for (int iRow = 0; iRow < nRows; ++iRow) {
int colStart = 0;
while (digiMap[iRow][colStart] == nullptr)
++colStart;
if (digiMap[iRow][colStart]->GetTriggerType() != static_cast<Int_t>(CbmTrdDigi::eTriggerType::kNeighbor))
return false;
int colStop = nCols - 1;
while (digiMap[iRow][colStop] == nullptr)
--colStop;
if (digiMap[iRow][colStop]->GetTriggerType() != static_cast<Int_t>(CbmTrdDigi::eTriggerType::kNeighbor))
return false;
}
return true;
}
ClassImp(CbmTrdModuleRecR)
......@@ -41,6 +41,7 @@ public:
Int_t GetOverThreshold() const { return fDigiCounter; }
Double_t GetSpaceResolution(Double_t val = 3.0);
bool IsClusterComplete(const CbmTrdCluster* cluster);
/**
* \brief Steering routine for building hits
**/
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment