ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, 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.                  *
 **************************************************************************/

/*
$Log$
Revision 1.1  2005/10/11 12:31:50  masera
Preprocessor classes for SPD (Paul Nilsson)

*/

///////////////////////////////////////////////////////////////////////////
// AliITSBadChannelsAuxSPD implementation by P. Nilsson 2005
// AUTHOR/CONTACT: Paul.Nilsson@cern.ch
//
// Auxiliary algorithms for the SPD
//
// This class contains converter methods and general algorithms for
// handling digit <-> channel convertions and methods for identifying
// changes (diff's) in arrays of bad channels, and for finding channels
// or digits in arrays of bad channels.
//
// The Diff algorithm can be used to check if there are any changes among
// the noisy channels. It returns two arrays, one with noisy channels
// are no longer visible (less likely to happen) and one with newly found
// noisy channels (more likely to happen).
//
// The Find algorithms looks for a given digit or channel in an array of
// known channels. It can be used by the clustering algorithms to check
// if a given digit that is about to be clustered, is in fact a known
// noisy channel. It should not be used in a normal cluster.
//
// Examples - Converters
//
// root [0] AliITSdigitSPD *d = new AliITSdigitSPD();
// root [1] d->SetCoord1(1);
// root [2] d->SetCoord2(2);
// root [3] d->SetSignal(1);
// root [4] AliITSBadChannelsAuxSPD *aux = new AliITSBadChannelsAuxSPD();
// root [5] AliITSChannelSPD *c = aux->CreateChannelFromDigit(d);
// root [6] cout << c->GetColumn() << endl;
// 1
// root [7] cout << c->GetRow() << endl;
// 2
// root [8] AliITSdigitSPD *d2 = aux->CreateDigitFromChannel(c);
// root [9] cout << d2->GetCoord1() << endl;
// 1
// root [10] cout << d2->GetCoord2() << endl;
// 2
// root [11] cout << d2->GetSignal() << endl;
// 1
// root [12] delete d2;
// root [13] delete d;
// root [14] delete c;
//
// The signal member of the digit is not a member of the channel class.
// It is artificially introduced by the CreateDigitFromChannel method and
// is per default set to 1.
//
// Modified by D. Elia, H. Tydesjo
// March 2006: Mixed up coordinates, bug fixed
//
///////////////////////////////////////////////////////////////////////////

#include "AliITSBadChannelsAuxSPD.h"

ClassImp(AliITSBadChannelsAuxSPD)

//__________________________________________________________________________
AliITSBadChannelsAuxSPD::AliITSBadChannelsAuxSPD(void)
{
  // Default constructor
}

//__________________________________________________________________________
Bool_t AliITSBadChannelsAuxSPD::Diff(TObjArray *&inputArray1, TObjArray *&inputArray2,
				     TObjArray *&outputArray1, TObjArray *&outputArray2) const
{
  // Make a diff between the input TObjArrays
  // 
  // Input: Two input TObjArrays of AliITSChannelSPD objects to be tested, two output TObjArrays corresponding
  //        to 
  // Output: Two output TObjArrays where outputArray1 contains the AliITSChannelSPD objects from inputArray1
  //         that are not in inputArray2, vice versa for outputArray2.
  // Return: kTRUE if the arrays differ

  Bool_t status = kFALSE;

  const Int_t kInputArray1Size = inputArray1->GetEntries();
  const Int_t kInputArray2Size = inputArray2->GetEntries();
  AliITSChannelSPD *ch1 = 0;
  AliITSChannelSPD *ch2 = 0;
  Bool_t found = kFALSE;

  Int_t i = 0, j = 0;

  // Pass 1
  Int_t lastFoundAtJ = -1;
  for (i = 0; i < kInputArray1Size; i++)
    {
      // Get the next channel from array 1
      ch1 = (AliITSChannelSPD *) inputArray1->At(i);

      // Is ch1 also in array 2?
      for (j = lastFoundAtJ + 1; j < kInputArray2Size; j++)
        {
          ch2 = (AliITSChannelSPD *) inputArray2->At(j);
          if (*ch1 == *ch2)
            {
              // Abort, go to next i
              found = kTRUE;
              lastFoundAtJ = j;
              break;
            }
        }

      // If ch1 was not found in array 2, store it
      if (!found)
        {
          outputArray1->Add(ch1);
        }
      else
        {
          found = kFALSE;
        }
    }

  // Pass 2
  lastFoundAtJ = -1;
  for (i = 0; i < kInputArray2Size; i++)
    {
      // Get the next channel from array 2
      ch2 = (AliITSChannelSPD *) inputArray2->At(i);

      // Is ch2 also in array 1?
      for (j = lastFoundAtJ + 1; j < kInputArray1Size; j++)
        {
          ch1 = (AliITSChannelSPD *) inputArray1->At(j);
          if (*ch1 == *ch2)
            {
              // Abort, go to next i
              found = kTRUE;
              lastFoundAtJ = j;
              break;
            }
        }

      // If ch1 was not found in array 1, store it
      if (!found)
        {
          outputArray2->Add(ch2);
        }
      else
        {
          found = kFALSE;
        }
    }

  if (outputArray1->GetEntries() > 0 || outputArray2->GetEntries() > 0) status = kTRUE;

  return status;
}

//__________________________________________________________________________
Bool_t AliITSBadChannelsAuxSPD::Find(AliITSChannelSPD *&channel, TObjArray *&array) const
{
  // Find the channel in the array
  //
  // Input: AliITSChannelSPD channel object, TObjArray of AliITSChannelSPD channel objects
  // Ouput: (none)
  // Return: kTRUE if channel is found in the array, kFALSE otherwise

  Bool_t status = kFALSE;

  // Loop over all channels in the array
  Int_t channelNr = 0;
  const Int_t kN = array->GetEntries();
  while (channelNr < kN)
    {
      if (*channel == *(AliITSChannelSPD *)array->At(channelNr))
	{
	  status = kTRUE;
	  break;
	}

      // Go to next channel
      channelNr++;
    }

  return status;
}

//__________________________________________________________________________
Bool_t AliITSBadChannelsAuxSPD::Find(AliITSdigitSPD *&digit, TObjArray *&array) const
{
  // Find the digit in the array
  //
  // WARNING: Using AliITSdigitSPD digits in this way is roughly 10% slower than to use AliITSChannelSPD channels
  //
  // Input: AliITSdigitSPD digit object, TObjArray of AliITSChannelSPD channel objects
  // Ouput: (none)
  // Return: kTRUE if digit is found in the array, kFALSE otherwise

  Bool_t status = kFALSE;

  AliITSChannelSPD *channel = 0;
  const Int_t kN = array->GetEntries();
  Int_t channelNr = 0;
  Int_t column = digit->GetCoord1();
  Int_t row = digit->GetCoord2();

  // Loop over all channels in the array
  while (channelNr < kN)
    {
      channel = (AliITSChannelSPD *)array->At(channelNr);
      if ( (channel->GetColumn() == column) && (channel->GetRow() == row) )
	{
	  status = kTRUE;
	  break;
	}

      // Go to next channel
      channelNr++;
    }

  return status;
}

//__________________________________________________________________________
AliITSdigitSPD* AliITSBadChannelsAuxSPD::CreateDigitFromChannel(const AliITSChannelSPD *&channel) const
{
  // Create a digit from a channel
  //
  // Input: AliITSChannelSPD object
  // Ouput: (none)
  // Return: AliITSdigitSPD object

  AliITSdigitSPD *digit = new AliITSdigitSPD();

  digit->SetCoord1(channel->GetColumn());
  digit->SetCoord2(channel->GetRow());
  digit->SetSignal(1);

  return digit;
}

//__________________________________________________________________________
AliITSChannelSPD* AliITSBadChannelsAuxSPD::CreateChannelFromDigit(const AliITSdigitSPD *&digit) const
{
  // Create a channel from a digit
  //
  // Input: AliITSdigitSPD object
  // Ouput: (none)
  // Return: AliITSChannelSPD object

  AliITSChannelSPD *channel = new AliITSChannelSPD();

  channel->SetColumn(digit->GetCoord1());
  channel->SetRow(digit->GetCoord2());

  return channel;
}

//__________________________________________________________________________
Int_t AliITSBadChannelsAuxSPD::GetNumberOfBadChannels(Int_t* &badChannelsArray, Int_t* &indexArray, Int_t size) const
{
  // Get the total number of bad channels

  Int_t n = 0;

  // Loop over all modules
  for (Int_t module = 0; module < size; module++)
    {
      // Get the module size (i.e. the number of bad channels)
      n += badChannelsArray[indexArray[module]];
    }

  return n;
}

//__________________________________________________________________________
Bool_t AliITSBadChannelsAuxSPD::CreateHTMLReport(char *name, Int_t* &badChannelsArray, Int_t* &indexArray,
						 Int_t indexArraySize, TString *buffer, Bool_t tags)
{
  // Create an HTML report from the bad channels array
  //
  // Input : file name, badChannelsArray, indexArray, size of indexArray (i.e. number of modules),
  //         tags boolean (if true, html tags will be added; if false, only formatted text will be created)
  // Output: TString (buffer) containing the html code/ASCII text
  // Return: kTRUE if a report has been created

  Bool_t status = kFALSE;

  Int_t totalNumberOfBadChannels = 0;
  Int_t numberOfModulesWithBadChannels = 0;

  if (tags)
    {
      buffer->Append("<html>");
      buffer->Append("<head><title>SPD bad channels</title></head>\n");
      buffer->Append("<body>\n");
    }

  buffer->Append("HTML report for file: ");
  buffer->Append(name);

  tags ? buffer->Append("<br>\n<br>\n") : buffer->Append("\n\n");

  char temp[10];

  // Loop over all modules
  for (Int_t module = 0; module < indexArraySize; module++)
    {
      // Get the start position of the data
      Int_t position = indexArray[module];

      // Get the module size (i.e. the number of bad channels)
      Int_t size = badChannelsArray[position++];

      // Only continue if there are bad channels in this module
      if (size > 0)
	{
	  // There are bad channels in this file
	  status = kTRUE;
	  numberOfModulesWithBadChannels++;
	  totalNumberOfBadChannels += size;

	  // Create report
	  buffer->Append("SPD module = ");
	  snprintf(temp,9,"%d",module);
	  buffer->Append(temp);
	  buffer->Append("<br>\n");
	  buffer->Append("Number of bad channels = ");
	  snprintf(temp,9,"%d",size);
	  buffer->Append(temp);

	  tags ? buffer->Append("<br>\n") : buffer->Append("\n");

	  buffer->Append("(column, row) = ");

	  // Get all bad channels
	  Int_t i = 0;
	  while (i < size)
	    {
	      // Create and add the current channel
	      buffer->Append("(");
	      snprintf(temp,10,"%d",badChannelsArray[position++]);
	      buffer->Append(temp);
	      buffer->Append(", ");
	      snprintf(temp,10,"%d",badChannelsArray[position++]);
	      buffer->Append(temp);
	      buffer->Append(")");

	      if (i < size - 1)
		{
		  buffer->Append(", ");
		}
	      else
		{
		  tags ? buffer->Append("<br>\n") : buffer->Append("\n");
		}

	      // Go to next bad channel
	      i++;
	    }

	  tags ? buffer->Append("<br>\n") : buffer->Append("\n");

	} // if size > 0
    } // end loop over modules

  if (!status)
    {
      buffer->Append("(Data does not contain any known bad channels)");
    }

  tags ? buffer->Append("<br>\n") : buffer->Append("\n");

  buffer->Append("Total number of bad channels = ");
  snprintf(temp,10,"%d",totalNumberOfBadChannels);
  buffer->Append(temp);

  tags ? buffer->Append("<br>\n") : buffer->Append("\n");

  buffer->Append("Number of modules with bad channels = ");
  snprintf(temp,10,"%d",numberOfModulesWithBadChannels);
  buffer->Append(temp);

  tags ? buffer->Append("<br>\n") : buffer->Append("\n");

  buffer->Append("Number of modules = ");
  snprintf(temp,10,"%d",indexArraySize);
  buffer->Append(temp);

  if (tags)
    {
      buffer->Append("<br>\n");
      buffer->Append("</body>\n");
      buffer->Append("</html>");
    }
  else
    {
      buffer->Append("\n");
    }

  return status;
}
 AliITSBadChannelsAuxSPD.cxx:1
 AliITSBadChannelsAuxSPD.cxx:2
 AliITSBadChannelsAuxSPD.cxx:3
 AliITSBadChannelsAuxSPD.cxx:4
 AliITSBadChannelsAuxSPD.cxx:5
 AliITSBadChannelsAuxSPD.cxx:6
 AliITSBadChannelsAuxSPD.cxx:7
 AliITSBadChannelsAuxSPD.cxx:8
 AliITSBadChannelsAuxSPD.cxx:9
 AliITSBadChannelsAuxSPD.cxx:10
 AliITSBadChannelsAuxSPD.cxx:11
 AliITSBadChannelsAuxSPD.cxx:12
 AliITSBadChannelsAuxSPD.cxx:13
 AliITSBadChannelsAuxSPD.cxx:14
 AliITSBadChannelsAuxSPD.cxx:15
 AliITSBadChannelsAuxSPD.cxx:16
 AliITSBadChannelsAuxSPD.cxx:17
 AliITSBadChannelsAuxSPD.cxx:18
 AliITSBadChannelsAuxSPD.cxx:19
 AliITSBadChannelsAuxSPD.cxx:20
 AliITSBadChannelsAuxSPD.cxx:21
 AliITSBadChannelsAuxSPD.cxx:22
 AliITSBadChannelsAuxSPD.cxx:23
 AliITSBadChannelsAuxSPD.cxx:24
 AliITSBadChannelsAuxSPD.cxx:25
 AliITSBadChannelsAuxSPD.cxx:26
 AliITSBadChannelsAuxSPD.cxx:27
 AliITSBadChannelsAuxSPD.cxx:28
 AliITSBadChannelsAuxSPD.cxx:29
 AliITSBadChannelsAuxSPD.cxx:30
 AliITSBadChannelsAuxSPD.cxx:31
 AliITSBadChannelsAuxSPD.cxx:32
 AliITSBadChannelsAuxSPD.cxx:33
 AliITSBadChannelsAuxSPD.cxx:34
 AliITSBadChannelsAuxSPD.cxx:35
 AliITSBadChannelsAuxSPD.cxx:36
 AliITSBadChannelsAuxSPD.cxx:37
 AliITSBadChannelsAuxSPD.cxx:38
 AliITSBadChannelsAuxSPD.cxx:39
 AliITSBadChannelsAuxSPD.cxx:40
 AliITSBadChannelsAuxSPD.cxx:41
 AliITSBadChannelsAuxSPD.cxx:42
 AliITSBadChannelsAuxSPD.cxx:43
 AliITSBadChannelsAuxSPD.cxx:44
 AliITSBadChannelsAuxSPD.cxx:45
 AliITSBadChannelsAuxSPD.cxx:46
 AliITSBadChannelsAuxSPD.cxx:47
 AliITSBadChannelsAuxSPD.cxx:48
 AliITSBadChannelsAuxSPD.cxx:49
 AliITSBadChannelsAuxSPD.cxx:50
 AliITSBadChannelsAuxSPD.cxx:51
 AliITSBadChannelsAuxSPD.cxx:52
 AliITSBadChannelsAuxSPD.cxx:53
 AliITSBadChannelsAuxSPD.cxx:54
 AliITSBadChannelsAuxSPD.cxx:55
 AliITSBadChannelsAuxSPD.cxx:56
 AliITSBadChannelsAuxSPD.cxx:57
 AliITSBadChannelsAuxSPD.cxx:58
 AliITSBadChannelsAuxSPD.cxx:59
 AliITSBadChannelsAuxSPD.cxx:60
 AliITSBadChannelsAuxSPD.cxx:61
 AliITSBadChannelsAuxSPD.cxx:62
 AliITSBadChannelsAuxSPD.cxx:63
 AliITSBadChannelsAuxSPD.cxx:64
 AliITSBadChannelsAuxSPD.cxx:65
 AliITSBadChannelsAuxSPD.cxx:66
 AliITSBadChannelsAuxSPD.cxx:67
 AliITSBadChannelsAuxSPD.cxx:68
 AliITSBadChannelsAuxSPD.cxx:69
 AliITSBadChannelsAuxSPD.cxx:70
 AliITSBadChannelsAuxSPD.cxx:71
 AliITSBadChannelsAuxSPD.cxx:72
 AliITSBadChannelsAuxSPD.cxx:73
 AliITSBadChannelsAuxSPD.cxx:74
 AliITSBadChannelsAuxSPD.cxx:75
 AliITSBadChannelsAuxSPD.cxx:76
 AliITSBadChannelsAuxSPD.cxx:77
 AliITSBadChannelsAuxSPD.cxx:78
 AliITSBadChannelsAuxSPD.cxx:79
 AliITSBadChannelsAuxSPD.cxx:80
 AliITSBadChannelsAuxSPD.cxx:81
 AliITSBadChannelsAuxSPD.cxx:82
 AliITSBadChannelsAuxSPD.cxx:83
 AliITSBadChannelsAuxSPD.cxx:84
 AliITSBadChannelsAuxSPD.cxx:85
 AliITSBadChannelsAuxSPD.cxx:86
 AliITSBadChannelsAuxSPD.cxx:87
 AliITSBadChannelsAuxSPD.cxx:88
 AliITSBadChannelsAuxSPD.cxx:89
 AliITSBadChannelsAuxSPD.cxx:90
 AliITSBadChannelsAuxSPD.cxx:91
 AliITSBadChannelsAuxSPD.cxx:92
 AliITSBadChannelsAuxSPD.cxx:93
 AliITSBadChannelsAuxSPD.cxx:94
 AliITSBadChannelsAuxSPD.cxx:95
 AliITSBadChannelsAuxSPD.cxx:96
 AliITSBadChannelsAuxSPD.cxx:97
 AliITSBadChannelsAuxSPD.cxx:98
 AliITSBadChannelsAuxSPD.cxx:99
 AliITSBadChannelsAuxSPD.cxx:100
 AliITSBadChannelsAuxSPD.cxx:101
 AliITSBadChannelsAuxSPD.cxx:102
 AliITSBadChannelsAuxSPD.cxx:103
 AliITSBadChannelsAuxSPD.cxx:104
 AliITSBadChannelsAuxSPD.cxx:105
 AliITSBadChannelsAuxSPD.cxx:106
 AliITSBadChannelsAuxSPD.cxx:107
 AliITSBadChannelsAuxSPD.cxx:108
 AliITSBadChannelsAuxSPD.cxx:109
 AliITSBadChannelsAuxSPD.cxx:110
 AliITSBadChannelsAuxSPD.cxx:111
 AliITSBadChannelsAuxSPD.cxx:112
 AliITSBadChannelsAuxSPD.cxx:113
 AliITSBadChannelsAuxSPD.cxx:114
 AliITSBadChannelsAuxSPD.cxx:115
 AliITSBadChannelsAuxSPD.cxx:116
 AliITSBadChannelsAuxSPD.cxx:117
 AliITSBadChannelsAuxSPD.cxx:118
 AliITSBadChannelsAuxSPD.cxx:119
 AliITSBadChannelsAuxSPD.cxx:120
 AliITSBadChannelsAuxSPD.cxx:121
 AliITSBadChannelsAuxSPD.cxx:122
 AliITSBadChannelsAuxSPD.cxx:123
 AliITSBadChannelsAuxSPD.cxx:124
 AliITSBadChannelsAuxSPD.cxx:125
 AliITSBadChannelsAuxSPD.cxx:126
 AliITSBadChannelsAuxSPD.cxx:127
 AliITSBadChannelsAuxSPD.cxx:128
 AliITSBadChannelsAuxSPD.cxx:129
 AliITSBadChannelsAuxSPD.cxx:130
 AliITSBadChannelsAuxSPD.cxx:131
 AliITSBadChannelsAuxSPD.cxx:132
 AliITSBadChannelsAuxSPD.cxx:133
 AliITSBadChannelsAuxSPD.cxx:134
 AliITSBadChannelsAuxSPD.cxx:135
 AliITSBadChannelsAuxSPD.cxx:136
 AliITSBadChannelsAuxSPD.cxx:137
 AliITSBadChannelsAuxSPD.cxx:138
 AliITSBadChannelsAuxSPD.cxx:139
 AliITSBadChannelsAuxSPD.cxx:140
 AliITSBadChannelsAuxSPD.cxx:141
 AliITSBadChannelsAuxSPD.cxx:142
 AliITSBadChannelsAuxSPD.cxx:143
 AliITSBadChannelsAuxSPD.cxx:144
 AliITSBadChannelsAuxSPD.cxx:145
 AliITSBadChannelsAuxSPD.cxx:146
 AliITSBadChannelsAuxSPD.cxx:147
 AliITSBadChannelsAuxSPD.cxx:148
 AliITSBadChannelsAuxSPD.cxx:149
 AliITSBadChannelsAuxSPD.cxx:150
 AliITSBadChannelsAuxSPD.cxx:151
 AliITSBadChannelsAuxSPD.cxx:152
 AliITSBadChannelsAuxSPD.cxx:153
 AliITSBadChannelsAuxSPD.cxx:154
 AliITSBadChannelsAuxSPD.cxx:155
 AliITSBadChannelsAuxSPD.cxx:156
 AliITSBadChannelsAuxSPD.cxx:157
 AliITSBadChannelsAuxSPD.cxx:158
 AliITSBadChannelsAuxSPD.cxx:159
 AliITSBadChannelsAuxSPD.cxx:160
 AliITSBadChannelsAuxSPD.cxx:161
 AliITSBadChannelsAuxSPD.cxx:162
 AliITSBadChannelsAuxSPD.cxx:163
 AliITSBadChannelsAuxSPD.cxx:164
 AliITSBadChannelsAuxSPD.cxx:165
 AliITSBadChannelsAuxSPD.cxx:166
 AliITSBadChannelsAuxSPD.cxx:167
 AliITSBadChannelsAuxSPD.cxx:168
 AliITSBadChannelsAuxSPD.cxx:169
 AliITSBadChannelsAuxSPD.cxx:170
 AliITSBadChannelsAuxSPD.cxx:171
 AliITSBadChannelsAuxSPD.cxx:172
 AliITSBadChannelsAuxSPD.cxx:173
 AliITSBadChannelsAuxSPD.cxx:174
 AliITSBadChannelsAuxSPD.cxx:175
 AliITSBadChannelsAuxSPD.cxx:176
 AliITSBadChannelsAuxSPD.cxx:177
 AliITSBadChannelsAuxSPD.cxx:178
 AliITSBadChannelsAuxSPD.cxx:179
 AliITSBadChannelsAuxSPD.cxx:180
 AliITSBadChannelsAuxSPD.cxx:181
 AliITSBadChannelsAuxSPD.cxx:182
 AliITSBadChannelsAuxSPD.cxx:183
 AliITSBadChannelsAuxSPD.cxx:184
 AliITSBadChannelsAuxSPD.cxx:185
 AliITSBadChannelsAuxSPD.cxx:186
 AliITSBadChannelsAuxSPD.cxx:187
 AliITSBadChannelsAuxSPD.cxx:188
 AliITSBadChannelsAuxSPD.cxx:189
 AliITSBadChannelsAuxSPD.cxx:190
 AliITSBadChannelsAuxSPD.cxx:191
 AliITSBadChannelsAuxSPD.cxx:192
 AliITSBadChannelsAuxSPD.cxx:193
 AliITSBadChannelsAuxSPD.cxx:194
 AliITSBadChannelsAuxSPD.cxx:195
 AliITSBadChannelsAuxSPD.cxx:196
 AliITSBadChannelsAuxSPD.cxx:197
 AliITSBadChannelsAuxSPD.cxx:198
 AliITSBadChannelsAuxSPD.cxx:199
 AliITSBadChannelsAuxSPD.cxx:200
 AliITSBadChannelsAuxSPD.cxx:201
 AliITSBadChannelsAuxSPD.cxx:202
 AliITSBadChannelsAuxSPD.cxx:203
 AliITSBadChannelsAuxSPD.cxx:204
 AliITSBadChannelsAuxSPD.cxx:205
 AliITSBadChannelsAuxSPD.cxx:206
 AliITSBadChannelsAuxSPD.cxx:207
 AliITSBadChannelsAuxSPD.cxx:208
 AliITSBadChannelsAuxSPD.cxx:209
 AliITSBadChannelsAuxSPD.cxx:210
 AliITSBadChannelsAuxSPD.cxx:211
 AliITSBadChannelsAuxSPD.cxx:212
 AliITSBadChannelsAuxSPD.cxx:213
 AliITSBadChannelsAuxSPD.cxx:214
 AliITSBadChannelsAuxSPD.cxx:215
 AliITSBadChannelsAuxSPD.cxx:216
 AliITSBadChannelsAuxSPD.cxx:217
 AliITSBadChannelsAuxSPD.cxx:218
 AliITSBadChannelsAuxSPD.cxx:219
 AliITSBadChannelsAuxSPD.cxx:220
 AliITSBadChannelsAuxSPD.cxx:221
 AliITSBadChannelsAuxSPD.cxx:222
 AliITSBadChannelsAuxSPD.cxx:223
 AliITSBadChannelsAuxSPD.cxx:224
 AliITSBadChannelsAuxSPD.cxx:225
 AliITSBadChannelsAuxSPD.cxx:226
 AliITSBadChannelsAuxSPD.cxx:227
 AliITSBadChannelsAuxSPD.cxx:228
 AliITSBadChannelsAuxSPD.cxx:229
 AliITSBadChannelsAuxSPD.cxx:230
 AliITSBadChannelsAuxSPD.cxx:231
 AliITSBadChannelsAuxSPD.cxx:232
 AliITSBadChannelsAuxSPD.cxx:233
 AliITSBadChannelsAuxSPD.cxx:234
 AliITSBadChannelsAuxSPD.cxx:235
 AliITSBadChannelsAuxSPD.cxx:236
 AliITSBadChannelsAuxSPD.cxx:237
 AliITSBadChannelsAuxSPD.cxx:238
 AliITSBadChannelsAuxSPD.cxx:239
 AliITSBadChannelsAuxSPD.cxx:240
 AliITSBadChannelsAuxSPD.cxx:241
 AliITSBadChannelsAuxSPD.cxx:242
 AliITSBadChannelsAuxSPD.cxx:243
 AliITSBadChannelsAuxSPD.cxx:244
 AliITSBadChannelsAuxSPD.cxx:245
 AliITSBadChannelsAuxSPD.cxx:246
 AliITSBadChannelsAuxSPD.cxx:247
 AliITSBadChannelsAuxSPD.cxx:248
 AliITSBadChannelsAuxSPD.cxx:249
 AliITSBadChannelsAuxSPD.cxx:250
 AliITSBadChannelsAuxSPD.cxx:251
 AliITSBadChannelsAuxSPD.cxx:252
 AliITSBadChannelsAuxSPD.cxx:253
 AliITSBadChannelsAuxSPD.cxx:254
 AliITSBadChannelsAuxSPD.cxx:255
 AliITSBadChannelsAuxSPD.cxx:256
 AliITSBadChannelsAuxSPD.cxx:257
 AliITSBadChannelsAuxSPD.cxx:258
 AliITSBadChannelsAuxSPD.cxx:259
 AliITSBadChannelsAuxSPD.cxx:260
 AliITSBadChannelsAuxSPD.cxx:261
 AliITSBadChannelsAuxSPD.cxx:262
 AliITSBadChannelsAuxSPD.cxx:263
 AliITSBadChannelsAuxSPD.cxx:264
 AliITSBadChannelsAuxSPD.cxx:265
 AliITSBadChannelsAuxSPD.cxx:266
 AliITSBadChannelsAuxSPD.cxx:267
 AliITSBadChannelsAuxSPD.cxx:268
 AliITSBadChannelsAuxSPD.cxx:269
 AliITSBadChannelsAuxSPD.cxx:270
 AliITSBadChannelsAuxSPD.cxx:271
 AliITSBadChannelsAuxSPD.cxx:272
 AliITSBadChannelsAuxSPD.cxx:273
 AliITSBadChannelsAuxSPD.cxx:274
 AliITSBadChannelsAuxSPD.cxx:275
 AliITSBadChannelsAuxSPD.cxx:276
 AliITSBadChannelsAuxSPD.cxx:277
 AliITSBadChannelsAuxSPD.cxx:278
 AliITSBadChannelsAuxSPD.cxx:279
 AliITSBadChannelsAuxSPD.cxx:280
 AliITSBadChannelsAuxSPD.cxx:281
 AliITSBadChannelsAuxSPD.cxx:282
 AliITSBadChannelsAuxSPD.cxx:283
 AliITSBadChannelsAuxSPD.cxx:284
 AliITSBadChannelsAuxSPD.cxx:285
 AliITSBadChannelsAuxSPD.cxx:286
 AliITSBadChannelsAuxSPD.cxx:287
 AliITSBadChannelsAuxSPD.cxx:288
 AliITSBadChannelsAuxSPD.cxx:289
 AliITSBadChannelsAuxSPD.cxx:290
 AliITSBadChannelsAuxSPD.cxx:291
 AliITSBadChannelsAuxSPD.cxx:292
 AliITSBadChannelsAuxSPD.cxx:293
 AliITSBadChannelsAuxSPD.cxx:294
 AliITSBadChannelsAuxSPD.cxx:295
 AliITSBadChannelsAuxSPD.cxx:296
 AliITSBadChannelsAuxSPD.cxx:297
 AliITSBadChannelsAuxSPD.cxx:298
 AliITSBadChannelsAuxSPD.cxx:299
 AliITSBadChannelsAuxSPD.cxx:300
 AliITSBadChannelsAuxSPD.cxx:301
 AliITSBadChannelsAuxSPD.cxx:302
 AliITSBadChannelsAuxSPD.cxx:303
 AliITSBadChannelsAuxSPD.cxx:304
 AliITSBadChannelsAuxSPD.cxx:305
 AliITSBadChannelsAuxSPD.cxx:306
 AliITSBadChannelsAuxSPD.cxx:307
 AliITSBadChannelsAuxSPD.cxx:308
 AliITSBadChannelsAuxSPD.cxx:309
 AliITSBadChannelsAuxSPD.cxx:310
 AliITSBadChannelsAuxSPD.cxx:311
 AliITSBadChannelsAuxSPD.cxx:312
 AliITSBadChannelsAuxSPD.cxx:313
 AliITSBadChannelsAuxSPD.cxx:314
 AliITSBadChannelsAuxSPD.cxx:315
 AliITSBadChannelsAuxSPD.cxx:316
 AliITSBadChannelsAuxSPD.cxx:317
 AliITSBadChannelsAuxSPD.cxx:318
 AliITSBadChannelsAuxSPD.cxx:319
 AliITSBadChannelsAuxSPD.cxx:320
 AliITSBadChannelsAuxSPD.cxx:321
 AliITSBadChannelsAuxSPD.cxx:322
 AliITSBadChannelsAuxSPD.cxx:323
 AliITSBadChannelsAuxSPD.cxx:324
 AliITSBadChannelsAuxSPD.cxx:325
 AliITSBadChannelsAuxSPD.cxx:326
 AliITSBadChannelsAuxSPD.cxx:327
 AliITSBadChannelsAuxSPD.cxx:328
 AliITSBadChannelsAuxSPD.cxx:329
 AliITSBadChannelsAuxSPD.cxx:330
 AliITSBadChannelsAuxSPD.cxx:331
 AliITSBadChannelsAuxSPD.cxx:332
 AliITSBadChannelsAuxSPD.cxx:333
 AliITSBadChannelsAuxSPD.cxx:334
 AliITSBadChannelsAuxSPD.cxx:335
 AliITSBadChannelsAuxSPD.cxx:336
 AliITSBadChannelsAuxSPD.cxx:337
 AliITSBadChannelsAuxSPD.cxx:338
 AliITSBadChannelsAuxSPD.cxx:339
 AliITSBadChannelsAuxSPD.cxx:340
 AliITSBadChannelsAuxSPD.cxx:341
 AliITSBadChannelsAuxSPD.cxx:342
 AliITSBadChannelsAuxSPD.cxx:343
 AliITSBadChannelsAuxSPD.cxx:344
 AliITSBadChannelsAuxSPD.cxx:345
 AliITSBadChannelsAuxSPD.cxx:346
 AliITSBadChannelsAuxSPD.cxx:347
 AliITSBadChannelsAuxSPD.cxx:348
 AliITSBadChannelsAuxSPD.cxx:349
 AliITSBadChannelsAuxSPD.cxx:350
 AliITSBadChannelsAuxSPD.cxx:351
 AliITSBadChannelsAuxSPD.cxx:352
 AliITSBadChannelsAuxSPD.cxx:353
 AliITSBadChannelsAuxSPD.cxx:354
 AliITSBadChannelsAuxSPD.cxx:355
 AliITSBadChannelsAuxSPD.cxx:356
 AliITSBadChannelsAuxSPD.cxx:357
 AliITSBadChannelsAuxSPD.cxx:358
 AliITSBadChannelsAuxSPD.cxx:359
 AliITSBadChannelsAuxSPD.cxx:360
 AliITSBadChannelsAuxSPD.cxx:361
 AliITSBadChannelsAuxSPD.cxx:362
 AliITSBadChannelsAuxSPD.cxx:363
 AliITSBadChannelsAuxSPD.cxx:364
 AliITSBadChannelsAuxSPD.cxx:365
 AliITSBadChannelsAuxSPD.cxx:366
 AliITSBadChannelsAuxSPD.cxx:367
 AliITSBadChannelsAuxSPD.cxx:368
 AliITSBadChannelsAuxSPD.cxx:369
 AliITSBadChannelsAuxSPD.cxx:370
 AliITSBadChannelsAuxSPD.cxx:371
 AliITSBadChannelsAuxSPD.cxx:372
 AliITSBadChannelsAuxSPD.cxx:373
 AliITSBadChannelsAuxSPD.cxx:374
 AliITSBadChannelsAuxSPD.cxx:375
 AliITSBadChannelsAuxSPD.cxx:376
 AliITSBadChannelsAuxSPD.cxx:377
 AliITSBadChannelsAuxSPD.cxx:378
 AliITSBadChannelsAuxSPD.cxx:379
 AliITSBadChannelsAuxSPD.cxx:380
 AliITSBadChannelsAuxSPD.cxx:381
 AliITSBadChannelsAuxSPD.cxx:382
 AliITSBadChannelsAuxSPD.cxx:383
 AliITSBadChannelsAuxSPD.cxx:384
 AliITSBadChannelsAuxSPD.cxx:385
 AliITSBadChannelsAuxSPD.cxx:386
 AliITSBadChannelsAuxSPD.cxx:387
 AliITSBadChannelsAuxSPD.cxx:388
 AliITSBadChannelsAuxSPD.cxx:389
 AliITSBadChannelsAuxSPD.cxx:390
 AliITSBadChannelsAuxSPD.cxx:391
 AliITSBadChannelsAuxSPD.cxx:392
 AliITSBadChannelsAuxSPD.cxx:393
 AliITSBadChannelsAuxSPD.cxx:394
 AliITSBadChannelsAuxSPD.cxx:395
 AliITSBadChannelsAuxSPD.cxx:396
 AliITSBadChannelsAuxSPD.cxx:397
 AliITSBadChannelsAuxSPD.cxx:398
 AliITSBadChannelsAuxSPD.cxx:399
 AliITSBadChannelsAuxSPD.cxx:400
 AliITSBadChannelsAuxSPD.cxx:401
 AliITSBadChannelsAuxSPD.cxx:402
 AliITSBadChannelsAuxSPD.cxx:403
 AliITSBadChannelsAuxSPD.cxx:404
 AliITSBadChannelsAuxSPD.cxx:405
 AliITSBadChannelsAuxSPD.cxx:406
 AliITSBadChannelsAuxSPD.cxx:407
 AliITSBadChannelsAuxSPD.cxx:408
 AliITSBadChannelsAuxSPD.cxx:409
 AliITSBadChannelsAuxSPD.cxx:410
 AliITSBadChannelsAuxSPD.cxx:411
 AliITSBadChannelsAuxSPD.cxx:412
 AliITSBadChannelsAuxSPD.cxx:413
 AliITSBadChannelsAuxSPD.cxx:414
 AliITSBadChannelsAuxSPD.cxx:415
 AliITSBadChannelsAuxSPD.cxx:416
 AliITSBadChannelsAuxSPD.cxx:417
 AliITSBadChannelsAuxSPD.cxx:418