Newer
Older
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#ifndef ROOT_THcShowerHitCluster
#define ROOT_THcShowerHitCluster
// HMS calorimeter hits, version 2
#include <set>
#include <iterator>
#include <iostream>
#include <memory>
using namespace std;
class THcShowerHit { //HMS calorimeter hit class
private:
Int_t fCol, fRow; //hit colomn and row
Double_t fX, fZ; //hit X (vert.) and Z (along spect.axis) coordinates
Double_t fE; //hit mean energy deposition
Double_t fEpos; //hit energy deposition from positive PMT
Double_t fEneg; //hit energy deposition from negative PMT
public:
THcShowerHit() { //default constructor
fCol=fRow=0;
fX=fZ=0.;
fE=0.;
fEpos=0.;
fEneg=0.;
}
THcShowerHit(Int_t hRow, Int_t hCol, Double_t hX, Double_t hZ,
Double_t hE, Double_t hEpos, Double_t hEneg) {
fRow=hRow;
fCol=hCol;
fX=hX;
fZ=hZ;
fE=hE;
fEpos=hEpos;
fEneg=hEneg;
}
~THcShowerHit() {
// cout << " hit destructed" << endl;
}
Int_t hitColumn() {
return fCol;
}
Int_t hitRow() {
return fRow;
}
Double_t hitX() {
return fX;
}
Double_t hitZ() {
return fZ;
}
Double_t hitE() {
return fE;
}
Double_t hitEpos() {
return fEpos;
}
Double_t hitEneg() {
return fEneg;
}
// Decide if a hit is neighbouring the current hit.
// Two hits are neighbours if share a side or a corner,
// or in the same row but separated by no more than a block.
//
bool isNeighbour(THcShowerHit* hit1) { //Is hit1 neighbouring this hit?
Int_t dRow = fRow-(*hit1).fRow;
Int_t dCol = fCol-(*hit1).fCol;
return (TMath::Abs(dRow)<2 && TMath::Abs(dCol)<2) ||
(dRow==0 && TMath::Abs(dCol)<3);
}
//Print out hit information
//
void show() {
cout << "row=" << fRow << " column=" << fCol
<< " x=" << fX << " z=" << fZ
<< " E=" << fE << " Epos=" << fEpos << " Eneg=" << fEneg << endl;
}
// Define < operator in order to fill in set of hits in a sorted manner.
//
bool operator<(THcShowerHit rhs) const {
if (fCol != rhs.fCol)
return fCol < rhs.fCol;
else
return fRow < rhs.fRow;
}
};
//____________________________________________________________________________
// Container (collection) of hits and its iterator.
//
typedef set<THcShowerHit*> THcShowerHitSet;
typedef THcShowerHitSet::iterator THcShowerHitIt;
typedef THcShowerHitSet THcShowerCluster;
typedef THcShowerCluster::iterator THcShowerClusterIt;
//______________________________________________________________________________
//Alias for container of clusters and for its iterator
//
typedef vector<THcShowerCluster*> THcShowerClusterList;
typedef THcShowerClusterList::iterator THcShowerClusterListIt;
//______________________________________________________________________________
#endif