#include <TF1.h>
#include <TMath.h>
#include "AliSignalProcesor.h"
#include "AliMathBase.h"
ClassImp(AliSignalProcesor)
Double_t asymgauss(Double_t* x, Double_t* par)
{
Double_t par1save = par[1];
Double_t par2save = par[2];
Double_t par3save = par[3];
Double_t par5save = par[5];
Double_t dx = x[0]-par1save;
Double_t sigma2 = par2save*par2save;
Double_t sqrt2 = TMath::Sqrt(2.);
if (-par3save*(dx-0.5*par3save*sigma2)>100) return 0;
if (-par5save*(dx-0.5*par5save*sigma2)>100) return 0;
if (TMath::Abs(par[4])>1) return 0;
Double_t exp1 = par3save*TMath::Exp(-par3save*(dx-0.5*par3save*sigma2))
*(1-AliMathBase::ErfFast((par3save*sigma2-dx)/(sqrt2*par2save)));
Double_t exp2 = par5save*TMath::Exp(-par5save*(dx-0.5*par5save*sigma2))
*(1-AliMathBase::ErfFast((par5save*sigma2-dx)/(sqrt2*par2save)));
return par[0]*(exp1+par[4]*exp2);
}
Double_t asymgaussN(Double_t* x, Double_t* par)
{
Double_t par1save = par[1];
Double_t par2save = par[2];
Double_t par3save = par[3];
Double_t par5save = par[5];
Double_t dx = x[0]-par1save;
Double_t sigma2 = par2save*par2save;
Double_t sqrt2 = TMath::Sqrt(2.);
if (-par3save*(dx-0.5*par3save*sigma2)>100) return 0;
if (-par5save*(dx-0.5*par5save*sigma2)>100) return 0;
if (TMath::Abs(par[4])>=1) return 0;
Double_t exp1 = par3save*TMath::Exp(-par3save*(dx-0.5*par3save*sigma2))
*0.5*(1-AliMathBase::ErfFast((par3save*sigma2-dx)/(sqrt2*par2save)));
Double_t exp2 = par5save*TMath::Exp(-par5save*(dx-0.5*par5save*sigma2))
*0.5*(1-AliMathBase::ErfFast((par5save*sigma2-dx)/(sqrt2*par2save)));
return par[0]*(1.*exp1+par[4]*exp2)/(1.+par[4]);
}
TF1 * AliSignalProcesor::GetAsymGauss()
{
TF1 * f1 = new TF1("asymg",asymgaussN,-10,40,6);
return f1;
}
void AliSignalProcesor::SplineSmoother(const Double_t *ampin, Double_t *ampout, Int_t n) const
{
Float_t in[10000];
Float_t out[10000];
in[0] = ampin[0];
in[1] = (ampin[0]+ampin[1])*0.5;
in[2*(n-1)] = ampin[n-1];
in[2*(n-1)+1] = ampin[n-1];
for (Int_t i=0;i<10;i++){
in[2*(n-1)+i]=ampin[n-1];
}
for (Int_t i=1;i<n-1;i++){
in[2*i] = ampin[i];
in[2*i+1] = (9.*(ampin[i]+ampin[i+1])-(ampin[i-1]+ampin[i+2]))/16.;
}
out[0] = in[0];
for (Int_t i=1;i<=2*n;i++){
out[i] = (9.*(in[i]+in[i+1])-(in[i-1]+in[i+2]))/16.;
}
for (int i=0;i<n;i++){
ampout[i] = out[2*i+1];
}
}
void AliSignalProcesor::TailCancelationALTRO(const Double_t *ampin, Double_t *ampout, Float_t k, Float_t l, Int_t n) const
{
Float_t temp;
ampout[0] = ampin[0];
temp = ampin[0];
for (int i=1;i<n;i++){
ampout[i] = ampin[i] + (k-l)*temp;
temp = ampin[i] + k*temp;
}
}
void AliSignalProcesor::TailCancelationTRD(const Double_t *ampin, Double_t *ampout, Float_t r, Float_t c,
Int_t n) const
{
Double_t reminder=0;
for (Int_t i=0; i<n; i++){
ampout[i] = ampin[i]-reminder;
reminder = r*(reminder+c*ampout[i]);
}
}
void AliSignalProcesor::TailMaker(const Double_t *ampin, Double_t *ampout, Float_t lambda,
Int_t n) const
{
Double_t l = TMath::Exp(-lambda);
Float_t temp=0;
for (Int_t i=n-1; i>0; i--){
ampout[i] = ampin[i]+temp;
temp = l*(temp+ampin[i]);
}
}
void AliSignalProcesor::TailCancelationALTRO1(Double_t *ampin, Double_t *ampout, Float_t norm,
Float_t lambda, Int_t n)
{
Double_t l = TMath::Exp(-lambda);
Double_t k = l*(1.-norm*lambda);
return TailCancelationALTRO(ampin,ampout,k,l,n);
}
void AliSignalProcesor::TailCancelationTRD1(Double_t *ampin, Double_t *ampout, Float_t norm,
Float_t lambda, Int_t n)
{
Double_t r = TMath::Exp(-lambda);
Double_t c = norm*lambda;
return TailCancelationTRD(ampin,ampout,r,c,n);
}
void AliSignalProcesor::TailCancelationMI(const Double_t *ampin, Double_t *ampout, Float_t norm,
Float_t lambda, Int_t n) const
{
Double_t l = TMath::Exp(-lambda*0.5);
Double_t k = l*(1.-norm*lambda*0.5);
Float_t in[10000];
Float_t out[10000];
for (Int_t i=0;i<n*2+20;i++){
in[i] = 0;
out[i]= 0;
}
in[0] = ampin[0];
in[1] = (ampin[0]+ampin[1])*0.5;
in[2*(n-1)] = ampin[n-1];
in[2*(n-1)+1] = ampin[n-1];
for (Int_t i=1;i<n-2;i++){
in[2*i] = ampin[i];
in[2*i+1] = (9.*(ampin[i]+ampin[i+1])-(ampin[i-1]+ampin[i+2]))/16;
}
Float_t temp;
out[0] = in[0];
temp = in[0];
for (int i=1;i<=2*n;i++){
out[i] = in[i] + (k-l)*temp;
temp = in[i] + k*temp;
}
for (int i=0;i<n;i++){
ampout[i] = out[2*i+1];
}
}
void AliSignalProcesor::TailMakerSpline(const Double_t *ampin, Double_t *ampout, Float_t lambda,
Int_t n) const
{
Double_t l = TMath::Exp(-lambda*0.5);
Float_t in[10000];
Float_t out[10000];
for (Int_t i=0;i<n*2+20;i++){
in[i] = 0;
out[i]= 0;
}
in[0] = ampin[0];
in[1] = (ampin[0]+ampin[1])*0.5;
in[2*(n-1)] = ampin[n-1];
in[2*(n-1)+1] = ampin[n-1];
for (Int_t i=0;i<10;i++){
in[2*(n-1)+i]=ampin[n-1];
}
for (Int_t i=1;i<n-2;i++){
in[2*i] = ampin[i];
in[2*i+1] = (9.*(ampin[i]+ampin[i+1])-(ampin[i-1]+ampin[i+2]))/16;
}
Float_t temp;
out[2*n] = in[2*n];
temp = 0;
for (int i=2*n;i>=0;i--){
out[i] = in[i] + temp;
temp = l*(temp+in[i]);
}
for (int i=0;i<n;i++){
ampout[i] = out[2*i+1];
}
}
AliSignalProcesor.cxx:100 AliSignalProcesor.cxx:101 AliSignalProcesor.cxx:102 AliSignalProcesor.cxx:103 AliSignalProcesor.cxx:104 AliSignalProcesor.cxx:105 AliSignalProcesor.cxx:106 AliSignalProcesor.cxx:107 AliSignalProcesor.cxx:108 AliSignalProcesor.cxx:109 AliSignalProcesor.cxx:110 AliSignalProcesor.cxx:111 AliSignalProcesor.cxx:112 AliSignalProcesor.cxx:113 AliSignalProcesor.cxx:114 AliSignalProcesor.cxx:115 AliSignalProcesor.cxx:116 AliSignalProcesor.cxx:117 AliSignalProcesor.cxx:118 AliSignalProcesor.cxx:119 AliSignalProcesor.cxx:120 AliSignalProcesor.cxx:121 AliSignalProcesor.cxx:122 AliSignalProcesor.cxx:123 AliSignalProcesor.cxx:124 AliSignalProcesor.cxx:125 AliSignalProcesor.cxx:126 AliSignalProcesor.cxx:127 AliSignalProcesor.cxx:128 AliSignalProcesor.cxx:129 AliSignalProcesor.cxx:130 AliSignalProcesor.cxx:131 AliSignalProcesor.cxx:132 AliSignalProcesor.cxx:133 AliSignalProcesor.cxx:134 AliSignalProcesor.cxx:135 AliSignalProcesor.cxx:136 AliSignalProcesor.cxx:137 AliSignalProcesor.cxx:138 AliSignalProcesor.cxx:139 AliSignalProcesor.cxx:140 AliSignalProcesor.cxx:141 AliSignalProcesor.cxx:142 AliSignalProcesor.cxx:143 AliSignalProcesor.cxx:144 AliSignalProcesor.cxx:145 AliSignalProcesor.cxx:146 AliSignalProcesor.cxx:147 AliSignalProcesor.cxx:148 AliSignalProcesor.cxx:149 AliSignalProcesor.cxx:150 AliSignalProcesor.cxx:151 AliSignalProcesor.cxx:152 AliSignalProcesor.cxx:153 AliSignalProcesor.cxx:154 AliSignalProcesor.cxx:155 AliSignalProcesor.cxx:156 AliSignalProcesor.cxx:157 AliSignalProcesor.cxx:158 AliSignalProcesor.cxx:159 AliSignalProcesor.cxx:160 AliSignalProcesor.cxx:161 AliSignalProcesor.cxx:162 AliSignalProcesor.cxx:163 AliSignalProcesor.cxx:164 AliSignalProcesor.cxx:165 AliSignalProcesor.cxx:166 AliSignalProcesor.cxx:167 AliSignalProcesor.cxx:168 AliSignalProcesor.cxx:169 AliSignalProcesor.cxx:170 AliSignalProcesor.cxx:171 AliSignalProcesor.cxx:172 AliSignalProcesor.cxx:173 AliSignalProcesor.cxx:174 AliSignalProcesor.cxx:175 AliSignalProcesor.cxx:176 AliSignalProcesor.cxx:177 AliSignalProcesor.cxx:178 AliSignalProcesor.cxx:179 AliSignalProcesor.cxx:180 AliSignalProcesor.cxx:181 AliSignalProcesor.cxx:182 AliSignalProcesor.cxx:183 AliSignalProcesor.cxx:184 AliSignalProcesor.cxx:185 AliSignalProcesor.cxx:186 AliSignalProcesor.cxx:187 AliSignalProcesor.cxx:188 AliSignalProcesor.cxx:189 AliSignalProcesor.cxx:190 AliSignalProcesor.cxx:191 AliSignalProcesor.cxx:192 AliSignalProcesor.cxx:193 AliSignalProcesor.cxx:194 AliSignalProcesor.cxx:195 AliSignalProcesor.cxx:196 AliSignalProcesor.cxx:197 AliSignalProcesor.cxx:198 AliSignalProcesor.cxx:199 AliSignalProcesor.cxx:200 AliSignalProcesor.cxx:201 AliSignalProcesor.cxx:202 AliSignalProcesor.cxx:203 AliSignalProcesor.cxx:204 AliSignalProcesor.cxx:205 AliSignalProcesor.cxx:206 AliSignalProcesor.cxx:207 AliSignalProcesor.cxx:208 AliSignalProcesor.cxx:209 AliSignalProcesor.cxx:210 AliSignalProcesor.cxx:211 AliSignalProcesor.cxx:212 AliSignalProcesor.cxx:213 AliSignalProcesor.cxx:214 AliSignalProcesor.cxx:215 AliSignalProcesor.cxx:216 AliSignalProcesor.cxx:217 AliSignalProcesor.cxx:218 AliSignalProcesor.cxx:219 AliSignalProcesor.cxx:220 AliSignalProcesor.cxx:221 AliSignalProcesor.cxx:222 AliSignalProcesor.cxx:223 AliSignalProcesor.cxx:224 AliSignalProcesor.cxx:225 AliSignalProcesor.cxx:226 AliSignalProcesor.cxx:227 AliSignalProcesor.cxx:228 AliSignalProcesor.cxx:229 AliSignalProcesor.cxx:230 AliSignalProcesor.cxx:231 AliSignalProcesor.cxx:232 AliSignalProcesor.cxx:233 AliSignalProcesor.cxx:234 AliSignalProcesor.cxx:235 AliSignalProcesor.cxx:236 AliSignalProcesor.cxx:237 AliSignalProcesor.cxx:238 AliSignalProcesor.cxx:239 AliSignalProcesor.cxx:240 AliSignalProcesor.cxx:241 AliSignalProcesor.cxx:242 AliSignalProcesor.cxx:243 AliSignalProcesor.cxx:244 AliSignalProcesor.cxx:245 AliSignalProcesor.cxx:246 AliSignalProcesor.cxx:247 AliSignalProcesor.cxx:248 AliSignalProcesor.cxx:249 AliSignalProcesor.cxx:250 AliSignalProcesor.cxx:251 AliSignalProcesor.cxx:252 AliSignalProcesor.cxx:253 AliSignalProcesor.cxx:254 AliSignalProcesor.cxx:255 AliSignalProcesor.cxx:256 AliSignalProcesor.cxx:257 AliSignalProcesor.cxx:258 AliSignalProcesor.cxx:259 AliSignalProcesor.cxx:260 AliSignalProcesor.cxx:261 AliSignalProcesor.cxx:262 AliSignalProcesor.cxx:263 AliSignalProcesor.cxx:264 AliSignalProcesor.cxx:265 AliSignalProcesor.cxx:266 AliSignalProcesor.cxx:267 AliSignalProcesor.cxx:268 AliSignalProcesor.cxx:269 AliSignalProcesor.cxx:270 AliSignalProcesor.cxx:271 AliSignalProcesor.cxx:272 AliSignalProcesor.cxx:273 AliSignalProcesor.cxx:274 AliSignalProcesor.cxx:275 AliSignalProcesor.cxx:276 AliSignalProcesor.cxx:277 AliSignalProcesor.cxx:278 AliSignalProcesor.cxx:279 AliSignalProcesor.cxx:280 AliSignalProcesor.cxx:281 AliSignalProcesor.cxx:282 AliSignalProcesor.cxx:283 AliSignalProcesor.cxx:284 AliSignalProcesor.cxx:285 AliSignalProcesor.cxx:286 AliSignalProcesor.cxx:287 AliSignalProcesor.cxx:288 AliSignalProcesor.cxx:289 AliSignalProcesor.cxx:290 AliSignalProcesor.cxx:291 AliSignalProcesor.cxx:292