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