21 fChargeConverter(NULL),
35 return ((TMath::Erf(p0*(x-p1)))*p2+p3);
41 if(nrHits<2)
return Binary(Cluster);
42 std::pair<Double_t,Double_t> result;
43 Double_t x_g=0., chargesum=0, charge=0, stripno=0;
49 for(Int_t l=0;l<nrHits;++l)
56 x_g += charge * stripno ;
57 if(
fVerbose>2) Info(
"CenterOfGravity",
"Adding digi values (stripno,charge) = (%f,%f)",stripno,charge);
64 for(Int_t l=0;l<nrHits;++l)
67 if(stripno>chanmax) chanmax=stripno;
68 if(stripno<chanmin) chanmin=stripno;
90 if (err < 1e-15) Warning(
"CenterOfGravity",
"Got bad error value: Cluster with %i digis. Position %f +-%f chn.",nrHits,x_g,xerror);
93 if(
fVerbose>1) Info(
"CenterOfGravity",
"Got a cluster with %i digis. Position %f +- %f chn.",nrHits,result.first,result.second);
101 if(nrHits<2)
return Binary(Cluster);
105 std::pair<Double_t,Double_t> result;
111 Double_t Q=0.,q_inner=0., charge=0.,stripno=-1.,err=0.;
112 Int_t k_h=0, k_t=nrHits-1;
113 for (Int_t kk=0;kk<nrHits;kk++)
118 if(x_h>stripno){k_h=kk;x_h=stripno;}
119 if(x_t<stripno){k_t=kk;x_t=stripno;}
125 q_inner /= (nrHits-2.);
128 err=
sqrt(2.)*noise/q_inner;
140 std::pair<Double_t,Double_t> result;
143 result.first=channel;
144 result.second=1./
sqrt(12.);
145 if(
fVerbose>1) Info(
"Median",
"Got a cluster with %i digis. Position %f +- %f chn.",nrHits,result.first,result.second);
154 std::pair<Double_t,Double_t> result;
157 for(Int_t
i=0;
i<nrHits;++
i)
160 if( charge > chargemax)
166 result.first=channel;
167 result.second=1./
sqrt(12.);
168 if(
fVerbose>1) Info(
"Binary",
"Got a cluster with %i digis. Position %f +- %f chn.",nrHits,result.first,result.second);
218 if(nrHits < 2.){
return Binary(Cluster);}
221 std::pair<Double_t,Double_t> result;
224 std::pair<Double_t,Double_t> eta_value;
228 eta_value =
EtaValue(Cluster, stripno, NmbOfStrips);
231 if(Clustercharge>21)Clustercharge=21;
233 result.first=stripno + PosVsEta->GetBinContent((Int_t)ceil(eta_value.first * 500.), Clustercharge);
235 result.second=(PosVsEta->GetBinContent((Int_t)ceil((eta_value.first+eta_value.second) * 500.), Clustercharge)
236 - PosVsEta->GetBinContent((Int_t)ceil((eta_value.first-eta_value.second) * 500.), Clustercharge))/2.;
245 std::pair<Double_t,Double_t> result;
263 result.first=qr/(qr+ql);
269 result.second=
sqrt(((ql/(qr+ql))*(1./(qr+ql))*(ql/(qr+ql))*(1./(qr+ql))*cherrr*cherrr)+((qr/(qr+ql))*(1./(qr+ql))*(qr/(qr+ql))*(1./(qr+ql))*cherrl*cherrl));
276 Double_t ql=0., qr=0., qm=0.,
noise=0., cherrl=0., cherrr=0.;
305 result.first=qr/(qr+ql);
306 result.second=
sqrt(((ql/(qr+ql))*(1./(qr+ql))*(ql/(qr+ql))*(1./(qr+ql))*cherrr*cherrr)+((qr/(qr+ql))*(1./(qr+ql))*(qr/(qr+ql))*(1./(qr+ql))*cherrl*cherrl));
318 Warning(
"auto_select",
"Do not use, this selection is still wrong!");
std::pair< Double_t, Double_t > HeadTail(const PndSdsCluster *Cluster)
ClassImp(PndSdsChargeWeightingAlgorithms)
std::pair< Double_t, Double_t > Median(const PndSdsCluster *Cluster)
Int_t GetClusterSize() const
TClonesArray * fDigiArray
Double_t DigiCharge(Int_t digiIndex)
Class to store the Digis which belong to one cluster This class holds the information which Digi belo...
friend F32vec4 sqrt(const F32vec4 &a)
Int_t DigiStripno(Int_t digiIndex)
PndSdsChargeWeightingAlgorithms(TClonesArray *arr)
Class for digitised strip hits.
Double_t GetCharge() const
virtual Double_t GetRelativeError(Double_t Charge)=0
virtual Double_t DigiValueToCharge(Double_t digi)=0
Converts a given digitized charge into charge in electrons.
virtual ~PndSdsChargeWeightingAlgorithms()
Int_t GetDigiIndex(Int_t i) const
PndSdsChargeConversion * fChargeConverter
std::pair< Double_t, Double_t > CenterOfGravity(const PndSdsCluster *Cluster)
std::pair< Double_t, Double_t > EtaValue(const PndSdsCluster *Cluster, Double_t &stripno, Int_t &NmbOfStrips)
void CalcFeChToStrip(Int_t fe, Int_t channel, Int_t &strip, enum SensorSide &side) const
std::pair< Double_t, Double_t > Eta(const PndSdsCluster *Cluster, const TH2F *PosVsEta)
std::pair< Double_t, Double_t > Binary(const PndSdsCluster *Cluster)
Double_t GetThreshold() const
Double_t DigiChargeError(Int_t digiIndex)
Double_t Erfmod(Double_t x, Double_t p0, Double_t p1, Double_t p2, Double_t p3)
std::pair< Double_t, Double_t > AutoSelect(const PndSdsCluster *Cluster)
PndSdsCalcStrip * fCalcStrip
Double_t GetNoise() const