+
+ esd->SetNumberOfPHOSClusters(nOfRecParticles) ;
+ esd->SetFirstPHOSCluster(esd->GetNumberOfCaloClusters()) ;
+
+ AliDebug(2,Form("%d rec. particles, option %s",nOfRecParticles,GetOption()));
+
+ // Read digits array
+
+ TBranch *branch = digitsTree->GetBranch("PHOS");
+ if (!branch) {
+ AliError("can't get the branch with the PHOS digits !");
+ return;
+ }
+ TClonesArray *digitsArray = new TClonesArray("AliPHOSDigit",100);
+ branch->SetAddress(&digitsArray);
+ branch->GetEntry(0);
+
+ // Get the clusters array
+
+ TBranch *emcbranch = clustersTree->GetBranch("PHOSEmcRP");
+ if (!emcbranch) {
+ AliError("can't get the branch with the PHOS EMC clusters !");
+ return;
+ }
+
+ TObjArray *emcRecPoints = new TObjArray(100) ;
+ emcbranch->SetAddress(&emcRecPoints);
+ emcbranch->GetEntry(0);
+
+ //#########Calculate trigger and set trigger info###########
+
+ AliPHOSTrigger tr ;
+ // tr.SetPatchSize(1);//create 4x4 patches
+ tr.Trigger();
+
+ Float_t maxAmp2x2 = tr.Get2x2MaxAmplitude();
+ Float_t maxAmpnxn = tr.GetnxnMaxAmplitude();
+ Float_t ampOutOfPatch2x2 = tr.Get2x2AmpOutOfPatch() ;
+ Float_t ampOutOfPatchnxn = tr.GetnxnAmpOutOfPatch() ;
+
+ Int_t iSM2x2 = tr.Get2x2SuperModule();
+ Int_t iSMnxn = tr.GetnxnSuperModule();
+ Int_t iCrystalPhi2x2 = tr.Get2x2CrystalPhi();
+ Int_t iCrystalPhinxn = tr.GetnxnCrystalPhi();
+ Int_t iCrystalEta2x2 = tr.Get2x2CrystalEta();
+ Int_t iCrystalEtanxn = tr.GetnxnCrystalEta();
+
+ AliDebug(2, Form("Trigger 2x2 max amp %f, out amp %f, SM %d, iphi %d ieta %d",
+ maxAmp2x2, ampOutOfPatch2x2, iSM2x2,iCrystalPhi2x2, iCrystalEta2x2));
+ AliDebug(2, Form("Trigger 4x4 max amp %f , out amp %f, SM %d, iphi %d, ieta %d",
+ maxAmpnxn, ampOutOfPatchnxn, iSMnxn,iCrystalPhinxn, iCrystalEtanxn));
+
+ Int_t iRelId2x2 []= {iSM2x2+1,0,iCrystalPhi2x2,iCrystalEta2x2};// PHOS modules in order to calculate AbsId need to be 1-5 not 0-4 as returns trigger.
+ Int_t iAbsId2x2 =-1;
+ Int_t iRelIdnxn []= {iSMnxn+1,0,iCrystalPhinxn,iCrystalEtanxn};// PHOS modules in order to calculate AbsId need to be 1-5 not 0-4 as returns trigger.
+ Int_t iAbsIdnxn =-1;
+ TVector3 pos2x2(-1,-1,-1);
+ TVector3 posnxn(-1,-1,-1);
+ fGeom->RelToAbsNumbering(iRelId2x2, iAbsId2x2);
+ fGeom->RelToAbsNumbering(iRelIdnxn, iAbsIdnxn);
+ fGeom->RelPosInAlice(iAbsId2x2, pos2x2);
+ fGeom->RelPosInAlice(iAbsIdnxn, posnxn);
+
+ TArrayF triggerPosition(6);
+ triggerPosition[0] = pos2x2(0) ;
+ triggerPosition[1] = pos2x2(1) ;
+ triggerPosition[2] = pos2x2(2) ;
+ triggerPosition[3] = posnxn(0) ;
+ triggerPosition[4] = posnxn(1) ;
+ triggerPosition[5] = posnxn(2) ;
+
+ TArrayF triggerAmplitudes(4);
+ triggerAmplitudes[0] = maxAmp2x2 ;
+ triggerAmplitudes[1] = ampOutOfPatch2x2 ;
+ triggerAmplitudes[2] = maxAmpnxn ;
+ triggerAmplitudes[3] = ampOutOfPatchnxn ;
+
+ //esd->SetPHOSTriggerCells(triggerPosition);
+ esd->AddPHOSTriggerPosition(triggerPosition);
+ esd->AddPHOSTriggerAmplitudes(triggerAmplitudes);
+
+
+ //########################################
+ //############# Fill CaloCells ###########
+ //########################################
+
+ Int_t nDigits = digitsArray->GetEntries();
+ Int_t idignew = 0 ;
+ AliDebug(1,Form("%d digits",nDigits));
+
+ const Int_t knEMC = fGeom->GetNModules()*fGeom->GetNPhi()*fGeom->GetNZ();
+ AliESDCaloCells &phsCells = *(esd->GetPHOSCells());
+ phsCells.CreateContainer(nDigits);
+ phsCells.SetType(AliESDCaloCells::kPHOSCell);
+
+ // Add to CaloCells only EMC digits with non-zero energy
+ for (Int_t idig = 0 ; idig < nDigits ; idig++) {
+ const AliPHOSDigit * dig = (const AliPHOSDigit*)digitsArray->At(idig);
+ if(dig->GetId() <= knEMC && dig->GetEnergy() > 0 ){
+ //printf("i %d; id %d; amp %f; time %e\n",
+ //idignew,dig->GetId(),dig->GetEnergy(), dig->GetTime());
+ phsCells.SetCell(idignew,dig->GetId(), dig->GetEnergy(), dig->GetTime());
+ idignew++;
+ }
+ }
+ phsCells.SetNumberOfCells(idignew);
+ phsCells.Sort();
+
+ //########################################
+ //############## Fill CaloClusters #######
+ //########################################