// --- AliRoot header files ---
#include "AliJetUnitArray.h"
+#include "AliJetHadronCorrectionv1.h"
#include "AliJetESDFillUnitArrayTracks.h"
// --- ROOT system ---
//____________________________________________________________________________
void AliJetESDFillUnitArrayTracks::InitParameters()
{
- fHadCorr = 0; // For hadron correction
+ // fHadCorr = 0; // For hadron correction
fNumUnits = fGeom->GetNCells(); // Number of towers in EMCAL
cout << "In AliJetESDFillUnitArrayTracks:InitParameters(), Ncells : " << fNumUnits << endl;
// Set parameters
InitParameters();
+ // fRef->Clear();
// get number of tracks in event (for the loop)
Int_t goodTrack = 0;
if (TMath::Abs(track->GetLabel()) < 10000) sflag[goodTrack]=1;
cflag[goodTrack]=0;
if (pt > ptMin) cflag[goodTrack]=1; // pt cut
+ // fRef->Add(track);
if(fGrid==0)
{
AliJetUnitArray *uArray = (AliJetUnitArray*)fUnitArray->At(idTPC-1);
TRefArray *reference = uArray->GetUnitTrackRef();
+ if (reference->GetEntries() == 0) {
+ new(reference) TRefArray(TProcessID::GetProcessWithUID(track));
+ }
+
reference->Add(track);
Float_t unitEnergy = 0.;
Int_t id0 = fGrid0->GetIndex(phi,eta)-1;
AliJetUnitArray *uArray0 = (AliJetUnitArray*)fUnitArray->At(id0+fNumUnits+nElements);
TRefArray *reference0 = uArray0->GetUnitTrackRef();
+ if (reference0->GetEntries() == 0) {
+ new(reference0) TRefArray(TProcessID::GetProcessWithUID(track));
+ }
+
reference0->Add(track);
Float_t uEnergy0 = uArray0->GetUnitEnergy();
Int_t id1 = fGrid1->GetIndex(phi,eta)-1+n0;
AliJetUnitArray *uArray1 = (AliJetUnitArray*)fUnitArray->At(id1+fNumUnits+nElements);
TRefArray *reference1 = uArray1->GetUnitTrackRef();
+ if (reference1->GetEntries() == 0) {
+ new(reference1) TRefArray(TProcessID::GetProcessWithUID(track));
+ }
+
reference1->Add(track);
Float_t uEnergy1 = uArray1->GetUnitEnergy();
Int_t id2 = fGrid2->GetIndex(phi,eta)-1+n0+n1;
AliJetUnitArray *uArray2 = (AliJetUnitArray*)fUnitArray->At(id2+fNumUnits+nElements);
TRefArray *reference2 = uArray2->GetUnitTrackRef();
+ if (reference2->GetEntries() == 0) {
+ new(reference2) TRefArray(TProcessID::GetProcessWithUID(track));
+ }
+
reference2->Add(track);
Float_t uEnergy2 = uArray2->GetUnitEnergy();
Int_t id3 = fGrid3->GetIndex(phi,eta)-1+n0+n1+n2;
AliJetUnitArray *uArray3 = (AliJetUnitArray*)fUnitArray->At(id3+fNumUnits+nElements);
TRefArray *reference3 = uArray3->GetUnitTrackRef();
+ if (reference3->GetEntries() == 0) {
+ new(reference3) TRefArray(TProcessID::GetProcessWithUID(track));
+ }
+
reference3->Add(track);
Float_t uEnergy3 = uArray3->GetUnitEnergy();
Int_t id4 = fGrid4->GetIndex(phi,eta)-1+n0+n1+n2+n3;
AliJetUnitArray *uArray4 = (AliJetUnitArray*)fUnitArray->At(id4+fNumUnits+nElements);
TRefArray *reference4 = uArray4->GetUnitTrackRef();
+ if (reference4->GetEntries() == 0) {
+ new(reference4) TRefArray(TProcessID::GetProcessWithUID(track));
+ }
+
reference4->Add(track);
Float_t uEnergy4 = uArray4->GetUnitEnergy();
AliJetUnitArray *uArray = (AliJetUnitArray*)fUnitArray->At(towerID);
TRefArray *reference = uArray->GetUnitTrackRef();
+ if (reference->GetEntries() == 0) {
+ new(reference) TRefArray(TProcessID::GetProcessWithUID(track));
+ }
+
reference->Add(track);
Float_t unitEnergy = uArray->GetUnitEnergy();
// Do Hadron Correction
// This is under construction !!!!!!!!!!!!!!!!!!!!!!!
- // Parametrization to be added
- if (fApplyMIPCorrection != 0)
+ // For the moment I apply MIP correction if p >= 0.5 GeV/c
+ if (fApplyMIPCorrection != 0 && p3.Mag() >= 0.5)
{
-// Float_t hCEnergy = fHadCorr->GetEnergy(p3.Mag(), (Double_t)eta,0);
-// unitEnergy -= hCEnergy*TMath::Sin(2.0*TMath::ATan(TMath::Exp(-eta)));
+ ((AliJetHadronCorrectionv1*)fHadCorr)->SetGeometry("EMCAL_COMPLETE",1.);
+
+ // Get track position at the outer part of the reconstruction ~ TRD
+ Double_t phiOut = track->GetOuterParam()->Phi();
+ Double_t etaOut = track->GetOuterParam()->Eta();
+
+ // If the track in the outer part of the TPC/TDR ? is inside
+ // the calorimeter, it can deposit part of its energy
+ // We can then correct on average for these particles
+ if((etaOut >= fEtaMin && etaOut <= fEtaMax) &&
+ (phiOut >= fPhiMin && phiOut <= fPhiMax))// &&
+ {
+ Double_t hCEnergy = (Double_t)fHadCorr->GetEnergy(p3.Mag(), (Double_t)eta,0);
+ unitEnergy -= hCEnergy*TMath::Sin(2.0*TMath::ATan(TMath::Exp(-eta)));
+ }
} //end Hadron Correction loop
- uArray->SetUnitEnergy(unitEnergy + pt);
+ cout << "unitEnergy + pt = " << unitEnergy << " + " << pt << " = " << unitEnergy + pt << endl;
+
+ if((unitEnergy + pt) > 0.) uArray->SetUnitEnergy(unitEnergy + pt);
+ else uArray->SetUnitEnergy(0.);
// Put a pt cut flag
if(uArray->GetUnitEnergy()<ptMin){
AliJetUnitArray *uArray = (AliJetUnitArray*)fUnitArray->At(fNumUnits-1+idTPC);
TRefArray *reference = uArray->GetUnitTrackRef();
+ if (reference->GetEntries() == 0) {
+ new(reference) TRefArray(TProcessID::GetProcessWithUID(track));
+ }
+
reference->Add(track);
Float_t unitEnergy2 = uArray->GetUnitEnergy();
cout << "goodTracks: " << goodTrack << endl;
}
+ // fSignalFlag.Set(goodTrack,sflag);
+ // fCutFlag.Set(goodTrack,cflag);
+
delete[] sflag;
delete[] cflag;