LArSoft  v10_04_05
Liquid Argon Software toolkit - https://larsoft.org/
ems::DirOfGamma Class Reference

#include "DirOfGamma.h"

Public Member Functions

 DirOfGamma (const detinfo::DetectorPropertiesData &detProp, const std::vector< art::Ptr< recob::Hit >> &src, unsigned int nbins, unsigned int idcl)
 
 ~DirOfGamma ()
 
TVector2 const & GetBaryCenterCm () const
 
std::vector< Hit2D * > const & GetHits2D () const
 
std::vector< EndPoint > const & GetCandidates () const
 
void SetIdCandidate (size_t id)
 
size_t GetIdCandidate ()
 
art::Ptr< recob::Hit > const & GetFirstHit () const
 
std::vector< art::Ptr< recob::Hit > > const & GetHits ()
 
TVector2 const & GetFirstPoint () const
 
std::vector< art::Ptr< recob::Hit > > const & GetIniHits () const
 
size_t GetIdCl () const
 

Private Member Functions

void FindInitialPart ()
 
void FillBins ()
 
bool FindCandidates ()
 
void ComputeBaryCenter ()
 
void ComputeMaxDist ()
 
void ComputeMaxCharge ()
 
void ComputeFinalValues ()
 

Private Attributes

size_t fNbins
 
size_t fIdCl
 
size_t fCandidateID
 
std::vector< Hit2D * > fPoints2D
 
std::vector< Bin2DfBins
 
std::vector< EndPointfCandidates
 
art::Ptr< recob::HitfStartHit
 
TVector2 fStartPoint
 
std::vector< art::Ptr< recob::Hit > > fIniHits
 
std::vector< art::Ptr< recob::Hit > > fHits
 
TVector2 fBaryCenter
 
float fNormDist
 
float fNormCharge
 
bool fIsCandidateIDset
 

Detailed Description

Definition at line 119 of file DirOfGamma.h.

Constructor & Destructor Documentation

ems::DirOfGamma::DirOfGamma ( const detinfo::DetectorPropertiesData detProp,
const std::vector< art::Ptr< recob::Hit >> &  src,
unsigned int  nbins,
unsigned int  idcl 
)

Definition at line 161 of file DirOfGamma.cxx.

References ComputeBaryCenter(), ComputeMaxCharge(), ComputeMaxDist(), fBaryCenter, fBins, fHits, FillBins(), FindCandidates(), FindInitialPart(), fNbins, and fPoints2D.

165  : fNbins(nbins), fIdCl(idcl), fCandidateID(0), fIsCandidateIDset(false)
166 {
167  fHits = src;
168 
169  for (unsigned int i = 0; i < src.size(); i++) {
170  Hit2D* hit = new Hit2D(detProp, src[i]);
171  fPoints2D.push_back(hit);
172  }
173 
175 
176  for (unsigned int i = 0; i < fNbins; i++)
177  fBins.push_back(Bin2D(fBaryCenter));
178 
179  FillBins();
180  ComputeMaxDist();
181  if (FindCandidates()) {
183  FindInitialPart();
184  }
185 }
void FindInitialPart()
Definition: DirOfGamma.cxx:287
std::vector< art::Ptr< recob::Hit > > fHits
Definition: DirOfGamma.h:171
bool FindCandidates()
Definition: DirOfGamma.cxx:248
TVector2 fBaryCenter
Definition: DirOfGamma.h:183
std::vector< Bin2D > fBins
Definition: DirOfGamma.h:165
void ComputeMaxDist()
Definition: DirOfGamma.cxx:230
Detector simulation of raw signals on wires.
size_t fCandidateID
Definition: DirOfGamma.h:162
bool fIsCandidateIDset
Definition: DirOfGamma.h:188
void ComputeBaryCenter()
Definition: DirOfGamma.cxx:187
void ComputeMaxCharge()
Definition: DirOfGamma.cxx:277
std::vector< Hit2D * > fPoints2D
Definition: DirOfGamma.h:164
ems::DirOfGamma::~DirOfGamma ( )
inline

Definition at line 125 of file DirOfGamma.h.

126  {
127  for (unsigned int i = 0; i < fPoints2D.size(); ++i)
128  delete fPoints2D[i];
129  }
std::vector< Hit2D * > fPoints2D
Definition: DirOfGamma.h:164

Member Function Documentation

void ems::DirOfGamma::ComputeBaryCenter ( )
private

Definition at line 187 of file DirOfGamma.cxx.

References fBaryCenter, and fPoints2D.

Referenced by DirOfGamma().

188 {
189  double nomx = 0.0;
190  double nomy = 0.0;
191  double denom = 0.0;
192  for (unsigned int i = 0; i < fPoints2D.size(); i++) {
193  nomx += fPoints2D[i]->GetPointCm().X() * fPoints2D[i]->GetCharge();
194  nomy += fPoints2D[i]->GetPointCm().Y() * fPoints2D[i]->GetCharge();
195  denom += fPoints2D[i]->GetCharge();
196  }
197 
198  double bx = nomx / denom;
199  double by = nomy / denom;
200  fBaryCenter.Set(bx, by);
201 }
TVector2 fBaryCenter
Definition: DirOfGamma.h:183
std::vector< Hit2D * > fPoints2D
Definition: DirOfGamma.h:164
void ems::DirOfGamma::ComputeFinalValues ( )
private
void ems::DirOfGamma::ComputeMaxCharge ( )
private

Definition at line 277 of file DirOfGamma.cxx.

References fCandidates, and fNormCharge.

Referenced by DirOfGamma().

278 {
279  fNormCharge = 0.0;
280  for (unsigned int i = 0; i < fCandidates.size(); i++) {
281  if (fCandidates[i].GetMaxCharge() > fNormCharge) {
282  fNormCharge = fCandidates[i].GetMaxCharge();
283  }
284  }
285 }
std::vector< EndPoint > fCandidates
Definition: DirOfGamma.h:166
void ems::DirOfGamma::ComputeMaxDist ( )
private

Definition at line 230 of file DirOfGamma.cxx.

References pma::Dist2(), fBaryCenter, fBins, fNormDist, and ems::Hit2D::GetPointCm().

Referenced by DirOfGamma().

231 {
232  double maxdist2 = 0.0;
233 
234  for (unsigned int id = 0; id < fBins.size(); id++) {
235 
236  if (!fBins[id].Size()) continue;
237 
238  Hit2D* candidate = fBins[id].GetHits2D().front();
239  if (candidate) {
240  double dist2 = pma::Dist2(candidate->GetPointCm(), fBaryCenter);
241  if (dist2 > maxdist2) { maxdist2 = dist2; }
242  }
243  }
244 
245  fNormDist = std::sqrt(maxdist2);
246 }
double Dist2(const TVector2 &v1, const TVector2 &v2)
Definition: Utilities.cxx:39
TVector2 fBaryCenter
Definition: DirOfGamma.h:183
std::vector< Bin2D > fBins
Definition: DirOfGamma.h:165
void ems::DirOfGamma::FillBins ( )
private

Definition at line 203 of file DirOfGamma.cxx.

References bin, fBaryCenter, fBins, fNbins, fPoints2D, X, and Y.

Referenced by DirOfGamma().

204 {
205  TVector2 vstart(0, 1);
206 
207  for (unsigned int i = 0; i < fPoints2D.size(); i++) {
208  TVector2 pos(fPoints2D[i]->GetPointCm().X(), fPoints2D[i]->GetPointCm().Y());
209  TVector2 vecp = pos - fBaryCenter;
210  float sinsign = (vstart.X() * vecp.Y()) - (vstart.Y() * vecp.X());
211  float cosine = (vstart * vecp) / (vstart.Mod() * vecp.Mod());
212  float theta = 180.0F * (std::acos(cosine)) / TMath::Pi();
213 
214  unsigned int id = 0;
215  double bin = double(360.0) / double(fNbins);
216 
217  if (sinsign >= 0)
218  id = int(theta / bin);
219  else if (sinsign < 0)
220  id = int(theta / bin) + (fNbins / 2);
221  if (id > (fNbins - 1)) id = (fNbins - 1);
222 
223  fBins[id].Add(fPoints2D[i]);
224  }
225 
226  for (unsigned int id = 0; id < fBins.size(); id++)
227  fBins[id].Sort();
228 }
Float_t Y
Definition: plot.C:37
TVector2 fBaryCenter
Definition: DirOfGamma.h:183
std::vector< Bin2D > fBins
Definition: DirOfGamma.h:165
float bin[41]
Definition: plottest35.C:14
Float_t X
Definition: plot.C:37
std::vector< Hit2D * > fPoints2D
Definition: DirOfGamma.h:164
bool ems::DirOfGamma::FindCandidates ( )
private

Definition at line 248 of file DirOfGamma.cxx.

References pma::Dist2(), fBaryCenter, fBins, fCandidates, fNbins, fNormDist, fPoints2D, and ems::Hit2D::GetPointCm().

Referenced by DirOfGamma().

249 {
250  float rad = 0.5F * fNormDist;
251  unsigned int nbins = fNbins * 4;
252  for (unsigned int id = 0; id < fNbins; id++) {
253 
254  if (!fBins[id].Size()) continue;
255 
256  std::vector<Hit2D*> points;
257  Hit2D* candidate2D = fBins[id].GetHits2D().front();
258 
259  for (unsigned int i = 0; i < fPoints2D.size(); i++) {
260  double distnorm = std::sqrt(pma::Dist2(candidate2D->GetPointCm(), fBaryCenter)) / fNormDist;
261  double dist2 = pma::Dist2(candidate2D->GetPointCm(), fPoints2D[i]->GetPointCm());
262 
263  if ((distnorm > 0.5) && (dist2 < rad * rad)) points.push_back(fPoints2D[i]);
264  }
265 
266  if (fBins[id].Size() > 1) {
267  EndPoint ep(*candidate2D, points, nbins);
268  fCandidates.push_back(ep);
269  }
270  }
271  if (fCandidates.size())
272  return true;
273  else
274  return false;
275 }
double Dist2(const TVector2 &v1, const TVector2 &v2)
Definition: Utilities.cxx:39
TVector2 fBaryCenter
Definition: DirOfGamma.h:183
std::vector< Bin2D > fBins
Definition: DirOfGamma.h:165
std::vector< EndPoint > fCandidates
Definition: DirOfGamma.h:166
std::vector< Hit2D * > fPoints2D
Definition: DirOfGamma.h:164
void ems::DirOfGamma::FindInitialPart ( )
private

Definition at line 287 of file DirOfGamma.cxx.

References pma::Dist2(), fBaryCenter, fCandidateID, fCandidates, fIniHits, fStartHit, and fStartPoint.

Referenced by DirOfGamma().

288 {
289  double max_asymmetry = 0.0;
290  unsigned int saveid = 0;
291  bool found = false;
292 
293  double maxdist2 = 0.0;
294  double maxcharge = 0.0;
295  unsigned int idmaxdist = 0;
296  unsigned int idmaxcharge = 0;
297 
298  for (unsigned int i = 0; i < fCandidates.size(); i++) {
299  double dist2 = pma::Dist2(fCandidates[i].GetPosition(), fBaryCenter);
300  double charge = fCandidates[i].GetMaxCharge();
301  if (dist2 > maxdist2) {
302  maxdist2 = dist2;
303  idmaxdist = i;
304  }
305  if (charge > maxcharge) {
306  maxcharge = charge;
307  idmaxcharge = i;
308  }
309  }
310 
311  maxdist2 = 0.0;
312  unsigned int idmaxdistb = 0;
313  for (size_t i = 0; i < fCandidates.size(); i++) {
314  if ((i == idmaxdist) || (i == idmaxcharge)) continue;
315 
316  double dist2 = pma::Dist2(fCandidates[i].GetPosition(), fCandidates[idmaxdist].GetPosition());
317  if (dist2 > maxdist2) {
318  maxdist2 = dist2;
319  idmaxdistb = i;
320  }
321  }
322 
323  if (fCandidates.size() > 2) {
324  for (unsigned int i = 0; i < fCandidates.size(); i++) {
325  double asymmetry = fCandidates[i].GetAsymmetry();
326 
327  if ((i == idmaxdist) || (i == idmaxcharge) || (i == idmaxdistb)) {
328  if (asymmetry > max_asymmetry) {
329  max_asymmetry = asymmetry;
330  saveid = i;
331  found = true;
332  }
333  }
334  }
335  }
336  else {
337  for (unsigned int i = 0; i < fCandidates.size(); i++) {
338  double asymmetry = fCandidates[i].GetAsymmetry();
339 
340  if ((i == idmaxdist) || (i == idmaxdistb)) {
341  if (asymmetry > max_asymmetry) {
342  max_asymmetry = asymmetry;
343  saveid = i;
344  found = true;
345  }
346  }
347  }
348  }
349 
350  if (!found)
351  mf::LogError("DirOfGamma") << fCandidates.size() << "DirOfGamma - Find Initial Part problem.";
352 
353  fStartHit = fCandidates[saveid].GetHit();
354  fStartPoint = fCandidates[saveid].GetPosition();
355  fIniHits = fCandidates[saveid].MaxChargeBin().GetIniHits();
356  fCandidateID = saveid;
357 }
double Dist2(const TVector2 &v1, const TVector2 &v2)
Definition: Utilities.cxx:39
MaybeLogger_< ELseverityLevel::ELsev_error, false > LogError
TVector2 fBaryCenter
Definition: DirOfGamma.h:183
size_t fCandidateID
Definition: DirOfGamma.h:162
TVector2 fStartPoint
Definition: DirOfGamma.h:169
std::vector< EndPoint > fCandidates
Definition: DirOfGamma.h:166
art::Ptr< recob::Hit > fStartHit
Definition: DirOfGamma.h:168
std::vector< art::Ptr< recob::Hit > > fIniHits
Definition: DirOfGamma.h:170
TVector2 const& ems::DirOfGamma::GetBaryCenterCm ( ) const
inline

Definition at line 131 of file DirOfGamma.h.

131 { return fBaryCenter; }
TVector2 fBaryCenter
Definition: DirOfGamma.h:183
std::vector<EndPoint> const& ems::DirOfGamma::GetCandidates ( ) const
inline

Definition at line 135 of file DirOfGamma.h.

135 { return fCandidates; }
std::vector< EndPoint > fCandidates
Definition: DirOfGamma.h:166
art::Ptr<recob::Hit> const& ems::DirOfGamma::GetFirstHit ( ) const
inline

Definition at line 149 of file DirOfGamma.h.

149 { return fStartHit; }
art::Ptr< recob::Hit > fStartHit
Definition: DirOfGamma.h:168
TVector2 const& ems::DirOfGamma::GetFirstPoint ( ) const
inline

Definition at line 153 of file DirOfGamma.h.

153 { return fStartPoint; }
TVector2 fStartPoint
Definition: DirOfGamma.h:169
std::vector<art::Ptr<recob::Hit> > const& ems::DirOfGamma::GetHits ( )
inline

Definition at line 151 of file DirOfGamma.h.

151 { return fHits; }
std::vector< art::Ptr< recob::Hit > > fHits
Definition: DirOfGamma.h:171
std::vector<Hit2D*> const& ems::DirOfGamma::GetHits2D ( ) const
inline

Definition at line 133 of file DirOfGamma.h.

Referenced by ems::EMShower3D::CollectShower2D().

133 { return fPoints2D; }
std::vector< Hit2D * > fPoints2D
Definition: DirOfGamma.h:164
size_t ems::DirOfGamma::GetIdCandidate ( )
inline

Definition at line 147 of file DirOfGamma.h.

147 { return fCandidateID; }
size_t fCandidateID
Definition: DirOfGamma.h:162
size_t ems::DirOfGamma::GetIdCl ( ) const
inline

Definition at line 157 of file DirOfGamma.h.

157 { return fIdCl; }
std::vector<art::Ptr<recob::Hit> > const& ems::DirOfGamma::GetIniHits ( ) const
inline

Definition at line 155 of file DirOfGamma.h.

155 { return fIniHits; }
std::vector< art::Ptr< recob::Hit > > fIniHits
Definition: DirOfGamma.h:170
void ems::DirOfGamma::SetIdCandidate ( size_t  id)
inline

Definition at line 137 of file DirOfGamma.h.

138  {
139 
140  fIsCandidateIDset = true;
141  fCandidateID = id;
142  fStartHit = fCandidates[id].GetHit();
143  fStartPoint = fCandidates[id].GetPosition();
144  fIniHits = fCandidates[id].MaxChargeBin().GetIniHits();
145  }
size_t fCandidateID
Definition: DirOfGamma.h:162
bool fIsCandidateIDset
Definition: DirOfGamma.h:188
TVector2 fStartPoint
Definition: DirOfGamma.h:169
std::vector< EndPoint > fCandidates
Definition: DirOfGamma.h:166
art::Ptr< recob::Hit > fStartHit
Definition: DirOfGamma.h:168
std::vector< art::Ptr< recob::Hit > > fIniHits
Definition: DirOfGamma.h:170

Member Data Documentation

TVector2 ems::DirOfGamma::fBaryCenter
private
std::vector<Bin2D> ems::DirOfGamma::fBins
private

Definition at line 165 of file DirOfGamma.h.

Referenced by ComputeMaxDist(), DirOfGamma(), FillBins(), and FindCandidates().

size_t ems::DirOfGamma::fCandidateID
private

Definition at line 162 of file DirOfGamma.h.

Referenced by FindInitialPart().

std::vector<EndPoint> ems::DirOfGamma::fCandidates
private

Definition at line 166 of file DirOfGamma.h.

Referenced by ComputeMaxCharge(), FindCandidates(), and FindInitialPart().

std::vector<art::Ptr<recob::Hit> > ems::DirOfGamma::fHits
private

Definition at line 171 of file DirOfGamma.h.

Referenced by DirOfGamma().

size_t ems::DirOfGamma::fIdCl
private

Definition at line 161 of file DirOfGamma.h.

std::vector<art::Ptr<recob::Hit> > ems::DirOfGamma::fIniHits
private

Definition at line 170 of file DirOfGamma.h.

Referenced by FindInitialPart().

bool ems::DirOfGamma::fIsCandidateIDset
private

Definition at line 188 of file DirOfGamma.h.

size_t ems::DirOfGamma::fNbins
private

Definition at line 160 of file DirOfGamma.h.

Referenced by DirOfGamma(), FillBins(), and FindCandidates().

float ems::DirOfGamma::fNormCharge
private

Definition at line 186 of file DirOfGamma.h.

Referenced by ComputeMaxCharge().

float ems::DirOfGamma::fNormDist
private

Definition at line 185 of file DirOfGamma.h.

Referenced by ComputeMaxDist(), and FindCandidates().

std::vector<Hit2D*> ems::DirOfGamma::fPoints2D
private

Definition at line 164 of file DirOfGamma.h.

Referenced by ComputeBaryCenter(), DirOfGamma(), FillBins(), and FindCandidates().

art::Ptr<recob::Hit> ems::DirOfGamma::fStartHit
private

Definition at line 168 of file DirOfGamma.h.

Referenced by FindInitialPart().

TVector2 ems::DirOfGamma::fStartPoint
private

Definition at line 169 of file DirOfGamma.h.

Referenced by FindInitialPart().


The documentation for this class was generated from the following files: