25 fRNG =
new TRandom3();
30 const TVector2& firstStripAnchor,
32 : fPitch(pitch), fOrient(orient),
33 fNrStrips(nrStrips), fNrFeChannels(nrFeChannels),
34 fAnchor(firstStripAnchor),
35 fThreshold(threshold), fNoise(noise)
40 fRNG =
new TRandom3();
68 fRNG =
new TRandom3();
73 std::vector<PndSdsStrip>
78 if (
fVerboseLevel > 2) std::cout<<
"-I- PndSdsCalcStrip::GetStrips "<<std::endl;
82 TVector2
out(outx,outy);
86 std::cout<<
" InPoint: ("<<in.X()<<
","<<in.Y()<<
")"<<std::endl;
87 std::cout<<
" OutPoint: ("<<out.X()<<
","<<out.Y()<<
")"<<std::endl;
90 std::vector<PndSdsStrip> strips;
93 if (path.Mod()<1E-18) {
94 std::cout<<
"-W- PndSdsCalcStrip::GetStrips : No Trajectory inside Sensor! (out-in).Mod() = "<<path.Mod()<<std::endl;
98 if (
fVerboseLevel > 1) std::cout<<
" pathlength: "<<path.Mod()<<std::endl;
103 if (
fVerboseLevel > 2) std::cout<<
" nuIn = "<<nuIn<<
" ; nuOut = "<<nuOut<<std::endl;
107 if (
fVerboseLevel > 1) std::cout<<
" integral charge = "<<Q<<std::endl;
113 if (
fVerboseLevel > 1) std::cout<<
"-W- PndSdsCalcStrip::GetStrips: Hit outside active area."<<std::endl;
120 Q *= (nuOut)/(nuOut-nuIn);
129 Q *= (nuIn)/(-nuOut+nuIn);
137 Double_t dir = (nuIn<nuOut)? 1 : -1;
140 Int_t inStrip = Int_t(nuIn);
141 Int_t outStrip = Int_t(nuOut);
149 if (inStrip == outStrip){
157 Int_t index = inStrip;
159 Double_t charge1, charge2, dQ, dQR, dQL, QL,
QR, QM;
170 std::cout<<
"the QL,QR,QM are: "<<QL<<
","<<QR<<
","<<QM<<std::endl;
190 std::cout<<
"if QL>fThrehold, the charge on the strip(i-1)*fPitch is :"<<charge1<<
",path1= "<<Path1<<std::endl;
193 std::cout<<
"if QL>fThrehold, the charge on the strip(i)*fPitch is :"<<charge2<<std::endl;
194 q_head = charge2 - charge1;
205 std::cout<<
"if dQR>fThrehold, the charge on the strip(j)*fPitch is :"<<charge1<<std::endl;
208 std::cout<<
"if dQR>fThrehold, the charge on the strip(j+1)*fPitch is :"<<charge2<<std::endl;
209 q_tail = charge2 - charge1;
223 std::cout<<
"the rest Q on the middle strip is :"<<restQ<<std::endl;
228 if (
fVerboseLevel > 1) std::cout<<
" -> "<<strips.size()<<
" strips hit."<<std::endl;
235 Int_t nextIn = Int_t(nuIn + 0.5+0.5*dir);
238 std::cout<<
" part of first strip : "<<nextIn-nuIn<<std::endl ;
239 std::cout<<
" charge : "<<Q1<<std::endl ;
240 std::cout<<
" next strip : "<<nextIn<<std::endl ;
248 Int_t prevOut = Int_t(nuOut + 0.5-0.5*dir);
251 std::cout<<
" part of last strip : "<<(nuOut-prevOut)<<std::endl ;
252 std::cout<<
" charge : "<<Q2<<std::endl ;
253 std::cout<<
" end of previous strip : "<<prevOut<<std::endl ;
262 nextIn = Int_t(nextIn - 0.5 + 0.5*dir);
263 prevOut = Int_t(prevOut - 0.5 + 0.5*dir);
265 std::cout<<
" dir="<<Int_t(dir)<<std::endl;
266 std::cout<<
" begin="<<nextIn<<
" end="<<prevOut<<std::endl;
269 for (Int_t
n = nextIn ;
n != prevOut;
n += Int_t(dir) )
287 std::vector<PndSdsStrip> strip_head;
288 std::vector<PndSdsStrip> strip_tail;
289 std::vector<PndSdsStrip> strip_middle;
292 std::vector<PndSdsStrip> str_middle;
293 Int_t size = strips.size();
296 if(inStrip<outStrip){
297 str_head = strips[0];
299 str_tail = strips[size-1];
303 for(Int_t
i = 1;
i<size-1;
i++)
304 str_middle.push_back(strips[
i]);
310 str_tail = strips[0];
312 str_head = strips[size-1];
317 for(Int_t
i = size-2;
i>0;
i--)
318 str_middle.push_back(strips[
i]);
324 strips.erase(strips.begin(),strips.begin()+size);
327 Int_t index_head = str_head.
GetIndex();
330 Int_t index_tail = str_tail.
GetIndex();
348 std::cout<<
"the dq_head,dq_tail,q_head,q_tail are :"<<dq_head<<
","<<dq_tail<<
","<<q_head<<
","<<q_tail<<std::endl;
363 strips.insert(strips.begin(),strip_head.begin(),strip_head.end());
374 strips.insert(strips.end(),strip_tail.begin(),strip_tail.end());
378 nextIn = Int_t(nuIn+0.5+0.5*dir);
379 prevOut = Int_t(nuOut+0.5-0.5*dir);
381 nextIn=Int_t(nextIn-0.5+0.5*dir);
382 prevOut=Int_t(prevOut-0.5+0.5*dir);
383 if(nextIn != prevOut){
384 for(Int_t
i= 1;
i< size-1;
i++){
387 dQ = charge2 - charge1;
399 strips.insert(strips.begin()+strip_head.size(),strip_middle.begin(),strip_middle.begin()+strip_middle.size());
411 if (
fVerboseLevel > 2)
if (
fabs(Q)>1.) std::cout<<
" charge Q = "<<Q<<
" not detected!"<<std::endl;
412 if (
fVerboseLevel > 1) std::cout<<
" -> "<<strips.size()<<
" strips hit."<<std::endl;
421 if (
fVerboseLevel > 3) std::cout<<
" charge = "<<charge<<
", smeared = "<<smeared<<std::endl;
514 std::cout<<
"-I- PndSdsCalcStrip Info :"<<std::endl;
515 std::cout<<
" pitch = "<<
fPitch*10000.<<
" um"<<std::endl;
516 std::cout<<
" orientation angle = "<<
fOrient/
TMath::Pi()*180.<<
" deg"<<std::endl;
517 std::cout<<
" nr of strips = "<<
fNrStrips<<std::endl;
518 std::cout<<
" nr of channels per FE = "<<
fNrFeChannels<<std::endl;
520 std::cout<<
" anchor point = ("<<
fAnchor.X()<<
","<<
fAnchor.Y()<<
")"<<std::endl;
521 std::cout<<
" strip-direction vector = ("<<
fStripDir.X()<<
","<<
fStripDir.Y()<<
")"<<std::endl;
Double_t fThreshold
anchor point on first strip
Double_t fNoise
charge threshold
friend F32vec4 cos(const F32vec4 &a)
TVector2 GetBotAnchor() const
friend F32vec4 sqrt(const F32vec4 &a)
friend F32vec4 sin(const F32vec4 &a)
Double_t ChargeDiffusion(Double_t u, Double_t a, Double_t path, Double_t dir, Double_t Q)
Double_t GetNoise() const
Class representing strips on wafer-scale.
Double_t GetThreshold() const
Int_t fVerboseLevel
Random Number Generator.
Double_t GetOrient() const
TRandom3 * fRNG
vector orthogonal to strip direction
Int_t CalcChannelfromStrip(Int_t stripNr) const
const Double_t ChargeFromEloss(Double_t eloss) const
void CalcFeChToStrip(Int_t fe, Int_t channel, Int_t &strip, enum SensorSide &side) const
Int_t CalcFEfromStrip(Int_t stripNr) const
Double_t CalcStripFromPoint(Double_t x, Double_t y)
Digitization Parameter Class for MVD-Strip part.
Int_t fNrFeChannels
Nr. of strips on active area.
friend F32vec4 fabs(const F32vec4 &a)
void CalcStripPointOnLine(const Double_t strip, TVector2 &point) const
std::vector< PndSdsStrip > GetStrips(Double_t inx, Double_t iny, Double_t inz, Double_t outx, Double_t outy, Double_t outz, Double_t eLoss)
Int_t fNrStrips
strip orientation angle to x axis
Double_t GetBotPitch() const
Double_t fOrient
strip pitch (cm)
TVector2 fAnchor
Nr of Channels per FE.
TVector2 GetTopAnchor() const
Double_t SmearCharge(Double_t charge)
Double_t GetTopPitch() const
TVector2 fOrthoDir
vector perpendicular to strip direction