19 auto const& wireID = src->
WireID();
21 auto const wireCenter = wireReadoutGeom.
Wire(wireID).GetCenter();
24 double const globalWire = wireReadoutGeom.Plane({wireID.Cryostat, wireID.TPC % 2, wireID.Plane})
25 .WireCoordinate(wireCenter);
51 const unsigned int nhits)
const 54 std::vector<art::Ptr<recob::Hit>> vec;
55 for (
unsigned int i = 0; i <
fHits2D.size(); i++) {
57 vec.push_back(
fHits2D[i]->GetHitPtr());
58 if (vec.size() == nhits)
break;
66 :
fCenter2D(center), fPoints2D(hits), fNbins(nbins)
69 for (
unsigned int i = 0; i <
fNbins; i++) {
84 TVector2 vstart(0, 1);
86 unsigned int saveid = 0;
88 for (
unsigned int i = 0; i <
fPoints2D.size(); i++) {
92 TVector2 vecp = pos - centre;
93 float sinsign = (vstart.X() * vecp.Y()) - (vstart.Y() * vecp.X());
94 float cosine = (vstart * vecp) / vecp.Mod();
95 float theta = 180.0F * (std::acos(cosine)) / TMath::Pi();
98 double bin = double(360.0) / double(
fNbins);
101 id = int(theta / bin);
102 else if (sinsign < 0)
103 id = int(theta / bin) + (
fNbins / 2);
116 for (
unsigned int id = 0;
id <
fNbins;
id++)
123 unsigned int saveid = 0;
124 for (
unsigned int i = 0; i <
fNbins; i++)
138 unsigned int iprev, inext;
147 double sumcharge = 0.0;
148 for (
unsigned int i = 0; i <
fNbins; i++)
150 sumcharge +=
fBins[i].GetTotCharge();
165 :
fNbins(nbins), fIdCl(idcl), fCandidateID(0), fIsCandidateIDset(false)
169 for (
unsigned int i = 0; i < src.size(); i++) {
176 for (
unsigned int i = 0; i <
fNbins; i++)
192 for (
unsigned int i = 0; i <
fPoints2D.size(); i++) {
198 double bx = nomx / denom;
199 double by = nomy / denom;
205 TVector2 vstart(0, 1);
207 for (
unsigned int i = 0; i <
fPoints2D.size(); i++) {
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();
215 double bin = double(360.0) / double(
fNbins);
218 id = int(theta / bin);
219 else if (sinsign < 0)
220 id = int(theta / bin) + (
fNbins / 2);
226 for (
unsigned int id = 0;
id <
fBins.size();
id++)
232 double maxdist2 = 0.0;
234 for (
unsigned int id = 0;
id <
fBins.size();
id++) {
236 if (!
fBins[
id].Size())
continue;
238 Hit2D* candidate =
fBins[id].GetHits2D().front();
241 if (dist2 > maxdist2) { maxdist2 = dist2; }
251 unsigned int nbins =
fNbins * 4;
252 for (
unsigned int id = 0;
id <
fNbins;
id++) {
254 if (!
fBins[
id].Size())
continue;
256 std::vector<Hit2D*> points;
257 Hit2D* candidate2D =
fBins[id].GetHits2D().front();
259 for (
unsigned int i = 0; i <
fPoints2D.size(); i++) {
263 if ((distnorm > 0.5) && (dist2 < rad * rad)) points.push_back(
fPoints2D[i]);
266 if (
fBins[
id].Size() > 1) {
267 EndPoint ep(*candidate2D, points, nbins);
280 for (
unsigned int i = 0; i <
fCandidates.size(); i++) {
289 double max_asymmetry = 0.0;
290 unsigned int saveid = 0;
293 double maxdist2 = 0.0;
294 double maxcharge = 0.0;
295 unsigned int idmaxdist = 0;
296 unsigned int idmaxcharge = 0;
298 for (
unsigned int i = 0; i <
fCandidates.size(); i++) {
301 if (dist2 > maxdist2) {
305 if (charge > maxcharge) {
312 unsigned int idmaxdistb = 0;
314 if ((i == idmaxdist) || (i == idmaxcharge))
continue;
317 if (dist2 > maxdist2) {
324 for (
unsigned int i = 0; i <
fCandidates.size(); i++) {
327 if ((i == idmaxdist) || (i == idmaxcharge) || (i == idmaxdistb)) {
328 if (asymmetry > max_asymmetry) {
329 max_asymmetry = asymmetry;
337 for (
unsigned int i = 0; i <
fCandidates.size(); i++) {
340 if ((i == idmaxdist) || (i == idmaxdistb)) {
341 if (asymmetry > max_asymmetry) {
342 max_asymmetry = asymmetry;
DirOfGamma(const detinfo::DetectorPropertiesData &detProp, const std::vector< art::Ptr< recob::Hit >> &src, unsigned int nbins, unsigned int idcl)
Utilities related to art service access.
double Dist2(const TVector2 &v1, const TVector2 &v2)
std::vector< art::Ptr< recob::Hit > > fHits
CryostatID_t Cryostat
Index of cryostat.
cout<< "Opened file "<< fin<< " ixs= "<< ixs<< endl;if(ixs==0) hhh=(TH1F *) fff-> Get("h1")
std::vector< Hit2D * > fPoints2D
WireID_t Wire
Index of the wire within its plane.
geo::WireID const & WireID() const
Initial tdc tick for hit.
MaybeLogger_< ELseverityLevel::ELsev_error, false > LogError
std::vector< Hit2D * > fHits2D
art::Ptr< recob::Hit > const & GetHitPtr() const
std::vector< Bin2D > fBins
auto vector(Vector const &v)
Returns a manipulator which will print the specified array.
const TVector2 & fCenter2D
key_type key() const noexcept
Hit2D(detinfo::DetectorPropertiesData const &detProp, art::Ptr< recob::Hit > src)
EndPoint(const Hit2D ¢er, const std::vector< Hit2D * > &hits, unsigned int nbins)
PlaneID_t Plane
Index of the plane within its TPC.
std::vector< art::Ptr< recob::Hit > > GetIniHits(const double radius=10.0, const unsigned int nhits=10) const
Detector simulation of raw signals on wires.
Encapsulate the geometry of a wire .
double ConvertTicksToX(double ticks, int p, int t, int c) const
float ROISummedADC() const
The sum of calibrated ADC counts of the ROI (0. by default)
Implementation of the Projection Matching Algorithm.
float PeakTime() const
Time of the signal peak, in tick units.
Encapsulate the construction of a single detector plane .
std::vector< EndPoint > fCandidates
TVector2 const & GetPointCm() const
double GetAsymmetry() const
TPCID_t TPC
Index of the TPC within its cryostat.
std::vector< Bin2D > fBins
art::Ptr< recob::Hit > fStartHit
std::vector< art::Ptr< recob::Hit > > fIniHits
std::vector< Hit2D * > fPoints2D
Bin2D(const TVector2 ¢er)