1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0 };
// pT
- //iTrackBin[1] = 20;
- //Double_t pTBins[] = {0.15, 0.2, 0.3, 0.4, 0.5, 0.75, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0, 6.0, 7.0, 8.0, 10.0, 12.0, 15.0};
iTrackBin[1] = 9;
Double_t pTBins[] = {0.5, 0.75, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 8.0 };
trackBins[1] = pTBins;
trackAxisTitle[1] = "p_{T} (GeV/c)";
+ // pT, fine
+ const Int_t kNpTBinsFine = 22;
+ Double_t pTBinsFine[kNpTBinsFine+1] = {0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.25, 1.5, 1.75, 2.0, 2.25, 2.5, 2.75, 3.0, 3.25, 3.5, 3.75, 4.0, 4.5, 5.0, 6.0, 7.0, 8.0};
+
+ // pT, wide range
+ //const Int_t kNpTBinsWideRange = 20;
+ //Double_t pTBinsWideRange[kNpTBinsWideRange+1] = {0.15, 0.2, 0.3, 0.4, 0.5, 0.75, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0, 6.0, 7.0, 8.0, 10.0, 12.0, 15.0};
+
// pT,lead binning 1
const Int_t kNLeadingpTBins = 100;
Double_t leadingpTBins[kNLeadingpTBins+1];
// pT,lead binning 2
//const Int_t kNLeadingpTBins2 = 8;
- //Double_t leadingpTBins2[] = { 0.5, 1.0, 2.0, 3.0, 4.0, 6.0, 8.0, 10.0, 15.0 };
+// Double_t leadingpTBins2[] = { 0.5, 1.0, 2.0, 3.0, 4.0, 6.0, 8.0, 10.0, 15.0 };
const Int_t kNLeadingpTBins2 = 6;
Double_t leadingpTBins2[] = { 0.5, 1.0, 2.0, 3.0, 4.0, 6.0, 8.0 };
SetStepNames(fEventHist);
+ iTrackBin[1] = kNpTBinsFine;
iTrackBin[2] = kNSpeciesBins;
iTrackBin[4] = kNVertexBins2;
fTrackHistEfficiency = new AliCFContainer("fTrackHistEfficiency", "Tracking efficiency", 4, 5, iTrackBin);
fTrackHistEfficiency->SetBinLimits(0, trackBins[0]);
fTrackHistEfficiency->SetVarTitle(0, trackAxisTitle[0]);
- fTrackHistEfficiency->SetBinLimits(1, trackBins[1]);
+ fTrackHistEfficiency->SetBinLimits(1, pTBinsFine);
fTrackHistEfficiency->SetVarTitle(1, trackAxisTitle[1]);
fTrackHistEfficiency->SetBinLimits(2, speciesBins);
fTrackHistEfficiency->SetVarTitle(2, "particle species");
fSkipStep6(kFALSE),
fRejectCentralityOutliers(kFALSE),
fRemoveWeakDecays(kFALSE),
+fRemoveDuplicates(kFALSE),
fFillpT(kFALSE)
{
// Default constructor
settingsTree->Branch("fInjectedSignals", &fInjectedSignals,"SkipTrigger/O");
settingsTree->Branch("fRejectCentralityOutliers", &fRejectCentralityOutliers,"RejectCentralityOutliers/O");
settingsTree->Branch("fRemoveWeakDecays", &fRemoveWeakDecays,"RemoveWeakDecays/O");
+ settingsTree->Branch("fRemoveDuplicates", &fRemoveDuplicates,"RemoveDuplicates/O");
settingsTree->Fill();
fListOfHistos->Add(settingsTree);
fAnalyseUE->RemoveInjectedSignals(tracksRecoMatchedPrim, mc, skipParticlesAbove);
if (fRemoveWeakDecays)
fAnalyseUE->RemoveWeakDecays(tracksRecoMatchedPrim, mc);
+ if (fRemoveDuplicates)
+ RemoveDuplicates(tracksRecoMatchedPrim);
// (RECO-matched (quantities from MC particle) primary particles)
// STEP 4
fAnalyseUE->RemoveInjectedSignals(tracksRecoMatchedAll, mc, skipParticlesAbove);
if (fRemoveWeakDecays)
fAnalyseUE->RemoveWeakDecays(tracksRecoMatchedAll, mc);
+ if (fRemoveDuplicates)
+ RemoveDuplicates(tracksRecoMatchedAll);
// (RECO-matched (quantities from MC particle) all particles)
// STEP 5
// MC handler
fMcHandler = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
}
+
+//____________________________________________________________________
+void AliAnalysisTaskPhiCorrelations::RemoveDuplicates(TObjArray* tracks)
+{
+ // remove particles with the same label
+
+ Int_t before = tracks->GetEntriesFast();
+
+ for (Int_t i=0; i<before; ++i)
+ {
+ AliVParticle* part = (AliVParticle*) tracks->At(i);
+
+ for (Int_t j=i+1; j<before; ++j)
+ {
+ AliVParticle* part2 = (AliVParticle*) tracks->At(j);
+
+ if (part->GetLabel() == part2->GetLabel())
+ {
+ Printf("Removing %d with label %d (duplicated in %d)", i, part->GetLabel(), j); part->Dump(); part2->Dump();
+ TObject* object = tracks->RemoveAt(i);
+ if (tracks->IsOwner())
+ delete object;
+ break;
+ }
+ }
+ }
+
+ tracks->Compress();
+
+ if (before > tracks->GetEntriesFast())
+ AliInfo(Form("Reduced from %d to %d", before, tracks->GetEntriesFast()));
+}
void SetStepsFillSkip(Bool_t step0, Bool_t step6) { fFillOnlyStep0 = step0; fSkipStep6 = step6; }
void SetRejectCentralityOutliers(Bool_t flag = kTRUE) { fRejectCentralityOutliers = flag; }
void SetRemoveWeakDecays(Bool_t flag = kTRUE) { fRemoveWeakDecays = flag; }
+ void SetRemoveDuplicates(Bool_t flag = kTRUE) { fRemoveDuplicates = flag; }
private:
AliAnalysisTaskPhiCorrelations(const AliAnalysisTaskPhiCorrelations &det);
void AnalyseDataMode(); // main algorithm to get raw distributions
void Initialize(); // initialize some common pointer
TObjArray* CloneAndReduceTrackList(TObjArray* tracks);
+ void RemoveDuplicates(TObjArray* tracks);
// General configuration
Int_t fDebug; // Debug flag
Bool_t fSkipStep6; // skip step 6 when filling
Bool_t fRejectCentralityOutliers; // enable rejection of outliers in centrality vs no track correlation
Bool_t fRemoveWeakDecays; // remove secondaries from weak decays from tracks and particles
+ Bool_t fRemoveDuplicates; // remove particles with the same label (double reconstruction)
Bool_t fFillpT; // fill sum pT instead of number density
- ClassDef( AliAnalysisTaskPhiCorrelations, 18); // Analysis task for delta phi correlations
+ ClassDef( AliAnalysisTaskPhiCorrelations, 19); // Analysis task for delta phi correlations
};
class AliDPhiBasicParticle : public AliVParticle