24 fColumn.reserve(size);
27 fXcoord.reserve(size);
28 fYcoord.reserve(size);
29 fZcoord.reserve(size);
47 fCell.push_back(cell);
48 fColumn.push_back(column);
50 fLayer.push_back(layer);
55 fEdep.push_back(e_dep);
58 Double_t distance = TMath::Sqrt(TMath::Sq(x) + TMath::Sq(y) + TMath::Sq(z));
59 Double_t _beta = t >= 0 ? distance * 1.E-2 / (t * 1E-9) / TMath::C() : -1.;
60 fBeta.push_back(_beta);
62 fBeta.push_back(beta);
75 for (Int_t iCell = 0; iCell < fNCells; ++iCell) {
76 if (fEdep[iCell] > threshold)
125 for (Int_t iCell = 0; iCell < fNCells; ++iCell) {
126 if (fLayer[iCell] == veto_layer)
135 if (fLayer[iCell] == 0)
137 if (fLayer[iCell] == size_z - 1)
139 if (fColumn[iCell] == 0)
141 if (fColumn[iCell] == size_x - 1)
143 if (fRow[iCell] == 0)
145 if (fRow[iCell] == size_y - 1)
154 Double_t nCells = 0.;
155 for (Int_t iCell = 0; iCell < fNCells; ++iCell) {
156 if (fEdep[iCell] > threshold) {
157 edep += fEdep[iCell];
162 return edep / nCells;
169 for (Int_t iCell = 0; iCell < fNCells; ++iCell) {
170 if (fEdep[iCell] > threshold) {
171 edep += fEdep[iCell];
181 for (Int_t iCell = 0; iCell < fNCells; ++iCell) {
182 if (fTime[iCell] < t) {
194 for (Int_t iCell = 0; iCell < fNCells; ++iCell) {
195 if (fBeta[iCell] > beta) {
206 return fBeta[iFirst];
212 return fBeta[iFastest];
220 Double_t gamma = 1. / TMath::Sqrt(1. - TMath::Sq(beta));
221 return (gamma - 1.) * mass;
229 Double_t gamma = 1. / TMath::Sqrt(1. - TMath::Sq(beta));
230 return (gamma - 1.) * mass;
239 for (Int_t iCell = 0; iCell < fNCells; ++iCell) {
245 Double_t distance = TMath::Sqrt(TMath::Sq(x) + TMath::Sq(y) + TMath::Sq(z));
248 Double_t beta = (distance * 1.E-2 / (t * 1.E-9)) / TMath::C();
251 Double_t gamma = 1. / TMath::Sqrt(1. - TMath::Sq(beta));
252 return (gamma - 1.) * mass;
258 Double_t xTarget = fXcoord[iFirst];
259 Double_t yTarget = fYcoord[iFirst];
260 Double_t zTarget = fZcoord[iFirst];
261 Double_t xCluster = 0;
262 Double_t yCluster = 0;
263 Double_t zCluster = 0;
264 for (Int_t iCell = 0; iCell < fNCells; ++iCell) {
265 Double_t x = fXcoord[iCell] - fXcoord[iFirst];
266 Double_t y = fYcoord[iCell] - fYcoord[iFirst];
267 Double_t z = fZcoord[iCell] - fZcoord[iFirst];
277 Double_t scalarProduct = xCluster * xTarget + yCluster * yTarget + zCluster * zTarget;
278 Double_t clusterLength = TMath::Sqrt(TMath::Sq(xCluster) + TMath::Sq(yCluster) + TMath::Sq(zCluster));
279 Double_t targetLength = TMath::Sqrt(TMath::Sq(xTarget) + TMath::Sq(yTarget) + TMath::Sq(zTarget));
280 scalarProduct /= (clusterLength * targetLength);
281 return TMath::ACos(scalarProduct) * TMath::RadToDeg();
287 Double_t xTarget = x;
288 Double_t yTarget = y;
289 Double_t zTarget = z;
290 Double_t xCluster = 0;
291 Double_t yCluster = 0;
292 Double_t zCluster = 0;
293 for (Int_t iCell = 0; iCell < fNCells; ++iCell) {
294 Double_t dx = fXcoord[iCell] - fXcoord[iFirst];
295 Double_t dy = fYcoord[iCell] - fYcoord[iFirst];
296 Double_t dz = fZcoord[iCell] - fZcoord[iFirst];
306 Double_t scalarProduct = xCluster * xTarget + yCluster * yTarget + zCluster * zTarget;
307 Double_t clusterLength = TMath::Sqrt(TMath::Sq(xCluster) + TMath::Sq(yCluster) + TMath::Sq(zCluster));
308 Double_t targetLength = TMath::Sqrt(TMath::Sq(xTarget) + TMath::Sq(yTarget) + TMath::Sq(zTarget));
309 scalarProduct /= (clusterLength * targetLength);
310 return TMath::ACos(scalarProduct) * TMath::RadToDeg();
316 for (Int_t iCell = 0; iCell < other->
GetNCells(); ++iCell) {
345 : TObject(move(other))
350 cout <<
"----------------------------------- BmnNdetCluster -----------------------------" << endl;
351 for (
size_t i = 0;
i < fEdep.size(); ++
i) {
352 cout << fCell[
i] <<
" cell (" << fColumn[
i] <<
", " << fRow[
i] <<
", " << fLayer[
i] <<
"): ";
353 cout <<
"\tX: " << fXcoord[
i] <<
"[cm], Y: " << fYcoord[
i] <<
"[cm], Z: " << fZcoord[
i] <<
"[cm], ";
354 cout <<
"\tt: " << fTime[
i] <<
"[ns], Edep: " << 1.E3 * fEdep[
i] <<
"[MeV], beta: " << fBeta[
i] << endl;
356 cout <<
"------------------------------------------------------------------------------------" << endl;
Class for description of recognized cluster in Bmn Ndet detector.
Double_t EnergyTofFastest(Double_t mass=0.939565420)
vector< Double_t > GetZ()
Double_t AngleToDirection(Double_t x=0, Double_t y=0, Double_t z=1)
Double_t EnergyDeposited(Double_t threshold=0.003)
vector< Double_t > GetBeta()
void Clear()
Clear all cell contents, set fNCells=0.
virtual void Print(const Option_t *option="")
Print.
vector< Int_t > GetLayers()
void AddCell(Int_t cell, Int_t column, Int_t row, Int_t layer, Double_t x, Double_t y, Double_t z, Double_t t, Double_t e_dep, Double_t beta=-1.)
BmnNdetCluster * AddCluster(BmnNdetCluster *other)
Merging of clusters.
vector< Double_t > GetTime()
Double_t EnergyTofFirst(Double_t mass=0.939565420)
vector< Double_t > GetY()
vector< Double_t > GetEdep()
vector< Int_t > GetColumns()
BmnNdetCluster()
Default constructor.
Bool_t ContainsVetoCells(Int_t veto_layer=0)
vector< Int_t > GetCells()
Double_t EnergyTofAverage(Double_t mass=0.939565420)
~BmnNdetCluster()
Default destructor.
vector< Double_t > GetX()
Double_t EnergyDepositedAverage(Double_t threshold=0.003)
Bool_t StartsOnBorder(Int_t size_x=11, Int_t size_y=11, Int_t size_z=8)
vector< Int_t > GetRows()