ROOT logo
//
// Emcal trigger patch information class
// Can contain three types of information, distinguished by the various bits in the bit field:
//  1) online trigger information (no extra bits set)
//  2) offline recalculated trigger patches (bit 25, kSimpleOfflineTriggerBit set)
//  3) highest patch energy, also for events that did not fire the trigger (bits 22, 23 kRecalc... (using both online and offline info, use bit 25 to distinguish)
//
// Author: J.Kral

#include "AliEmcalTriggerPatchInfo.h"
#include "AliLog.h"
#include "AliEMCALGeometry.h"
#include "TArrayI.h"

//_________________________________________________________________________________________________
AliEmcalTriggerPatchInfo::AliEmcalTriggerPatchInfo() :
  TObject(),
  fCenterGeo(),
  fCenterMass(),
  fEdge1(),
  fEdge2(),
  fADCAmp(0),
  fADCOfflineAmp(0),
  fTriggerBits(0),
  fOffSet(0),            // To be set explictly by the trigger maker in order to avoid hard coding
  fTriggerBitConfig()
{
  // Default constructor.
  fEdgeCell[0] = -1;
  fEdgeCell[1] = -1;
}

  
//_________________________________________________________________________________________________
AliEmcalTriggerPatchInfo::AliEmcalTriggerPatchInfo(const AliEmcalTriggerPatchInfo &p) :
  TObject(p),
  fCenterGeo(p.fCenterGeo),
  fCenterMass(p.fCenterMass),
  fEdge1(p.fEdge1),
  fEdge2(p.fEdge2),
  fADCAmp(p.fADCAmp),
  fADCOfflineAmp(p.fADCOfflineAmp),
  fTriggerBits(p.fTriggerBits),
  fOffSet(p.fOffSet),
  fTriggerBitConfig(p.fTriggerBitConfig)
{
  // Copy constructor.
  fEdgeCell[0] = p.fEdgeCell[0];
  fEdgeCell[1] = p.fEdgeCell[1];
}

//_________________________________________________________________________________________________
AliEmcalTriggerPatchInfo::~AliEmcalTriggerPatchInfo()
{
  // Destructor.
}

//_________________________________________________________________________________________________
AliEmcalTriggerPatchInfo &AliEmcalTriggerPatchInfo::operator=(const AliEmcalTriggerPatchInfo &p)
{
  // Assignment operator.

  if (this != &p) {
    fCenterGeo = p.fCenterGeo;
    fCenterMass = p.fCenterMass;
    fEdge1 = p.fEdge1;
    fEdge2 = p.fEdge2;
    fADCAmp = p.fADCAmp;
    fADCOfflineAmp = p.fADCOfflineAmp;
    fTriggerBits = p.fTriggerBits;
    fEdgeCell[0] = p.fEdgeCell[0];
    fEdgeCell[1] = p.fEdgeCell[1];
  }

  return *this;
}

//_________________________________________________________________________________________________
void AliEmcalTriggerPatchInfo::GetCellIndices( AliEMCALGeometry *geom, TArrayI *cells ){

	// return cell indices of the given patch in hte cell array
	Int_t globCol, globRow, i, j, k, absId, cellAbsId[4];;

	cells->Set( 1024 );
	
	// get corner, convert from cells to trigger channels
	globCol = GetEdgeCellX() / 2;
	globRow = GetEdgeCellY() / 2;
	
	// get the absolute trigger ID
	geom->GetAbsFastORIndexFromPositionInEMCAL( globCol, globRow, absId );
	// convert to the 4 absId of the cells composing the trigger channel
	geom->GetCellIndexFromFastORIndex( absId, cellAbsId );
	
	// sum the available energy in the 32/32 window of cells
	// step over trigger channels and get all the corresponding cells
	for( i = 0; i < 16; i++ ){
		for( j = 0; j < 16; j++ ){
			// get the 4 cells composing the trigger channel
			geom->GetAbsFastORIndexFromPositionInEMCAL( globCol+i, globRow+j, absId );
			geom->GetCellIndexFromFastORIndex( absId, cellAbsId );
			// add amplitudes and find patch edges
			for( k = 0; k < 4; k++ ){
				cells->SetAt( cellAbsId[k], i*16*4+j*4+k );
			}
		}
	} // 32x32 cell window

	
}


//_________________________________________________________________________________________________
void AliEmcalTriggerPatchInfo::SetLorentzVector( TLorentzVector &lv, TVector3 &v, Double_t e ){
  // sets the vector
  Double_t r = TMath::Sqrt(v[0]*v[0]+v[1]*v[1]+v[2]*v[2] ) ; 
  
  lv.SetPxPyPzE( e*v[0]/r,  e*v[1]/r,  e*v[2]/r,  e) ;   
}

 AliEmcalTriggerPatchInfo.cxx:1
 AliEmcalTriggerPatchInfo.cxx:2
 AliEmcalTriggerPatchInfo.cxx:3
 AliEmcalTriggerPatchInfo.cxx:4
 AliEmcalTriggerPatchInfo.cxx:5
 AliEmcalTriggerPatchInfo.cxx:6
 AliEmcalTriggerPatchInfo.cxx:7
 AliEmcalTriggerPatchInfo.cxx:8
 AliEmcalTriggerPatchInfo.cxx:9
 AliEmcalTriggerPatchInfo.cxx:10
 AliEmcalTriggerPatchInfo.cxx:11
 AliEmcalTriggerPatchInfo.cxx:12
 AliEmcalTriggerPatchInfo.cxx:13
 AliEmcalTriggerPatchInfo.cxx:14
 AliEmcalTriggerPatchInfo.cxx:15
 AliEmcalTriggerPatchInfo.cxx:16
 AliEmcalTriggerPatchInfo.cxx:17
 AliEmcalTriggerPatchInfo.cxx:18
 AliEmcalTriggerPatchInfo.cxx:19
 AliEmcalTriggerPatchInfo.cxx:20
 AliEmcalTriggerPatchInfo.cxx:21
 AliEmcalTriggerPatchInfo.cxx:22
 AliEmcalTriggerPatchInfo.cxx:23
 AliEmcalTriggerPatchInfo.cxx:24
 AliEmcalTriggerPatchInfo.cxx:25
 AliEmcalTriggerPatchInfo.cxx:26
 AliEmcalTriggerPatchInfo.cxx:27
 AliEmcalTriggerPatchInfo.cxx:28
 AliEmcalTriggerPatchInfo.cxx:29
 AliEmcalTriggerPatchInfo.cxx:30
 AliEmcalTriggerPatchInfo.cxx:31
 AliEmcalTriggerPatchInfo.cxx:32
 AliEmcalTriggerPatchInfo.cxx:33
 AliEmcalTriggerPatchInfo.cxx:34
 AliEmcalTriggerPatchInfo.cxx:35
 AliEmcalTriggerPatchInfo.cxx:36
 AliEmcalTriggerPatchInfo.cxx:37
 AliEmcalTriggerPatchInfo.cxx:38
 AliEmcalTriggerPatchInfo.cxx:39
 AliEmcalTriggerPatchInfo.cxx:40
 AliEmcalTriggerPatchInfo.cxx:41
 AliEmcalTriggerPatchInfo.cxx:42
 AliEmcalTriggerPatchInfo.cxx:43
 AliEmcalTriggerPatchInfo.cxx:44
 AliEmcalTriggerPatchInfo.cxx:45
 AliEmcalTriggerPatchInfo.cxx:46
 AliEmcalTriggerPatchInfo.cxx:47
 AliEmcalTriggerPatchInfo.cxx:48
 AliEmcalTriggerPatchInfo.cxx:49
 AliEmcalTriggerPatchInfo.cxx:50
 AliEmcalTriggerPatchInfo.cxx:51
 AliEmcalTriggerPatchInfo.cxx:52
 AliEmcalTriggerPatchInfo.cxx:53
 AliEmcalTriggerPatchInfo.cxx:54
 AliEmcalTriggerPatchInfo.cxx:55
 AliEmcalTriggerPatchInfo.cxx:56
 AliEmcalTriggerPatchInfo.cxx:57
 AliEmcalTriggerPatchInfo.cxx:58
 AliEmcalTriggerPatchInfo.cxx:59
 AliEmcalTriggerPatchInfo.cxx:60
 AliEmcalTriggerPatchInfo.cxx:61
 AliEmcalTriggerPatchInfo.cxx:62
 AliEmcalTriggerPatchInfo.cxx:63
 AliEmcalTriggerPatchInfo.cxx:64
 AliEmcalTriggerPatchInfo.cxx:65
 AliEmcalTriggerPatchInfo.cxx:66
 AliEmcalTriggerPatchInfo.cxx:67
 AliEmcalTriggerPatchInfo.cxx:68
 AliEmcalTriggerPatchInfo.cxx:69
 AliEmcalTriggerPatchInfo.cxx:70
 AliEmcalTriggerPatchInfo.cxx:71
 AliEmcalTriggerPatchInfo.cxx:72
 AliEmcalTriggerPatchInfo.cxx:73
 AliEmcalTriggerPatchInfo.cxx:74
 AliEmcalTriggerPatchInfo.cxx:75
 AliEmcalTriggerPatchInfo.cxx:76
 AliEmcalTriggerPatchInfo.cxx:77
 AliEmcalTriggerPatchInfo.cxx:78
 AliEmcalTriggerPatchInfo.cxx:79
 AliEmcalTriggerPatchInfo.cxx:80
 AliEmcalTriggerPatchInfo.cxx:81
 AliEmcalTriggerPatchInfo.cxx:82
 AliEmcalTriggerPatchInfo.cxx:83
 AliEmcalTriggerPatchInfo.cxx:84
 AliEmcalTriggerPatchInfo.cxx:85
 AliEmcalTriggerPatchInfo.cxx:86
 AliEmcalTriggerPatchInfo.cxx:87
 AliEmcalTriggerPatchInfo.cxx:88
 AliEmcalTriggerPatchInfo.cxx:89
 AliEmcalTriggerPatchInfo.cxx:90
 AliEmcalTriggerPatchInfo.cxx:91
 AliEmcalTriggerPatchInfo.cxx:92
 AliEmcalTriggerPatchInfo.cxx:93
 AliEmcalTriggerPatchInfo.cxx:94
 AliEmcalTriggerPatchInfo.cxx:95
 AliEmcalTriggerPatchInfo.cxx:96
 AliEmcalTriggerPatchInfo.cxx:97
 AliEmcalTriggerPatchInfo.cxx:98
 AliEmcalTriggerPatchInfo.cxx:99
 AliEmcalTriggerPatchInfo.cxx:100
 AliEmcalTriggerPatchInfo.cxx:101
 AliEmcalTriggerPatchInfo.cxx:102
 AliEmcalTriggerPatchInfo.cxx:103
 AliEmcalTriggerPatchInfo.cxx:104
 AliEmcalTriggerPatchInfo.cxx:105
 AliEmcalTriggerPatchInfo.cxx:106
 AliEmcalTriggerPatchInfo.cxx:107
 AliEmcalTriggerPatchInfo.cxx:108
 AliEmcalTriggerPatchInfo.cxx:109
 AliEmcalTriggerPatchInfo.cxx:110
 AliEmcalTriggerPatchInfo.cxx:111
 AliEmcalTriggerPatchInfo.cxx:112
 AliEmcalTriggerPatchInfo.cxx:113
 AliEmcalTriggerPatchInfo.cxx:114
 AliEmcalTriggerPatchInfo.cxx:115
 AliEmcalTriggerPatchInfo.cxx:116
 AliEmcalTriggerPatchInfo.cxx:117
 AliEmcalTriggerPatchInfo.cxx:118
 AliEmcalTriggerPatchInfo.cxx:119
 AliEmcalTriggerPatchInfo.cxx:120