ROOT logo
void triggerClusters(Float_t eClu=2., const char* file="AliESDs.root")
{
  //Test macro.
  //Illustrates how to use trigger info in the ESD.

  //Prints fired 4x4 TRUs and respective PHOS clusters with energy>eClu positions.
  //For TRU this is bottom-left cell of 4x4 region,
  //for cluster it is the cell with the max. energy deposition.
  
  //Author: Boris Polishchuk (Boris.Polishchuk@cern.ch).

  TChain* esdTree = new TChain("esdTree");
  esdTree->Add(file);

  AliESDEvent *esd = new AliESDEvent;
  esd->ReadFromTree(esdTree);

  AliPHOSGeometry* geom = AliPHOSGeometry::GetInstance("IHEP");

  for(Int_t iEvent=0; iEvent<esdTree->GetEntries(); iEvent++){
    
    esdTree->GetEvent(iEvent);
    TString trigClasses = esd->GetFiredTriggerClasses();

    Int_t multClu = esd->GetNumberOfCaloClusters();
    AliESDCaloCells *phsCells = esd->GetPHOSCells();

    AliESDCaloTrigger* trgESD = esd->GetCaloTrigger("PHOS");
    trgESD->Reset();

    if(trgESD->GetEntries())
    printf("\nEvent %d: %d non-zero trigger digits %s\n",
	   iEvent,trgESD->GetEntries(),trigClasses.Data());

    //Loop over 4x4 fired regions

    while(trgESD->Next()) {

      Int_t tmod,tabsId; // "Online" module number, bottom-left 4x4 edge cell absId
      trgESD->GetPosition(tmod,tabsId);

      Int_t trelid[4] ;
      geom->AbsToRelNumbering(tabsId,trelid);

      printf("\t4x4 position: (mod,X,Z)=(%d,%d,%d)\n",trelid[0],trelid[2],trelid[3]);

      for (Int_t i=0; i<multClu; i++) {
	
	AliESDCaloCluster *c1 = esd->GetCaloCluster(i);
	if(!c1->IsPHOS()) continue;
	
	Int_t maxId, relid[4];
	MaxEnergyCellPos(phsCells,c1,maxId);
	
	geom->AbsToRelNumbering(maxId, relid);
	if(c1->E()>eClu) printf("\t\tCluster: (mod,X,Z)=(%d,%d,%d), E=%.3f GeV\n",
	       relid[0],relid[2],relid[3],c1->E());
      }

    }
    
    
    
  }
}

void MaxEnergyCellPos(AliESDCaloCells *cells, AliESDCaloCluster* clu, Int_t& maxId)
{  
  Double_t eMax = -111;
  
  for (Int_t iDig=0; iDig< clu->GetNCells(); iDig++) {
    Int_t cellAbsId = clu->GetCellAbsId(iDig);
    Double_t eCell = cells->GetCellAmplitude(cellAbsId)*clu->GetCellAmplitudeFraction(iDig);
    if(eCell>eMax)  { 
      eMax = eCell; 
      maxId = cellAbsId;
    }
  }

}
 triggerClusters.C:1
 triggerClusters.C:2
 triggerClusters.C:3
 triggerClusters.C:4
 triggerClusters.C:5
 triggerClusters.C:6
 triggerClusters.C:7
 triggerClusters.C:8
 triggerClusters.C:9
 triggerClusters.C:10
 triggerClusters.C:11
 triggerClusters.C:12
 triggerClusters.C:13
 triggerClusters.C:14
 triggerClusters.C:15
 triggerClusters.C:16
 triggerClusters.C:17
 triggerClusters.C:18
 triggerClusters.C:19
 triggerClusters.C:20
 triggerClusters.C:21
 triggerClusters.C:22
 triggerClusters.C:23
 triggerClusters.C:24
 triggerClusters.C:25
 triggerClusters.C:26
 triggerClusters.C:27
 triggerClusters.C:28
 triggerClusters.C:29
 triggerClusters.C:30
 triggerClusters.C:31
 triggerClusters.C:32
 triggerClusters.C:33
 triggerClusters.C:34
 triggerClusters.C:35
 triggerClusters.C:36
 triggerClusters.C:37
 triggerClusters.C:38
 triggerClusters.C:39
 triggerClusters.C:40
 triggerClusters.C:41
 triggerClusters.C:42
 triggerClusters.C:43
 triggerClusters.C:44
 triggerClusters.C:45
 triggerClusters.C:46
 triggerClusters.C:47
 triggerClusters.C:48
 triggerClusters.C:49
 triggerClusters.C:50
 triggerClusters.C:51
 triggerClusters.C:52
 triggerClusters.C:53
 triggerClusters.C:54
 triggerClusters.C:55
 triggerClusters.C:56
 triggerClusters.C:57
 triggerClusters.C:58
 triggerClusters.C:59
 triggerClusters.C:60
 triggerClusters.C:61
 triggerClusters.C:62
 triggerClusters.C:63
 triggerClusters.C:64
 triggerClusters.C:65
 triggerClusters.C:66
 triggerClusters.C:67
 triggerClusters.C:68
 triggerClusters.C:69
 triggerClusters.C:70
 triggerClusters.C:71
 triggerClusters.C:72
 triggerClusters.C:73
 triggerClusters.C:74
 triggerClusters.C:75
 triggerClusters.C:76
 triggerClusters.C:77
 triggerClusters.C:78
 triggerClusters.C:79
 triggerClusters.C:80
 triggerClusters.C:81