/
ClusterizerAlgorithm.h
83 lines (66 loc) · 3.07 KB
/
ClusterizerAlgorithm.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#ifndef SimTracker_SiPhase2Digitizer_ClusterizerAlgorithm_h
#define SimTracker_SiPhase2Digitizer_ClusterizerAlgorithm_h
#include "DataFormats/Common/interface/DetSetVector.h"
#include "DataFormats/Common/interface/DetSetVectorNew.h"
#include "DataFormats/SiPixelCluster/interface/SiPixelCluster.h"
#include "DataFormats/SiPixelDigi/interface/PixelDigi.h"
#include "SimDataFormats/TrackerDigiSimLink/interface/PixelDigiSimLink.h"
#include "SimTracker/SiPhase2Digitizer/interface/PixelClusterHitArray.h"
//#include "SimTracker/SiPhase2Digitizer/interface/PixelClusterSimLink.h"
#include "CalibTracker/SiPixelESProducers/interface/SiPixelGainCalibrationServiceBase.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include <vector>
#include <map>
class PixelGeomDetUnit;
class PixelClusterSimLink;
class ClusterizerAlgorithm {
public:
typedef edm::DetSet<PixelDigi>::const_iterator DigiIterator;
ClusterizerAlgorithm(edm::ParameterSet const& conf, int maxClusterSize, int maxNumberClusters);
void setup(const PixelGeomDetUnit* pixDet);
void clusterizeDetUnit(const edm::DetSet<PixelDigi> & pixelDigis, const edm::Handle< edm::DetSetVector< PixelDigiSimLink > > & pixelSimLinks, edmNew::DetSetVector<SiPixelCluster>::FastFiller & clusters) ;
// void makeLinks(edm::OrphanHandle< edmNew::DetSetVector<SiPixelCluster> > & clusters, std::vector<edm::DetSet<PixelClusterSimLink> > & linksByDet);
unsigned int getSimTrackId(const edm::Handle< edm::DetSetVector< PixelDigiSimLink > > & pixelSimLinks, int channel);
private:
void copy_to_buffer(DigiIterator begin, DigiIterator end);
void clear_buffer(DigiIterator begin, DigiIterator end);
public:
edm::ParameterSet conf_;
PixelClusterHitArray hits;
int maxClusterSize_;
int maxNumberClusters_;
int nrows_;
int ncols_;
unsigned int rawDetId_;
std::map< SiPixelCluster, std::vector< unsigned int > > tmpSimLinks;
struct AccretionCluster {
static constexpr unsigned short MAXSIZE = 256;
unsigned short adc[256];
unsigned short x[256];
unsigned short y[256];
unsigned short xmin = 16000;
unsigned short xmax = 0;
unsigned short ymin = 16000;
unsigned short ymax = 0;
unsigned int isize = 0;
unsigned int curr = 0;
unsigned short top() const { return curr; }
void pop() { ++curr; }
bool empty() { return curr == isize; }
bool add(SiPixelCluster::PixelPos const & p, unsigned short const iadc) {
if (isize == MAXSIZE) return false;
xmin = std::min(xmin, (unsigned short) p.row());
xmax = std::max(xmax, (unsigned short) p.row());
ymin = std::min(ymin, (unsigned short) p.col());
ymax = std::max(ymax, (unsigned short) p.col());
adc[isize] = iadc;
x[isize] = p.row();
y[isize++] = p.col();
return true;
}
unsigned short size() { return isize; }
unsigned short xsize() { return xmax - xmin + 1; }
unsigned short ysize() { return ymax - ymin + 1; }
};
};
#endif