fPions = new TObjArray();
fPions->SetOwner(kFALSE);
+ fTrackCuts.SetDefaults2010();
+ fTrackCuts.Print();
+
// Define input and output slots here
DefineInput(0, TChain::Class());
//DefineInput(1, TClonesArray::Class());
pion->SetLabels(i1, i2);
if(!fV0Filter || fV0Filter->MesonIsSelected(pion, kTRUE) ) {
+
+
Int_t leadingpi = fIsoAna->IsLeading(static_cast<AliAODConversionParticle*>(pion), tracks, tIDs);
+ piCorr->FillTriggerCounters(pion, leadingpi);
tIDs[2] = ph2->GetLabel(0);
tIDs[3] = ph2->GetLabel(1);
- if(pion->Pt() > fAxistPt.GetBinLowEdge(1)) {
+ if(pion->Pt() > fAxistPt.GetBinLowEdge(1) &&
+ pion->M() > fAxisPiM.GetBinLowEdge(1) &&
+ pion->M() < fAxisPiM.GetBinUpEdge(fAxisPiM.GetNbins())) {
piCorr->CorrelateWithTracks(pion, tracks, tIDs, leadingpi);
}
}
void AliAnaConvCorrBase::SetUpDefaultBins() {
//Set up default bins
Double_t ptbins[19] = {0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 5.0, 6.0, 8.0, 10.0, 12.5, 15, 20, 25, 30, 50, 100};
- fAxisdEta.Set(160, -1.6, 1.6);
+ fAxisdEta.Set(30, -1.5, 1.5);
fAxisdEta.SetNameTitle("dEta", "delta eta");
- fAxisdPhi.Set(64, -TMath::PiOver2(), 3*TMath::PiOver2());
+ fAxisdPhi.Set(32, -TMath::PiOver2(), 3*TMath::PiOver2());
fAxisdPhi.SetNameTitle("dPhi", "delta Phi");
fAxistPt.Set(18, ptbins);
fAxisMEEta.Set(160, -0.8, 0.8);
fAxisMEEta.SetNameTitle("eta", "eta");
- fAxisMEPhi.Set(64, 0, TMath::TwoPi());
+ fAxisMEPhi.Set(128, 0, TMath::TwoPi());
fAxisMEPhi.SetNameTitle("phi", "phi");
fTrackAxisList.AddAt(&fAxisMEEta, 0);
void AliAnaConvCorrBase::CreateBaseHistograms() {
//Create histograms add, to outputlis
- cout << "Creating histograms for "<< GetName() << endl;
+ //cout << "Creating histograms for "<< GetName() << endl;
fHistograms = new TList();
fHistograms->SetOwner(kTRUE);
fHistograms->SetName(fName);
- for(int iIso = 0; iIso < 2; iIso++) {
+ for(int iIso = 0; iIso < 3; iIso++) {
fHNTriggers[iIso] = new TH1F(Form("%s_%s_fNTriggers", fName.Data(), (iIso==0)?"nonIso":"isolated"),
Form("%s_%s_fNTriggers", fName.Data(), (iIso==0)?"nonIso":"isolated"),
//Create sparse
const Int_t dim = axesList->GetSize();
- cout << nameString << " " << titleString << " " << " dimesion: " << dim << endl;
+ //cout << nameString << " " << titleString << " " << " dimesion: " << dim << endl;
TAxis * axes[dim];
Int_t bins[dim];
}
for(Int_t i = 0; i<dim; i++) {
- cout << axes[i]->GetTitle() << endl;
- bins[i] = axes[i]->GetNbins();
+ //cout << axes[i]->GetTitle() << endl;
+ bins[i] = axes[i]->GetNbins();
min[i] = axes[i]->GetBinLowEdge(1);
max[i] = axes[i]->GetBinUpEdge(axes[i]->GetNbins());
}
//_______________________________________________________________________________
-void AliAnaConvCorrBase::FillTriggerCounters(const AliAODConversionParticle * particle, Bool_t leading) {
+void AliAnaConvCorrBase::FillTriggerCounters(const AliAODConversionParticle * particle, Int_t leading) {
fHNTriggers[leading]->Fill(particle->Pt());
}
void AliAnaConvCorrBase::CorrelateWithTracks(AliAODConversionParticle * particle, TObjArray * tracks, Int_t const tIDs[4], Int_t isolated = 0) {
//Correlate particle with tracks
+
FillTriggerCounters(particle, isolated);
Int_t nDim = fAxesList.GetSize();
Double_t trackValues[nDim];
Double_t trigValues[nDim - 1];
-
trigValues[0] = particle->Eta();
trigValues[1] = particle->Phi();
trigValues[2] = particle->Pt();
trigValues[3] = isolated;
+
fTrigSparse->Fill(trigValues);
+ if(nDim > 4) {
+ dphivalues[5] = particle->M();
+ trackValues[5] = particle->M();
+ trigValues[4] = particle->M();
+ }
+
for(int ij = 0; ij < tracks->GetEntriesFast(); ij++) {
AliVTrack * track = static_cast<AliVTrack*>(tracks->UncheckedAt(ij));
Int_t tid = track->GetID();
trackValues[4] = isolated;
- if(nDim > 4) {
- dphivalues[5] = particle->M();
- trackValues[5] = particle->M();
- trigValues[4] = particle->M();
- }
fCorrSparse->Fill(dphivalues);
fTrackSparse->Fill(trackValues);
void PrintStatistics();\r
\r
void CorrelateWithTracks(AliAODConversionParticle * particle, TObjArray * tracks, const Int_t tIDs[4], Int_t isolated);\r
- virtual void FillTriggerCounters(const AliAODConversionParticle * particle, Bool_t leading);\r
+ virtual void FillTriggerCounters(const AliAODConversionParticle * particle, Int_t leading);\r
\r
TAxis& GetAxistPt() { return fAxistPt; }\r
TAxis& GetAxiscPt() { return fAxiscPt; }\r
//Fill trigger counter histograms\r
//virtual void FillTriggerCounters(Float_t tPt, Bool_t isolated) = NULL;\r
THnSparseF * CreateSparse(TString name, TString title, TList * axes);\r
- TH1F * fHNTriggers[2]; //Histograms containing number of triggers in various bins\r
+ TH1F * fHNTriggers[3]; //Histograms containing number of triggers in various bins\r
\r
private:\r
\r
//________________________________________________________________________________
AliAnaConvCorrPion::AliAnaConvCorrPion() :
AliAnaConvCorrBase("pion_hadron_corr", "Pion dPhi"),
- hTriggerPtvsMass(NULL),
+//hTriggerPtvsMass(NULL),
fAxisM()
{
//consctructor
//________________________________________________________________________________
AliAnaConvCorrPion::AliAnaConvCorrPion(TString name, TString title = "Pion Corr") :
AliAnaConvCorrBase(name, title),
- hTriggerPtvsMass(NULL),
+ //hTriggerPtvsMass(NULL),
fAxisM()
{
//consctructor
void AliAnaConvCorrPion::CreateHistograms() {
//Create histograms
CreateBaseHistograms();
- hTriggerPtvsMass = new TH2D("hTriggerPtvsMass", "Pt vs Mass", 400, 0, .400, GetAxistPt().GetNbins(), GetAxistPt().GetXbins()->GetArray());
- GetHistograms()->Add(hTriggerPtvsMass);
+
+ hTriggerPtvsMass[0] = new TH2D("hTriggerPtvsMass_all", "Pt vs Mass all pizero", 400, 0, .400, GetAxistPt().GetNbins(), GetAxistPt().GetXbins()->GetArray());
+ hTriggerPtvsMass[1] = new TH2D("hTriggerPtvsMass_leadingcone", "Pt vs Mass leading cone", 400, 0, .400, GetAxistPt().GetNbins(), GetAxistPt().GetXbins()->GetArray());
+ hTriggerPtvsMass[2] = new TH2D("hTriggerPtvsMass_leadingevent", "Pt vs Mass leading event", 400, 0, .400, GetAxistPt().GetNbins(), GetAxistPt().GetXbins()->GetArray());
+ GetHistograms()->Add(hTriggerPtvsMass[0]);
+ GetHistograms()->Add(hTriggerPtvsMass[1]);
+ GetHistograms()->Add(hTriggerPtvsMass[2]);
}
///________________________________________________________________________________
-void AliAnaConvCorrPion::FillTriggerCounters(const AliAODConversionParticle * particle, Bool_t isolated) {
+void AliAnaConvCorrPion::FillTriggerCounters(const AliAODConversionParticle * particle, Int_t leading) {
//Fill histograms counting triggers
- fHNTriggers[isolated]->Fill(particle->Pt());
- hTriggerPtvsMass->Fill(particle->M(), particle->Pt());
+ fHNTriggers[leading]->Fill(particle->Pt());
+ hTriggerPtvsMass[leading]->Fill(particle->M(), particle->Pt());
}
//________________________________________________________________________________
//void Process(TClonesArray * pions, TClonesArray * photons, TClonesArray * tracks);\r
\r
\r
- void FillTriggerCounters(const AliAODConversionParticle * particle, Bool_t isolated);\r
+ void FillTriggerCounters(const AliAODConversionParticle * particle, Int_t leading);\r
\r
private:\r
\r
\r
//TH2F * fhPtVsInvMass;\r
\r
- TH2D * hTriggerPtvsMass; //Histograms containing number of triggers in various bins\r
+ TH2D * hTriggerPtvsMass[3]; //Histograms containing number of triggers in various bins\r
TAxis fAxisM; //Mass axis\r
\r
AliAnaConvCorrPion(const AliAnaConvCorrPion&); // not implemented\r
//#include "AliAODTrack.h"
#include "AliAODEvent.h"
#include <TFormula.h>
-
+#include <iostream>
using namespace std;
// return kFALSE;
// }
+
// step #0: check SPD and ITS clusters
Int_t nSPD = 0;
nSPD = TESTBIT(track->GetITSClusterMap(), 0);
AliDebug(AliLog::kDebug + 2, "Too few TPC clusters. Rejected");
return kFALSE;
}
+
if (track->GetITSNcls() < fITSminNClusters) {
AliDebug(AliLog::kDebug + 2, "Too few ITS clusters. Rejected");
return kFALSE;
}
-
+
// step #2: check chi square
if (track->Chi2perNDF() > fTPCmaxChi2) {
AliDebug(AliLog::kDebug + 2, "Bad chi2. Rejected");
return kFALSE;
}
+
if (track->Chi2perNDF() > fITSmaxChi2) {
AliDebug(AliLog::kDebug + 2, "Bad chi2. Rejected");
return kFALSE;
}
+
// step #3: reject kink daughters
AliAODVertex *vertex = track->GetProdVertex();
if (vertex && fRejectKinkDaughters) {
}
}
+
// step #4: DCA cut (transverse)
Double_t b[2], cov[3];
vertex = aodEvent->GetPrimaryVertex();
AliDebug(AliLog::kDebug + 2, "NULL vertex");
return kFALSE;
}
+
if (!track->PropagateToDCA(vertex, aodEvent->GetMagneticField(), kVeryBig, b, cov)) {
AliDebug(AliLog::kDebug + 2, "Failed propagation to vertex");
return kFALSE;
}
+
// if the DCA cut is not fixed, compute current value
if (!fDCARfixed) {
static TString str(fDCARptFormula);
static const TFormula dcaXY(Form("%s_dcaXY", GetName()), str.Data());
fDCARmax = dcaXY.Eval(track->Pt());
}
+
// check the cut
if (TMath::Abs(b[0]) > fDCARmax) {
AliDebug(AliLog::kDebug + 2, "Too large transverse DCA");
return kFALSE;
}
+
// step #5: DCA cut (longitudinal)
// the DCA has already been computed above
// if the DCA cut is not fixed, compute current value
static const TFormula dcaZ(Form("%s_dcaXY", GetName()), str.Data());
fDCAZmax = dcaZ.Eval(track->Pt());
}
+
// check the cut
- if (TMath::Abs(b[1]) > fDCAZmax) {
+ if (TMath::Abs(b[1]) > fDCAZmax) {
AliDebug(AliLog::kDebug + 2, "Too large longitudinal DCA");
return kFALSE;
}
+
// step #6: check eta/pt range
if (track->Eta() < fEta[0] || track->Eta() > fEta[1]) {
AliDebug(AliLog::kDebug + 2, "Outside ETA acceptance");
return kFALSE;
}
- if (track->Pt() < fPt[0] || track->Pt() > fPt[1]) {
- AliDebug(AliLog::kDebug + 2, "Outside PT acceptance");
- return kFALSE;
- }
+
+ // if (track->Pt() < fPt[0] || track->Pt() > fPt[1]) {
+ // AliDebug(AliLog::kDebug + 2, "Outside PT acceptance");
+ // return kFALSE;
+ // }
// if we are here, all cuts were passed and no exit point was got
return kTRUE;
SetITSminNClusters(0);
SetITSmaxChi2(1E+20);
SetTPCminNClusters(70);
- SetTPCmaxChi2(4.0);
+ SetTPCmaxChi2(10.0);
SetRejectKinkDaughters();
SetAODTestFilterBit(5);
}