#include "AliTRDarrayADC.h"
#include "Cal/AliTRDCalPadStatus.h"
#include "AliTRDfeeParam.h"
-
+#include "AliTRDSignalIndex.h"
ClassImp(AliTRDarrayADC)
+Short_t *AliTRDarrayADC::fgLutPadNumbering = 0x0;
+
//____________________________________________________________________________________
AliTRDarrayADC::AliTRDarrayADC()
:TObject()
,fNtime(0)
,fNAdim(0)
,fADC(0)
- ,fLutPadNumbering(0)
{
//
// AliTRDarrayADC default constructor
//
+ CreateLut();
+
}
//____________________________________________________________________________________
,fNtime(0)
,fNAdim(0)
,fADC(0)
- ,fLutPadNumbering(0)
{
//
// AliTRDarrayADC constructor
//
+ CreateLut();
Allocate(nrow,ncol,ntime);
}
,fNtime(b.fNtime)
,fNAdim(b.fNAdim)
,fADC(0)
- ,fLutPadNumbering(0)
{
//
// AliTRDarrayADC copy constructor
//
fADC = new Short_t[fNAdim];
- memcpy(fADC,b.fADC, fNAdim*sizeof(Short_t));
- fLutPadNumbering = new Short_t[fNcol];
- memcpy(fLutPadNumbering,b.fLutPadNumbering, fNcol*sizeof(Short_t));
+ memcpy(fADC,b.fADC, fNAdim*sizeof(Short_t));
}
delete [] fADC;
fADC=0;
}
- if(fLutPadNumbering)
- {
- delete [] fLutPadNumbering;
- fLutPadNumbering=0;
- }
}
{
delete [] fADC;
}
- if(fLutPadNumbering)
- {
- delete [] fLutPadNumbering;
- }
fNdet=b.fNdet;
fNrow=b.fNrow;
fNcol=b.fNcol;
fNAdim=b.fNAdim;
fADC = new Short_t[fNAdim];
memcpy(fADC,b.fADC, fNAdim*sizeof(Short_t));
- fLutPadNumbering = new Short_t[fNcol];
- memcpy(fLutPadNumbering,b.fLutPadNumbering, fNcol*sizeof(Short_t));
return *this;
Int_t numberofmcms = fNcol/padspermcm;
fNumberOfChannels = numberofmcms*adcchannelspermcm;
fNAdim=nrow*fNumberOfChannels*ntime;
- CreateLut();
if(fADC)
{
SETBIT(signal, 10);
SETBIT(signal, 11);
SETBIT(signal, 12);
+ break;
default:
CLRBIT(signal, 10);
CLRBIT(signal, 11);
Int_t l;
Int_t r=0;
Int_t s=0;
- Int_t *longm;
- longm = new Int_t[fNAdim];
- Int_t *longz;
- longz = new Int_t[fNAdim];
Int_t k=0;
- memset(longz,0,sizeof(Int_t)*fNAdim);
- memset(longm,0,sizeof(Int_t)*fNAdim);
- for(Int_t i=0;i<fNAdim; i++)
+ Int_t *longm = new Int_t[fNAdim];
+ Int_t *longz = new Int_t[fNAdim];
+
+ if(longz && longm && fADC)
{
- j=0;
- if(fADC[i]==-1)
- {
- for(k=i;k<fNAdim;k++)
+
+ memset(longz,0,sizeof(Int_t)*fNAdim);
+ memset(longm,0,sizeof(Int_t)*fNAdim);
+
+ for(Int_t i=0;i<fNAdim; i++)
+ {
+ j=0;
+ if(fADC[i]==-1)
{
- if((fADC[k]==-1)&&(j<16000))
- {
- j=j+1;
- longm[r]=j;
- }
- else
- {
- break;
- }
+ for(k=i;k<fNAdim;k++)
+ {
+ if((fADC[k]==-1)&&(j<16000))
+ {
+ j=j+1;
+ longm[r]=j;
+ }
+ else
+ {
+ break;
+ }
+ }
+ r=r+1;
}
- r=r+1;
- }
- l=16001;
- if(fADC[i]==0)
- {
- for(k=i;k<fNAdim;k++)
+ l=16001;
+ if(fADC[i]==0)
{
- if((fADC[k]==0)&&(l<32767))
- {
- l=l+1;
- longz[s]=l;
- }
- else
- {
- break;
- }
+ for(k=i;k<fNAdim;k++)
+ {
+ if((fADC[k]==0)&&(l<32767))
+ {
+ l=l+1;
+ longz[s]=l;
+ }
+ else
+ {
+ break;
+ }
+ }
+ s=s+1;
}
- s=s+1;
- }
- if(fADC[i]>0)
- {
- i=i+1;
- }
- i=i+j+(l-16001-1);
- }
-
- //Calculate the size of the compressed array
- for(Int_t i=0; i<fNAdim;i++)
- {
- if(longm[i]!=0)
- {
- counter=counter+longm[i]-1;
- }
- if(longz[i]!=0)
- {
- counter=counter+(longz[i]-16001)-1;
- }
- }
- newDim = fNAdim-counter; //Dimension of the compressed array
- Short_t* buffer;
- buffer = new Short_t[newDim];
- Int_t counterTwo=0;
-
- //Fill the buffer of the compressed array
- Int_t g=0;
- Int_t h=0;
- for(Int_t i=0; i<newDim; i++)
- {
- if(counterTwo<fNAdim)
- {
- if(fADC[counterTwo]>0)
+ if(fADC[i]>0)
{
- buffer[i]=fADC[counterTwo];
+ i=i+1;
}
- if(fADC[counterTwo]==-1)
+ i=i+j+(l-16001-1);
+ }
+
+ //Calculate the size of the compressed array
+ for(Int_t i=0; i<fNAdim;i++)
+ {
+ if(longm[i]!=0)
{
- buffer[i]=-(longm[g]);
- counterTwo=counterTwo+longm[g]-1;
- g++;
- }
- if(fADC[counterTwo]==0)
+ counter=counter+longm[i]-1;
+ }
+ if(longz[i]!=0)
{
- buffer[i]=-(longz[h]);
- counterTwo=counterTwo+(longz[h]-16001)-1;
- h++;
- }
- counterTwo++;
- }
- }
+ counter=counter+(longz[i]-16001)-1;
+ }
+ }
+
+ Int_t counterTwo=0;
+ newDim = fNAdim-counter; //Dimension of the compressed array
+ Short_t* buffer = new Short_t[newDim];
+
+ if(buffer)
+ {
+
+ //Fill the buffer of the compressed array
+ Int_t g=0;
+ Int_t h=0;
+ for(Int_t i=0; i<newDim; i++)
+ {
+ if(counterTwo<fNAdim)
+ {
+ if(fADC[counterTwo]>0)
+ {
+ buffer[i]=fADC[counterTwo];
+ }
+ if(fADC[counterTwo]==-1)
+ {
+ buffer[i]=-(longm[g]);
+ counterTwo=counterTwo+longm[g]-1;
+ g++;
+ }
+ if(fADC[counterTwo]==0)
+ {
+ buffer[i]=-(longz[h]);
+ counterTwo=counterTwo+(longz[h]-16001)-1;
+ h++;
+ }
+ counterTwo++;
+ }
+ }
+
+ //Copy the buffer
+ delete [] fADC;
+ fADC=0;
+ fADC = new Short_t[newDim];
+ fNAdim = newDim;
+ for(Int_t i=0; i<newDim; i++)
+ {
+ fADC[i] = buffer[i];
+ }
+
+ //Delete auxiliary arrays
+ delete [] buffer;
+ buffer=0;
+ }
- //Copy the buffer
- if(fADC)
- {
- delete [] fADC;
- fADC=0;
- }
- fADC = new Short_t[newDim];
- fNAdim = newDim;
- for(Int_t i=0; i<newDim; i++)
- {
- fADC[i] = buffer[i];
}
- //Delete auxiliary arrays
- if(buffer)
- {
- delete [] buffer;
- buffer=0;
- }
- if(longz)
+ if (longz)
{
delete [] longz;
longz=0;
}
- if(longm)
+ if (longm)
{
delete [] longm;
longm=0;
+
}
}
// Expand the array
//
- //Check if the array has not been already expanded
- Int_t verif=0;
- for(Int_t i=0; i<fNAdim; i++)
+ if (fADC)
{
- if(fADC[i]<-1)
- {
- verif++;
- }
- }
+
+ //Check if the array has not been already expanded
+ Int_t verif=0;
+ for(Int_t i=0; i<fNAdim; i++)
+ {
+ if(fADC[i]<-1)
+ {
+ verif++;
+ }
+ }
- if(verif==0)
- {
- // AliDebug(1,"Nothing to expand");
- return;
- }
+ if(verif==0)
+ {
+ //AliDebug(1,"Nothing to expand");
+ return;
+ }
- Int_t *longz;
- longz = new Int_t[fNAdim];
- Int_t *longm;
- longm = new Int_t[fNAdim];
- Int_t dimexp=0;
- //Initialize arrays
- memset(longz,0,sizeof(Int_t)*fNAdim);
- memset(longm,0,sizeof(Int_t)*fNAdim);
- Int_t r2=0;
- Int_t r3=0;
- for(Int_t i=0; i<fNAdim;i++)
- {
- if((fADC[i]<0)&&(fADC[i]>=-16000))
- {
- longm[r2]=-fADC[i];
- r2++;
- }
- if(fADC[i]<-16000)
- {
- longz[r3]=-fADC[i]-16001;
- r3++;
- }
- }
- //Calculate the new dimensions of the array
- for(Int_t i=0; i<fNAdim;i++)
- {
- if(longm[i]!=0)
- {
- dimexp=dimexp+longm[i]-1;
- }
- if(longz[i]!=0)
- {
- dimexp=dimexp+longz[i]-1;
- }
- }
- dimexp=dimexp+fNAdim;
-
- //Write in the buffer the new array
- Short_t* bufferE;
- bufferE = new Short_t[dimexp];
- Int_t contaexp =0;
- Int_t h=0;
- Int_t l=0;
- for(Int_t i=0; i<dimexp; i++)
- {
- if(fADC[contaexp]>0)
- {
- bufferE[i]=fADC[contaexp];
- }
+ Int_t dimexp=0;
+ Int_t *longz = new Int_t[fNAdim];
+ Int_t *longm = new Int_t[fNAdim];
- if((fADC[contaexp]<0)&&(fADC[contaexp]>=-16000))
- {
- for(Int_t j=0; j<longm[h];j++)
- {
- bufferE[i+j]=-1;
- }
- i=i+longm[h]-1;
- h++;
- }
- if(fADC[contaexp]<-16000)
+ if (longz && longm)
{
- for(Int_t j=0; j<longz[l];j++)
+
+ //Initialize arrays
+ memset(longz,0,sizeof(Int_t)*fNAdim);
+ memset(longm,0,sizeof(Int_t)*fNAdim);
+ Int_t r2=0;
+ Int_t r3=0;
+ for(Int_t i=0; i<fNAdim;i++)
+ {
+ if((fADC[i]<0)&&(fADC[i]>=-16000))
+ {
+ longm[r2]=-fADC[i];
+ r2++;
+ }
+ if(fADC[i]<-16000)
+ {
+ longz[r3]=-fADC[i]-16001;
+ r3++;
+ }
+ }
+
+ //Calculate the new dimensions of the array
+ for(Int_t i=0; i<fNAdim;i++)
+ {
+ if(longm[i]!=0)
+ {
+ dimexp=dimexp+longm[i]-1;
+ }
+ if(longz[i]!=0)
+ {
+ dimexp=dimexp+longz[i]-1;
+ }
+ }
+ dimexp=dimexp+fNAdim;
+
+ //Write in the buffer the new array
+ Int_t contaexp =0;
+ Int_t h=0;
+ Int_t l=0;
+ Short_t* bufferE = new Short_t[dimexp];
+ if(bufferE)
{
- bufferE[i+j]=0;
+ for(Int_t i=0; i<dimexp; i++)
+ {
+ if(fADC[contaexp]>0)
+ {
+ bufferE[i]=fADC[contaexp];
+ }
+ if((fADC[contaexp]<0)&&(fADC[contaexp]>=-16000))
+ {
+ for(Int_t j=0; j<longm[h];j++)
+ {
+ bufferE[i+j]=-1;
+ }
+ i=i+longm[h]-1;
+ h++;
+ }
+ if(fADC[contaexp]<-16000)
+ {
+ for(Int_t j=0; j<longz[l];j++)
+ {
+ bufferE[i+j]=0;
+ }
+ i=i+longz[l]-1;
+ l++;
+ }
+ contaexp++;
+ }
+ //Copy the buffer
+ delete [] fADC;
+ fADC = new Short_t[dimexp];
+ fNAdim = dimexp;
+ for(Int_t i=0; i<dimexp; i++)
+ {
+ fADC[i] = bufferE[i];
+ }
+
+ delete [] bufferE;
+
}
- i=i+longz[l]-1;
- l++;
+
+ //Delete auxiliary arrays
+ delete [] longm;
+ delete [] longz;
+
}
- contaexp++;
- }
- //Copy the buffer
- if(fADC)
- {
- delete [] fADC;
- fADC=0;
- }
- fADC = new Short_t[dimexp];
- fNAdim = dimexp;
- for(Int_t i=0; i<dimexp; i++)
- {
- fADC[i] = bufferE[i];
}
- //Delete auxiliary arrays
- if(bufferE) delete [] bufferE;
- if(longm) delete [] longm;
- if(longz) delete [] longz;
-
}
//____________________________________________________________________________________
void AliTRDarrayADC::DeleteNegatives()
//
memset(fADC,0,sizeof(Short_t)*fNAdim);
-
}
//________________________________________________________________________________
-Short_t AliTRDarrayADC::GetData(Int_t nrow, Int_t ncol, Int_t ntime) const
+void AliTRDarrayADC::ConditionalReset(AliTRDSignalIndex* idx)
{
//
- // Get the data using the pad numbering.
- // To access data using the mcm scheme use instead
- // the method GetDataByAdcCol
- //
-
- Int_t corrcolumn = fLutPadNumbering[ncol];
-
- return fADC[(nrow*fNumberOfChannels+corrcolumn)*fNtime+ntime];
-
-}
-//________________________________________________________________________________
-void AliTRDarrayADC::SetData(Int_t nrow, Int_t ncol, Int_t ntime, Short_t value)
-{
- //
- // Set the data using the pad numbering.
- // To write data using the mcm scheme use instead
- // the method SetDataByAdcCol
+ // Reset the array, the old contents are deleted
+ // The array keeps the same dimensions as before
//
-
- Int_t colnumb = fLutPadNumbering[ncol];
-
- fADC[(nrow*fNumberOfChannels+colnumb)*fNtime+ntime]=value;
+
+ if(idx->GetNoOfIndexes()>25)
+ memset(fADC,0,sizeof(Short_t)*fNAdim);
+ else
+ {
+ Int_t row, col;
+ while(idx->NextRCIndex(row, col)){
+ Int_t colnumb = fgLutPadNumbering[col];
+ memset(&fADC[(row*fNumberOfChannels+colnumb)*fNtime],0,fNtime);
+ }
+ }
}
// pad numbering and mcm channel numbering
//
- if(fLutPadNumbering)
- {
- delete [] fLutPadNumbering;
- }
+ if(fgLutPadNumbering) return;
- fLutPadNumbering = new Short_t[fNcol];
- memset(fLutPadNumbering,0,sizeof(Short_t)*fNcol);
+ fgLutPadNumbering = new Short_t[AliTRDfeeParam::GetNcol()];
+ memset(fgLutPadNumbering,0,sizeof(Short_t)*AliTRDfeeParam::GetNcol());
for(Int_t mcm=0; mcm<8; mcm++)
{
Int_t shiftposition = 1+3*mcm;
for(Int_t index=lowerlimit;index<upperlimit;index++)
{
- fLutPadNumbering[index]=index+shiftposition;
+ fgLutPadNumbering[index]=index+shiftposition;
}
}
}
-