6#include "FairRootManager.h"
19 size_t NR = 0, NL = 0;
24 LStrip1* strip1 = &(it1->second);
28 strip2 = &(it2->second);
49 cout <<
" [BmnTof1GeoUtils::FindNeighborStrips] Neighbor strips: left = " << NL <<
", right = " << NR << endl;
54 size_t LO = 0, UP = 0;
59 LStrip1* strip1 = &(it1->second);
63 strip2 = &(it2->second);
68 if (distance < 0.8 && !strip2->GetIsKilled())
72 }
else if (distance < 0.8 && strip2->GetIsKilled()) {
89 cout <<
" [BmnTof1GeoUtils::FindNeighborStrips701] Neighbor strips: lower = " << LO <<
", upper = " << UP
96 if (!forced && !
mStrips.empty())
100 TString stripName, pathTOF =
"/cave_1/TOF400_0";
102 LOG(error) <<
"[BmnTof1GeoUtils::ParseTGeoManager] TOF400 volume '" << pathTOF
103 <<
"' was not found in the geometry, please, check the setup geometry";
107 X0Y0Z0[0] = X0Y0Z0[1] = X0Y0Z0[2] = 0.;
110 Int_t volumeUID, detectorID, stripID;
111 Int_t nDetectors = 0, nStrips = 0;
122 if (!detectorNodeName.
Contains(
"Detector"))
130 stripName = stripNode->
GetName();
131 if (!stripName.
Contains(
"StripActiveGas"))
134 TString PATH2 = PATH1 +
"/" + stripName;
154 LStrip1 stripData(volumeUID, 0, 0, detectorID, stripID);
155 stripData.
center.
SetXYZ(master[0], master[1], master[2]);
162 stripData.
A.
SetXYZ(master[0], master[1], master[2]);
168 stripData.
B.
SetXYZ(master[0], master[1], master[2]);
174 stripData.
C.
SetXYZ(master[0], master[1], master[2]);
180 stripData.
D.
SetXYZ(master[0], master[1], master[2]);
185 bool IsUniqueUID =
mStrips.insert(make_pair(volumeUID, stripData)).second;
193 LOG(info) <<
"[BmnTof400HitProducer::ParseTGeoManager] detectors = " << nDetectors <<
", strips= " << nStrips
204 if (!forced && !
mStrips.empty())
208 TString stripName, gasName, pathTOF =
"/cave_1/tof700_0";
210 LOG(error) <<
"[BmnTof1GeoUtils::ParseTGeoManager701] TOF700 volume '" << pathTOF
211 <<
"' was not found in the geometry, please, check the setup geometry";
215 X0Y0Z0[0] = X0Y0Z0[1] = X0Y0Z0[2] = 0.;
218 Int_t volumeUID, detectorID, stripID;
219 Int_t nDetectors = 0, nStrips = 0;
224 TGeoNode *detectorNode, *detectorNodeGas, *stripNode;
230 if (!detectorNodeName.
Contains(
"Chamber"))
238 gasName = detectorNodeGas->
GetName();
241 TString PATHG = PATH1 +
"/" + gasName;
247 stripName = stripNode->
GetName();
248 if (!stripName.
Contains(
"ActiveGasStrip"))
251 TString PATH2 = PATHG +
"/" + stripName;
270 LStrip1 stripData(volumeUID, 0, 0, detectorID, stripID);
273 stripData.
center.
SetXYZ(master[0], master[1], master[2]);
280 stripData.
A.
SetXYZ(master[0], master[1], master[2]);
286 stripData.
B.
SetXYZ(master[0], master[1], master[2]);
292 stripData.
C.
SetXYZ(master[0], master[1], master[2]);
298 stripData.
D.
SetXYZ(master[0], master[1], master[2]);
305 bool IsUniqueUID =
mStrips.insert(make_pair(volumeUID, stripData)).second;
314 LOG(info) <<
"[BmnTof700HitProducer::ParseTGeoManager] detectors = " << nDetectors <<
", strips= " << nStrips
329 return &(cit->second);
342 return &(cit->second);
366 return ((*pos - P1).
Cross(*pos - P2)).Mag() / (P2 - P1).Mag();
376 double c1 = w.
Dot(
v);
380 double c2 =
v.Dot(
v);
382 return ((*pos) - P2).Mag();
385 return ((*pos) - Pb).Mag();
422 out <<
" (" << point.
X() <<
",\t" << point.
Y() <<
",\t" << point.
Z() <<
") ";
469 Double_t value, min1 = 1.e+10, min2 = 1.e+10;
471 if ((*
this) == strip)
490 value =
fabs((*p1 - strip.
A).Mag());
491 min1 = (value < min1) ? value : min1;
492 value =
fabs((*p1 - strip.
B).Mag());
493 min1 = (value < min1) ? value : min1;
494 value =
fabs((*p1 - strip.
C).Mag());
495 min1 = (value < min1) ? value : min1;
496 value =
fabs((*p1 - strip.
D).Mag());
497 min1 = (value < min1) ? value : min1;
499 value =
fabs((*p2 - strip.
A).Mag());
500 min2 = (value < min2) ? value : min2;
501 value =
fabs((*p2 - strip.
B).Mag());
502 min2 = (value < min2) ? value : min2;
503 value =
fabs((*p2 - strip.
C).Mag());
504 min2 = (value < min2) ? value : min2;
505 value =
fabs((*p2 - strip.
D).Mag());
506 min2 = (value < min2) ? value : min2;
513 Double_t value, min1 = 1.e+10, min2 = 1.e+10;
515 if ((*
this) == strip)
534 value =
fabs((*p1 - strip.
A).Mag());
535 min1 = (value < min1) ? value : min1;
536 value =
fabs((*p1 - strip.
B).Mag());
537 min1 = (value < min1) ? value : min1;
538 value =
fabs((*p1 - strip.
C).Mag());
539 min1 = (value < min1) ? value : min1;
540 value =
fabs((*p1 - strip.
D).Mag());
541 min1 = (value < min1) ? value : min1;
543 value =
fabs((*p2 - strip.
A).Mag());
544 min2 = (value < min2) ? value : min2;
545 value =
fabs((*p2 - strip.
B).Mag());
546 min2 = (value < min2) ? value : min2;
547 value =
fabs((*p2 - strip.
C).Mag());
548 min2 = (value < min2) ? value : min2;
549 value =
fabs((*p2 - strip.
D).Mag());
550 min2 = (value < min2) ? value : min2;
friend F32vec4 fabs(const F32vec4 &a)
TGLVector3 Cross(const TGLVector3 &v1, const TGLVector3 &v2)
R__EXTERN TGeoManager * gGeoManager
Int_t GetVolumeUID() const
const LStrip1 * FindStrip(Int_t UID)
void FindNeighborStrips701(Int_t verbose=0)
MStripType::iterator MStripIT
const LStrip1 * FindStrip701(Int_t UID)
Int_t ParseTGeoManager701(bool useMCinput, bool forced=false, Int_t verbose=0)
BmnTof1GeoUtils()
indexing strips by detectorUID
Int_t ParseTGeoManager(bool useMCinput, bool forced=false, Int_t verbose=0)
void FindNeighborStrips(Int_t verbose=0)
MStripType::const_iterator MStripCIT
Double_t MinDistanceToEdge701(const TVector3 *pos, Side_t &side) const
Double_t DistanceFromPointToLineSegment(const TVector3 *pos, const TVector3 &P1, const TVector3 &P2) const
Double_t DistanceFromPointToLine(const TVector3 *pos, const TVector3 &P1, const TVector3 &P2) const
void Print(std::ostream &out, const TVector3 &point, const char *comment=nullptr) const
void CalculateLengthnWidth()
Double_t MinDistanceToEdge(const TVector3 *pos, Side_t &side) const
bool IsSameDetector(const LStrip1 &strip) const
void SetIsKilled(bool status)
Double_t Distance701(Side_t side, const LStrip1 &strip)
Double_t Distance(Side_t side, const LStrip1 &strip)
virtual Double_t GetDX() const
virtual Double_t GetDZ() const
virtual Double_t GetDY() const
virtual void LocalToMaster(const Double_t *local, Double_t *master) const
TObjArray * GetNodes() const
virtual TObject * Next()=0
const char * GetName() const override
TIterator * MakeIterator(Bool_t dir=kIterForward) const override
virtual void Dump() const
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
void SetXYZ(Double_t x, Double_t y, Double_t z)
Double_t Dot(const TVector3 &) const