28 fRNG =
new TRandom3();
33 const TVector2& firstStripAnchor,
35 : fPitch(pitch), fOrient(orient),
36 fNrStrips(nrStrips), fNrFeChannels(nrFeChannels),
37 fThreshold(threshold), fNoise(noise),
38 fAnchor(firstStripAnchor)
43 fRNG =
new TRandom3();
70 fRNG =
new TRandom3();
76 std::vector<PndHypStrip>
81 if (
fVerboseLevel > 2) std::cout<<
"-I- PndHypCalcStrip::GetStrips "<<std::endl;
86 TVector2
out(outx,outy);
90 std::cout<<
" InPoint: ("<<in.X()<<
","<<in.Y()<<std::endl;
91 std::cout<<
" OutPoint: ("<<out.X()<<
","<<out.Y()<<std::endl;
94 std::vector<PndHypStrip> strips;
97 if (path.Mod()<1E-18) {
98 std::cout<<
"-W- PndHypCalcStrip::GetStrips : No Trajectory inside Sensor!"<<path.Mod()<<std::endl;
102 if (
fVerboseLevel > 1) std::cout<<
" pathlength: "<<path.Mod()<<std::endl;
107 if (
fVerboseLevel > 2) std::cout<<
" nuIn = "<<nuIn<<
" ; nuOut = "<<nuOut<<std::endl;
114 if (
fVerboseLevel > 1) std::cout<<
" integral charge = "<<Q<<std::endl;
122 if (
fVerboseLevel > 1) std::cout<<
" Hit outside active area."<<std::endl;
128 Q *= (nuOut)/(nuOut-nuIn);
137 Q *= (nuIn)/(-nuOut+nuIn);
146 if (Int_t(nuIn) == Int_t(nuOut))
152 if (
fVerboseLevel > 1) std::cout<<
" -> 1 strip hit."<<std::endl;
159 Double_t dir = (nuOut>nuIn) ? 1. : -1.;
161 Int_t nextIn = Int_t(nuIn + 0.5+0.5*dir);
166 std::cout<<
" part of first strip : "<<nextIn-nuIn<<std::endl ;
167 std::cout<<
" charge : "<<Q1<<std::endl ;
168 std::cout<<
" next strip : "<<nextIn<<std::endl ;
178 Int_t prevOut = Int_t(nuOut + 0.5-0.5*dir);
182 std::cout<<
" part of last strip : "<<(nuOut-prevOut)<<std::endl ;
183 std::cout<<
" charge : "<<Q2<<std::endl ;
184 std::cout<<
" end of previous strip : "<<prevOut<<std::endl ;
195 nextIn = Int_t(nextIn - 0.5 + 0.5*dir);
196 prevOut = Int_t(prevOut - 0.5 + 0.5*dir);
200 std::cout<<
" dir="<<Int_t((dir))<<std::endl;
201 std::cout<<
" begin="<<nextIn<<
" end="<<prevOut<<std::endl;
204 for (Int_t
n = nextIn ;
n != prevOut;
n += Int_t(dir) )
213 if (
fVerboseLevel > 2)
if (
fabs(Q)>1.) std::cout<<
" charge Q = "<<Q<<
" not detected!"<<std::endl;
214 if (
fVerboseLevel > 1) std::cout<<
" -> "<<nrHits<<
" strips hit."<<std::endl;
225 if (
fVerboseLevel > 2) std::cout<<
" charge = "<<charge<<
", smeared = "<<smeared<<std::endl;
270 std::cout<<
"-I- PndHypCalcStrip Info :"<<std::endl;
271 std::cout<<
" Pitch = "<<
fPitch*10000.<<
" um"<<std::endl;
273 std::cout<<
" Nr Strips = "<<
fNrStrips<<std::endl;
274 std::cout<<
" nr of channels per FE = "<<
fNrFeChannels<<std::endl;
276 std::cout<<
" Anchor Point = "<<
fAnchor.X()<<
","<<
fAnchor.Y()<<
")"<<std::endl;
Int_t fNrStrips
strip orientation angle
friend F32vec4 cos(const F32vec4 &a)
TVector2 GetTopAnchor() const
Double_t GetNoise() const
Double_t GetBotPitch() const
Int_t CalcFEfromStrip(Int_t stripNr) const
friend F32vec4 sin(const F32vec4 &a)
TVector2 GetBotAnchor() const
void CalcStripPointOnLine(const Double_t strip, TVector2 &point) const
Int_t CalcChannelfromStrip(Int_t stripNr) const
Double_t fNoise
charge threshold
TVector2 fOrthoDir
vector perpendicular to strip direction
Double_t ChargeFromEloss(Double_t eloss) const
Double_t GetThreshold() const
TRandom3 * fRNG
vector orthogonal to strip direction
std::vector< PndHypStrip > GetStrips(Double_t inx, Double_t iny, Double_t inz, Double_t outx, Double_t outy, Double_t outz, Double_t eLoss, int id)
Double_t SmearCharge(Double_t charge)
friend F32vec4 fabs(const F32vec4 &a)
Int_t fNrFeChannels
Nr. of strips on active area.
Double_t CalcStripFromPoint(Double_t x, Double_t y)
Int_t fVerboseLevel
Random Number Generator.
TVector2 fStripDir
anchor point on first strip
Double_t fThreshold
Nr of Channels per FE.
void CalcFeChToStrip(Int_t fe, Int_t channel, Int_t &strip, enum SensorSide &side) const
Double_t GetOrient() const
Double_t GetTopPitch() const
Double_t fOrient
strip pitch (cm)