Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 0 additions & 5 deletions Detectors/TPC/reconstruction/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@ link_directories( ${LINK_DIRECTORIES})

set(SRCS
src/AdcClockMonitor.cxx

src/BoxCluster.cxx
src/BoxClusterer.cxx
src/Cluster.cxx
src/Clusterer.cxx
Expand All @@ -16,7 +14,6 @@ set(SRCS
src/GBTFrame.cxx
src/GBTFrameContainer.cxx
src/HalfSAMPAData.cxx
src/HwCluster.cxx
src/HwClusterer.cxx
src/HwClusterFinder.cxx
src/HwFixedPoint.cxx
Expand All @@ -31,7 +28,6 @@ set(SRCS

set(HEADERS
include/${MODULE_NAME}/AdcClockMonitor.h
include/${MODULE_NAME}/BoxCluster.h
include/${MODULE_NAME}/BoxClusterer.h
include/${MODULE_NAME}/Cluster.h
include/${MODULE_NAME}/Clusterer.h
Expand All @@ -40,7 +36,6 @@ set(HEADERS
include/${MODULE_NAME}/GBTFrame.h
include/${MODULE_NAME}/GBTFrameContainer.h
include/${MODULE_NAME}/HalfSAMPAData.h
include/${MODULE_NAME}/HwCluster.h
include/${MODULE_NAME}/HwClusterer.h
include/${MODULE_NAME}/HwClusterFinder.h
include/${MODULE_NAME}/HwFixedPoint.h
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -18,54 +18,70 @@

#include "Rtypes.h"
#include "TPCReconstruction/Clusterer.h"
#include "TPCReconstruction/BoxCluster.h"
#include "TPCReconstruction/Cluster.h"
#include "TPCBase/CalDet.h"

#include "SimulationDataFormat/MCTruthContainer.h"
#include "SimulationDataFormat/MCCompLabel.h"

namespace o2{

namespace TPC {

class ClusterContainer;

class BoxClusterer : public Clusterer {
public:
BoxClusterer(std::vector<o2::TPC::BoxCluster> *output);


/// Constructor
/// \param output is pointer to vector to be filled with clusters
/// \param rowsMax Max number of rows to process
/// \param padsMax Max number of pads to process
/// \param timeBinsMax Max number of timebins to process
/// \param minQMax Minimum peak charge for cluster
/// \param requirePositiveCharge Positive charge is required
/// \param requireNeighbouringPad Requires at least 2 adjecent pads with charge above threshold
BoxClusterer(std::vector<o2::TPC::Cluster> *output,
int rowsMax = 18,
int padsMax = 138,
int timeBinsMax = 1024,
int minQMax = 5,
bool requirePositiveCharge = true,
bool requireNeighbouringPad = true);

/// Destructor
~BoxClusterer() override;

// Should this really be a public member?
// Maybe better to just call by process
void Init() override;


/// Steer conversion of points to digits
/// @param digits Container with TPC digits
/// @param mcDigitTruth MC Digit Truth container
/// @param eventCount event counter
/// @return Container with clusters
void Process(std::vector<o2::TPC::Digit> const & digits) override;
void Process(std::vector<std::unique_ptr<Digit>>& digits) override;
void Process(std::vector<o2::TPC::Digit> const & digits, MCLabelContainer const* mcDigitTruth, int eventCount) override;
void Process(std::vector<std::unique_ptr<Digit>>& digits, MCLabelContainer const* mcDigitTruth, int eventCount) override;

/// Set a pedestal object
void setPedestals(CalPad* pedestals) { mPedestals = pedestals; }

private:
// To be done
/* BoxClusterer(const BoxClusterer &); */
/* BoxClusterer &operator=(const BoxClusterer &); */

void FindLocalMaxima(const Int_t iCRU);
void CleanArrays();
void GetPadAndTimeBin(Int_t bin, Short_t& iPad, Short_t& iTimeBin);
Int_t Update(const Int_t iCRU, const Int_t iRow, const Int_t iPad,
Int_t Update(const Int_t iCRU, const Int_t iRow, const Int_t iPad,
const Int_t iTimeBin, Float_t signal);
Float_t GetQ(const Float_t* adcArray, const Short_t pad,
const Short_t time, Short_t& timeMin, Short_t& timeMax,
const Short_t time, Short_t& timeMin, Short_t& timeMax,
Short_t& padMin, Short_t& padMax) const;
Bool_t UpdateCluster(Float_t charge, Int_t deltaPad, Int_t deltaTime,
Float_t& qTotal, Double_t& meanPad,
Double_t& sigmaPad, Double_t& meanTime,
Bool_t UpdateCluster(Float_t charge, Int_t deltaPad, Int_t deltaTime,
Float_t& qTotal, Double_t& meanPad,
Double_t& sigmaPad, Double_t& meanTime,
Double_t& sigmaTime);


//
// Expand buffer
//
Expand All @@ -74,12 +90,12 @@ namespace o2{
Int_t* mAllNSigBins; //!<! Array with number of signals in each row
CalPad* mPedestals; //!<! Pedestal data

std::vector<o2::TPC::BoxCluster>* mClusterArray; ///< Internal cluster storage
std::vector<o2::TPC::Cluster>* mClusterArray; ///< Internal cluster storage

ClassDefNV(BoxClusterer, 1);
};
}
}


#endif
#endif
Original file line number Diff line number Diff line change
Expand Up @@ -17,20 +17,24 @@
#include <vector>
#include <memory>

#include "TPCReconstruction/ClusterContainer.h"
#include "SimulationDataFormat/MCTruthContainer.h"
#include "SimulationDataFormat/MCCompLabel.h"

namespace o2{
namespace TPC {

class Digit;

/// \class Clusterer
/// \brief Base Class for TPC clusterer
class Clusterer {
protected:
using MCLabelContainer = o2::dataformats::MCTruthContainer<o2::MCCompLabel>;

public:

/// Default Constructor
Clusterer();
Clusterer() = delete;

/// Constructor
/// \param rowsMax Max number of rows to process
Expand All @@ -39,20 +43,24 @@ class Clusterer {
/// \param minQMax Minimum peak charge for cluster
/// \param requirePositiveCharge Positive charge is required
/// \param requireNeighbouringPad Requires at least 2 adjecent pads with charge above threshold
Clusterer(int rowsMax, int padsMax, int timeBinsMax, int minQMax,
bool requirePositiveCharge, bool requireNeighbouringPad);

Clusterer(
int rowsMax = 18,
int padsMax = 138,
int timeBinsMax = 1024,
int minQMax = 5,
bool requirePositiveCharge = true,
bool requireNeighbouringPad = true);

/// Destructor
virtual ~Clusterer() = default;

/// Initialization function for clusterer
virtual void Init() = 0;


/// Processing all digits
/// \param digits Container with TPC digits
/// \param mcDigitTruth MC Digit Truth container
/// \param eventCount event counter
/// \return Container with clusters
virtual void Process(std::vector<o2::TPC::Digit> const &digits) = 0;
virtual void Process(std::vector<std::unique_ptr<Digit>>& digits) = 0;
virtual void Process(std::vector<o2::TPC::Digit> const &digits, MCLabelContainer const* mcDigitTruth, int eventCount) = 0;
virtual void Process(std::vector<std::unique_ptr<Digit>>& digits, MCLabelContainer const* mcDigitTruth, int eventCount) = 0;

void setRowsMax(int val) { mRowsMax = val; };
void setPadsMax(int val) { mPadsMax = val; };
Expand All @@ -67,20 +75,31 @@ class Clusterer {
float getMinQMax() const { return mMinQMax; };
bool hasRequirePositiveCharge() const { return mRequirePositiveCharge; };
bool hasRequireNeighbouringPad() const { return mRequireNeighbouringPad; };

protected:



int mRowsMax; ///< Maximum row number
int mPadsMax; ///< Maximum pad number
int mTimeBinsMax; ///< Maximum time bin
float mMinQMax; ///< Minimun Qmax for cluster
bool mRequirePositiveCharge; ///< If true, require charge > 0
bool mRequireNeighbouringPad; ///< If true, require 2+ pads minimum

};

};

//________________________________________________________________________
inline Clusterer::Clusterer(int rowsMax, int padsMax, int timeBinsMax, int minQMax,
bool requirePositiveCharge, bool requireNeighbouringPad)
: mRowsMax(rowsMax)
, mPadsMax(padsMax)
, mTimeBinsMax(timeBinsMax)
, mMinQMax(minQMax)
, mRequirePositiveCharge(requirePositiveCharge)
, mRequireNeighbouringPad(requireNeighbouringPad)
{}

}
}


#endif
#endif
Loading