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

//_________________________________________________________________________  
//  Class for trigger analysis.
//  Digits are grouped in TRU's (Trigger Units). A TRU consist of 16x28 
//  crystals ordered fNTRUPhi x fNTRUZ. The algorithm searches all possible 
//  2x2 and nxn (n multiple of 2) crystal combinations per each TRU, adding the 
//  digits amplitude and  finding the maximum. If found, look if it is isolated.
//  Maxima are transformed in ADC time samples. Each time bin is compared to the trigger 
//  threshold until it is larger and then, triggers are set. Thresholds need to be fixed. 
//  Usage:
//
//  //Inside the event loop
//  AliPHOSTrigger *tr = new AliPHOSTrigger();//Init Trigger
//  tr->SetL0Threshold(100);
//  tr->SetL1JetLowPtThreshold(1000);
//  tr->SetL1JetMediumPtThreshold(10000);
//  tr->SetL1JetHighPtThreshold(20000);
//  ....
//  tr->Trigger(); //Execute Trigger
//  tr->Print(""); //Print data members after calculation.
//  
//
//*-- Author: Gustavo Conesa & Yves Schutz (IFIC, CERN) 
//////////////////////////////////////////////////////////////////////////////


// --- ROOT system ---
#include "TMath.h"

// --- ALIROOT system ---
#include "AliConfig.h"
#include "AliPHOS.h"
#include "AliPHOSTrigger.h" 
#include "AliPHOSGeometry.h"
#include "AliPHOSDigit.h" 
#include "AliPHOSLoader.h" 
#include "AliPHOSPulseGenerator.h" 
#include "AliTriggerInput.h"


ClassImp(AliPHOSTrigger)

//______________________________________________________________________
AliPHOSTrigger::AliPHOSTrigger()
  : AliTriggerDetector(),
    f2x2MaxAmp(-1), f2x2CrystalPhi(-1),  f2x2CrystalEta(-1), f2x2SM(0),
    fnxnMaxAmp(-1), fnxnCrystalPhi(-1),  fnxnCrystalEta(-1), fnxnSM(0),
    fADCValuesHighnxn(0), fADCValuesLownxn(0),
    fADCValuesHigh2x2(0), fADCValuesLow2x2(0), fDigitsList(0),
    fAmptrus(0), fAmpmods(0), fTimeRtrus(0),
    fL0Threshold(50), fL1JetLowPtThreshold(200),   fL1JetMediumPtThreshold(500),  
    fL1JetHighPtThreshold(1000),
    fNTRU(8), fNTRUZ(2), fNTRUPhi(4), 
    fNCrystalsPhi(16),
    fNCrystalsZ(28),
    fPatchSize(1), fIsolPatchSize(1), 
    f2x2AmpOutOfPatch(-1), fnxnAmpOutOfPatch(-1), 
    f2x2AmpOutOfPatchThres(2),  fnxnAmpOutOfPatchThres(2), //2 GeV out of patch 
    fIs2x2Isol(kFALSE), fIsnxnIsol(kFALSE),  
    fSimulation(kTRUE), fIsolateInModule(kTRUE)
{
  //ctor
  fADCValuesHighnxn = 0x0; //new Int_t[fTimeBins];
  fADCValuesLownxn  = 0x0; //new Int_t[fTimeBins];
  fADCValuesHigh2x2 = 0x0; //new Int_t[fTimeBins];
  fADCValuesLow2x2  = 0x0; //new Int_t[fTimeBins];

  SetName("PHOS");
  CreateInputs();
  
  fAmptrus   = new TClonesArray("TMatrixD",1000);
  fAmpmods   = new TClonesArray("TMatrixD",1000);
  fTimeRtrus = new TClonesArray("TMatrixD",1000);
}

//____________________________________________________________________________
AliPHOSTrigger::AliPHOSTrigger(const AliPHOSTrigger & trig) : 
  AliTriggerDetector(trig),
  f2x2MaxAmp(trig.f2x2MaxAmp),
  f2x2CrystalPhi(trig.f2x2CrystalPhi),
  f2x2CrystalEta(trig.f2x2CrystalEta),
  f2x2SM(trig.f2x2SM),
  fnxnMaxAmp(trig.fnxnMaxAmp),
  fnxnCrystalPhi(trig.fnxnCrystalPhi),
  fnxnCrystalEta(trig.fnxnCrystalEta),
  fnxnSM(trig.fnxnSM),
  fADCValuesHighnxn(trig.fADCValuesHighnxn),
  fADCValuesLownxn(trig.fADCValuesLownxn),
  fADCValuesHigh2x2(trig.fADCValuesHigh2x2),
  fADCValuesLow2x2(trig.fADCValuesLow2x2),
  fDigitsList(trig.fDigitsList),
  fAmptrus(trig.fAmptrus), fAmpmods(trig.fAmpmods), fTimeRtrus(trig.fTimeRtrus),
  fL0Threshold(trig.fL0Threshold),
  fL1JetLowPtThreshold(trig.fL1JetLowPtThreshold),
  fL1JetMediumPtThreshold(trig.fL1JetMediumPtThreshold), 
  fL1JetHighPtThreshold(trig.fL1JetHighPtThreshold),
  fNTRU(trig.fNTRU),
  fNTRUZ(trig.fNTRUZ),
  fNTRUPhi(trig.fNTRUPhi),
  fNCrystalsPhi(trig.fNCrystalsPhi),
  fNCrystalsZ(trig. fNCrystalsZ),
  fPatchSize(trig.fPatchSize),
  fIsolPatchSize(trig.fIsolPatchSize), 
  f2x2AmpOutOfPatch(trig.f2x2AmpOutOfPatch), 
  fnxnAmpOutOfPatch(trig.fnxnAmpOutOfPatch), 
  f2x2AmpOutOfPatchThres(trig.f2x2AmpOutOfPatchThres),  
  fnxnAmpOutOfPatchThres(trig.fnxnAmpOutOfPatchThres), 
  fIs2x2Isol(trig.fIs2x2Isol),
  fIsnxnIsol(trig.fIsnxnIsol),  
  fSimulation(trig.fSimulation), 
  fIsolateInModule(trig.fIsolateInModule)
{
  // cpy ctor
}

//_________________________________________________________________________
AliPHOSTrigger::~AliPHOSTrigger() 
{
  // dtor
  
  if(fADCValuesHighnxn)delete [] fADCValuesHighnxn;
  if(fADCValuesLownxn)delete [] fADCValuesLownxn;
  if(fADCValuesHigh2x2)delete []  fADCValuesHigh2x2;
  if(fADCValuesLow2x2)delete [] fADCValuesLow2x2;
  // fDigitsList is now ours...
  if(fAmptrus)   { fAmptrus->Delete()  ; delete fAmptrus  ; }
  if(fAmpmods)   { fAmpmods->Delete()  ; delete fAmpmods  ; }
  if(fTimeRtrus) { fTimeRtrus->Delete(); delete fTimeRtrus; }
}

//_________________________________________________________________________
AliPHOSTrigger & AliPHOSTrigger::operator = (const AliPHOSTrigger &)
{
  Fatal("operator =", "no implemented");
  return *this;
}

void AliPHOSTrigger::CreateInputs()
{
   // inputs 
   
   // Do not create inputs again!!
   if( fInputs.GetEntriesFast() > 0 ) return;

   TString name = GetName();
   
   fInputs.AddLast( new AliTriggerInput( "0PH0",       name, 0 ) );
   fInputs.AddLast( new AliTriggerInput( "PHOS_JetHPt_L1",name, 1 ) );
   fInputs.AddLast( new AliTriggerInput( "PHOS_JetMPt_L1",name, 1 ) );
   fInputs.AddLast( new AliTriggerInput( "PHOS_JetLPt_L1",name, 1 ) );
 
}

//____________________________________________________________________________
void AliPHOSTrigger::FillTRU(const TClonesArray * digits, const AliPHOSGeometry * geom) const {

  //Orders digits ampitudes list and times in fNTRU TRUs (28x16 crystals) 
  //per module. Each TRU is a TMatrixD, and they are kept in TClonesArrays. 
  //In a module, the number of TRU in phi is fNTRUPhi, and the number of 
  //TRU in eta is fNTRUZ. Also fill a matrix with all amplitudes in module for isolation studies. 

  //Check data members
  
  if(fNTRUZ*fNTRUPhi != fNTRU)
    Error("FillTRU"," Wrong number of TRUS per Z or Phi");

  //Initilize and declare variables
  Int_t nModules     = geom->GetNModules();
  Int_t relid[4] ; 
  Float_t amp   = -1;
  Float_t timeR = -1;
  Int_t id      = -1;

  //List of TRU matrices initialized to 0.
  for(Int_t k = 0; k < fNTRU*nModules ; k++){
    TMatrixD   amptrus(fNCrystalsPhi,fNCrystalsZ) ;
    TMatrixD   timeRtrus(fNCrystalsPhi,fNCrystalsZ) ;
    for(Int_t i = 0; i < fNCrystalsPhi; i++){
      for(Int_t j = 0; j < fNCrystalsZ; j++){
	amptrus(i,j)   = 0.0;
	timeRtrus(i,j) = 0.0;
      }
    }
    new((*fAmptrus)[k])   TMatrixD(amptrus) ;
    new((*fTimeRtrus)[k]) TMatrixD(timeRtrus) ; 
  }

  //List of Modules matrices initialized to 0.
  Int_t nmodphi = geom->GetNPhi();
  Int_t nmodz = geom->GetNZ();
  
  for(Int_t k = 0; k < nModules ; k++){
    TMatrixD  ampmods(nmodphi,nmodz) ;
    for(Int_t i = 0; i < nmodphi; i++){
      for(Int_t j = 0; j < nmodz; j++){
	ampmods(i,j)   = 0.0;
      }
    }
    new((*fAmpmods)[k])   TMatrixD(ampmods) ;
  }
  
  AliPHOSDigit * dig ;
 
  //Digits loop to fill TRU matrices with amplitudes.
  for(Int_t idig = 0 ; idig < digits->GetEntriesFast() ; idig++){
    
    dig    = static_cast<AliPHOSDigit *>(digits->At(idig)) ;
    amp    = dig->GetEnergy() ;   // Energy of the digit 
    id     = dig->GetId() ;    // Id label of the cell
    timeR  = dig->GetTimeR() ; // Earliest time of the digit
    geom->AbsToRelNumbering(id, relid) ;
    //Transform digit number into 4 numbers
    //relid[0] = module
    //relid[1] = EMC (0) or CPV (-1)
    //relid[2] = row <= 64 (fNPhi)
    //relid[3] = column <= 56 (fNZ)
    
    if(relid[1] == 0){//Not CPV, Only EMC digits
      //############# TRU ###################
      //Check to which TRU in the supermodule belongs the crystal. 
      //Supermodules are divided in a TRU matrix of dimension 
      //(fNTRUPhi,fNTRUZ).
      //Each TRU is a crystal matrix of dimension (fNCrystalsPhi,fNCrystalsZ)
      
      //First calculate the row and column in the supermodule 
      //of the TRU to which the crystal belongs.
      Int_t col   = (relid[3]-1)/fNCrystalsZ+1; 
      Int_t row   = (relid[2]-1)/fNCrystalsPhi+1;
 
      //Calculate label number of the TRU  
      Int_t itru  = (row-1) + (col-1)*fNTRUPhi + (relid[0]-1)*fNTRU ;

      //Fill TRU matrix with crystal values
      TMatrixD * amptrus   = static_cast<TMatrixD *>(fAmptrus  ->At(itru)) ;
      TMatrixD * timeRtrus = static_cast<TMatrixD *>(fTimeRtrus->At(itru)) ;

      //Calculate row and column of the crystal inside the TRU with number itru
      Int_t irow = (relid[2]-1) - (row-1) *  fNCrystalsPhi;	
      Int_t icol = (relid[3]-1) - (col-1) *  fNCrystalsZ;
      
      (*amptrus)(irow,icol)   = amp ;
      (*timeRtrus)(irow,icol) = timeR ;

      //####################MODULE MATRIX ##################
      TMatrixD * ampmods   = static_cast<TMatrixD *>(fAmpmods->At(relid[0]-1)) ;
      (*ampmods)(relid[2]-1,relid[3]-1)   = amp ;
    }
  }
}

//______________________________________________________________________
void AliPHOSTrigger::GetCrystalPhiEtaIndexInModuleFromTRUIndex(Int_t itru, Int_t iphitru, Int_t ietatru,Int_t &iphiMod,Int_t &ietaMod) const 
{
  // This method transforms the (eta,phi) index of a crystals in a 
  // TRU matrix into Super Module (eta,phi) index.
  
  // Calculate in which row and column in which the TRU are 
  // ordered in the SM
  Int_t col = itru/ fNTRUPhi + 1;
  Int_t row = itru - (col-1)*fNTRUPhi + 1;
  
  //Calculate the (eta,phi) index in SM
  
  iphiMod = fNCrystalsPhi*(row-1) + iphitru + 1 ;
  ietaMod = fNCrystalsZ*(col-1)   + ietatru + 1 ;

}

//____________________________________________________________________________
Bool_t AliPHOSTrigger::IsPatchIsolated(Int_t iPatchType, const Int_t imod, const Int_t mtru, const Float_t maxamp, const Int_t maxphi, const Int_t maxeta) {

  //Calculate if the maximum patch found is isolated, find amplitude around maximum (2x2 or nxn) patch, 
  //inside isolation patch . iPatchType = 0 means calculation for 2x2 patch, 
  //iPatchType = 1 means calculation for nxn patch.
  //In the next table there is an example of the different options of patch size and isolation patch size:
  //                                                                                 Patch Size (fPatchSize)
  //                                                             0                          1                                  2
  //          fIsolPatchSize                 2x2 (not overlap)   4x4 (overlapped)        6x6(overlapped) ...
  //                   1                                       4x4                      8x8                              10x10
  //                   2                                       6x6                     12x12                           14x14    
  //                   3                                       8x8                     16x16                           18x18
                          
  Bool_t b = kFALSE;
  Float_t amp = 0;
 
 //Get matrix of TRU or Module with maximum amplitude patch.
  Int_t itru = mtru+imod*fNTRU ; //number of tru, min 0 max 8*5.
  TMatrixD * ampmatrix   = 0x0;
  Int_t colborder = 0;
  Int_t rowborder = 0;

  if(fIsolateInModule){
    ampmatrix = static_cast<TMatrixD *>(fAmpmods->At(imod)) ;
    rowborder = fNCrystalsPhi*fNTRUPhi;
    colborder = fNCrystalsZ*fNTRUZ;
    AliDebug(2,"Isolate trigger in Module");
  }
  else{
    ampmatrix = static_cast<TMatrixD *>(fAmptrus->At(itru)) ;
    rowborder = fNCrystalsPhi;
    colborder = fNCrystalsZ;
    AliDebug(2,"Isolate trigger in TRU");
  }

  //Define patch cells
  Int_t isolcells = fIsolPatchSize*(1+iPatchType);
  Int_t ipatchcells = 2*(1+fPatchSize*iPatchType);
  Int_t minrow =  maxphi - isolcells;
  Int_t mincol =  maxeta - isolcells;
  Int_t maxrow =  maxphi + isolcells + ipatchcells;
  Int_t maxcol = maxeta +  isolcells + ipatchcells;

  AliDebug(2,Form("Number of added Isol Cells %d, Patch Size %d",isolcells, ipatchcells));
  AliDebug(2,Form("Patch: minrow %d, maxrow %d, mincol %d, maxcol %d",minrow,maxrow,mincol,maxcol));
  
  if(minrow < 0 || mincol < 0 || maxrow > rowborder || maxcol > colborder){
    AliDebug(1,Form("Out of Module/TRU range, cannot isolate patch"));
    return kFALSE;
  }

  //Add amplitudes in all isolation patch
  for(Int_t irow = minrow ; irow <  maxrow; irow ++)
    for(Int_t icol = mincol ; icol < maxcol ; icol ++)
      amp += (*ampmatrix)(irow,icol);

  AliDebug(2,Form("Type %d, Maximum amplitude %f, patch+isol square %f",iPatchType, maxamp, amp));

  if(amp < maxamp){
    AliError(Form("Bad sum: Type %d, Maximum amplitude %f, patch+isol square %f",iPatchType, maxamp, amp));
    return kFALSE;
  }
  else
    amp-=maxamp; //Calculate energy in isolation patch that do not comes from maximum patch.
  
  AliDebug(2, Form("Maximum amplitude %f, Out of patch %f",maxamp, amp));

  //Fill isolation amplitude data member and say if patch is isolated.
  if(iPatchType == 0){ //2x2 case
    f2x2AmpOutOfPatch = amp;   
    if(amp < f2x2AmpOutOfPatchThres)
      b=kTRUE;
  }
  else  if(iPatchType == 1){ //nxn case
    fnxnAmpOutOfPatch = amp;   
    if(amp < fnxnAmpOutOfPatchThres)
      b=kTRUE;
  }

  return b;

}


//____________________________________________________________________________
void AliPHOSTrigger::MakeSlidingCell(const Int_t imod, TMatrixD &ampmax2, TMatrixD &ampmaxn)
{
  //Sums energy of all possible 2x2 (L0) and nxn (L1) crystals per each TRU. 
  //Fast signal in the experiment is given by 2x2 crystals, 
  //for this reason we loop inside the TRU crystals by 2. 
 
  //Declare and initialize varibles
  Float_t amp2 = 0 ;
  Float_t ampn = 0 ; 
  for(Int_t i = 0; i < 4; i++){
    for(Int_t j = 0; j < fNTRU; j++){
      ampmax2(i,j) = -1;
      ampmaxn(i,j) = -1;
    }
  }

  //Create matrix that will contain 2x2 amplitude sums
  //used to calculate the nxn sums
  TMatrixD  tru2x2(fNCrystalsPhi/2,fNCrystalsZ/2) ;
  for(Int_t i = 0; i < fNCrystalsPhi/2; i++)
    for(Int_t j = 0; j < fNCrystalsZ/2; j++)
      tru2x2(i,j) = -1.;
    
  //Loop over all TRUS in a module
  for(Int_t itru = 0 + imod  * fNTRU ; itru < (imod+1)*fNTRU ; itru++){
    TMatrixD * amptru   = static_cast<TMatrixD *>(fAmptrus  ->At(itru)) ;
    TMatrixD * timeRtru = static_cast<TMatrixD *>(fTimeRtrus->At(itru)) ;
    Int_t mtru = itru-imod*fNTRU ; //Number of TRU in Module
    
    //Sliding 2x2, add 2x2 amplitudes (NOT OVERLAP)
    for(Int_t irow = 0 ; irow <  fNCrystalsPhi; irow += 2){ 
      for(Int_t icol = 0 ; icol < fNCrystalsZ ; icol += 2){
	amp2 = (*amptru)(irow,icol)+(*amptru)(irow+1,icol)+
	  (*amptru)(irow,icol+1)+(*amptru)(irow+1,icol+1);
	//Fill new matrix with added 2x2 crystals for use in nxn sums
	tru2x2(irow/2,icol/2) = amp2 ;
	//Select 2x2 maximum sums to select L0 
	if(amp2 > ampmax2(0,mtru)){
	  ampmax2(0,mtru) = amp2 ; 
	  ampmax2(1,mtru) = irow;
	  ampmax2(2,mtru) = icol;
	}
      }
    }

    //Find most recent time in the selected 2x2 cell
    ampmax2(3,mtru) = 1 ;
    Int_t row2 =  static_cast <Int_t> (ampmax2(1,mtru));
    Int_t col2 =  static_cast <Int_t> (ampmax2(2,mtru));
    for(Int_t i = 0; i<2; i++){
      for(Int_t j = 0; j<2; j++){
	if((*amptru)(row2+i,col2+j) > 0 &&  (*timeRtru)(row2+i,col2+j)> 0){	  
	  if((*timeRtru)(row2+i,col2+j) <  ampmax2(3,mtru)  )
	    ampmax2(3,mtru) =  (*timeRtru)(row2+i,col2+j);
	}
      }
    }

    //Sliding nxn, add nxn amplitudes (OVERLAP)
    if(fPatchSize > 0){
      for(Int_t irow = 0 ; irow <  fNCrystalsPhi/2; irow++){ 
	for(Int_t icol = 0 ; icol < fNCrystalsZ/2 ; icol++){
	  ampn = 0;
	  if( (irow+fPatchSize) < fNCrystalsPhi/2 && (icol+fPatchSize) < fNCrystalsZ/2){//Avoid exit the TRU
	    for(Int_t i = 0 ; i <= fPatchSize ; i++)
	      for(Int_t j = 0 ; j <= fPatchSize ; j++)
		ampn += tru2x2(irow+i,icol+j);
	    //Select nxn maximum sums to select L1 
	    if(ampn > ampmaxn(0,mtru)){
	      ampmaxn(0,mtru) = ampn ; 
	      ampmaxn(1,mtru) = irow*2;
	      ampmaxn(2,mtru) = icol*2;
	    }
	  }
	}
      }
      
      //Find most recent time in selected nxn cell
      ampmaxn(3,mtru) = 1 ;
      Int_t rown =  static_cast <Int_t> (ampmaxn(1,mtru));
      Int_t coln =  static_cast <Int_t> (ampmaxn(2,mtru));
      for(Int_t i = 0; i<4*fPatchSize; i++){
	for(Int_t j = 0; j<4*fPatchSize; j++){
	  if( (rown+i) < fNCrystalsPhi && (coln+j) < fNCrystalsZ/2){//Avoid exit the TRU
	    if((*amptru)(rown+i,coln+j) > 0 &&  (*timeRtru)(rown+i,coln+j)> 0){
	      if((*timeRtru)(rown+i,coln+j) <  ampmaxn(3,mtru)  )
		ampmaxn(3,mtru) =  (*timeRtru)(rown+i,coln+j);
	    }
	  }
	}
      }
    }
    else {  
	ampmaxn(0,mtru) =  ampmax2(0,mtru); 
	ampmaxn(1,mtru) =  ampmax2(1,mtru);
	ampmaxn(2,mtru) =  ampmax2(2,mtru);
	ampmaxn(3,mtru) =  ampmax2(3,mtru);
      }
  }
}


//____________________________________________________________________________
void AliPHOSTrigger::Print(const Option_t * opt) const 
{

  //Prints main parameters
 
  if(! opt)
    return;
  AliTriggerInput* in = 0x0 ;

  printf( "             Maximum Amplitude after Sliding Crystal, \n") ; 
  printf( "               -2x2 crystals sum (not overlapped): %10.2f, in Super Module %d\n",
	  f2x2MaxAmp,f2x2SM) ; 
  printf( "               -2x2 from row %d to row %d and from column %d to column %d\n", f2x2CrystalPhi, f2x2CrystalPhi+2, f2x2CrystalEta, f2x2CrystalEta+2) ; 
  printf( "               -2x2 Isolation Patch %d x %d, Amplitude out of 2x2 patch is %f, threshold %f, Isolated? %d \n", 
  	  2*fIsolPatchSize+2, 2*fIsolPatchSize+2,  f2x2AmpOutOfPatch,  f2x2AmpOutOfPatchThres,static_cast<Int_t> (fIs2x2Isol)) ; 
  if(fPatchSize > 0){
    printf( "             Patch Size, n x n: %d x %d cells\n",2*(fPatchSize+1), 2*(fPatchSize+1));
    printf( "               -nxn crystals sum (overlapped)    : %10.2f, in Super Module %d\n",
	    fnxnMaxAmp,fnxnSM) ; 
    printf( "               -nxn from row %d to row %d and from column %d to column %d\n", fnxnCrystalPhi, fnxnCrystalPhi+4*fPatchSize, fnxnCrystalEta, fnxnCrystalEta+4*fPatchSize) ; 
    printf( "               -nxn Isolation Patch %d x %d, Amplitude out of nxn patch is %f, threshold %f, Isolated? %d \n", 
	    4*fIsolPatchSize+2*(fPatchSize+1),4*fIsolPatchSize+2*(fPatchSize+1) ,  fnxnAmpOutOfPatch,  fnxnAmpOutOfPatchThres,static_cast<Int_t> (fIsnxnIsol) ) ; 
  }

  printf( "             Isolate in Module? %d\n",  
          fIsolateInModule) ;  

  printf( "             Threshold for LO %10.1f\n", 
	  fL0Threshold) ;  
  
  printf( "             Threshold for LO %10.2f\n", fL0Threshold) ;  
  in = (AliTriggerInput*)fInputs.FindObject( "0PH0" );
  if(in->GetValue())
    printf( "             *** PHOS LO is set ***\n") ; 
  
  printf( "             Jet Low Pt Threshold for L1 %10.2f\n", fL1JetLowPtThreshold) ;
  in = (AliTriggerInput*)fInputs.FindObject( "PHOS_JetLPt_L1" );
  if(in->GetValue())
    printf( "             *** PHOS Jet Low Pt for L1 is set ***\n") ;
  
  printf( "             Jet Medium Pt Threshold for L1 %10.2f\n", fL1JetMediumPtThreshold) ;
  in = (AliTriggerInput*)fInputs.FindObject( "PHOS_JetMPt_L1" );
  if(in->GetValue())
    printf( "             *** PHOS Jet Medium Pt for L1 is set ***\n") ;
  
  printf( "             Jet High Pt Threshold for L1 %10.2f\n", fL1JetHighPtThreshold) ;  
  in = (AliTriggerInput*) fInputs.FindObject( "PHOS_JetHPt_L1" );
  if(in->GetValue())
    printf( "              *** PHOS Jet High Pt for L1 is set ***\n") ;
  
}

//____________________________________________________________________________
void AliPHOSTrigger::SetTriggers(const Int_t iMod, const TMatrixD & ampmax2, const TMatrixD & ampmaxn)  
{
  //Checks the 2x2 and nxn maximum amplitude per each TRU and compares 
  //with the different L0 and L1 triggers thresholds. It finds if maximum amplitudes are isolated.

  //Initialize variables
  Float_t max2[] = {-1,-1,-1,-1} ;
  Float_t maxn[] = {-1,-1,-1,-1} ;
  Int_t   mtru2  = -1 ;
  Int_t   mtrun  = -1 ;


  //Find maximum summed amplitude of all the TRU 
  //in a Module
  for(Int_t i = 0 ; i < fNTRU ; i++){
    if(max2[0] < ampmax2(0,i) ){
      max2[0] =  ampmax2(0,i) ; // 2x2 summed max amplitude
      max2[1] =  ampmax2(1,i) ; // corresponding phi position in TRU
      max2[2] =  ampmax2(2,i) ; // corresponding eta position in TRU
      max2[3] =  ampmax2(3,i) ; // corresponding most recent time
      mtru2   = i ; // TRU number in module
    }
    if(maxn[0] < ampmaxn(0,i) ){
      maxn[0] =  ampmaxn(0,i) ; // nxn summed max amplitude
      maxn[1] =  ampmaxn(1,i) ; // corresponding phi position in TRU
      maxn[2] =  ampmaxn(2,i) ; // corresponding eta position in TRU
      maxn[3] =  ampmaxn(3,i) ; // corresponding most recent time
      mtrun   = i ; // TRU number in module
    }
  }
  
  //Set max amplitude if larger than in other Modules
  Float_t maxtimeR2 = -1 ;
  Float_t maxtimeRn = -1 ;
  // Create a shaper pulse object
  AliPHOSPulseGenerator pulse ;
  Int_t nTimeBins = pulse.GetRawFormatTimeBins() ;
 
  //Set max 2x2 amplitude and select L0 trigger
  if(max2[0] > f2x2MaxAmp ){
    f2x2MaxAmp  = max2[0] ;
    f2x2SM      = iMod ;
    maxtimeR2   = max2[3] ;
    GetCrystalPhiEtaIndexInModuleFromTRUIndex(mtru2,
					      static_cast<Int_t>(max2[1]),
					      static_cast<Int_t>(max2[2]),
					      f2x2CrystalPhi,f2x2CrystalEta) ;
    
    //Isolated patch?
    if(fIsolateInModule)
      fIs2x2Isol =  IsPatchIsolated(0, iMod, mtru2,  f2x2MaxAmp, f2x2CrystalPhi,f2x2CrystalEta) ;
    else
      fIs2x2Isol =  IsPatchIsolated(0, iMod, mtru2,  f2x2MaxAmp,  static_cast<Int_t>(max2[1]), static_cast<Int_t>(max2[2])) ;

    //Transform digit amplitude in Raw Samples
    if (fADCValuesLow2x2 == 0) {
      fADCValuesLow2x2  = new Int_t[nTimeBins];
    }
    if(!fADCValuesHigh2x2) fADCValuesHigh2x2 = new Int_t[nTimeBins];

    
    pulse.SetAmplitude(f2x2MaxAmp);
    pulse.SetTZero(maxtimeR2);
    pulse.MakeSamples();
    pulse.GetSamples(fADCValuesHigh2x2, fADCValuesLow2x2) ; 
    
    //Set Trigger Inputs, compare ADC time bins until threshold is attained
    //Set L0
    for(Int_t i = 0 ; i < nTimeBins ; i++){
      if(fADCValuesHigh2x2[i] >= fL0Threshold || fADCValuesLow2x2[i] >= fL0Threshold) {
	SetInput("0PH0") ;
	break;
      }
    }
  }

  //Set max nxn amplitude and select L1 triggers
  if(maxn[0] > fnxnMaxAmp  && fPatchSize > 0){
    fnxnMaxAmp  = maxn[0] ;
    fnxnSM      = iMod ;
    maxtimeRn   = maxn[3] ;
    GetCrystalPhiEtaIndexInModuleFromTRUIndex(mtrun,
					      static_cast<Int_t>(maxn[1]),
					      static_cast<Int_t>(maxn[2]),
					      fnxnCrystalPhi,fnxnCrystalEta) ; 
    
    //Isolated patch?
    if(fIsolateInModule)
      fIsnxnIsol =  IsPatchIsolated(1, iMod, mtrun,  fnxnMaxAmp, fnxnCrystalPhi, fnxnCrystalEta) ;
    else
      fIsnxnIsol =  IsPatchIsolated(1, iMod, mtrun,  fnxnMaxAmp,  static_cast<Int_t>(maxn[1]), static_cast<Int_t>(maxn[2])) ;

    //Transform digit amplitude in Raw Samples
    if (fADCValuesHighnxn == 0) {
      fADCValuesHighnxn = new Int_t[nTimeBins];
      fADCValuesLownxn  = new Int_t[nTimeBins];
    }

    pulse.SetAmplitude(fnxnMaxAmp);
    pulse.SetTZero(maxtimeRn);
    pulse.MakeSamples();
    pulse.GetSamples(fADCValuesHighnxn, fADCValuesLownxn) ;
    
    //Set Trigger Inputs, compare ADC time bins until threshold is attained
    //SetL1 Low
    for(Int_t i = 0 ; i < nTimeBins ; i++){
      if(fADCValuesHighnxn[i] >= fL1JetLowPtThreshold  || fADCValuesLownxn[i] >= fL1JetLowPtThreshold){
	SetInput("PHOS_JetLPt_L1") ;
	break; 
      }
    }
    //SetL1 Medium
    for(Int_t i = 0 ; i < nTimeBins ; i++){
      if(fADCValuesHighnxn[i] >= fL1JetMediumPtThreshold  || fADCValuesLownxn[i] >= fL1JetMediumPtThreshold){
	SetInput("PHOS_JetMPt_L1") ;
	break; 
      }
    }
    //SetL1 High
    for(Int_t i = 0 ; i < nTimeBins ; i++){
      if(fADCValuesHighnxn[i] >= fL1JetHighPtThreshold || fADCValuesLownxn[i] >= fL1JetHighPtThreshold){
	SetInput("PHOS_JetHPt_L1") ;
	break;
      }
    }
  }
}

//____________________________________________________________________________
void AliPHOSTrigger::Trigger(TClonesArray *digits) 
{
  //Main Method to select triggers.

  fDigitsList = digits;
  DoIt() ; 
}

//____________________________________________________________________________
void AliPHOSTrigger::DoIt()
{
  // does the trigger job

  AliRunLoader* rl = AliRunLoader::Instance() ;
  AliPHOSLoader * phosLoader = static_cast<AliPHOSLoader*>(rl->GetLoader("PHOSLoader"));
  
  // Get PHOS Geometry object
  AliPHOSGeometry *geom;
  if (!(geom = AliPHOSGeometry::GetInstance())) 
        geom = AliPHOSGeometry::GetInstance("IHEP","");
   
  //Define parameters
  Int_t nModules     = geom->GetNModules();
  fNCrystalsPhi = geom->GetNPhi()/fNTRUPhi ;// 64/4=16
  fNCrystalsZ   = geom->GetNZ()/fNTRUZ ;// 56/2=28

  //Intialize data members each time the trigger is called in event loop
  f2x2MaxAmp = -1; f2x2CrystalPhi = -1;  f2x2CrystalEta = -1;
  fnxnMaxAmp = -1; fnxnCrystalPhi = -1;  fnxnCrystalEta = -1;

  //Take the digits list if simulation
  if(fSimulation)
    fDigitsList = phosLoader->Digits() ;
  
  if(!fDigitsList)
    AliFatal("Digits not found !") ;
  
  //Fill TRU Matrix  
//   TClonesArray * amptrus   = new TClonesArray("TMatrixD",1000);
//   TClonesArray * ampmods   = new TClonesArray("TMatrixD",1000);
//   TClonesArray * timeRtrus = new TClonesArray("TMatrixD",1000);
  FillTRU(fDigitsList,geom) ;

  //Do Crystal Sliding and select Trigger
  //Initialize varible that will contain maximum amplitudes and 
  //its corresponding cell position in eta and phi, and time.
  TMatrixD   ampmax2(4,fNTRU) ;
  TMatrixD   ampmaxn(4,fNTRU) ;

  for(Int_t imod = 0 ; imod < nModules ; imod++) {

    //Do 2x2 and nxn sums, select maximums. 
    MakeSlidingCell(imod, ampmax2, ampmaxn);
    //Set the trigger
    SetTriggers(imod,ampmax2,ampmaxn) ;
  }

  fAmptrus->Delete();
//   delete amptrus; amptrus=0;
  fAmpmods->Delete();
//   delete ampmods; ampmods=0;
  fTimeRtrus->Delete();
//   delete timeRtrus; timeRtrus=0;
  //Print();

}
 AliPHOSTrigger.cxx:1
 AliPHOSTrigger.cxx:2
 AliPHOSTrigger.cxx:3
 AliPHOSTrigger.cxx:4
 AliPHOSTrigger.cxx:5
 AliPHOSTrigger.cxx:6
 AliPHOSTrigger.cxx:7
 AliPHOSTrigger.cxx:8
 AliPHOSTrigger.cxx:9
 AliPHOSTrigger.cxx:10
 AliPHOSTrigger.cxx:11
 AliPHOSTrigger.cxx:12
 AliPHOSTrigger.cxx:13
 AliPHOSTrigger.cxx:14
 AliPHOSTrigger.cxx:15
 AliPHOSTrigger.cxx:16
 AliPHOSTrigger.cxx:17
 AliPHOSTrigger.cxx:18
 AliPHOSTrigger.cxx:19
 AliPHOSTrigger.cxx:20
 AliPHOSTrigger.cxx:21
 AliPHOSTrigger.cxx:22
 AliPHOSTrigger.cxx:23
 AliPHOSTrigger.cxx:24
 AliPHOSTrigger.cxx:25
 AliPHOSTrigger.cxx:26
 AliPHOSTrigger.cxx:27
 AliPHOSTrigger.cxx:28
 AliPHOSTrigger.cxx:29
 AliPHOSTrigger.cxx:30
 AliPHOSTrigger.cxx:31
 AliPHOSTrigger.cxx:32
 AliPHOSTrigger.cxx:33
 AliPHOSTrigger.cxx:34
 AliPHOSTrigger.cxx:35
 AliPHOSTrigger.cxx:36
 AliPHOSTrigger.cxx:37
 AliPHOSTrigger.cxx:38
 AliPHOSTrigger.cxx:39
 AliPHOSTrigger.cxx:40
 AliPHOSTrigger.cxx:41
 AliPHOSTrigger.cxx:42
 AliPHOSTrigger.cxx:43
 AliPHOSTrigger.cxx:44
 AliPHOSTrigger.cxx:45
 AliPHOSTrigger.cxx:46
 AliPHOSTrigger.cxx:47
 AliPHOSTrigger.cxx:48
 AliPHOSTrigger.cxx:49
 AliPHOSTrigger.cxx:50
 AliPHOSTrigger.cxx:51
 AliPHOSTrigger.cxx:52
 AliPHOSTrigger.cxx:53
 AliPHOSTrigger.cxx:54
 AliPHOSTrigger.cxx:55
 AliPHOSTrigger.cxx:56
 AliPHOSTrigger.cxx:57
 AliPHOSTrigger.cxx:58
 AliPHOSTrigger.cxx:59
 AliPHOSTrigger.cxx:60
 AliPHOSTrigger.cxx:61
 AliPHOSTrigger.cxx:62
 AliPHOSTrigger.cxx:63
 AliPHOSTrigger.cxx:64
 AliPHOSTrigger.cxx:65
 AliPHOSTrigger.cxx:66
 AliPHOSTrigger.cxx:67
 AliPHOSTrigger.cxx:68
 AliPHOSTrigger.cxx:69
 AliPHOSTrigger.cxx:70
 AliPHOSTrigger.cxx:71
 AliPHOSTrigger.cxx:72
 AliPHOSTrigger.cxx:73
 AliPHOSTrigger.cxx:74
 AliPHOSTrigger.cxx:75
 AliPHOSTrigger.cxx:76
 AliPHOSTrigger.cxx:77
 AliPHOSTrigger.cxx:78
 AliPHOSTrigger.cxx:79
 AliPHOSTrigger.cxx:80
 AliPHOSTrigger.cxx:81
 AliPHOSTrigger.cxx:82
 AliPHOSTrigger.cxx:83
 AliPHOSTrigger.cxx:84
 AliPHOSTrigger.cxx:85
 AliPHOSTrigger.cxx:86
 AliPHOSTrigger.cxx:87
 AliPHOSTrigger.cxx:88
 AliPHOSTrigger.cxx:89
 AliPHOSTrigger.cxx:90
 AliPHOSTrigger.cxx:91
 AliPHOSTrigger.cxx:92
 AliPHOSTrigger.cxx:93
 AliPHOSTrigger.cxx:94
 AliPHOSTrigger.cxx:95
 AliPHOSTrigger.cxx:96
 AliPHOSTrigger.cxx:97
 AliPHOSTrigger.cxx:98
 AliPHOSTrigger.cxx:99
 AliPHOSTrigger.cxx:100
 AliPHOSTrigger.cxx:101
 AliPHOSTrigger.cxx:102
 AliPHOSTrigger.cxx:103
 AliPHOSTrigger.cxx:104
 AliPHOSTrigger.cxx:105
 AliPHOSTrigger.cxx:106
 AliPHOSTrigger.cxx:107
 AliPHOSTrigger.cxx:108
 AliPHOSTrigger.cxx:109
 AliPHOSTrigger.cxx:110
 AliPHOSTrigger.cxx:111
 AliPHOSTrigger.cxx:112
 AliPHOSTrigger.cxx:113
 AliPHOSTrigger.cxx:114
 AliPHOSTrigger.cxx:115
 AliPHOSTrigger.cxx:116
 AliPHOSTrigger.cxx:117
 AliPHOSTrigger.cxx:118
 AliPHOSTrigger.cxx:119
 AliPHOSTrigger.cxx:120
 AliPHOSTrigger.cxx:121
 AliPHOSTrigger.cxx:122
 AliPHOSTrigger.cxx:123
 AliPHOSTrigger.cxx:124
 AliPHOSTrigger.cxx:125
 AliPHOSTrigger.cxx:126
 AliPHOSTrigger.cxx:127
 AliPHOSTrigger.cxx:128
 AliPHOSTrigger.cxx:129
 AliPHOSTrigger.cxx:130
 AliPHOSTrigger.cxx:131
 AliPHOSTrigger.cxx:132
 AliPHOSTrigger.cxx:133
 AliPHOSTrigger.cxx:134
 AliPHOSTrigger.cxx:135
 AliPHOSTrigger.cxx:136
 AliPHOSTrigger.cxx:137
 AliPHOSTrigger.cxx:138
 AliPHOSTrigger.cxx:139
 AliPHOSTrigger.cxx:140
 AliPHOSTrigger.cxx:141
 AliPHOSTrigger.cxx:142
 AliPHOSTrigger.cxx:143
 AliPHOSTrigger.cxx:144
 AliPHOSTrigger.cxx:145
 AliPHOSTrigger.cxx:146
 AliPHOSTrigger.cxx:147
 AliPHOSTrigger.cxx:148
 AliPHOSTrigger.cxx:149
 AliPHOSTrigger.cxx:150
 AliPHOSTrigger.cxx:151
 AliPHOSTrigger.cxx:152
 AliPHOSTrigger.cxx:153
 AliPHOSTrigger.cxx:154
 AliPHOSTrigger.cxx:155
 AliPHOSTrigger.cxx:156
 AliPHOSTrigger.cxx:157
 AliPHOSTrigger.cxx:158
 AliPHOSTrigger.cxx:159
 AliPHOSTrigger.cxx:160
 AliPHOSTrigger.cxx:161
 AliPHOSTrigger.cxx:162
 AliPHOSTrigger.cxx:163
 AliPHOSTrigger.cxx:164
 AliPHOSTrigger.cxx:165
 AliPHOSTrigger.cxx:166
 AliPHOSTrigger.cxx:167
 AliPHOSTrigger.cxx:168
 AliPHOSTrigger.cxx:169
 AliPHOSTrigger.cxx:170
 AliPHOSTrigger.cxx:171
 AliPHOSTrigger.cxx:172
 AliPHOSTrigger.cxx:173
 AliPHOSTrigger.cxx:174
 AliPHOSTrigger.cxx:175
 AliPHOSTrigger.cxx:176
 AliPHOSTrigger.cxx:177
 AliPHOSTrigger.cxx:178
 AliPHOSTrigger.cxx:179
 AliPHOSTrigger.cxx:180
 AliPHOSTrigger.cxx:181
 AliPHOSTrigger.cxx:182
 AliPHOSTrigger.cxx:183
 AliPHOSTrigger.cxx:184
 AliPHOSTrigger.cxx:185
 AliPHOSTrigger.cxx:186
 AliPHOSTrigger.cxx:187
 AliPHOSTrigger.cxx:188
 AliPHOSTrigger.cxx:189
 AliPHOSTrigger.cxx:190
 AliPHOSTrigger.cxx:191
 AliPHOSTrigger.cxx:192
 AliPHOSTrigger.cxx:193
 AliPHOSTrigger.cxx:194
 AliPHOSTrigger.cxx:195
 AliPHOSTrigger.cxx:196
 AliPHOSTrigger.cxx:197
 AliPHOSTrigger.cxx:198
 AliPHOSTrigger.cxx:199
 AliPHOSTrigger.cxx:200
 AliPHOSTrigger.cxx:201
 AliPHOSTrigger.cxx:202
 AliPHOSTrigger.cxx:203
 AliPHOSTrigger.cxx:204
 AliPHOSTrigger.cxx:205
 AliPHOSTrigger.cxx:206
 AliPHOSTrigger.cxx:207
 AliPHOSTrigger.cxx:208
 AliPHOSTrigger.cxx:209
 AliPHOSTrigger.cxx:210
 AliPHOSTrigger.cxx:211
 AliPHOSTrigger.cxx:212
 AliPHOSTrigger.cxx:213
 AliPHOSTrigger.cxx:214
 AliPHOSTrigger.cxx:215
 AliPHOSTrigger.cxx:216
 AliPHOSTrigger.cxx:217
 AliPHOSTrigger.cxx:218
 AliPHOSTrigger.cxx:219
 AliPHOSTrigger.cxx:220
 AliPHOSTrigger.cxx:221
 AliPHOSTrigger.cxx:222
 AliPHOSTrigger.cxx:223
 AliPHOSTrigger.cxx:224
 AliPHOSTrigger.cxx:225
 AliPHOSTrigger.cxx:226
 AliPHOSTrigger.cxx:227
 AliPHOSTrigger.cxx:228
 AliPHOSTrigger.cxx:229
 AliPHOSTrigger.cxx:230
 AliPHOSTrigger.cxx:231
 AliPHOSTrigger.cxx:232
 AliPHOSTrigger.cxx:233
 AliPHOSTrigger.cxx:234
 AliPHOSTrigger.cxx:235
 AliPHOSTrigger.cxx:236
 AliPHOSTrigger.cxx:237
 AliPHOSTrigger.cxx:238
 AliPHOSTrigger.cxx:239
 AliPHOSTrigger.cxx:240
 AliPHOSTrigger.cxx:241
 AliPHOSTrigger.cxx:242
 AliPHOSTrigger.cxx:243
 AliPHOSTrigger.cxx:244
 AliPHOSTrigger.cxx:245
 AliPHOSTrigger.cxx:246
 AliPHOSTrigger.cxx:247
 AliPHOSTrigger.cxx:248
 AliPHOSTrigger.cxx:249
 AliPHOSTrigger.cxx:250
 AliPHOSTrigger.cxx:251
 AliPHOSTrigger.cxx:252
 AliPHOSTrigger.cxx:253
 AliPHOSTrigger.cxx:254
 AliPHOSTrigger.cxx:255
 AliPHOSTrigger.cxx:256
 AliPHOSTrigger.cxx:257
 AliPHOSTrigger.cxx:258
 AliPHOSTrigger.cxx:259
 AliPHOSTrigger.cxx:260
 AliPHOSTrigger.cxx:261
 AliPHOSTrigger.cxx:262
 AliPHOSTrigger.cxx:263
 AliPHOSTrigger.cxx:264
 AliPHOSTrigger.cxx:265
 AliPHOSTrigger.cxx:266
 AliPHOSTrigger.cxx:267
 AliPHOSTrigger.cxx:268
 AliPHOSTrigger.cxx:269
 AliPHOSTrigger.cxx:270
 AliPHOSTrigger.cxx:271
 AliPHOSTrigger.cxx:272
 AliPHOSTrigger.cxx:273
 AliPHOSTrigger.cxx:274
 AliPHOSTrigger.cxx:275
 AliPHOSTrigger.cxx:276
 AliPHOSTrigger.cxx:277
 AliPHOSTrigger.cxx:278
 AliPHOSTrigger.cxx:279
 AliPHOSTrigger.cxx:280
 AliPHOSTrigger.cxx:281
 AliPHOSTrigger.cxx:282
 AliPHOSTrigger.cxx:283
 AliPHOSTrigger.cxx:284
 AliPHOSTrigger.cxx:285
 AliPHOSTrigger.cxx:286
 AliPHOSTrigger.cxx:287
 AliPHOSTrigger.cxx:288
 AliPHOSTrigger.cxx:289
 AliPHOSTrigger.cxx:290
 AliPHOSTrigger.cxx:291
 AliPHOSTrigger.cxx:292
 AliPHOSTrigger.cxx:293
 AliPHOSTrigger.cxx:294
 AliPHOSTrigger.cxx:295
 AliPHOSTrigger.cxx:296
 AliPHOSTrigger.cxx:297
 AliPHOSTrigger.cxx:298
 AliPHOSTrigger.cxx:299
 AliPHOSTrigger.cxx:300
 AliPHOSTrigger.cxx:301
 AliPHOSTrigger.cxx:302
 AliPHOSTrigger.cxx:303
 AliPHOSTrigger.cxx:304
 AliPHOSTrigger.cxx:305
 AliPHOSTrigger.cxx:306
 AliPHOSTrigger.cxx:307
 AliPHOSTrigger.cxx:308
 AliPHOSTrigger.cxx:309
 AliPHOSTrigger.cxx:310
 AliPHOSTrigger.cxx:311
 AliPHOSTrigger.cxx:312
 AliPHOSTrigger.cxx:313
 AliPHOSTrigger.cxx:314
 AliPHOSTrigger.cxx:315
 AliPHOSTrigger.cxx:316
 AliPHOSTrigger.cxx:317
 AliPHOSTrigger.cxx:318
 AliPHOSTrigger.cxx:319
 AliPHOSTrigger.cxx:320
 AliPHOSTrigger.cxx:321
 AliPHOSTrigger.cxx:322
 AliPHOSTrigger.cxx:323
 AliPHOSTrigger.cxx:324
 AliPHOSTrigger.cxx:325
 AliPHOSTrigger.cxx:326
 AliPHOSTrigger.cxx:327
 AliPHOSTrigger.cxx:328
 AliPHOSTrigger.cxx:329
 AliPHOSTrigger.cxx:330
 AliPHOSTrigger.cxx:331
 AliPHOSTrigger.cxx:332
 AliPHOSTrigger.cxx:333
 AliPHOSTrigger.cxx:334
 AliPHOSTrigger.cxx:335
 AliPHOSTrigger.cxx:336
 AliPHOSTrigger.cxx:337
 AliPHOSTrigger.cxx:338
 AliPHOSTrigger.cxx:339
 AliPHOSTrigger.cxx:340
 AliPHOSTrigger.cxx:341
 AliPHOSTrigger.cxx:342
 AliPHOSTrigger.cxx:343
 AliPHOSTrigger.cxx:344
 AliPHOSTrigger.cxx:345
 AliPHOSTrigger.cxx:346
 AliPHOSTrigger.cxx:347
 AliPHOSTrigger.cxx:348
 AliPHOSTrigger.cxx:349
 AliPHOSTrigger.cxx:350
 AliPHOSTrigger.cxx:351
 AliPHOSTrigger.cxx:352
 AliPHOSTrigger.cxx:353
 AliPHOSTrigger.cxx:354
 AliPHOSTrigger.cxx:355
 AliPHOSTrigger.cxx:356
 AliPHOSTrigger.cxx:357
 AliPHOSTrigger.cxx:358
 AliPHOSTrigger.cxx:359
 AliPHOSTrigger.cxx:360
 AliPHOSTrigger.cxx:361
 AliPHOSTrigger.cxx:362
 AliPHOSTrigger.cxx:363
 AliPHOSTrigger.cxx:364
 AliPHOSTrigger.cxx:365
 AliPHOSTrigger.cxx:366
 AliPHOSTrigger.cxx:367
 AliPHOSTrigger.cxx:368
 AliPHOSTrigger.cxx:369
 AliPHOSTrigger.cxx:370
 AliPHOSTrigger.cxx:371
 AliPHOSTrigger.cxx:372
 AliPHOSTrigger.cxx:373
 AliPHOSTrigger.cxx:374
 AliPHOSTrigger.cxx:375
 AliPHOSTrigger.cxx:376
 AliPHOSTrigger.cxx:377
 AliPHOSTrigger.cxx:378
 AliPHOSTrigger.cxx:379
 AliPHOSTrigger.cxx:380
 AliPHOSTrigger.cxx:381
 AliPHOSTrigger.cxx:382
 AliPHOSTrigger.cxx:383
 AliPHOSTrigger.cxx:384
 AliPHOSTrigger.cxx:385
 AliPHOSTrigger.cxx:386
 AliPHOSTrigger.cxx:387
 AliPHOSTrigger.cxx:388
 AliPHOSTrigger.cxx:389
 AliPHOSTrigger.cxx:390
 AliPHOSTrigger.cxx:391
 AliPHOSTrigger.cxx:392
 AliPHOSTrigger.cxx:393
 AliPHOSTrigger.cxx:394
 AliPHOSTrigger.cxx:395
 AliPHOSTrigger.cxx:396
 AliPHOSTrigger.cxx:397
 AliPHOSTrigger.cxx:398
 AliPHOSTrigger.cxx:399
 AliPHOSTrigger.cxx:400
 AliPHOSTrigger.cxx:401
 AliPHOSTrigger.cxx:402
 AliPHOSTrigger.cxx:403
 AliPHOSTrigger.cxx:404
 AliPHOSTrigger.cxx:405
 AliPHOSTrigger.cxx:406
 AliPHOSTrigger.cxx:407
 AliPHOSTrigger.cxx:408
 AliPHOSTrigger.cxx:409
 AliPHOSTrigger.cxx:410
 AliPHOSTrigger.cxx:411
 AliPHOSTrigger.cxx:412
 AliPHOSTrigger.cxx:413
 AliPHOSTrigger.cxx:414
 AliPHOSTrigger.cxx:415
 AliPHOSTrigger.cxx:416
 AliPHOSTrigger.cxx:417
 AliPHOSTrigger.cxx:418
 AliPHOSTrigger.cxx:419
 AliPHOSTrigger.cxx:420
 AliPHOSTrigger.cxx:421
 AliPHOSTrigger.cxx:422
 AliPHOSTrigger.cxx:423
 AliPHOSTrigger.cxx:424
 AliPHOSTrigger.cxx:425
 AliPHOSTrigger.cxx:426
 AliPHOSTrigger.cxx:427
 AliPHOSTrigger.cxx:428
 AliPHOSTrigger.cxx:429
 AliPHOSTrigger.cxx:430
 AliPHOSTrigger.cxx:431
 AliPHOSTrigger.cxx:432
 AliPHOSTrigger.cxx:433
 AliPHOSTrigger.cxx:434
 AliPHOSTrigger.cxx:435
 AliPHOSTrigger.cxx:436
 AliPHOSTrigger.cxx:437
 AliPHOSTrigger.cxx:438
 AliPHOSTrigger.cxx:439
 AliPHOSTrigger.cxx:440
 AliPHOSTrigger.cxx:441
 AliPHOSTrigger.cxx:442
 AliPHOSTrigger.cxx:443
 AliPHOSTrigger.cxx:444
 AliPHOSTrigger.cxx:445
 AliPHOSTrigger.cxx:446
 AliPHOSTrigger.cxx:447
 AliPHOSTrigger.cxx:448
 AliPHOSTrigger.cxx:449
 AliPHOSTrigger.cxx:450
 AliPHOSTrigger.cxx:451
 AliPHOSTrigger.cxx:452
 AliPHOSTrigger.cxx:453
 AliPHOSTrigger.cxx:454
 AliPHOSTrigger.cxx:455
 AliPHOSTrigger.cxx:456
 AliPHOSTrigger.cxx:457
 AliPHOSTrigger.cxx:458
 AliPHOSTrigger.cxx:459
 AliPHOSTrigger.cxx:460
 AliPHOSTrigger.cxx:461
 AliPHOSTrigger.cxx:462
 AliPHOSTrigger.cxx:463
 AliPHOSTrigger.cxx:464
 AliPHOSTrigger.cxx:465
 AliPHOSTrigger.cxx:466
 AliPHOSTrigger.cxx:467
 AliPHOSTrigger.cxx:468
 AliPHOSTrigger.cxx:469
 AliPHOSTrigger.cxx:470
 AliPHOSTrigger.cxx:471
 AliPHOSTrigger.cxx:472
 AliPHOSTrigger.cxx:473
 AliPHOSTrigger.cxx:474
 AliPHOSTrigger.cxx:475
 AliPHOSTrigger.cxx:476
 AliPHOSTrigger.cxx:477
 AliPHOSTrigger.cxx:478
 AliPHOSTrigger.cxx:479
 AliPHOSTrigger.cxx:480
 AliPHOSTrigger.cxx:481
 AliPHOSTrigger.cxx:482
 AliPHOSTrigger.cxx:483
 AliPHOSTrigger.cxx:484
 AliPHOSTrigger.cxx:485
 AliPHOSTrigger.cxx:486
 AliPHOSTrigger.cxx:487
 AliPHOSTrigger.cxx:488
 AliPHOSTrigger.cxx:489
 AliPHOSTrigger.cxx:490
 AliPHOSTrigger.cxx:491
 AliPHOSTrigger.cxx:492
 AliPHOSTrigger.cxx:493
 AliPHOSTrigger.cxx:494
 AliPHOSTrigger.cxx:495
 AliPHOSTrigger.cxx:496
 AliPHOSTrigger.cxx:497
 AliPHOSTrigger.cxx:498
 AliPHOSTrigger.cxx:499
 AliPHOSTrigger.cxx:500
 AliPHOSTrigger.cxx:501
 AliPHOSTrigger.cxx:502
 AliPHOSTrigger.cxx:503
 AliPHOSTrigger.cxx:504
 AliPHOSTrigger.cxx:505
 AliPHOSTrigger.cxx:506
 AliPHOSTrigger.cxx:507
 AliPHOSTrigger.cxx:508
 AliPHOSTrigger.cxx:509
 AliPHOSTrigger.cxx:510
 AliPHOSTrigger.cxx:511
 AliPHOSTrigger.cxx:512
 AliPHOSTrigger.cxx:513
 AliPHOSTrigger.cxx:514
 AliPHOSTrigger.cxx:515
 AliPHOSTrigger.cxx:516
 AliPHOSTrigger.cxx:517
 AliPHOSTrigger.cxx:518
 AliPHOSTrigger.cxx:519
 AliPHOSTrigger.cxx:520
 AliPHOSTrigger.cxx:521
 AliPHOSTrigger.cxx:522
 AliPHOSTrigger.cxx:523
 AliPHOSTrigger.cxx:524
 AliPHOSTrigger.cxx:525
 AliPHOSTrigger.cxx:526
 AliPHOSTrigger.cxx:527
 AliPHOSTrigger.cxx:528
 AliPHOSTrigger.cxx:529
 AliPHOSTrigger.cxx:530
 AliPHOSTrigger.cxx:531
 AliPHOSTrigger.cxx:532
 AliPHOSTrigger.cxx:533
 AliPHOSTrigger.cxx:534
 AliPHOSTrigger.cxx:535
 AliPHOSTrigger.cxx:536
 AliPHOSTrigger.cxx:537
 AliPHOSTrigger.cxx:538
 AliPHOSTrigger.cxx:539
 AliPHOSTrigger.cxx:540
 AliPHOSTrigger.cxx:541
 AliPHOSTrigger.cxx:542
 AliPHOSTrigger.cxx:543
 AliPHOSTrigger.cxx:544
 AliPHOSTrigger.cxx:545
 AliPHOSTrigger.cxx:546
 AliPHOSTrigger.cxx:547
 AliPHOSTrigger.cxx:548
 AliPHOSTrigger.cxx:549
 AliPHOSTrigger.cxx:550
 AliPHOSTrigger.cxx:551
 AliPHOSTrigger.cxx:552
 AliPHOSTrigger.cxx:553
 AliPHOSTrigger.cxx:554
 AliPHOSTrigger.cxx:555
 AliPHOSTrigger.cxx:556
 AliPHOSTrigger.cxx:557
 AliPHOSTrigger.cxx:558
 AliPHOSTrigger.cxx:559
 AliPHOSTrigger.cxx:560
 AliPHOSTrigger.cxx:561
 AliPHOSTrigger.cxx:562
 AliPHOSTrigger.cxx:563
 AliPHOSTrigger.cxx:564
 AliPHOSTrigger.cxx:565
 AliPHOSTrigger.cxx:566
 AliPHOSTrigger.cxx:567
 AliPHOSTrigger.cxx:568
 AliPHOSTrigger.cxx:569
 AliPHOSTrigger.cxx:570
 AliPHOSTrigger.cxx:571
 AliPHOSTrigger.cxx:572
 AliPHOSTrigger.cxx:573
 AliPHOSTrigger.cxx:574
 AliPHOSTrigger.cxx:575
 AliPHOSTrigger.cxx:576
 AliPHOSTrigger.cxx:577
 AliPHOSTrigger.cxx:578
 AliPHOSTrigger.cxx:579
 AliPHOSTrigger.cxx:580
 AliPHOSTrigger.cxx:581
 AliPHOSTrigger.cxx:582
 AliPHOSTrigger.cxx:583
 AliPHOSTrigger.cxx:584
 AliPHOSTrigger.cxx:585
 AliPHOSTrigger.cxx:586
 AliPHOSTrigger.cxx:587
 AliPHOSTrigger.cxx:588
 AliPHOSTrigger.cxx:589
 AliPHOSTrigger.cxx:590
 AliPHOSTrigger.cxx:591
 AliPHOSTrigger.cxx:592
 AliPHOSTrigger.cxx:593
 AliPHOSTrigger.cxx:594
 AliPHOSTrigger.cxx:595
 AliPHOSTrigger.cxx:596
 AliPHOSTrigger.cxx:597
 AliPHOSTrigger.cxx:598
 AliPHOSTrigger.cxx:599
 AliPHOSTrigger.cxx:600
 AliPHOSTrigger.cxx:601
 AliPHOSTrigger.cxx:602
 AliPHOSTrigger.cxx:603
 AliPHOSTrigger.cxx:604
 AliPHOSTrigger.cxx:605
 AliPHOSTrigger.cxx:606
 AliPHOSTrigger.cxx:607
 AliPHOSTrigger.cxx:608
 AliPHOSTrigger.cxx:609
 AliPHOSTrigger.cxx:610
 AliPHOSTrigger.cxx:611
 AliPHOSTrigger.cxx:612
 AliPHOSTrigger.cxx:613
 AliPHOSTrigger.cxx:614
 AliPHOSTrigger.cxx:615
 AliPHOSTrigger.cxx:616
 AliPHOSTrigger.cxx:617
 AliPHOSTrigger.cxx:618
 AliPHOSTrigger.cxx:619
 AliPHOSTrigger.cxx:620
 AliPHOSTrigger.cxx:621
 AliPHOSTrigger.cxx:622
 AliPHOSTrigger.cxx:623
 AliPHOSTrigger.cxx:624
 AliPHOSTrigger.cxx:625
 AliPHOSTrigger.cxx:626
 AliPHOSTrigger.cxx:627
 AliPHOSTrigger.cxx:628
 AliPHOSTrigger.cxx:629
 AliPHOSTrigger.cxx:630
 AliPHOSTrigger.cxx:631
 AliPHOSTrigger.cxx:632
 AliPHOSTrigger.cxx:633
 AliPHOSTrigger.cxx:634
 AliPHOSTrigger.cxx:635
 AliPHOSTrigger.cxx:636
 AliPHOSTrigger.cxx:637
 AliPHOSTrigger.cxx:638
 AliPHOSTrigger.cxx:639
 AliPHOSTrigger.cxx:640
 AliPHOSTrigger.cxx:641
 AliPHOSTrigger.cxx:642
 AliPHOSTrigger.cxx:643
 AliPHOSTrigger.cxx:644
 AliPHOSTrigger.cxx:645
 AliPHOSTrigger.cxx:646
 AliPHOSTrigger.cxx:647
 AliPHOSTrigger.cxx:648
 AliPHOSTrigger.cxx:649
 AliPHOSTrigger.cxx:650
 AliPHOSTrigger.cxx:651
 AliPHOSTrigger.cxx:652
 AliPHOSTrigger.cxx:653
 AliPHOSTrigger.cxx:654
 AliPHOSTrigger.cxx:655
 AliPHOSTrigger.cxx:656
 AliPHOSTrigger.cxx:657
 AliPHOSTrigger.cxx:658
 AliPHOSTrigger.cxx:659
 AliPHOSTrigger.cxx:660
 AliPHOSTrigger.cxx:661
 AliPHOSTrigger.cxx:662
 AliPHOSTrigger.cxx:663
 AliPHOSTrigger.cxx:664
 AliPHOSTrigger.cxx:665
 AliPHOSTrigger.cxx:666
 AliPHOSTrigger.cxx:667
 AliPHOSTrigger.cxx:668
 AliPHOSTrigger.cxx:669
 AliPHOSTrigger.cxx:670
 AliPHOSTrigger.cxx:671
 AliPHOSTrigger.cxx:672
 AliPHOSTrigger.cxx:673
 AliPHOSTrigger.cxx:674
 AliPHOSTrigger.cxx:675
 AliPHOSTrigger.cxx:676
 AliPHOSTrigger.cxx:677
 AliPHOSTrigger.cxx:678
 AliPHOSTrigger.cxx:679
 AliPHOSTrigger.cxx:680
 AliPHOSTrigger.cxx:681
 AliPHOSTrigger.cxx:682
 AliPHOSTrigger.cxx:683
 AliPHOSTrigger.cxx:684
 AliPHOSTrigger.cxx:685
 AliPHOSTrigger.cxx:686
 AliPHOSTrigger.cxx:687
 AliPHOSTrigger.cxx:688
 AliPHOSTrigger.cxx:689
 AliPHOSTrigger.cxx:690
 AliPHOSTrigger.cxx:691
 AliPHOSTrigger.cxx:692
 AliPHOSTrigger.cxx:693
 AliPHOSTrigger.cxx:694
 AliPHOSTrigger.cxx:695
 AliPHOSTrigger.cxx:696
 AliPHOSTrigger.cxx:697
 AliPHOSTrigger.cxx:698
 AliPHOSTrigger.cxx:699
 AliPHOSTrigger.cxx:700
 AliPHOSTrigger.cxx:701
 AliPHOSTrigger.cxx:702
 AliPHOSTrigger.cxx:703
 AliPHOSTrigger.cxx:704
 AliPHOSTrigger.cxx:705
 AliPHOSTrigger.cxx:706
 AliPHOSTrigger.cxx:707
 AliPHOSTrigger.cxx:708
 AliPHOSTrigger.cxx:709
 AliPHOSTrigger.cxx:710
 AliPHOSTrigger.cxx:711
 AliPHOSTrigger.cxx:712
 AliPHOSTrigger.cxx:713
 AliPHOSTrigger.cxx:714
 AliPHOSTrigger.cxx:715
 AliPHOSTrigger.cxx:716
 AliPHOSTrigger.cxx:717
 AliPHOSTrigger.cxx:718
 AliPHOSTrigger.cxx:719
 AliPHOSTrigger.cxx:720