]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TRD/AliTRDarrayADC.cxx
small correction for error calculation
[u/mrichter/AliRoot.git] / TRD / AliTRDarrayADC.cxx
index 91f96ccd504ea1298b3e43520ce3a58e3895c1c7..d04f6dced8cb4f4d41dc3d9a309c957b3ba542d7 100644 (file)
-/************************************************************************* 
-* Copyright(c) 1998-2008, ALICE Experiment at CERN, All rights reserved. * 
-*                                                                        * 
-* Author: The ALICE Off-line Project.                                    * 
-* Contributors are mentioned in the code where appropriate.              * 
-*                                                                        * 
-* Permission to use, copy, modify and distribute this software and its   * 
-* documentation strictly for non-commercial purposes is hereby granted   * 
-* without fee, provided that the above copyright notice appears in all   * 
-* copies and that both the copyright notice and this permission notice   * 
-* appear in the supporting documentation. The authors make no claims     * 
-* about the suitability of this software for any purpose. It is          * 
-* provided "as is" without express or implied warranty.                  *
-**************************************************************************/
-
-/* $Id: AliTRDarrayADC.cxx 25392 2008-04-23 19:40:29Z cblume $ */
-
-////////////////////////////////////////////////////////
-//                                                    //
-// Container class for ADC values                     //
-//                                                    //
-// Author:                                            //
-// Hermes Leon Vargas  (hleon@ikf.uni-frankfurt.de)   //
-//                                                    // 
-////////////////////////////////////////////////////////
-
-#include "AliTRDarrayADC.h"
-#include "Cal/AliTRDCalPadStatus.h" 
-
-ClassImp(AliTRDarrayADC)
-
-//____________________________________________________________________________________
-AliTRDarrayADC::AliTRDarrayADC()
-               :TObject()
-               ,fNdet(0)
-               ,fNrow(0)
-               ,fNcol(0)
-               ,fNtime(0) 
-               ,fNAdim(0)
-               ,fADC(0)
-{
-  //
-  // AliTRDarrayADC default constructor
-  //
-
-}
-
-//____________________________________________________________________________________
-AliTRDarrayADC::AliTRDarrayADC(Int_t nrow, Int_t ncol, Int_t ntime)
-               :TObject()
-              ,fNdet(0)               
-               ,fNrow(0)
-               ,fNcol(0)
-               ,fNtime(0) 
-               ,fNAdim(0)
-               ,fADC(0)
-{
-  //
-  // AliTRDarrayADC constructor
-  //
-
-  Allocate(nrow,ncol,ntime);
-
-}
-
-//____________________________________________________________________________________
-AliTRDarrayADC::AliTRDarrayADC(const AliTRDarrayADC &b)
-               :TObject()
-              ,fNdet(b.fNdet)
-               ,fNrow(b.fNrow)
-               ,fNcol(b.fNcol)
-               ,fNtime(b.fNtime) 
-               ,fNAdim(b.fNAdim)
-               ,fADC(0)
-{
-  //
-  // AliTRDarrayADC copy constructor
-  //
-
-  fADC =  new Short_t[fNAdim];
-  memcpy(fADC,b.fADC, fNAdim*sizeof(Short_t));
-
-}
-
-//____________________________________________________________________________________
-AliTRDarrayADC::~AliTRDarrayADC()
-{
-  //
-  // AliTRDarrayADC destructor
-  //
-
-  if(fADC)
-    {
-      delete [] fADC;
-      fADC=0;
-    }
-
-}
-
-//____________________________________________________________________________________
-AliTRDarrayADC &AliTRDarrayADC::operator=(const AliTRDarrayADC &b)
-{
-  //
-  // Assignment operator
-  //
-
-  if(this==&b)
-    {
-      return *this;
-    }
-
-  if(fADC)
-    {
-      delete [] fADC;
-    }
-  fNdet=b.fNdet;
-  fNrow=b.fNrow;
-  fNcol=b.fNcol;
-  fNtime=b.fNtime;
-  fNAdim=b.fNAdim;
-  fADC = new Short_t[fNAdim];
-  memcpy(fADC,b.fADC, fNAdim*sizeof(Short_t));
-  
-  return *this;
-
-}
-
-//____________________________________________________________________________________
-void AliTRDarrayADC::Allocate(Int_t nrow, Int_t ncol, Int_t ntime)
-{
-  //
-  // Allocate memory for an AliTRDarrayADC array with dimensions
-  // Row*Col*Time
-  //
-  
-  fNrow=nrow;
-  fNcol=ncol;
-  fNtime=ntime;
-  fNAdim=nrow*ncol*ntime;  
-
-  if(fADC)
-    {
-      delete [] fADC;
-    }
-  
-  fADC = new Short_t[fNAdim];
-  memset(fADC,0,sizeof(Short_t)*fNAdim);
-
-}
-
-//____________________________________________________________________________________
-Short_t AliTRDarrayADC::GetDataB(Int_t row, Int_t col, Int_t time) const
-{
-  //
-  // Get the ADC value for a given position: row, col, time
-  // Taking bit masking into account
-  //
-  // Adapted from code of the class AliTRDdataArrayDigits 
-  //
-
-  Short_t tempval = fADC[(row*fNcol+col)*fNtime+time];
-  // Be aware of manipulations introduced by pad masking in the RawReader
-  // Only output the manipulated Value
-  CLRBIT(tempval, 10);
-  CLRBIT(tempval, 11);
-  CLRBIT(tempval, 12);
-  return tempval;
-
-}
-
-//____________________________________________________________________________________
-UChar_t AliTRDarrayADC::GetPadStatus(Int_t row, Int_t col, Int_t time) const
-{
-  // 
-  // Returns the pad status stored in the pad signal
-  //
-  // Output is a UChar_t value
-  // Status Codes:
-  //               Noisy Masking:           2
-  //               Bridged Left Masking     8
-  //               Bridged Right Masking    8
-  //               Not Connected Masking Digits
-  //
-  // Adapted from code of the class AliTRDdataArrayDigits
-  //
-
-  UChar_t padstatus = 0;
-  Short_t signal = GetData(row,col,time);
-  if(signal > 0 && TESTBIT(signal, 10)){
-    if(TESTBIT(signal, 11))
-      if(TESTBIT(signal, 12))
-       padstatus = AliTRDCalPadStatus::kPadBridgedRight;
-      else
-       padstatus = AliTRDCalPadStatus::kNotConnected;
-    else
-      if(TESTBIT(signal, 12))
-       padstatus = AliTRDCalPadStatus::kPadBridgedLeft;
-      else
-       padstatus = AliTRDCalPadStatus::kMasked;
-  }
-
-  return padstatus;
-
-}
-
-//____________________________________________________________________________________
-void AliTRDarrayADC::SetPadStatus(Int_t row, Int_t col, Int_t time, UChar_t status)
-{
-  //
-  // Setting the pad status into the signal using the Bits 10 to 14 
-  // (currently used: 10 to 12)
-  //
-  // Input codes (Unsigned char):
-  //               Noisy Masking:           2
-  //               Bridged Left Masking     8
-  //               Bridged Right Masking    8
-  //               Not Connected Masking    32
-  //
-  // Status codes: Any masking:             Bit 10(1)
-  //               Noisy masking:           Bit 11(0), Bit 12(0)
-  //               No Connection masking:   Bit 11(1), Bit 12(0)
-  //               Bridged Left masking:    Bit 11(0), Bit 12(1)
-  //               Bridged Right masking:   Bit 11(1), Bit 12(1)
-  // 
-  // Adapted from code of the class AliTRDdataArrayDigits
-  //
-
-  Short_t signal = GetData(row,col,time);
-
-  // Only set the Pad Status if the signal is > 0
-  if(signal > 0)
-    {
-      switch(status)
-       {
-       case AliTRDCalPadStatus::kMasked:
-         SETBIT(signal, 10);
-         CLRBIT(signal, 11);
-         CLRBIT(signal, 12);
-         break;
-       case AliTRDCalPadStatus::kNotConnected:
-         SETBIT(signal, 10);
-         SETBIT(signal, 11);
-         CLRBIT(signal, 12);
-         break;
-       case AliTRDCalPadStatus::kPadBridgedLeft:
-         SETBIT(signal, 10);
-         CLRBIT(signal, 11);
-         SETBIT(signal, 12);
-         break;
-       case AliTRDCalPadStatus::kPadBridgedRight:
-         SETBIT(signal, 10);
-         SETBIT(signal, 11);
-         SETBIT(signal, 12);
-       default:
-         CLRBIT(signal, 10);
-         CLRBIT(signal, 11);
-         CLRBIT(signal, 12);
-       }
-      SetData(row, col, time, signal);
-    }
-
-}
-
-//____________________________________________________________________________________
-Bool_t AliTRDarrayADC::IsPadCorrupted(Int_t row, Int_t col, Int_t time)
-{
-  // 
-  // Checks if the pad has any masking as corrupted (Bit 10 in signal set)
-  // 
-  // Adapted from code of the class AliTRDdataArrayDigits
-  //
-
-  Short_t signal = GetData(row,col,time);
-  return (signal > 0 && TESTBIT(signal, 10)) ? kTRUE : kFALSE;
-
-}
-
-//____________________________________________________________________________________
-void AliTRDarrayADC::Compress()
-{
-  //
-  // Compress the array
-  //
-
-  Int_t counter=0;
-  Int_t newDim=0;
-  Int_t j;                  
-  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++)
-    {
-      j=0;
-      if(fADC[i]==-1)
-       {
-         for(k=i;k<fNAdim;k++)
-           {
-             if((fADC[k]==-1)&&(j<16000))   
-               {
-                 j=j+1;
-                 longm[r]=j;                
-               }
-             else
-               {
-                 break;
-               }
-           }
-         r=r+1;            
-       }
-      l=16001;
-      if(fADC[i]==0)
-       {
-         for(k=i;k<fNAdim;k++)
-           {
-             if((fADC[k]==0)&&(l<32767))     
-               {                             
-                 l=l+1;
-                 longz[s]=l;                
-               }
-             else
-               {
-                 break;
-               }
-           }
-         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)
-           {
-             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
-  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) 
-    {
-      delete [] longz;
-      longz=0;
-    }
-  if(longm) 
-    {
-      delete [] longm;
-      longm=0;
-    }
-
-}
-
-//____________________________________________________________________________________
-void AliTRDarrayADC::Expand()
-{
-  //
-  // 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[i]<-1)
-       {
-         verif++;
-       }
-    }
-  
-  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];
-       }
-
-      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
-  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()
-{
-
-  //
-  //This method modifies the digits array, changing the negative values (-1)
-  //Produced during digitization into zero.
-  //
-
-  for(Int_t a=0; a<fNAdim; a++)
-    {
-      if(fADC[a]==-1)
-       {
-         fADC[a]=0;
-       }
-    }
-}
+/************************************************************************* \r
+* Copyright(c) 1998-2008, ALICE Experiment at CERN, All rights reserved. * \r
+*                                                                        * \r
+* Author: The ALICE Off-line Project.                                    * \r
+* Contributors are mentioned in the code where appropriate.              * \r
+*                                                                        * \r
+* Permission to use, copy, modify and distribute this software and its   * \r
+* documentation strictly for non-commercial purposes is hereby granted   * \r
+* without fee, provided that the above copyright notice appears in all   * \r
+* copies and that both the copyright notice and this permission notice   * \r
+* appear in the supporting documentation. The authors make no claims     * \r
+* about the suitability of this software for any purpose. It is          * \r
+* provided "as is" without express or implied warranty.                  *\r
+**************************************************************************/\r
+\r
+/* $Id: AliTRDarrayADC.cxx 25392 2008-04-23 19:40:29Z cblume $ */\r
+\r
+////////////////////////////////////////////////////////\r
+//                                                    //\r
+// Container class for ADC values                     //\r
+//                                                    //\r
+// Author:                                            //\r
+// Hermes Leon Vargas  (hleon@ikf.uni-frankfurt.de)   //\r
+//                                                    // \r
+////////////////////////////////////////////////////////\r
+\r
+#include "AliTRDarrayADC.h"\r
+#include "Cal/AliTRDCalPadStatus.h"\r
+#include "AliTRDfeeParam.h"\r
+\r
+ClassImp(AliTRDarrayADC)\r
+\r
+Short_t *AliTRDarrayADC::fLutPadNumbering = 0x0;\r
+\r
+//____________________________________________________________________________________\r
+AliTRDarrayADC::AliTRDarrayADC()\r
+               :TObject()\r
+               ,fNdet(0)\r
+               ,fNrow(0)\r
+               ,fNcol(0)\r
+              ,fNumberOfChannels(0)\r
+               ,fNtime(0) \r
+               ,fNAdim(0)\r
+               ,fADC(0)\r
+{\r
+  //\r
+  // AliTRDarrayADC default constructor\r
+  //\r
+\r
+  CreateLut();\r
+\r
+}\r
+\r
+//____________________________________________________________________________________\r
+AliTRDarrayADC::AliTRDarrayADC(Int_t nrow, Int_t ncol, Int_t ntime)\r
+               :TObject()\r
+              ,fNdet(0)               \r
+               ,fNrow(0)\r
+               ,fNcol(0)\r
+              ,fNumberOfChannels(0)\r
+               ,fNtime(0) \r
+               ,fNAdim(0)\r
+               ,fADC(0)\r
+{\r
+  //\r
+  // AliTRDarrayADC constructor\r
+  //\r
+\r
+  CreateLut();\r
+  Allocate(nrow,ncol,ntime);\r
+\r
+}\r
+\r
+//____________________________________________________________________________________\r
+AliTRDarrayADC::AliTRDarrayADC(const AliTRDarrayADC &b)\r
+               :TObject()\r
+              ,fNdet(b.fNdet)\r
+               ,fNrow(b.fNrow)\r
+               ,fNcol(b.fNcol)\r
+              ,fNumberOfChannels(b.fNumberOfChannels)\r
+               ,fNtime(b.fNtime) \r
+               ,fNAdim(b.fNAdim)\r
+               ,fADC(0)         \r
+{\r
+  //\r
+  // AliTRDarrayADC copy constructor\r
+  //\r
+\r
+  fADC =  new Short_t[fNAdim];\r
+  memcpy(fADC,b.fADC, fNAdim*sizeof(Short_t));  \r
+\r
+}\r
+\r
+//____________________________________________________________________________________\r
+AliTRDarrayADC::~AliTRDarrayADC()\r
+{\r
+  //\r
+  // AliTRDarrayADC destructor\r
+  //\r
+\r
+  if(fADC)\r
+    {\r
+      delete [] fADC;\r
+      fADC=0;\r
+    }\r
+\r
+}\r
+\r
+//____________________________________________________________________________________\r
+AliTRDarrayADC &AliTRDarrayADC::operator=(const AliTRDarrayADC &b)\r
+{\r
+  //\r
+  // Assignment operator\r
+  //\r
+\r
+  if(this==&b)\r
+    {\r
+      return *this;\r
+    }\r
+  if(fADC)\r
+    {\r
+      delete [] fADC;\r
+    }\r
+  fNdet=b.fNdet;\r
+  fNrow=b.fNrow;\r
+  fNcol=b.fNcol;\r
+  fNumberOfChannels = b.fNumberOfChannels;\r
+  fNtime=b.fNtime;\r
+  fNAdim=b.fNAdim;\r
+  fADC = new Short_t[fNAdim];\r
+  memcpy(fADC,b.fADC, fNAdim*sizeof(Short_t));\r
+\r
+  return *this;\r
+\r
+}\r
+\r
+//____________________________________________________________________________________\r
+void AliTRDarrayADC::Allocate(Int_t nrow, Int_t ncol, Int_t ntime)\r
+{\r
+  //\r
+  // Allocate memory for an AliTRDarrayADC array with dimensions\r
+  // Row*NumberOfNecessaryMCMs*ADCchannelsInMCM*Time\r
+  //\r
+  \r
+  fNrow=nrow;\r
+  fNcol=ncol;\r
+  fNtime=ntime;\r
+  Int_t adcchannelspermcm = AliTRDfeeParam::GetNadcMcm(); \r
+  Int_t padspermcm = AliTRDfeeParam::GetNcolMcm(); \r
+  Int_t numberofmcms = fNcol/padspermcm; \r
+  fNumberOfChannels = numberofmcms*adcchannelspermcm; \r
+  fNAdim=nrow*fNumberOfChannels*ntime;\r
+\r
+  if(fADC)\r
+    {\r
+      delete [] fADC;\r
+    }\r
+  \r
+  fADC = new Short_t[fNAdim];\r
+  memset(fADC,0,sizeof(Short_t)*fNAdim);\r
+\r
+}\r
+\r
+//____________________________________________________________________________________\r
+Short_t AliTRDarrayADC::GetDataBits(Int_t row, Int_t col, Int_t time) const\r
+{\r
+  //\r
+  // Get the ADC value for a given position: row, col, time\r
+  // Taking bit masking into account\r
+  //\r
+  // Adapted from code of the class AliTRDdataArrayDigits \r
+  //\r
+\r
+  Short_t tempval = GetData(row,col,time);\r
+  // Be aware of manipulations introduced by pad masking in the RawReader\r
+  // Only output the manipulated Value\r
+  CLRBIT(tempval, 10);\r
+  CLRBIT(tempval, 11);\r
+  CLRBIT(tempval, 12);\r
+  return tempval;\r
+\r
+}\r
+\r
+//____________________________________________________________________________________\r
+UChar_t AliTRDarrayADC::GetPadStatus(Int_t row, Int_t col, Int_t time) const\r
+{\r
+  // \r
+  // Returns the pad status stored in the pad signal\r
+  //\r
+  // Output is a UChar_t value\r
+  // Status Codes:\r
+  //               Noisy Masking:           2\r
+  //               Bridged Left Masking     8\r
+  //               Bridged Right Masking    8\r
+  //               Not Connected Masking Digits\r
+  //\r
+  // Adapted from code of the class AliTRDdataArrayDigits\r
+  //\r
+\r
+  UChar_t padstatus = 0;\r
+  Short_t signal = GetData(row,col,time);\r
+  if(signal > 0 && TESTBIT(signal, 10)){\r
+    if(TESTBIT(signal, 11))\r
+      if(TESTBIT(signal, 12))\r
+       padstatus = AliTRDCalPadStatus::kPadBridgedRight;\r
+      else\r
+       padstatus = AliTRDCalPadStatus::kNotConnected;\r
+    else\r
+      if(TESTBIT(signal, 12))\r
+       padstatus = AliTRDCalPadStatus::kPadBridgedLeft;\r
+      else\r
+       padstatus = AliTRDCalPadStatus::kMasked;\r
+  }\r
+\r
+  return padstatus;\r
+\r
+}\r
+\r
+//____________________________________________________________________________________\r
+void AliTRDarrayADC::SetPadStatus(Int_t row, Int_t col, Int_t time, UChar_t status)\r
+{\r
+  //\r
+  // Setting the pad status into the signal using the Bits 10 to 14 \r
+  // (currently used: 10 to 12)\r
+  //\r
+  // Input codes (Unsigned char):\r
+  //               Noisy Masking:           2\r
+  //               Bridged Left Masking     8\r
+  //               Bridged Right Masking    8\r
+  //               Not Connected Masking    32\r
+  //\r
+  // Status codes: Any masking:             Bit 10(1)\r
+  //               Noisy masking:           Bit 11(0), Bit 12(0)\r
+  //               No Connection masking:   Bit 11(1), Bit 12(0)\r
+  //               Bridged Left masking:    Bit 11(0), Bit 12(1)\r
+  //               Bridged Right masking:   Bit 11(1), Bit 12(1)\r
+  // \r
+  // Adapted from code of the class AliTRDdataArrayDigits\r
+  //\r
+\r
+  Short_t signal = GetData(row,col,time);\r
+\r
+  // Only set the Pad Status if the signal is > 0\r
+  if(signal > 0)\r
+    {\r
+      switch(status)\r
+       {\r
+       case AliTRDCalPadStatus::kMasked:\r
+         SETBIT(signal, 10);\r
+         CLRBIT(signal, 11);\r
+         CLRBIT(signal, 12);\r
+         break;\r
+       case AliTRDCalPadStatus::kNotConnected:\r
+         SETBIT(signal, 10);\r
+         SETBIT(signal, 11);\r
+         CLRBIT(signal, 12);\r
+         break;\r
+       case AliTRDCalPadStatus::kPadBridgedLeft:\r
+         SETBIT(signal, 10);\r
+         CLRBIT(signal, 11);\r
+         SETBIT(signal, 12);\r
+         break;\r
+       case AliTRDCalPadStatus::kPadBridgedRight:\r
+         SETBIT(signal, 10);\r
+         SETBIT(signal, 11);\r
+         SETBIT(signal, 12);\r
+       default:\r
+         CLRBIT(signal, 10);\r
+         CLRBIT(signal, 11);\r
+         CLRBIT(signal, 12);\r
+       }\r
+      SetData(row, col, time, signal);\r
+    }\r
+\r
+}\r
+\r
+//____________________________________________________________________________________\r
+Bool_t AliTRDarrayADC::IsPadCorrupted(Int_t row, Int_t col, Int_t time)\r
+{\r
+  // \r
+  // Checks if the pad has any masking as corrupted (Bit 10 in signal set)\r
+  // \r
+  // Adapted from code of the class AliTRDdataArrayDigits\r
+  //\r
+\r
+  Short_t signal = GetData(row,col,time);\r
+  return (signal > 0 && TESTBIT(signal, 10)) ? kTRUE : kFALSE;\r
+\r
+}\r
+\r
+//____________________________________________________________________________________\r
+void AliTRDarrayADC::Compress()\r
+{\r
+  //\r
+  // Compress the array\r
+  //\r
+\r
+  Int_t counter=0;\r
+  Int_t newDim=0;\r
+  Int_t j;                  \r
+  Int_t l;                  \r
+  Int_t r=0;                \r
+  Int_t s=0;                \r
+  Int_t *longm;            \r
+  longm = new Int_t[fNAdim];  \r
+  Int_t *longz;            \r
+  longz = new Int_t[fNAdim];\r
+  Int_t k=0;\r
+  memset(longz,0,sizeof(Int_t)*fNAdim);\r
+  memset(longm,0,sizeof(Int_t)*fNAdim);\r
+\r
+  for(Int_t i=0;i<fNAdim; i++)\r
+    {\r
+      j=0;\r
+      if(fADC[i]==-1)\r
+       {\r
+         for(k=i;k<fNAdim;k++)\r
+           {\r
+             if((fADC[k]==-1)&&(j<16000))   \r
+               {\r
+                 j=j+1;\r
+                 longm[r]=j;                \r
+               }\r
+             else\r
+               {\r
+                 break;\r
+               }\r
+           }\r
+         r=r+1;            \r
+       }\r
+      l=16001;\r
+      if(fADC[i]==0)\r
+       {\r
+         for(k=i;k<fNAdim;k++)\r
+           {\r
+             if((fADC[k]==0)&&(l<32767))     \r
+               {                             \r
+                 l=l+1;\r
+                 longz[s]=l;                \r
+               }\r
+             else\r
+               {\r
+                 break;\r
+               }\r
+           }\r
+         s=s+1;         \r
+       }\r
+      if(fADC[i]>0)\r
+       {\r
+         i=i+1;\r
+       }\r
+      i=i+j+(l-16001-1); \r
+    }\r
+\r
+  //Calculate the size of the compressed array\r
+  for(Int_t i=0; i<fNAdim;i++)\r
+    {\r
+      if(longm[i]!=0)   \r
+       {\r
+         counter=counter+longm[i]-1;\r
+       }\r
+      if(longz[i]!=0)  \r
+       {\r
+         counter=counter+(longz[i]-16001)-1;\r
+       }\r
+    }\r
+  newDim = fNAdim-counter;   //Dimension of the compressed array\r
+  Short_t* buffer;\r
+  buffer = new Short_t[newDim];\r
+  Int_t counterTwo=0;\r
+\r
+  //Fill the buffer of the compressed array\r
+  Int_t g=0;\r
+  Int_t h=0; \r
+  for(Int_t i=0; i<newDim; i++)\r
+    {\r
+      if(counterTwo<fNAdim)\r
+       {\r
+         if(fADC[counterTwo]>0)\r
+           {\r
+             buffer[i]=fADC[counterTwo];\r
+           }\r
+         if(fADC[counterTwo]==-1)\r
+           {\r
+             buffer[i]=-(longm[g]);\r
+             counterTwo=counterTwo+longm[g]-1;\r
+             g++;\r
+           }  \r
+         if(fADC[counterTwo]==0)\r
+           {\r
+             buffer[i]=-(longz[h]); \r
+             counterTwo=counterTwo+(longz[h]-16001)-1;\r
+             h++;\r
+           }  \r
+         counterTwo++;\r
+       }\r
+    }\r
+\r
+  //Copy the buffer\r
+  if(fADC)\r
+    {\r
+      delete [] fADC;\r
+      fADC=0;\r
+    }\r
+  fADC = new Short_t[newDim];\r
+  fNAdim = newDim;\r
+  for(Int_t i=0; i<newDim; i++)\r
+    {\r
+      fADC[i] = buffer[i]; \r
+    }\r
+\r
+  //Delete auxiliary arrays\r
+  if(buffer)\r
+    {\r
+      delete [] buffer;\r
+      buffer=0;\r
+    } \r
+  if(longz) \r
+    {\r
+      delete [] longz;\r
+      longz=0;\r
+    }\r
+  if(longm) \r
+    {\r
+      delete [] longm;\r
+      longm=0;\r
+    }\r
+\r
+}\r
+\r
+//____________________________________________________________________________________\r
+void AliTRDarrayADC::Expand()\r
+{\r
+  //\r
+  // Expand the array\r
+  //\r
+\r
+  //Check if the array has not been already expanded\r
+  Int_t verif=0;\r
+  for(Int_t i=0; i<fNAdim; i++)\r
+    {\r
+      if(fADC[i]<-1)\r
+       {\r
+         verif++;\r
+       }\r
+    }\r
+  \r
+  if(verif==0)\r
+    {\r
+      //       AliDebug(1,"Nothing to expand");\r
+      return;\r
+    }\r
+\r
+  Int_t *longz;\r
+  longz = new Int_t[fNAdim];\r
+  Int_t *longm;\r
+  longm = new Int_t[fNAdim];\r
+  Int_t dimexp=0;\r
+  //Initialize arrays\r
+  memset(longz,0,sizeof(Int_t)*fNAdim);\r
+  memset(longm,0,sizeof(Int_t)*fNAdim);\r
+  Int_t r2=0; \r
+  Int_t r3=0; \r
+  for(Int_t i=0; i<fNAdim;i++)\r
+    {\r
+      if((fADC[i]<0)&&(fADC[i]>=-16000))      \r
+       {\r
+         longm[r2]=-fADC[i];\r
+         r2++;\r
+       }\r
+      if(fADC[i]<-16000)  \r
+       {\r
+         longz[r3]=-fADC[i]-16001;  \r
+         r3++;\r
+       }\r
+    }\r
+  //Calculate the new dimensions of the array\r
+  for(Int_t i=0; i<fNAdim;i++)\r
+    {\r
+      if(longm[i]!=0)       \r
+       {\r
+         dimexp=dimexp+longm[i]-1;\r
+       }\r
+      if(longz[i]!=0)      \r
+       {\r
+         dimexp=dimexp+longz[i]-1;\r
+       }\r
+    }\r
+  dimexp=dimexp+fNAdim;   \r
+\r
+  //Write in the buffer the new array\r
+  Short_t* bufferE;\r
+  bufferE = new Short_t[dimexp];\r
+  Int_t contaexp =0;     \r
+  Int_t h=0;\r
+  Int_t l=0;  \r
+  for(Int_t i=0; i<dimexp; i++)\r
+    {\r
+      if(fADC[contaexp]>0)  \r
+       {\r
+         bufferE[i]=fADC[contaexp];\r
+       }\r
+\r
+      if((fADC[contaexp]<0)&&(fADC[contaexp]>=-16000))  \r
+       {\r
+         for(Int_t j=0; j<longm[h];j++)\r
+           {\r
+             bufferE[i+j]=-1;\r
+           }\r
+         i=i+longm[h]-1;\r
+         h++;\r
+       }\r
+      if(fADC[contaexp]<-16000)  \r
+       {\r
+         for(Int_t j=0; j<longz[l];j++)\r
+           {\r
+             bufferE[i+j]=0;  \r
+           }\r
+         i=i+longz[l]-1;\r
+         l++;\r
+       }\r
+      contaexp++;\r
+    }\r
+  //Copy the buffer\r
+  if(fADC)\r
+    {\r
+      delete [] fADC;\r
+      fADC=0;\r
+    }\r
+\r
+  fADC = new Short_t[dimexp];\r
+  fNAdim = dimexp;\r
+  for(Int_t i=0; i<dimexp; i++)\r
+    {\r
+      fADC[i] = bufferE[i]; \r
+    }\r
+\r
+  //Delete auxiliary arrays\r
+  if(bufferE) delete [] bufferE;\r
+  if(longm) delete [] longm;\r
+  if(longz) delete [] longz;\r
+\r
+}\r
+//____________________________________________________________________________________\r
+void AliTRDarrayADC::DeleteNegatives()\r
+{\r
+\r
+  //\r
+  //This method modifies the digits array, changing the negative values (-1)\r
+  //Produced during digitization into zero.\r
+  //\r
+\r
+  for(Int_t a=0; a<fNAdim; a++)\r
+    {\r
+      if(fADC[a]==-1)\r
+       {\r
+         fADC[a]=0;\r
+       }\r
+    }\r
+}\r
+//________________________________________________________________________________\r
+void AliTRDarrayADC::Reset()\r
+{\r
+  //\r
+  // Reset the array, the old contents are deleted\r
+  // The array keeps the same dimensions as before\r
+  //\r
\r
+  memset(fADC,0,sizeof(Short_t)*fNAdim);\r
+\r
+}\r
+//________________________________________________________________________________\r
+Short_t AliTRDarrayADC::GetData(Int_t nrow, Int_t ncol, Int_t ntime) const\r
+{\r
+  //\r
+  // Get the data using the pad numbering.\r
+  // To access data using the mcm scheme use instead\r
+  // the method GetDataByAdcCol\r
+  //\r
+\r
+  Int_t corrcolumn = fLutPadNumbering[ncol];\r
+\r
+  return fADC[(nrow*fNumberOfChannels+corrcolumn)*fNtime+ntime];\r
+\r
+}\r
+//________________________________________________________________________________\r
+void AliTRDarrayADC::SetData(Int_t nrow, Int_t ncol, Int_t ntime, Short_t value)\r
+{\r
+  //\r
+  // Set the data using the pad numbering.\r
+  // To write data using the mcm scheme use instead\r
+  // the method SetDataByAdcCol\r
+  //\r
+\r
+  Int_t colnumb = fLutPadNumbering[ncol];\r
+\r
+  fADC[(nrow*fNumberOfChannels+colnumb)*fNtime+ntime]=value;\r
+\r
+}\r
+\r
+//________________________________________________________________________________\r
+void AliTRDarrayADC::CreateLut()\r
+{\r
+  //\r
+  // Initializes the Look Up Table to relate\r
+  // pad numbering and mcm channel numbering\r
+  //\r
+\r
+  if(fLutPadNumbering)  return;\r
+  \r
+   fLutPadNumbering = new Short_t[AliTRDfeeParam::GetNcol()];\r
+   memset(fLutPadNumbering,0,sizeof(Short_t)*AliTRDfeeParam::GetNcol());\r
+\r
+  for(Int_t mcm=0; mcm<8; mcm++)\r
+    {\r
+      Int_t lowerlimit=0+mcm*18;\r
+      Int_t upperlimit=18+mcm*18;\r
+      Int_t shiftposition = 1+3*mcm;\r
+      for(Int_t index=lowerlimit;index<upperlimit;index++)\r
+       {\r
+         fLutPadNumbering[index]=index+shiftposition;\r
+       }\r
+    }\r
+}\r