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

//_________________________________________________________________________
//*-- Implementation version v2 of EMCAL Manager class; SHASHLYK version
//*-- An object of this class does not produce digits
//*-- It is the one to use if you do want to produce outputs in TREEH 
//*--                  
//*-- Author : Alexei Pavlinov (WSU)
//           : Adapted for DCAL by M.L. Wang CCNU Wuhan & Subatech Oct-23-2012
// This Class not stores information on all particles prior to EMCAL entry - in order to facilitate analysis.
// This is done by setting fIShunt =2, and flagging all parents of particles entering the EMCAL.

#include <cassert>
// --- ROOT system ---
#include <TBrowser.h>
#include <TClonesArray.h>
#include <TH2.h>
#include <TParticle.h>
#include <TROOT.h>
#include <TVirtualMC.h>

// --- Standard library ---

// --- AliRoot header files ---
#include "AliEMCALv2.h"
#include "AliEMCALHit.h"
#include "AliEMCALGeometry.h"
#include "AliRun.h"
#include "AliHeader.h"
#include "AliMC.h"
#include "AliStack.h"
#include "AliTrackReference.h"
// for TRD1 case only; May 31,2006

ClassImp(AliEMCALv2)

//______________________________________________________________________
AliEMCALv2::AliEMCALv2()
  : AliEMCALv1()
{
  // ctor
}

//______________________________________________________________________
AliEMCALv2::AliEMCALv2(const char *name, const char *title, 
                       const Bool_t checkGeoAndRun)
  : AliEMCALv1(name,title,checkGeoAndRun)
{
    // Standard Creator.

    //fHits= new TClonesArray("AliEMCALHit",1000); //Already done in ctor of v1
    gAlice->GetMCApp()->AddHitList(fHits);

    fNhits    = 0;
    fIshunt   = 2; // All hits are associated with particles entering the calorimeter
    fTimeCut  = 30e-09;
  
    fGeometry = GetGeometry(); 
}

//______________________________________________________________________
AliEMCALv2::~AliEMCALv2(){
    // dtor

  //Already done in dtor of v1
//  if ( fHits ) {
//    fHits->Clear();
//    delete fHits;
//    fHits = 0;
//  }
}

//______________________________________________________________________
void AliEMCALv2::AddHit(Int_t shunt, Int_t primary, Int_t tracknumber, Int_t iparent, Float_t ienergy, 
			Int_t id, Float_t * hits,Float_t * p){
    // Add a hit to the hit list.
    // An EMCAL hit is the sum of all hits in a tower section
    //   originating from the same entering particle 
    static Int_t hitCounter;
    static AliEMCALHit *newHit, *curHit;
    static Bool_t deja ;
  
    deja = kFALSE;

    newHit = new AliEMCALHit(shunt, primary, tracknumber, iparent, ienergy, id, hits, p);
    for ( hitCounter = fNhits-1; hitCounter >= 0 && !deja; hitCounter-- ) {
	curHit = (AliEMCALHit*) (*fHits)[hitCounter];
	// We add hits with the same tracknumber, while GEANT treats
	// primaries succesively
	if(curHit->GetPrimary() != primary) 
	  break;
	if( *curHit == *newHit ) {
	    *curHit = *curHit + *newHit;
	    deja = kTRUE;
	    //            break; // 30-aug-04 by PAI 
	} // end if
    } // end for hitCounter
    
    if ( !deja ) {
	new((*fHits)[fNhits]) AliEMCALHit(*newHit);
	fNhits++;
    }
    //    printf(" fNhits %i \n", fNhits); 
    delete newHit;
}

//______________________________________________________________________
void AliEMCALv2::StepManager(void){
  // Accumulates hits as long as the track stays in a tower

  // position wrt MRS and energy deposited
  static Float_t        xyzte[5]={0.,0.,0.,0.,0.};// position wrt MRS, time and energy deposited
  static Float_t        pmom[4]={0.,0.,0.,0.};
  static TLorentzVector pos;  // Lorentz vector of the track current position.
  static TLorentzVector mom;  // Lorentz vector of the track current momentum.
  static Float_t ienergy = 0; // part->Energy();
  static TString curVolName="";
  static int supModuleNumber=-1, moduleNumber=-1, yNumber=-1, xNumber=-1, absid=-1;
  static int keyGeom=1;  //real TRD1 geometry
  static const char *vn = "SCMX"; // Apr 13, 2006 - only TRD1 case now
  static Float_t depositedEnergy=0.0; 

  if(keyGeom == 0) {
    keyGeom = 2;
    if(TVirtualMC::GetMC()->VolId("PBMO")==0 || TVirtualMC::GetMC()->VolId("WSUC")==1) {
      vn      = "SCMX";   // old TRD2(TRD1) or WSUC
      keyGeom = 1;
    }    
    printf("AliEMCALv2::StepManager():  keyGeom %i : Sensetive volume %s \n", 
    keyGeom, vn); 
    if(TVirtualMC::GetMC()->VolId("WSUC")==1) printf(" WSUC - cosmic ray stand geometry \n");
  }
  Int_t tracknumber =  gAlice->GetMCApp()->GetCurrentTrackNumber();
  Int_t parent=0;
  TParticle* part=0;

  curVolName = TVirtualMC::GetMC()->CurrentVolName();
  if(curVolName.Contains(vn) || curVolName.Contains("SCX")) { // We are in a scintillator layer; SCX for 3X3
    
    if( ((depositedEnergy = TVirtualMC::GetMC()->Edep()) > 0.)  && (TVirtualMC::GetMC()->TrackTime() < fTimeCut)){// Track is inside a scintillator and deposits some energy
      //       Info("StepManager "," entry %i DE %f",++ientry, depositedEnergy); // for testing
       if (fCurPrimary==-1) 
	fCurPrimary=gAlice->GetMCApp()->GetPrimary(tracknumber);

      if (fCurParent==-1 || tracknumber != fCurTrack) {
	// Check parentage
	parent=tracknumber;

	if (fCurParent != -1) {
	  while (parent != fCurParent && parent != -1) {
	    //TParticle *part=gAlice->GetMCApp()->Particle(parent);
	    part=gAlice->GetMCApp()->Particle(parent);
	    parent=part->GetFirstMother();
	  }
	}
	if (fCurParent==-1 || parent==-1) {
	  //Int_t parent=tracknumber;
	  //TParticle *part=gAlice->GetMCApp()->Particle(parent);
	  parent=tracknumber;
	  part=gAlice->GetMCApp()->Particle(parent);
	  while (parent != -1 && fGeometry->IsInEMCALOrDCAL(part->Vx(),part->Vy(),part->Vz())) {
	    parent=part->GetFirstMother();
	    if (parent!=-1) 
	      part=gAlice->GetMCApp()->Particle(parent);
	  } 
	  fCurParent=parent;
	  if (fCurParent==-1)
	    Error("StepManager","Cannot find parent");
	  else {
	    //TParticle *part=gAlice->GetMCApp()->Particle(fCurParent);
	    part=gAlice->GetMCApp()->Particle(fCurParent);
	    ienergy = part->Energy(); 

	    //Add reference to parent in TR tree. 	
	    AddTrackReference(tracknumber, AliTrackReference::kEMCAL);

	  }
	  while (parent != -1) {
	    part=gAlice->GetMCApp()->Particle(parent);
	    part->SetBit(kKeepBit);
	    parent=part->GetFirstMother();
	  }
	}
	fCurTrack=tracknumber;
      }    
      TVirtualMC::GetMC()->TrackPosition(pos);
      xyzte[0] = pos[0];
      xyzte[1] = pos[1];
      xyzte[2] = pos[2];
      xyzte[3] = TVirtualMC::GetMC()->TrackTime() ;       
      
      TVirtualMC::GetMC()->TrackMomentum(mom);
      pmom[0] = mom[0];
      pmom[1] = mom[1];
      pmom[2] = mom[2];
      pmom[3] = mom[3];
      
      //      if(ientry%200 > 0) return; // testing
      supModuleNumber = moduleNumber = yNumber = xNumber = absid = 0;
      if(keyGeom >= 1) { // TRD1 case now
        TVirtualMC::GetMC()->CurrentVolOffID(4, supModuleNumber);
        TVirtualMC::GetMC()->CurrentVolOffID(3, moduleNumber);
        TVirtualMC::GetMC()->CurrentVolOffID(1, yNumber);
        TVirtualMC::GetMC()->CurrentVolOffID(0, xNumber); // really x number now
        Int_t CurrentSMType = 0;
        if(strcmp(TVirtualMC::GetMC()->CurrentVolOffName(4),"SMOD")==0)  CurrentSMType = AliEMCALGeometry::kEMCAL_Standard ;
        else if(strcmp(TVirtualMC::GetMC()->CurrentVolOffName(4),"SM10")==0)  CurrentSMType = AliEMCALGeometry::kEMCAL_Half ;
        else if(strcmp(TVirtualMC::GetMC()->CurrentVolOffName(4),"SM3rd")==0) CurrentSMType = AliEMCALGeometry::kEMCAL_3rd  ;
        else if(strcmp(TVirtualMC::GetMC()->CurrentVolOffName(4),"DCSM")==0)  CurrentSMType = AliEMCALGeometry::kDCAL_Standard ;
        else if(strcmp(TVirtualMC::GetMC()->CurrentVolOffName(4),"DCEXT")==0) CurrentSMType = AliEMCALGeometry::kDCAL_Ext   ;
        else AliError("Unkown SM Type!!");

        Int_t preSM = 0;
        while( fGeometry->GetSMType(preSM) != CurrentSMType ) preSM++;
        supModuleNumber += preSM;
	// Nov 10,2006
        if(strcmp(TVirtualMC::GetMC()->CurrentVolOffName(0),vn) != 0) { // 3X3 case
          if     (strcmp(TVirtualMC::GetMC()->CurrentVolOffName(0),"SCX1")==0) xNumber=1;
          else if(strcmp(TVirtualMC::GetMC()->CurrentVolOffName(0),"SCX2")==0) xNumber=2;
          else if(strcmp(TVirtualMC::GetMC()->CurrentVolOffName(0),"SCX3")==0) xNumber=3;
          else Fatal("StepManager()", "Wrong name of sensitive volume in 3X3 case : %s ", TVirtualMC::GetMC()->CurrentVolOffName(0));
	}
      } else {
        TVirtualMC::GetMC()->CurrentVolOffID(5, supModuleNumber);
        TVirtualMC::GetMC()->CurrentVolOffID(4, moduleNumber);
        TVirtualMC::GetMC()->CurrentVolOffID(1, yNumber);
        TVirtualMC::GetMC()->CurrentVolOffID(0, xNumber);
        if     (strcmp(TVirtualMC::GetMC()->CurrentVolOffName(5),"SMOP")==0) supModuleNumber = 2*(supModuleNumber-1)+1;
        else if(strcmp(TVirtualMC::GetMC()->CurrentVolOffName(5),"SMON")==0) supModuleNumber = 2*(supModuleNumber-1)+2;
        else   assert(0); // something wrong
      }
		
      // Due to problem with index ordering conventions the calcultation of absid is no more like this:	
      //absid = fGeometry->GetAbsCellId(smNumber, moduleNumber-1, yNumber-1, xNumber-1);
      
      //Swap A side in Phi and C side in Eta due to wrong indexing.
      Int_t iphi = -1;
      Int_t ieta = -1;
      Int_t smNumber = supModuleNumber-1;
      Int_t smType   = 1;
      fGeometry->GetCellPhiEtaIndexInSModule(smNumber,moduleNumber-1,yNumber-1,xNumber-1, iphi, ieta);
      if (smNumber%2 == 0) {
	if(strcmp(TVirtualMC::GetMC()->CurrentVolOffName(4),"DCSM")==0) smType = 3; //DCal supermodule. previous design/idea
        else smType = 2;
	ieta = ((fGeometry->GetCentersOfCellsEtaDir()).GetSize()* 2/smType -1)-ieta;// 47/31-ieta, revert the ordering on A side in order to keep convention.
      } else {  
	if(strcmp(TVirtualMC::GetMC()->CurrentVolOffName(4),"SM10")==0) smType = 2 ; //half supermodule. previous design/idea
	if(strcmp(TVirtualMC::GetMC()->CurrentVolOffName(4),"SM3rd")==0) smType = 3 ; //one third (installed in 2012) supermodule
	if(strcmp(TVirtualMC::GetMC()->CurrentVolOffName(4),"DCEXT")==0) smType = 3 ; //one third (installed in 2012) supermodule
	iphi= ((fGeometry->GetCentersOfCellsPhiDir()).GetSize()/smType-1)-iphi;// 23/7-iphi, revert the ordering on C side in order to keep convention.
      }
      
      //Once we know the indexes, calculate the absolute ID
      absid = fGeometry->GetAbsCellIdFromCellIndexes(smNumber, iphi, ieta);
      
      if (absid < 0) {
        printf(" supModuleNumber %i : moduleNumber %i : yNumber %i : xNumber %i \n",
	       supModuleNumber, moduleNumber, yNumber, xNumber); 
	Fatal("StepManager()", "Wrong id : %i ", absid) ; 
      }

      Float_t lightYield =  depositedEnergy ;
      // Apply Birk's law (copied from G3BIRK)

      if (TVirtualMC::GetMC()->TrackCharge()!=0) { // Check
	  Float_t birkC1Mod = 0;
	if (fBirkC0==1){ // Apply correction for higher charge states
	  if (TMath::Abs(TVirtualMC::GetMC()->TrackCharge())>=2) birkC1Mod = fBirkC1*7.2/12.6;
	  else                                   birkC1Mod = fBirkC1;
	}

	Float_t dedxcm=0.;
	if (TVirtualMC::GetMC()->TrackStep()>0)  dedxcm=1000.*TVirtualMC::GetMC()->Edep()/TVirtualMC::GetMC()->TrackStep();
	else                     dedxcm=0;
	lightYield=lightYield/(1.+birkC1Mod*dedxcm+fBirkC2*dedxcm*dedxcm);
      } 

      // use sampling fraction to get original energy --HG
      //      xyzte[4] = lightYield * fGeometry->GetSampling();
      xyzte[4] = lightYield; // 15-dec-04
        
      if (gDebug == -2) 
      printf("#sm %2i #m %3i #x %1i #z %1i -> absid %i : xyzte[4] = %f\n",
      supModuleNumber,moduleNumber,yNumber,xNumber,absid, xyzte[4]);

      AddHit(fIshunt, fCurPrimary,tracknumber, fCurParent, ienergy, absid,  xyzte, pmom);
    } // there is deposited energy
  }
}
 AliEMCALv2.cxx:1
 AliEMCALv2.cxx:2
 AliEMCALv2.cxx:3
 AliEMCALv2.cxx:4
 AliEMCALv2.cxx:5
 AliEMCALv2.cxx:6
 AliEMCALv2.cxx:7
 AliEMCALv2.cxx:8
 AliEMCALv2.cxx:9
 AliEMCALv2.cxx:10
 AliEMCALv2.cxx:11
 AliEMCALv2.cxx:12
 AliEMCALv2.cxx:13
 AliEMCALv2.cxx:14
 AliEMCALv2.cxx:15
 AliEMCALv2.cxx:16
 AliEMCALv2.cxx:17
 AliEMCALv2.cxx:18
 AliEMCALv2.cxx:19
 AliEMCALv2.cxx:20
 AliEMCALv2.cxx:21
 AliEMCALv2.cxx:22
 AliEMCALv2.cxx:23
 AliEMCALv2.cxx:24
 AliEMCALv2.cxx:25
 AliEMCALv2.cxx:26
 AliEMCALv2.cxx:27
 AliEMCALv2.cxx:28
 AliEMCALv2.cxx:29
 AliEMCALv2.cxx:30
 AliEMCALv2.cxx:31
 AliEMCALv2.cxx:32
 AliEMCALv2.cxx:33
 AliEMCALv2.cxx:34
 AliEMCALv2.cxx:35
 AliEMCALv2.cxx:36
 AliEMCALv2.cxx:37
 AliEMCALv2.cxx:38
 AliEMCALv2.cxx:39
 AliEMCALv2.cxx:40
 AliEMCALv2.cxx:41
 AliEMCALv2.cxx:42
 AliEMCALv2.cxx:43
 AliEMCALv2.cxx:44
 AliEMCALv2.cxx:45
 AliEMCALv2.cxx:46
 AliEMCALv2.cxx:47
 AliEMCALv2.cxx:48
 AliEMCALv2.cxx:49
 AliEMCALv2.cxx:50
 AliEMCALv2.cxx:51
 AliEMCALv2.cxx:52
 AliEMCALv2.cxx:53
 AliEMCALv2.cxx:54
 AliEMCALv2.cxx:55
 AliEMCALv2.cxx:56
 AliEMCALv2.cxx:57
 AliEMCALv2.cxx:58
 AliEMCALv2.cxx:59
 AliEMCALv2.cxx:60
 AliEMCALv2.cxx:61
 AliEMCALv2.cxx:62
 AliEMCALv2.cxx:63
 AliEMCALv2.cxx:64
 AliEMCALv2.cxx:65
 AliEMCALv2.cxx:66
 AliEMCALv2.cxx:67
 AliEMCALv2.cxx:68
 AliEMCALv2.cxx:69
 AliEMCALv2.cxx:70
 AliEMCALv2.cxx:71
 AliEMCALv2.cxx:72
 AliEMCALv2.cxx:73
 AliEMCALv2.cxx:74
 AliEMCALv2.cxx:75
 AliEMCALv2.cxx:76
 AliEMCALv2.cxx:77
 AliEMCALv2.cxx:78
 AliEMCALv2.cxx:79
 AliEMCALv2.cxx:80
 AliEMCALv2.cxx:81
 AliEMCALv2.cxx:82
 AliEMCALv2.cxx:83
 AliEMCALv2.cxx:84
 AliEMCALv2.cxx:85
 AliEMCALv2.cxx:86
 AliEMCALv2.cxx:87
 AliEMCALv2.cxx:88
 AliEMCALv2.cxx:89
 AliEMCALv2.cxx:90
 AliEMCALv2.cxx:91
 AliEMCALv2.cxx:92
 AliEMCALv2.cxx:93
 AliEMCALv2.cxx:94
 AliEMCALv2.cxx:95
 AliEMCALv2.cxx:96
 AliEMCALv2.cxx:97
 AliEMCALv2.cxx:98
 AliEMCALv2.cxx:99
 AliEMCALv2.cxx:100
 AliEMCALv2.cxx:101
 AliEMCALv2.cxx:102
 AliEMCALv2.cxx:103
 AliEMCALv2.cxx:104
 AliEMCALv2.cxx:105
 AliEMCALv2.cxx:106
 AliEMCALv2.cxx:107
 AliEMCALv2.cxx:108
 AliEMCALv2.cxx:109
 AliEMCALv2.cxx:110
 AliEMCALv2.cxx:111
 AliEMCALv2.cxx:112
 AliEMCALv2.cxx:113
 AliEMCALv2.cxx:114
 AliEMCALv2.cxx:115
 AliEMCALv2.cxx:116
 AliEMCALv2.cxx:117
 AliEMCALv2.cxx:118
 AliEMCALv2.cxx:119
 AliEMCALv2.cxx:120
 AliEMCALv2.cxx:121
 AliEMCALv2.cxx:122
 AliEMCALv2.cxx:123
 AliEMCALv2.cxx:124
 AliEMCALv2.cxx:125
 AliEMCALv2.cxx:126
 AliEMCALv2.cxx:127
 AliEMCALv2.cxx:128
 AliEMCALv2.cxx:129
 AliEMCALv2.cxx:130
 AliEMCALv2.cxx:131
 AliEMCALv2.cxx:132
 AliEMCALv2.cxx:133
 AliEMCALv2.cxx:134
 AliEMCALv2.cxx:135
 AliEMCALv2.cxx:136
 AliEMCALv2.cxx:137
 AliEMCALv2.cxx:138
 AliEMCALv2.cxx:139
 AliEMCALv2.cxx:140
 AliEMCALv2.cxx:141
 AliEMCALv2.cxx:142
 AliEMCALv2.cxx:143
 AliEMCALv2.cxx:144
 AliEMCALv2.cxx:145
 AliEMCALv2.cxx:146
 AliEMCALv2.cxx:147
 AliEMCALv2.cxx:148
 AliEMCALv2.cxx:149
 AliEMCALv2.cxx:150
 AliEMCALv2.cxx:151
 AliEMCALv2.cxx:152
 AliEMCALv2.cxx:153
 AliEMCALv2.cxx:154
 AliEMCALv2.cxx:155
 AliEMCALv2.cxx:156
 AliEMCALv2.cxx:157
 AliEMCALv2.cxx:158
 AliEMCALv2.cxx:159
 AliEMCALv2.cxx:160
 AliEMCALv2.cxx:161
 AliEMCALv2.cxx:162
 AliEMCALv2.cxx:163
 AliEMCALv2.cxx:164
 AliEMCALv2.cxx:165
 AliEMCALv2.cxx:166
 AliEMCALv2.cxx:167
 AliEMCALv2.cxx:168
 AliEMCALv2.cxx:169
 AliEMCALv2.cxx:170
 AliEMCALv2.cxx:171
 AliEMCALv2.cxx:172
 AliEMCALv2.cxx:173
 AliEMCALv2.cxx:174
 AliEMCALv2.cxx:175
 AliEMCALv2.cxx:176
 AliEMCALv2.cxx:177
 AliEMCALv2.cxx:178
 AliEMCALv2.cxx:179
 AliEMCALv2.cxx:180
 AliEMCALv2.cxx:181
 AliEMCALv2.cxx:182
 AliEMCALv2.cxx:183
 AliEMCALv2.cxx:184
 AliEMCALv2.cxx:185
 AliEMCALv2.cxx:186
 AliEMCALv2.cxx:187
 AliEMCALv2.cxx:188
 AliEMCALv2.cxx:189
 AliEMCALv2.cxx:190
 AliEMCALv2.cxx:191
 AliEMCALv2.cxx:192
 AliEMCALv2.cxx:193
 AliEMCALv2.cxx:194
 AliEMCALv2.cxx:195
 AliEMCALv2.cxx:196
 AliEMCALv2.cxx:197
 AliEMCALv2.cxx:198
 AliEMCALv2.cxx:199
 AliEMCALv2.cxx:200
 AliEMCALv2.cxx:201
 AliEMCALv2.cxx:202
 AliEMCALv2.cxx:203
 AliEMCALv2.cxx:204
 AliEMCALv2.cxx:205
 AliEMCALv2.cxx:206
 AliEMCALv2.cxx:207
 AliEMCALv2.cxx:208
 AliEMCALv2.cxx:209
 AliEMCALv2.cxx:210
 AliEMCALv2.cxx:211
 AliEMCALv2.cxx:212
 AliEMCALv2.cxx:213
 AliEMCALv2.cxx:214
 AliEMCALv2.cxx:215
 AliEMCALv2.cxx:216
 AliEMCALv2.cxx:217
 AliEMCALv2.cxx:218
 AliEMCALv2.cxx:219
 AliEMCALv2.cxx:220
 AliEMCALv2.cxx:221
 AliEMCALv2.cxx:222
 AliEMCALv2.cxx:223
 AliEMCALv2.cxx:224
 AliEMCALv2.cxx:225
 AliEMCALv2.cxx:226
 AliEMCALv2.cxx:227
 AliEMCALv2.cxx:228
 AliEMCALv2.cxx:229
 AliEMCALv2.cxx:230
 AliEMCALv2.cxx:231
 AliEMCALv2.cxx:232
 AliEMCALv2.cxx:233
 AliEMCALv2.cxx:234
 AliEMCALv2.cxx:235
 AliEMCALv2.cxx:236
 AliEMCALv2.cxx:237
 AliEMCALv2.cxx:238
 AliEMCALv2.cxx:239
 AliEMCALv2.cxx:240
 AliEMCALv2.cxx:241
 AliEMCALv2.cxx:242
 AliEMCALv2.cxx:243
 AliEMCALv2.cxx:244
 AliEMCALv2.cxx:245
 AliEMCALv2.cxx:246
 AliEMCALv2.cxx:247
 AliEMCALv2.cxx:248
 AliEMCALv2.cxx:249
 AliEMCALv2.cxx:250
 AliEMCALv2.cxx:251
 AliEMCALv2.cxx:252
 AliEMCALv2.cxx:253
 AliEMCALv2.cxx:254
 AliEMCALv2.cxx:255
 AliEMCALv2.cxx:256
 AliEMCALv2.cxx:257
 AliEMCALv2.cxx:258
 AliEMCALv2.cxx:259
 AliEMCALv2.cxx:260
 AliEMCALv2.cxx:261
 AliEMCALv2.cxx:262
 AliEMCALv2.cxx:263
 AliEMCALv2.cxx:264
 AliEMCALv2.cxx:265
 AliEMCALv2.cxx:266
 AliEMCALv2.cxx:267
 AliEMCALv2.cxx:268
 AliEMCALv2.cxx:269
 AliEMCALv2.cxx:270
 AliEMCALv2.cxx:271
 AliEMCALv2.cxx:272
 AliEMCALv2.cxx:273
 AliEMCALv2.cxx:274
 AliEMCALv2.cxx:275
 AliEMCALv2.cxx:276
 AliEMCALv2.cxx:277
 AliEMCALv2.cxx:278
 AliEMCALv2.cxx:279
 AliEMCALv2.cxx:280
 AliEMCALv2.cxx:281
 AliEMCALv2.cxx:282
 AliEMCALv2.cxx:283
 AliEMCALv2.cxx:284
 AliEMCALv2.cxx:285
 AliEMCALv2.cxx:286
 AliEMCALv2.cxx:287
 AliEMCALv2.cxx:288
 AliEMCALv2.cxx:289
 AliEMCALv2.cxx:290
 AliEMCALv2.cxx:291
 AliEMCALv2.cxx:292
 AliEMCALv2.cxx:293
 AliEMCALv2.cxx:294
 AliEMCALv2.cxx:295
 AliEMCALv2.cxx:296
 AliEMCALv2.cxx:297
 AliEMCALv2.cxx:298
 AliEMCALv2.cxx:299
 AliEMCALv2.cxx:300
 AliEMCALv2.cxx:301
 AliEMCALv2.cxx:302
 AliEMCALv2.cxx:303
 AliEMCALv2.cxx:304