}
//________________________________________________________________________
-Float_t AliAnalysisTaskSAJF::DoKtJetLoop()
+Float_t AliAnalysisTaskSAJF::DoKtJetLoop(Int_t nLJs)
{
Float_t ktJetsMedian = 0;
Int_t nktjets = GetNumberOfKtJets();
} //kt jet loop
nktjets -= NoOfZeroJets;
+
+ if (nktjets < 1) return 0;
+
memmove(ktJets.GetArray(), ktJets.GetArray() + NoOfZeroJets, nktjets * sizeof(Float_t));
- if (nktjets < 3) return 0;
+ nktjets -= nLJs;
+
+ if (nktjets < 1) return 0;
- nktjets -= 2;
if (nktjets % 2)
ktJetsMedian = ktJets[nktjets / 2];
else
//________________________________________________________________________
Float_t AliAnalysisTaskSAJF::DoTrackLoop(Int_t maxJetIndex, Int_t max2JetIndex)
{
- AliEmcalJet* jet = GetJet(maxJetIndex);
+ AliEmcalJet* jet = 0;
+ if (max2JetIndex >= 0)
+ jet = GetJet(maxJetIndex);
+
AliEmcalJet* jet2 = 0;
if (max2JetIndex >= 0)
jet2 = GetJet(max2JetIndex);
for(Int_t iTracks = 0; iTracks < ntracks; iTracks++) {
AliVTrack* track = GetTrack(iTracks);
if(!track) {
- AliError(Form("ERROR: Could not retrieve track %d",iTracks));
+ AliError(Form("Could not retrieve track %d",iTracks));
continue;
}
if (!AcceptTrack(track)) continue;
- if (IsJetTrack(jet, iTracks)) {
+ if (jet && IsJetTrack(jet, iTracks)) {
fHistTracksPtLJ[fCentBin]->Fill(track->Pt());
}
else if (!jet2 || !IsJetTrack(jet2, iTracks)) {
fHistTracksPtBkg[fCentBin]->Fill(track->Pt());
rhoTracks += track->Pt();
- Float_t dphijet = jet->Phi() - track->Phi();
- if (dphijet < -1.6) dphijet += TMath::Pi() * 2;
- if (dphijet > 4.8) dphijet -= TMath::Pi() * 2;
- fHistBkgLJetPhiCorr[fCentBin]->Fill(dphijet);
+ if (jet) {
+ Float_t dphijet = jet->Phi() - track->Phi();
+ if (dphijet < -1.6) dphijet += TMath::Pi() * 2;
+ if (dphijet > 4.8) dphijet -= TMath::Pi() * 2;
+ fHistBkgLJetPhiCorr[fCentBin]->Fill(dphijet);
+ }
for(Int_t it2 = iTracks+1; it2 < ntracks; it2++) {
AliVTrack* track2 = GetTrack(it2);
if(!track2) {
- AliError(Form("ERROR: Could not retrieve track %d", it2));
+ AliError(Form("Could not retrieve track %d", it2));
continue;
}
if (!AcceptTrack(track2)) continue;
- if (IsJetTrack(jet, it2)) continue;
+ if (jet && IsJetTrack(jet, it2)) continue;
if (jet2 && IsJetTrack(jet2, it2)) continue;
Double_t vertex[3] = {0, 0, 0};
InputEvent()->GetPrimaryVertex()->GetXYZ(vertex);
- AliEmcalJet* jet = GetJet(maxJetIndex);
+ AliEmcalJet* jet = 0;
+ if (max2JetIndex >= 0)
+ jet = GetJet(maxJetIndex);
+
AliEmcalJet* jet2 = 0;
if (max2JetIndex >= 0)
jet2 = GetJet(max2JetIndex);
TLorentzVector nPart;
cluster->GetMomentum(nPart, vertex);
- if (IsJetCluster(jet, iClusters)) {
+ if (jet && IsJetCluster(jet, iClusters)) {
fHistClusEtLJ[fCentBin]->Fill(nPart.Et());
}
else if (!jet2 || !IsJetCluster(jet2, iClusters)) {
cluster->GetPosition(pos1);
TVector3 clusVec1(pos1);
- Float_t dphijet = jet->Phi() - clusVec1.Phi();
- if (dphijet < -1.6) dphijet += TMath::Pi() * 2;
- if (dphijet > 4.8) dphijet -= TMath::Pi() * 2;
- fHistBkgLJetPhiCorr[fCentBin]->Fill(dphijet);
+ if (jet) {
+ Float_t dphijet = jet->Phi() - clusVec1.Phi();
+ if (dphijet < -1.6) dphijet += TMath::Pi() * 2;
+ if (dphijet > 4.8) dphijet -= TMath::Pi() * 2;
+ fHistBkgLJetPhiCorr[fCentBin]->Fill(dphijet);
+ }
for(Int_t ic2 = iClusters+1; ic2 < nclusters; ic2++) {
AliVCluster* cluster2 = GetCaloCluster(ic2);
if (!AcceptCluster(cluster)) continue;
- if (IsJetCluster(jet, ic2)) continue;
+ if (jet && IsJetCluster(jet, ic2)) continue;
if (jet2 && IsJetCluster(jet2, ic2)) continue;
for(Int_t iTracks = 0; iTracks < ntracks; iTracks++) {
AliVTrack* track = GetTrack(iTracks);
if(!track) {
- AliError(Form("ERROR: Could not retrieve track %d",iTracks));
+ AliError(Form("Could not retrieve track %d",iTracks));
continue;
}
void RetrieveEventObjects() ;
void FillHistograms() ;
void DoJetLoop(Int_t &maxJetIndex, Int_t &max2JetIndex) ;
- Float_t DoKtJetLoop() ;
+ Float_t DoKtJetLoop(Int_t nLJs = 2) ;
Bool_t DoEmbJetLoop(Float_t &maxJetPt, Float_t &maxPartPt) ;
Float_t DoTrackLoop(Int_t maxJetIndex, Int_t max2JetIndex) ;
Float_t DoClusterLoop(Int_t maxJetIndex, Int_t max2JetIndex) ;
fHistCentrality(0),
fHistTracksCent(0),
fHistClusCent(0),
- fHistMaxL1Cent(0),
+ fHistMaxL1FastORCent(0),
+ fHistMaxL1ClusCent(0),
+ fHistMaxL1ThrCent(0),
fHistTracksPt(0),
fHistClustersEnergy(0),
fHistEoverP(0),
fHistTrPhiEta(0),
fHistClusPhiEta(0),
- fHistMaxTrgCluster(0),
- fHistMaxTrgClusVSMaxL1(0),
fHistClusPhiCorr(0),
fHistTracksPhiCorr(0),
fHistChVSneCells(0),
fHistCentrality(0),
fHistTracksCent(0),
fHistClusCent(0),
- fHistMaxL1Cent(0),
+ fHistMaxL1FastORCent(0),
+ fHistMaxL1ClusCent(0),
+ fHistMaxL1ThrCent(0),
fHistTracksPt(0),
fHistClustersEnergy(0),
fHistEoverP(0),
fHistTrPhiEta(0),
fHistClusPhiEta(0),
- fHistMaxTrgCluster(0),
- fHistMaxTrgClusVSMaxL1(0),
fHistClusPhiCorr(0),
fHistTracksPhiCorr(0),
fHistChVSneCells(0),
fHistClusCent->GetYaxis()->SetTitle("No. of clusters");
fOutput->Add(fHistClusCent);
- fHistMaxL1Cent = new TH2F("fHistMaxL1Cent","L1 Time Sum Amplitude vs. centrality", 100, 0, 100, 250, 0, 250);
- fHistMaxL1Cent->GetXaxis()->SetTitle("Centrality [%]");
- fHistMaxL1Cent->GetYaxis()->SetTitle("Maximum L1 Time Sum Amplitude");
- fOutput->Add(fHistMaxL1Cent);
+ fHistMaxL1FastORCent = new TH2F("fHistMaxL1FastORCent","fHistMaxL1ClusCent", 100, 0, 100, 250, 0, 250);
+ fHistMaxL1FastORCent->GetXaxis()->SetTitle("Centrality [%]");
+ fHistMaxL1FastORCent->GetYaxis()->SetTitle("Maximum L1 FastOR");
+ fOutput->Add(fHistMaxL1FastORCent);
+
+ fHistMaxL1ClusCent = new TH2F("fHistMaxL1ClusCent","fHistMaxL1ClusCent", 100, 0, 100, 250, 0, 250);
+ fHistMaxL1ClusCent->GetXaxis()->SetTitle("Centrality [%]");
+ fHistMaxL1ClusCent->GetYaxis()->SetTitle("Maximum L1 trigger cluster");
+ fOutput->Add(fHistMaxL1ClusCent);
+
+ fHistMaxL1ThrCent = new TH2F("fHistMaxL1ThrCent","fHistMaxL1ClusCent", 100, 0, 100, 250, 0, 250);
+ fHistMaxL1ThrCent->GetXaxis()->SetTitle("Centrality [%]");
+ fHistMaxL1ThrCent->GetYaxis()->SetTitle("Maximum L1 threshold");
+ fOutput->Add(fHistMaxL1ThrCent);
fHistTracksPt = new TH1F("fHistTracksPt","P_{T} spectrum of reconstructed tracks", fNbins, fMinPt, fMaxPt);
fHistTracksPt->GetXaxis()->SetTitle("P_{T} [GeV/c]");
fHistClusPhiEta->GetYaxis()->SetTitle("Phi");
fOutput->Add(fHistClusPhiEta);
- fHistMaxTrgCluster = new TH1F("fHistMaxTrgCluster","Energy distribution of max trigger clusters", fNbins, fMinPt, fMaxPt);
- fHistMaxTrgCluster->GetXaxis()->SetTitle("E [GeV]");
- fHistMaxTrgCluster->GetYaxis()->SetTitle("counts");
- fOutput->Add(fHistMaxTrgCluster);
-
- fHistMaxTrgClusVSMaxL1 = new TH2F("fHistMaxTrgClusVSMaxL1","Max trigger cluster energy vs. L1 Time Sum Amplitude", 250, 0, 250, fNbins, fMinPt, fMaxPt);
- fHistMaxTrgClusVSMaxL1->GetXaxis()->SetTitle("Maximum L1 Time Sum Amplitude");
- fHistMaxTrgClusVSMaxL1->GetYaxis()->SetTitle("Maximum trigger cluster energy [GeV]");
- fOutput->Add(fHistMaxTrgClusVSMaxL1);
-
fHistTracksPhiCorr = new TH1F("fHistTracksPhiCorr", "fHistTracksPhiCorr", 128, -1.6, 4.8);
fHistTracksPhiCorr->GetXaxis()->SetTitle("#Delta#phi");
fHistTracksPhiCorr->GetYaxis()->SetTitle("counts");
fHistChVSneCorrCells->Fill(cellCutSum, trackSum);
Float_t maxTrgClus = DoTriggerClusLoop();
- fHistMaxTrgCluster->Fill(maxTrgClus);
+ fHistMaxL1ClusCent->Fill(cent, maxTrgClus);
- Float_t maxL1amp = DoTriggerPrimitives();
+ Int_t maxL1amp = -1;
+ Int_t maxL1thr = -1;
- if (maxL1amp > -1) {
- fHistMaxL1Cent->Fill(cent, maxL1amp);
- fHistMaxTrgClusVSMaxL1->Fill(maxL1amp, maxTrgClus);
- }
+ DoTriggerPrimitives(maxL1amp, maxL1thr);
+
+ if (maxL1amp > -1)
+ fHistMaxL1FastORCent->Fill(cent, maxL1amp);
+
+ if (maxL1thr > -1)
+ fHistMaxL1ThrCent->Fill(cent, maxL1thr);
}
//________________________________________________________________________
}
//________________________________________________________________________
-Float_t AliAnalysisTaskSAQA::DoTriggerPrimitives()
+void AliAnalysisTaskSAQA::DoTriggerPrimitives(Int_t &maxL1amp, Int_t &maxL1thr)
{
AliVCaloTrigger *triggers = InputEvent()->GetCaloTrigger("EMCAL");
if (!triggers || triggers->GetEntries() == 0)
- return -1;
+ return;
triggers->Reset();
- Float_t L0FastORamp = 0;
+ //Float_t L0FastORamp = 0;
Int_t L1amp = 0;
- Int_t maxL1amp = -1;
-
+ Int_t L1thr = 0;
+
while (triggers->Next()) {
-
+ /*
triggers->GetAmplitude(L0FastORamp);
if (L0FastORamp < 0)
Int_t gCol = 0, gRow = 0;
triggers->GetPosition(gCol, gRow);
- //Int_t find = -1;
- //fGeom->GetAbsFastORIndexFromPositionInEMCAL(gCol, gRow, find);
+ Int_t find = -1;
+ fGeom->GetAbsFastORIndexFromPositionInEMCAL(gCol, gRow, find);
- //if (find < 0)
- //continue;
-
- //Int_t cidx[4] = {-1};
- //Bool_t ret = fGeom->GetCellIndexFromFastORIndex(find, cidx);
+ if (find < 0)
+ continue;
- //if (!ret)
- //continue;
+ Int_t cidx[4] = {-1};
+ Bool_t ret = fGeom->GetCellIndexFromFastORIndex(find, cidx);
+ if (!ret)
+ continue;
+ */
+
triggers->GetL1TimeSum(L1amp);
-
if (maxL1amp < L1amp)
maxL1amp = L1amp;
- }
- return maxL1amp;
+ triggers->GetL1Threshold(L1thr);
+ if (maxL1thr < L1thr)
+ maxL1thr = L1thr;
+ }
}
//________________________________________________________________________
protected:
- AliVTrack *GetTrack(const Int_t i) const;
- Int_t GetNumberOfTracks() const;
- AliVCluster *GetCaloCluster(const Int_t i) const;
- Int_t GetNumberOfCaloClusters() const;
- AliVCluster *GetTrgCluster(const Int_t i) const;
- Int_t GetNumberOfTrgClusters() const;
- Bool_t AcceptTrack(AliVTrack* /*track*/) const;
- void FillHistograms() ;
- void RetrieveEventObjects() ;
- void DoCellLoop(Float_t &sum, Float_t &sum_cut) ;
- Float_t DoTriggerPrimitives() ;
- Float_t DoTriggerClusLoop() ;
- Float_t DoTrackLoop() ;
- Float_t DoClusterLoop() ;
+ AliVTrack *GetTrack(const Int_t i) const;
+ Int_t GetNumberOfTracks() const;
+ AliVCluster *GetCaloCluster(const Int_t i) const;
+ Int_t GetNumberOfCaloClusters() const;
+ AliVCluster *GetTrgCluster(const Int_t i) const;
+ Int_t GetNumberOfTrgClusters() const;
+ Bool_t AcceptTrack(AliVTrack* /*track*/) const;
+ void FillHistograms() ;
+ void RetrieveEventObjects() ;
+ void DoCellLoop(Float_t &sum, Float_t &sum_cut) ;
+ void DoTriggerPrimitives(Int_t &maxL1amp, Int_t &maxL1thr) ;
+ Float_t DoTriggerClusLoop() ;
+ Float_t DoTrackLoop() ;
+ Float_t DoClusterLoop() ;
TList *fOutput; // Output list
Float_t fCellEnergyCut; // Energy cell cut
TClonesArray *fJets; //!Jets
TClonesArray *fTrgClusters; //!Trg Clusters
AliCentrality *fCent; // Event centrality
+
TH1F *fHistCentrality; // Event centrality distribution
TH2F *fHistTracksCent; // Number of tracks vs. centrality
TH2F *fHistClusCent; // Number of clusters vs. centrality
- TH2F *fHistMaxL1Cent; // Maximum L1 time sum amplitude vs. centrality
+
+ TH2F *fHistMaxL1FastORCent; // Maximum L1 trigger FastOR amplitude vs. centrality
+ TH2F *fHistMaxL1ClusCent; // Maximum L1 trigger cluster amplitude vs. centrality
+ TH2F *fHistMaxL1ThrCent; // Maximum L1 trigger threshold vs. centrality
+
TH1F *fHistTracksPt; // Pt spectrum of tracks
TH1F *fHistClustersEnergy; // Energy spectrum of clusters
TH2F *fHistEoverP; // E/P vs. E
TH2F *fHistTrPhiEta; // Phi-Eta distribution of tracks
TH2F *fHistClusPhiEta; // Phi-Eta distribution of clusters
- TH1F *fHistMaxTrgCluster; // Energy distribution of max trigger clusters
- TH2F *fHistMaxTrgClusVSMaxL1; // Max trigger cluster vs. max L1 time sum amplitude
+
TH1F *fHistClusPhiCorr; // Clusters phi correlations
TH1F *fHistTracksPhiCorr; // Tracks phi correlations
+
TH2F *fHistChVSneCells; // Charged vs. neutral (cells) energy
TH2F *fHistChVSneClus; // Charged vs. neutral (clusters) energy
TH2F *fHistChVSneCorrCells; // Charged vs. neutral (corrected cells) energy
+
TH1F *fHistTrackPhi[5]; // Phi distribution of hybrid tracks
TH1F *fHistTrackEta[5]; // Eta distribution of hybrid tracks