const int nCHIO=200; // nb samples. sera ajuste en manip
float SIG[nCHIO];
int k=25; /// PLATEAU
int l=5; /// INTEGRATION
float M=300.; /// PZC
float vn, vnk, vnl, vnkl, dkl[nCHIO], p[nCHIO], r[nCHIO], s[nCHIO];
float THR=2.E5; // Seuil a ajuster en fonction de "l"
float Max=0;
int nPREV=5; // pour calcul baseline, a ajuster en ligne
int nBL=5; // pour calcul baseline, a ajuster en ligne
int tTHR=0;
float BLmean=0;
for(int i=0;i<nCHIO;i++)
{
vn=CHIO; // vecteur CHIO[]: samples
if(i-k>=0) vnk=CHIO[i-k];
else vnk=0;
if(i-l>=0) vnl=CHIO[i-l];
else vnl=0;
if(i-k-l>=0) vnkl=CHIO[i-k-l];
else vnkl=0;
dkl=vn-vnk-vnl+vnkl;
if(i>0) p=p[i-1]+dkl;
else p=dkl;
r=p+M*dkl;
if(i>0) s=s[i-1]+r;
else s=r;
if(i>0) SIG=s[i-1]+r;
else SIG=r;
hCHIO_FILTER->SetBinContent(i+1,SIG);
//if(SIG>Max) Max=SIG;
if(SIG>THR && i>nPREV+nBL && tTHR==0) tTHR=i;
if(tTHR)
{
for(int j=tTHR-(nPREV+nBL);j<tTHR-nPREV;j++) BLmean+=SIG;
BLmean/=nBL;
if(SIG>Max) Max=SIG;
if(i<nCHIO-1 && SIG<Max && SIG[i+1]<Max)
{
hECHIO_RAW->Fill(Max);
tTHR=0;
}
}
} |