Skip to content
Snippets Groups Projects
Commit 22d7b90a authored by Alexandru Bercuci's avatar Alexandru Bercuci Committed by Florian Uhlig
Browse files

modify interface.

parent 3c9137d5
No related branches found
No related tags found
1 merge request!728Add Trd2d to the data reconstruction
......@@ -20,7 +20,7 @@ using std::string;
using std::stringstream;
using std::vector;
//____________________________________________________________________
CbmTrdCluster::CbmTrdCluster() : CbmCluster(), fNCols(0), fNRows(0xff), fStartCh(0xffff), fStartTime(0xffff) {}
CbmTrdCluster::CbmTrdCluster() : CbmCluster(), fNCols(0), fNRows(0x1f), fStartCh(0xffff), fStartTime(0xffffffff) {}
//____________________________________________________________________
CbmTrdCluster::CbmTrdCluster(const CbmTrdCluster& ref)
......@@ -36,9 +36,9 @@ CbmTrdCluster::CbmTrdCluster(const CbmTrdCluster& ref)
CbmTrdCluster::CbmTrdCluster(const std::vector<int32_t>& indices, int32_t address)
: CbmCluster(indices, address)
, fNCols(0)
, fNRows(0xff)
, fNRows(0x1f)
, fStartCh(0xffff)
, fStartTime(0xffff)
, fStartTime(0xffffffff)
{
}
......@@ -46,9 +46,9 @@ CbmTrdCluster::CbmTrdCluster(const std::vector<int32_t>& indices, int32_t addres
CbmTrdCluster::CbmTrdCluster(int32_t address, int32_t idx, int32_t ch, int32_t row, int32_t time)
: CbmCluster()
, fNCols(0)
, fNRows(0xff)
, fNRows(0x1f)
, fStartCh(0xffff)
, fStartTime(0xffff)
, fStartTime(0xffffffff)
{
ReInit(address, row, time);
AddDigi(idx, ch);
......@@ -104,9 +104,9 @@ void CbmTrdCluster::Clear(Option_t*)
{
CbmCluster::ClearDigis();
fNCols = 0;
fNRows = 0xff;
fNRows = 0x1f;
fStartCh = 0xffff;
fStartTime = 0xffff;
fStartTime = 0xffffffff;
}
//____________________________________________________________________
......@@ -120,7 +120,7 @@ void CbmTrdCluster::ReInit(int32_t address, int32_t row, int32_t time)
SetNRows(row);
SetProfileStart(0);
SetProfileStop(0);
if (time >= 0xffff) LOG(warn) << GetName() << "::ReInit: buffer time truncated to 2bytes.";
if (std::abs(time) >= 0x7fffffff) LOG(warn) << GetName() << "::ReInit: buffer time truncated to 4bytes.";
fStartTime = time;
}
......@@ -137,14 +137,14 @@ int32_t CbmTrdCluster::IsChannelInRange(int32_t ch) const
}
//____________________________________________________________________
bool CbmTrdCluster::Merge(CbmTrdCluster* second)
bool CbmTrdCluster::Merge(CbmTrdCluster* second, bool typ)
{
if (GetRow() != second->GetRow()) return false;
// time difference condition
if (fNCols == 1 || second->fNCols == 1) {
if (abs(second->fStartTime - fStartTime) > 50) return false;
if (abs(int32_t(second->fStartTime - fStartTime)) > 50) return false;
}
else if (abs(second->fStartTime - fStartTime) > 20)
else if (abs(int32_t(second->fStartTime - fStartTime)) > 20)
return false;
// look before current
if (second->fStartCh + second->fNCols == fStartCh && !second->HasOpenStop() && !HasOpenStart()) {
......@@ -160,8 +160,8 @@ bool CbmTrdCluster::Merge(CbmTrdCluster* second)
if (second->HasOpenStart()) SetProfileStart();
return true;
}
// special care for FASP clusters which can be merged also on pairing neighboring
if (HasTrianglePads()) {
// special care for clusters which can be merged also on pairing neighboring on 2D read-out
if (typ) {
if ((second->fStartCh + second->fNCols - 1 == fStartCh) && second->HasOpenStop()
&& HasOpenStart()) { // need to merge digi
fStartCh = second->fStartCh;
......@@ -187,8 +187,8 @@ bool CbmTrdCluster::Merge(CbmTrdCluster* second)
return true;
}
// special care for FASP clusters which can be merged also on pairing neighboring
if (HasTrianglePads()) {
// special care for clusters which can be merged also on pairing neighboring on 2D read-out
if (typ) {
if ((fStartCh + fNCols - 1 == second->fStartCh) && HasOpenStop() && second->HasOpenStart()) { // need to merge digi
fNCols += second->fNCols - 1;
fStartTime = std::min(fStartTime, second->fStartTime);
......@@ -206,8 +206,8 @@ string CbmTrdCluster::ToString() const
{
stringstream ss;
ss << CbmCluster::ToString();
ss << "CbmTrdCluster: mod=" << GetAddress() << " t0=" << fStartTime << " R=" << (int32_t) GetRow() << " "
<< (HasTrianglePads() ? "T" : "R") << "Chs=";
ss << "CbmTrdCluster: mod=" << GetAddress() << " t0=" << fStartTime << " row=" << (int32_t) GetRow() << " "
<< (HasFaspDigis() ? "Fasp " : "Spadic ") << "Chs=";
ss << (HasOpenStart() ? "/" : "|");
for (int32_t i(0); i < fNCols; i++)
ss << fStartCh + i << " ";
......
......@@ -26,9 +26,9 @@
*/
class CbmTrdCluster : public CbmCluster {
public:
enum CbmTrdClusterDef
enum eCbmTrdClusterDef
{
kTriang = 5 ///< set type of pads on which the cluster is reconstructed
kFasp = 5 ///< set type of FEE digis contained
,
kProfileStart ///< only for triangular if no T in first col
,
......@@ -70,8 +70,8 @@ public:
uint16_t GetEndCh() const { return fStartCh + fNCols - 1; }
uint16_t GetRow() const { return GetNRows(); }
uint16_t GetStartCh() const { return fStartCh; }
uint16_t GetStartTime() const { return fStartTime; }
bool HasTrianglePads() const { return TESTBIT(fNRows, kTriang); }
uint32_t GetStartTime() const { return fStartTime; }
bool HasFaspDigis() const { return TESTBIT(fNRows, kFasp); }
bool HasOpenStart() const { return TESTBIT(fNRows, kProfileStart); }
bool HasOpenStop() const { return TESTBIT(fNRows, kProfileStop); }
......@@ -82,9 +82,10 @@ public:
int32_t IsChannelInRange(int32_t ch) const;
/** \brief Merge current cluster with info from second
* \param[in] second cluster to be added
* \param[in] typ the type of pad-plane of the source chamber; true if Trd2d
* \return success or fail
*/
bool Merge(CbmTrdCluster* second);
bool Merge(CbmTrdCluster* second, bool typ = true);
/** \brief Initialize basic parameters of the cluster
* \param[in] address global module address
* \param[in] row cluster row in the module
......@@ -98,7 +99,7 @@ public:
fNRows &= (7 << 5);
fNRows |= (nrows & 0x1f);
}
void SetTrianglePads(bool set = true) { set ? SETBIT(fNRows, kTriang) : CLRBIT(fNRows, kTriang); }
void SetFaspDigis(bool set = true) { set ? SETBIT(fNRows, kFasp) : CLRBIT(fNRows, kFasp); }
void SetProfileStart(bool set = true) { set ? SETBIT(fNRows, kProfileStart) : CLRBIT(fNRows, kProfileStart); }
void SetProfileStop(bool set = true) { set ? SETBIT(fNRows, kProfileStop) : CLRBIT(fNRows, kProfileStop); }
......@@ -106,11 +107,11 @@ public:
virtual std::string ToString() const;
protected:
uint8_t fNCols; // number of columns with charge above threshold
uint8_t fNRows; // cluster row info plus extra. Use dedicated getters for the correct value
uint8_t fNCols; //! number of columns with charge above threshold
uint8_t fNRows; //! cluster row info plus extra meta data. Use dedicated getters for the correct value
uint16_t fStartCh; //! channel address of first channel
uint16_t fStartTime; //! start time of cluster in clk units wrt buffer start
uint32_t fStartTime; //! start time of cluster in clk units wrt buffer start
ClassDef(CbmTrdCluster, 4) // cluster of digi for the TRD detector
ClassDef(CbmTrdCluster, 5) // cluster of digi for the TRD detector
};
#endif
......@@ -9,8 +9,8 @@
#include "CbmTrdCluster.h"
#include "CbmTrdDigi.h"
#include "CbmTrdGeoHandler.h"
#include "CbmTrdModuleRec2D.h"
#include "CbmTrdModuleRecR.h"
#include "CbmTrdModuleRecT.h"
#include "CbmTrdParAsic.h"
#include "CbmTrdParModDigi.h"
#include "CbmTrdParModGain.h"
......@@ -148,9 +148,11 @@ CbmTrdModuleRec* CbmTrdClusterFinder::AddModule(const CbmTrdDigi* digi)
{
Int_t address = digi->GetAddressModule();
CbmTrdModuleRec* module(NULL);
if (digi->GetType() == CbmTrdDigi::eCbmTrdAsicType::kFASP) module = fModules[address] = new CbmTrdModuleRecT(address);
if (digi->GetType() == CbmTrdDigi::eCbmTrdAsicType::kFASP)
module = fModules[address] = new CbmTrdModuleRec2D(address);
else
module = fModules[address] = new CbmTrdModuleRecR(address);
LOG(debug) << GetName() << "::AddModule : " << module->GetName();
// try to load Geometry parameters for module
const CbmTrdParModGeo* pGeo(NULL);
......@@ -349,7 +351,7 @@ Int_t CbmTrdClusterFinder::AddClusters(TClonesArray* clusters, CbmEvent* event,
for (Int_t ic(0); ic < clusters->GetEntriesFast(); ic++) {
if (!(cls = (CbmTrdCluster*) (*clusters)[ic])) continue;
if (!cls->HasTrianglePads()) { // only for rectangular clusters
if (!cls->HasFaspDigis()) { // only for rectangular/SPADIC clusters
if (!ncols) {
digiPar = (CbmTrdParModDigi*) fDigiPar->GetModulePar(cls->GetAddress());
if (!digiPar) {
......@@ -380,7 +382,7 @@ Int_t CbmTrdClusterFinder::AddClusters(TClonesArray* clusters, CbmEvent* event,
// In case we have an event branch and we did only use digis from within the event, add the cluster to the event. This allows the hit producer to identify wether or not to add the corresponding hit to the event.
if (event) event->AddData(ECbmDataType::kTrdCluster, ncl);
ncl++;
clsSave->SetTrianglePads(cls->HasTrianglePads());
clsSave->SetFaspDigis(cls->HasFaspDigis());
if (cls->GetMatch() != NULL)
delete cls; //only the matches have pointers to allocated memory, so otherwise the clear does the trick
mcl++;
......
......@@ -55,7 +55,7 @@ class TGeoPhysicalNode;
**/
class CbmTrdClusterFinder : public FairTask {
friend class CbmTrdModuleRecR;
friend class CbmTrdModuleRecT;
friend class CbmTrdModuleRec2D;
public:
enum CbmTrdRecDef
......
......@@ -20,7 +20,7 @@
** class which is in the end used to calculate the TRD hit parameters.
**/
class CbmTrdDigiRec : public CbmTrdDigi {
friend class CbmTrdModuleRecT;
friend class CbmTrdModuleRec2D;
public:
/** \brief Default constructor*/
......
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