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.                  *
 **************************************************************************/

/* $Id$ */

////////////////////////////////////////////////////////////////////////////
//                                                                        
//  Pre-Trigger simulation                                                
//                                                                        
//  Authors: F. Reidt (Felix.Reidt@cern.ch)                               
//		  
//  This class is used to simulate the front end box behavior of the 
//  pretrigger system. Digits of T0 and V0 are used as input. A threshold
//  discrimination, masking and first processing with look up tables  is 
//  done during the simulation process
//                                                                  
////////////////////////////////////////////////////////////////////////////

#include <TClonesArray.h> 
#include <TTree.h>

#include "AliRunLoader.h"
#include "AliLoader.h"
#include "AliLog.h"

#include "AliVZEROdigit.h" 
#include "AliVZEROCalibData.h"
#include "AliT0digit.h"

#include "AliTRDptrgParam.h"
#include "AliTRDptrgLUT.h"
#include "AliTRDptrgFEB.h"

ClassImp(AliTRDptrgFEB)

//______________________________________________________________________________
AliTRDptrgFEB::AliTRDptrgFEB(AliRunLoader *rl) 
  : TObject(),
  fRunLoader(rl),
  fParam(0),
  fLUTArray(0),
  fType(AliTRDptrgParam::kUndefined),
  fOperatingMode(AliTRDptrgParam::kDigits),
  fInputChannelCount(0),
  fPosition(AliTRDptrgParam::kUnknown),  
  fID(0),
  fThreshold(0)
{
  // default constructor
  AliError("default ctor - not recommended");
}

//______________________________________________________________________________
AliTRDptrgFEB::AliTRDptrgFEB(AliRunLoader *rl, AliTRDptrgParam::AliTRDptrgFEBType_t febType, 
                             AliTRDptrgParam::AliTRDptrgOperatingMode_t operatingMode,
                             AliTRDptrgParam::AliTRDptrgFEBPosition_t position, Int_t id, 
                             AliTRDptrgParam *param)
  : TObject(),
  fRunLoader(rl),
  fParam(param),
  fLUTArray(0),
  fType(febType),
  fOperatingMode(operatingMode),
  fInputChannelCount(0),
  fPosition(position),
  fID(id),
  fThreshold(0x0) 
{
  // prefered constructor
  
  this->LoadParams(); // load configuration parameters

}

//______________________________________________________________________________
AliTRDptrgFEB::~AliTRDptrgFEB() 
{
  // destructor
  if (this->fParam == 0x0) {  
    if (this->fThreshold != 0x0) {
      delete[] this->fThreshold;
      this->fThreshold = 0x0;
   }
  }
  // delete LUTArray
  this->fLUTArray.Delete();
}

//______________________________________________________________________________
Int_t AliTRDptrgFEB::LoadDigits()
{
  // loads T0 or V0 digits and discriminates them automatically
 
  if (this->fType == AliTRDptrgParam::kVZERO) {
    // load V0's digits --------------------------------------------------------
    // behavior adapted for AliVZERODigitizer.cxx 40613 2010-04-22 09:57:15Z   
 
    // get V0 run loader
    AliLoader* loader = this->fRunLoader->GetLoader( "VZEROLoader" );

    if (!loader) {
      AliError("Cannot get VZERO loader");
      return -1;
    }
    loader->LoadDigits("READ");
    TTree* vzeroDigitsTree = loader->TreeD();

    if (!vzeroDigitsTree) {
      AliError("Cannot get the VZERO digit tree");
      return -1;
    }
    
		
    TClonesArray* vzeroDigits = NULL;
    TBranch* digitBranch = vzeroDigitsTree->GetBranch("VZERODigit");
    digitBranch->SetAddress(&vzeroDigits);
    vzeroDigitsTree->GetEvent(0);	
    
  
    Int_t nDigits = vzeroDigits->GetEntriesFast(); // get digit count
		
    AliDebug(5, Form("Found a whole of %d digits", nDigits));    
		
    Int_t inputVector = 0x0; // Vector which is feed into the LUT
		
    for (Int_t iDigit=0; iDigit<nDigits; iDigit++) {
      // loop over all digits
      AliDebug(5, "Looping over digit");
      AliVZEROdigit* digit = (AliVZEROdigit*)vzeroDigits->At(iDigit);
			      
      Int_t pmNumber   = digit->PMNumber();
      //      Int_t board   = pmNumber / 8; // changed in Version 40613
      Int_t feeBoard = AliVZEROCalibData::GetBoardNumber(pmNumber);
      Int_t board = feeBoard % 4; // feeBoard V0-A: 1-4; V0-C: 5-8 => board: 1-4

      Int_t channel = pmNumber % 8;

      Int_t position = -1;
      if ((pmNumber >= 32) && (pmNumber <= 63)) { // V0-A (matched v40613)
        position = 1; // AliTRDptrgParam::kA
      } 
      else if ((pmNumber >= 0) && (pmNumber <= 31)) { // V0-C (matched v40613)
        position = 2; // kB
      }

      AliDebug(5, 
        Form("pmNumber: %d; feeBoard: %d; board: %d; channel: %d; position %d",
             pmNumber, feeBoard, board, channel, position));  

      if (position == -1)   {
        AliError("Wrong VZERO pmt position found");
	loader->UnloadDigits();
        return -1;
      }

      // check whether the digits belongs to the current FEB, otherwise omit it
      if ((position == this->fPosition) && (board == this->fID)) {
        AliDebug(5, "Found an digit corresponding to the current FEB");
        Float_t value = digit->ADC();
        AliDebug(5, Form("ADC value: %f\n", value));
        Int_t channelBitMask = 0x01; 
        // channel0 => 0x01; channel1=> 0x02;  2^(channel number)
        channelBitMask <<= channel;
        if (value >= this->fThreshold[channel]) {
          inputVector |= channelBitMask;
          AliDebug(5,
            Form("Threshold exceeded in channel %d, new inputVector 0x%x", 
                 channel, inputVector));
        }
      }
    }

    AliDebug(5, Form("inputVector: 0x%x", inputVector));
    loader->UnloadDigits();
    return inputVector;
  }
  else if (this->fType == AliTRDptrgParam::kTZERO) {
    // load T0's digits --------------------------------------------------------
    AliLoader * fT0Loader = this->fRunLoader->GetLoader("T0Loader");
    //   AliT0digit *fDigits; 
    if (!fT0Loader) {
      AliError("Cannot get T0 loader");
      return -1;
    }
      
    fT0Loader->LoadDigits("READ");
    // Creating T0 data container

    TTree* treeD = fT0Loader->TreeD();
    if (!treeD) {
      AliError("no digits tree");
      return -1;
    }
    AliT0digit* digits = new AliT0digit();
    TBranch *brDigits = treeD->GetBranch("T0");

    if (brDigits) {
      brDigits->SetAddress(&digits);
    }
    else {
      AliError("Branch T0 DIGIT not found");
      return -1;
    }     
    brDigits->GetEntry(0);		

    TArrayI qtc0(24); // Array must have 24 entries!
    TArrayI qtc1(24); // Array must have 24 entries!
    
    digits->GetQT0(qtc0); // baseline (reference level)
    digits->GetQT1(qtc1); // measurement value

    Int_t inputVector = 0x0; // vector to be fed into the look up table
    
    // PMT Positions
    // C: 0  to 11
    // A: 12 to 23
    // positions according to AliT0Digitizer.cxx Revision 37491
    Int_t nStart = 0;
    if (this->fPosition == AliTRDptrgParam::kC) { // C
      nStart = 0;
    }
    else if (this->fPosition == AliTRDptrgParam::kA) { // A
      nStart = 12;
    }

    Int_t channelBitMask = 0x01;
    for (Int_t i = 0 + nStart; i < nStart + 12; i++) {
      //Int_t channelBitMask = 0x01;
      AliDebug(5, Form("channel: %d", i));

      Int_t value = qtc1[i] - qtc0[i]; // calculate correct measurement value

      if (value > (Int_t)this->fThreshold[i - nStart]) {
        inputVector |= channelBitMask;    // Add bit
          
        AliDebug(5, Form("Threshold exceeded in channel %d,", i));
        AliDebug(5, Form("new inputVector 0x%x", inputVector));       
        AliDebug(5, Form("channelBitMask 0x%x", channelBitMask));
      }
      channelBitMask <<= 1; // go on to the next channel
    }
    
    delete digits;
    return inputVector;
  }
  return -1;
}

//______________________________________________________________________________
Int_t AliTRDptrgFEB::LoadAndProcessHits()
{
  // loads TO or VO hits and converts them to digits optimized for ptrg  
  // afterwards the digits will be discriminated
  AliError("LoadAndProcessHits() - not yet implemented!\n");
  if (this->fType == AliTRDptrgParam::kVZERO) {		
    return 0;
  }
  else if (this->fType == AliTRDptrgParam::kTZERO) {
    return 0;
  }
  return -1;
}

//______________________________________________________________________________
Bool_t AliTRDptrgFEB::LoadParams()
{
  // Load Parameters

  if (this->fParam == 0x0) {
    AliWarning("No paramater object specified - start loading defaults\n");
    if (this->fType == AliTRDptrgParam::kVZERO) {		
      // initialize threshold
      this->fThreshold = new UInt_t[8]; 
      for (Int_t i = 0; i < 8; i++) {
        this->fThreshold[i] = 10; 
      }
      // initialize LUTsoutputWidth=<value optimized out>
      AliTRDptrgLUT* lut = new AliTRDptrgLUT();
      this->fLUTArray.AddLast(lut);
      lut = new AliTRDptrgLUT(); 
      this->fLUTArray.AddLast(lut);
			// the following lines are only needed for test reasons
      Int_t* initData = new Int_t[256]; // 2^8
      lut = dynamic_cast<AliTRDptrgLUT*>(this->fLUTArray.At(0));
      if (lut) {
        for (Int_t i = 0; i < 256; i++ ) {
          initData[i] = i;
        }
        lut->InitTable(8, 8, initData, kTRUE); // make copy of initData
      }
      lut = dynamic_cast<AliTRDptrgLUT*>(this->fLUTArray.At(1));
      if (lut) {
        for (Int_t i = 255; i >= 0; i--) {
          initData[255 - i] = i;  // inverse ramp
        }
        lut->InitTable(8, 8, initData, kTRUE);
      }
      delete [] initData;
    }
    else {
      // initialize threshold
      this->fThreshold = new UInt_t[12];
      for (Int_t i = 0; i < 12; i++) {
        this->fThreshold[i] = 10; 
      }
      
      // initialize LUTsoutputWidth=<value optimized out>
      AliTRDptrgLUT* lut = new AliTRDptrgLUT();
      this->fLUTArray.AddLast(lut);
      lut = new AliTRDptrgLUT(); // this->fRunLoader
      this->fLUTArray.AddLast(lut);
      // the following lines are only needed for test reasons
      lut = dynamic_cast<AliTRDptrgLUT*>(this->fLUTArray.At(0));
      Int_t* initData = new Int_t[4096]; // 2^12
      if (lut) {
        for (Int_t i = 0; i < 4096; i++ ) {
          initData[i] = i;
        }
        lut->InitTable(12, 12, initData, kTRUE); // make a copy of the table
      }
      lut = dynamic_cast<AliTRDptrgLUT*>(this->fLUTArray.At(1));
      if (lut) {
        //for (Int_t i = 4095; i >= 0; i--) {
        for (Int_t i = 4096; i > 0; i--) {
          initData[4096 - i] = i;  // inverse ramp
        }
        lut->InitTable(12, 12, initData, kTRUE); // make a copy of the table
      }
      delete [] initData;    
    }
    return false;
  }
  else {
    // load parameters from object
    if (this->fType == AliTRDptrgParam::kVZERO) {		
      // threshold
      this->fThreshold = 
        this->fParam->GetFEBV0Thresholds(this->fPosition, (this->fID - 1));

      // look up tables
      // 1
      AliTRDptrgLUT* LUT = new AliTRDptrgLUT();
      LUT->InitTable(8, 8, this->fParam->GetFEBV0LUT(this->fPosition, 
                                                     (this->fID - 1),
                                                     0), kFALSE);
      // do not make a copy of the table due to performance reasons
      this->fLUTArray.AddLast(LUT);
 
      // 2
      LUT = new AliTRDptrgLUT(); 
      LUT->InitTable(8, 8, this->fParam->GetFEBV0LUT(this->fPosition, 
                                                     (this->fID - 1),
                                                     1), kFALSE);
      // do not make a copy of the table due to performance reasons
      this->fLUTArray.AddLast(LUT);
    }
    else {		
      // threshold
      this->fThreshold =
        this->fParam->GetFEBT0Thresholds(this->fPosition);

      // look up tables
      // 1
      AliTRDptrgLUT* LUT = new AliTRDptrgLUT();
      LUT->InitTable(12, 12, fParam->GetFEBT0LUT(this->fPosition, 0), kFALSE); 
      // do not make a copy of the table due to performance reasosn
      this->fLUTArray.AddLast(LUT);

      // 2
      LUT = new AliTRDptrgLUT(); 
      LUT->InitTable(12, 12, fParam->GetFEBT0LUT(this->fPosition, 1), kFALSE); 
      // do not make a copy of the table due to performance reasosn      
      this->fLUTArray.AddLast(LUT);
    }
    return true;
  }
  
  return false;
}

//______________________________________________________________________________
Int_t* AliTRDptrgFEB::Simulate()
{
  // simulates the FEB behavior and returns a 2 bit ouput 
  // (least significant bits)
  
  Int_t *result = new Int_t;
  (*result) = -1; 
  if (this->fOperatingMode == AliTRDptrgParam::kDigits) {
    Int_t inputVector = this->LoadDigits();
    delete result; // delete error return value

    // perform look up
    Int_t nLUTs = this->fLUTArray.GetEntriesFast();  // get LUT count
    result = new Int_t[nLUTs + 1]; // generate new return array
    result[0] = nLUTs; // storage array length in the first array value
    for (Int_t iLUT = 0; iLUT < nLUTs; iLUT++) { 
      // process the return value for each LUT and store the result in the array
      AliDebug(4, Form("FEB: (pos=%d,id=%d,lut=%d,vector=0x%x)", 
                       this->fPosition, this->fID, iLUT, inputVector));

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