{
//Initialise the variables used by the algorithm
fBeta=0.1;
- TClonesArray *lvArray = fReader->GetMomentumArray();
- fNin = lvArray->GetEntries();
fNclustMax= ((AliDAJetHeader*)fHeader)->GetFixedCl() ?
((AliDAJetHeader*)fHeader)->GetNclustMax() :
TMath::Max((Int_t)TMath::Sqrt(fNin),5);
+ TClonesArray *lvArray = fReader->GetMomentumArray();
+ Int_t nEntr = lvArray->GetEntries();
+ fNin=0;
+ for (Int_t iEn=0; iEn<nEntr; iEn++) if (fReader->GetCutFlag(iEn)==1) fNin++;
Double_t *xEta = new Double_t[fNin];
- Double_t *xPhi = new Double_t[fNin];
+ Double_t *xPhi = new Double_t[fNin];
xData[0]=xEta; xData[1]=xPhi;
vPx->ResizeTo(fNin);
- for (Int_t iIn=0; iIn<fNin; iIn++){
- TLorentzVector *lv=(TLorentzVector*)lvArray->At(iIn);
+ Int_t iIn=0;
+ for (Int_t iEn=0; iEn<nEntr; iEn++){
+ if (fReader->GetCutFlag(iEn)==0) continue;
+ TLorentzVector *lv=(TLorentzVector*)lvArray->At(iEn);
xEta[iIn] = lv->Eta();
xPhi[iIn] = lv->Phi()<0 ? lv->Phi() + 2*TMath::Pi() : lv->Phi();
(*vPx)(iIn)=lv->Pt();
dEtSum+=(*vPx)(iIn);
+ iIn++;
}
for (Int_t iIn=0; iIn<fNin; iIn++) (*vPx)(iIn)=(*vPx)(iIn)/dEtSum;
xpos+=(*vPx)(iIn)*TMath::Cos(xPhi[iIn]);
}
(*mY)(1,0)=(atan2(ypos,xpos)>0) ? atan2(ypos,xpos) : atan2(ypos,xpos)+2*TMath::Pi();
- lvArray->Delete();
}
//-----------------------------------------------------------------------------------
pz = (*mY)(3,iClust)/TMath::Tan(2.0 * TMath::ATan(TMath::Exp(-(*mY)(0,iClust))));
en = TMath::Sqrt(px * px + py * py + pz * pz);
AliAODJet jet(px, py, pz, en);
- if (fromAod)
- for (Int_t iIn=0; iIn<fNin; iIn++) if (xx[iIn]==iClust) jet.AddTrack(refs->At(iIn));
+ if (fromAod){
+ Int_t iIn=0;
+ Int_t nEntr = fReader->GetMomentumArray()->GetEntries();
+ for (Int_t iEn=0; iEn<nEntr; iEn++){
+ if (fReader->GetCutFlag(iEn)==0) continue;
+ if (xx[iIn]==iClust) jet.AddTrack(refs->At(iEn));
+ iIn++;
+ }
+ }
AddJet(jet);
printf("jet %d, Eta: %f, Phi: %f, Et: %f\n",iClust,jet.Eta(),jet.Phi(),jet.Pt());
}
//-------------------------------------------------------------------------
// Jet AOD Reader
// AOD reader for jet analysis
+// This is the reader which must be used if the jet analysis task
+// is executed after the ESD filter task, in order to read its output
+//
// Author: Davide Perrino <davide.perrino@cern.ch>
//-------------------------------------------------------------------------
{
// Clear momentum array
ClearArray();
+ fRef->Clear();
fDebug = fReaderHeader->GetDebug();
if (!fAOD) {
// get number of tracks in event (for the loop)
Int_t nt = fAOD->GetNTracks();
- printf("AOD tracks: %5d ", nt);
+ printf("AOD tracks: %5d \t", nt);
// temporary storage of signal and pt cut flag
Int_t* sflag = new Int_t[nt];
Float_t etaMin = fReaderHeader->GetFiducialEtaMin();
Float_t etaMax = fReaderHeader->GetFiducialEtaMax();
UInt_t filterMask = ((AliJetAODReaderHeader*)fReaderHeader)->GetTestFilterMask();
+
//loop over tracks
Int_t aodTrack = 0;
Float_t pt, eta;
for (Int_t it = 0; it < nt; it++) {
AliAODTrack *track = fAOD->GetTrack(it);
+ UInt_t status = track->GetStatus();
Double_t mom[3] = {track->Px(),track->Py(),track->Pz()};
p3.SetXYZ(mom[0],mom[1],mom[2]);
pt = p3.Pt();
eta = p3.Eta();
+ if (status == 0) continue;
if((filterMask>0)&&!(track->TestFilterBit(filterMask)))continue;
- if ( pt < ptMin ) continue; // checking pt cut
if ( (eta > etaMax) || (eta < etaMin)) continue; // checking eta cut
- sflag[aodTrack]=1;
- cflag[aodTrack]=1;
- new ((*fMomentumArray)[aodTrack++]) TLorentzVector(p3,p3.Mag());
+
+ new ((*fMomentumArray)[aodTrack]) TLorentzVector(p3,p3.Mag());
+ sflag[aodTrack] = (TMath::Abs(track->GetLabel()) < 10000) ? 1 : 0;
+ cflag[aodTrack] = ( pt > ptMin ) ? 1: 0;
+ aodTrack++;
fRef->Add(track);
}
- printf("Used AOD tracks: %5d ", aodTrack);
+ printf("Used AOD tracks: %5d \n", aodTrack);
// set the signal flags
fSignalFlag.Set(aodTrack,sflag);
fCutFlag.Set(aodTrack,cflag);