fHistoGamma(NULL),
fHistoPion(NULL),
fV0Filter(NULL),
- fTrackCuts(),
+ fTrackCuts(NULL),
fGammas(NULL),
fPions(NULL),
hMETracks(NULL),
fPhotonCorr(NULL),
fPionCorr(NULL),
fIsoAna(NULL),
- fL1(-1),
- fL2(-1),
fDeltaAODBranchName("AliAODGammaConversion_gamma"),
fAxistPt(),
fAxiscPt(),
fAxisZ.SetNameTitle("ZAxis", "Z");
fAxisZ.Set(4, -10, 10);
- fAxisCent.SetNameTitle("CentAxis", "Cent");
+ fAxisCent.SetNameTitle("CentAxis", "Cent");
Double_t centbins[5] = {0, 10, 30, 60, 100.1};
fAxisCent.Set(4, centbins);
- Double_t mbins[7] = {0.1, 0.11, 0.12, 0.15, 0.16, 0.18, 0.2};
+ Double_t mbins[8] = {0.11, 0.12, 0.13, 0.132, 0.138, 0.14, 0.15, 0.16};
fAxisPiM.SetNameTitle("InvMassPi0", "Invariant mass");
- fAxisPiM.Set(6, mbins);
+ fAxisPiM.Set(7, mbins);
fGammas = new TObjArray();
fGammas->SetOwner(kFALSE);
fPions = new TObjArray();
fPions->SetOwner(kFALSE);
-
- fTrackCuts.SetDefaults2010();
- fTrackCuts.Print();
// Define input and output slots here
DefineInput(0, TChain::Class());
delete fHistograms;
fHistograms = NULL;
-if(fHistoPion)
+ if(fHistoPion)
delete fHistoPion;
fHistoPion = NULL;
fHistoPion->Add(hPion);
- for(Int_t iz = 0; iz < fAxisZ.GetNbins(); iz++) {
+ for(Int_t ic = 0; ic < fAxisCent.GetNbins(); ic++) {
TObjArray * photonArray = new TObjArray();
photonArray->SetOwner(kTRUE);
- fPhotonCorr->AddAt(photonArray, iz);
+ fPhotonCorr->AddAt(photonArray, ic);
TObjArray * pionArray = new TObjArray();
pionArray->SetOwner(kTRUE);
- fPionCorr->AddAt(pionArray, iz);
+ fPionCorr->AddAt(pionArray, ic);
TList * photonList = new TList();
- photonList->SetName(Form("photon_%d", iz));
+ photonList->SetName(Form("photon_%d", ic));
photonList->SetOwner(kTRUE);
- hPhoton->AddAt(photonList, iz);
+ hPhoton->AddAt(photonList, ic);
TList * pionList = new TList();
- pionList->SetName(Form("pion_%d", iz));
+ pionList->SetName(Form("pion_%d", ic));
pionList->SetOwner(kTRUE);
- hPion->AddAt(pionList, iz);
+ hPion->AddAt(pionList, ic);
- for(Int_t ic = 0; ic < fAxisCent.GetNbins(); ic++) {
- TString nameString = Form("%d_%d", iz, ic);
+ for(Int_t iz = 0; iz < fAxisZ.GetNbins(); iz++) {
+ TString nameString = Form("%d_%d", ic, iz);
TString titleString = Form("%f < Z < %f ... %f cent %f",
fAxisZ.GetBinLowEdge(iz+1), fAxisZ.GetBinUpEdge(iz+1),
fAxisCent.GetBinLowEdge(ic+1), fAxisCent.GetBinUpEdge(ic+1));
AliAnaConvCorrPhoton * photonCorr = new AliAnaConvCorrPhoton(Form("PhotonCorr_%s", nameString.Data()), Form("photon %s", titleString.Data()));
- photonArray->AddAt(photonCorr, ic);
+ photonArray->AddAt(photonCorr, iz);
photonCorr->GetAxistPt().Set(fAxistPt.GetNbins(), fAxistPt.GetXbins()->GetArray());
photonCorr->GetAxiscPt().Set(fAxiscPt.GetNbins(), fAxiscPt.GetXbins()->GetArray());
photonCorr->CreateHistograms();
photonList->Add(photonCorr->GetHistograms());
AliAnaConvCorrPion * pionCorr = new AliAnaConvCorrPion(Form("PionCorr_%s", nameString.Data()), Form("pion %s", titleString.Data()));
- pionArray->AddAt(pionCorr, ic);
+ pionArray->AddAt(pionCorr, iz);
pionCorr->GetAxistPt().Set(fAxistPt.GetNbins(), fAxistPt.GetXbins()->GetArray());
pionCorr->GetAxiscPt().Set(fAxiscPt.GetNbins(), fAxiscPt.GetXbins()->GetArray());
pionCorr->GetAxisM().Set(fAxisPiM.GetNbins(), fAxisPiM.GetXbins()->GetArray());
}
- fHistograms->Add(fTrackCuts.CreateHistograms());
+ AliConversionTrackCuts * tc = dynamic_cast<AliConversionTrackCuts*>(fTrackCuts);
+ if(tc) fHistograms->Add(tc->CreateHistograms());
SetUpCorrObjects();
MEHistograms->SetOwner(kTRUE);
fHistograms->Add(MEHistograms);
- hMETracks = new TObjArray();
- hMETracks->SetName("TrackArray");
- hMETracks->SetOwner(kTRUE);
- hMEPhotons = new TObjArray();
- hMEPhotons->SetName("PhotonArray");
- hMEPhotons->SetOwner(kTRUE);
- hMEPions = new TObjArray();
- hMEPions->SetName("PionArray");
- hMEPions->SetOwner(kTRUE);
-
- MEHistograms->Add(hMETracks);
- MEHistograms->Add(hMEPions);
- MEHistograms->Add(hMEPhotons);
hMEvents = new TH2I("hMEvents", "Nevents vs centrality vertexz",
fAxisZ.GetNbins(), fAxisZ.GetBinLowEdge(1), fAxisZ.GetBinUpEdge(fAxisZ.GetNbins()),
hMEvents->GetYaxis()->Set(fAxisCent.GetNbins(), fAxisCent.GetXbins()->GetArray());
MEHistograms->Add(hMEvents);
-
- TList axesList;
- axesList.AddAt(&GetAxisEta(), 0);
- axesList.AddAt(&GetAxisPhi(), 1);
- axesList.AddAt(&GetAxistPt(), 2);
- axesList.SetOwner(kFALSE);
-
- TList piAxesList;
- piAxesList.AddAt(&GetAxisEta(), 0);
- piAxesList.AddAt(&GetAxisPhi(), 1);
- piAxesList.AddAt(&GetAxistPt(), 2);
- piAxesList.AddAt(&GetAxisPiMass(), 3);
- piAxesList.SetOwner(kFALSE);
-
-
TList * outAxesList = new TList();
outAxesList->Add(&fAxisCent);
outAxesList->Add(&fAxisZ);
fHistograms->Add(outAxesList);
- // for(Int_t iz = 0; iz < fAxisZ.GetNbins(); iz++) {
- // TObjArray * trackArray = new TObjArray();
- // trackArray->SetName(Form("METracks_%d", iz));
- // trackArray->SetOwner(kTRUE);
- // TObjArray * photonArray = new TObjArray();
- // photonArray->SetName(Form("MEPhotons_%d", iz));
- // photonArray->SetOwner(kTRUE);
- // TObjArray * pionArray = new TObjArray();
- // pionArray->SetName(Form("MEPions_%d", iz));
- // pionArray->SetOwner(kTRUE);
-
-
- // hMEPions->AddAt(pionArray, iz);
- // hMETracks->AddAt(trackArray, iz);
- // hMEPhotons->AddAt(photonArray, iz);
-
- // for(Int_t ic = 0; ic < fAxisCent.GetNbins(); ic++) {
-
- // TString nameString = Form("%d_%d", iz, ic);
- // TString titleString = Form("%f < Z < %f ... %f cent %f",
- // fAxisZ.GetBinLowEdge(iz+1), fAxisZ.GetBinUpEdge(iz+1),
- // fAxisCent.GetBinLowEdge(ic+1), fAxisCent.GetBinUpEdge(ic+1));
-
-
- // THnSparseF * trackHistogram = CreateSparse(Form("tracks_%s", nameString.Data()),
- // Form("tracks %s", titleString.Data()), &axesList );
- // trackArray->AddAt(trackHistogram, ic);
-
- // THnSparseF * photonHistogram = CreateSparse(Form("photons_%s", nameString.Data()),
- // Form("photons %s", titleString.Data()), &axesList );
- // photonArray->AddAt(photonHistogram, ic);
-
- // THnSparseF * pionHistogram = CreateSparse(Form("pions_%s", nameString.Data()),
- // Form("pions %s", titleString.Data()), &piAxesList );
- // pionArray->AddAt(pionHistogram, ic);
- // }
- // }
-
PostData(1, fHistograms);
PostData(2, fHistoGamma);
PostData(3, fHistoPion);
///________________________________________________________________________
THnSparseF * AliAnalysisTaskdPhi::CreateSparse(TString nameString, TString titleString, TList * axesList) {
- ///Creat sparse
+ ///Create sparse
const Int_t dim = axesList->GetSize();
TAxis * axes[dim];
//if(! fV0Filter->EventIsSelected(fInputEvent)) return;
-
AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager();
Bool_t isAOD=man->GetInputEventHandler()->IsA()==AliAODInputHandler::Class();
}
Double_t centrality = 0.0;
+ Double_t multiplicity = 0.0;
Double_t eventPlane = 0.0;
Double_t vertexz = fInputEvent->GetPrimaryVertex()->GetZ();
+
if(isAOD) {
AliAODHeader * header = static_cast<AliAODHeader*>(fInputEvent->GetHeader());
centrality = header->GetCentrality();
eventPlane = header->GetEventplane();
+ multiplicity = header->GetRefMultiplicity();
+ if(centrality < 0) centrality = multiplicity;
} else {
- centrality = static_cast<AliESDEvent*>(fInputEvent)->GetCentrality()->GetCentralityPercentile("kV0M");
+ centrality = static_cast<AliESDEvent*>(fInputEvent)->GetCentrality()->GetCentralityPercentile("V0M");
eventPlane = fInputEvent->GetEventplane()->GetEventplane("Q");
}
+
+ const Int_t centBin = GetBin(fAxisCent, centrality);
+ const Int_t vertexBin = GetBin(fAxisZ, vertexz);
+
+
if(DebugLevel () > 4) {
cout << "centrality: " << centrality << " " << GetBin(fAxisCent, centrality) << endl;
cout << "vertexz: " << vertexz << " " << GetBin(fAxisZ, vertexz) << endl;
cout << "eventPlane: " << eventPlane << " " << endl;
+ cout << "multiplicity: "<< multiplicity << endl;
+
}
- const Int_t centBin = GetBin(fAxisCent, centrality);
- const Int_t vertexBin = GetBin(fAxisZ, vertexz);
if(centBin < 0 || vertexBin < 0) {
AliError("bin out of range");
+ //cout << "bad bin"<<endl;
return;
}
fPions->Clear();
TClonesArray * aodGammas = GetConversionGammas(isAOD);
+
if(!aodGammas) {
AliError("no aod gammas found!");
return;
}
- if(aodGammas->GetEntriesFast() > 0) {
- if( static_cast<AliAODConversionParticle*>(aodGammas->At(0))->GetLabel(0) == fL1 &&
- static_cast<AliAODConversionParticle*>(aodGammas->At(0))->GetLabel(1) == fL2
- ) {
- return;
- }
- fL1 = static_cast<AliAODConversionParticle*>(aodGammas->At(0))->GetLabel(0);
- fL2 = static_cast<AliAODConversionParticle*>(aodGammas->At(0))->GetLabel(1);
- //cout << aodGammas->GetEntriesFast() << " " << fInputEvent->GetNumberOfTracks() << "c" << endl;
- }
if(DebugLevel() > 1) printf("Number of conversion gammas %d \n", aodGammas->GetEntriesFast());
for(Int_t ig = 0; ig < aodGammas->GetEntriesFast(); ig++) {
- AliAODConversionPhoton * photon = dynamic_cast<AliAODConversionPhoton*>(aodGammas->At(ig));
+ AliAODConversionPhoton * photon = dynamic_cast<AliAODConversionPhoton*>(aodGammas->At(ig));
- if(!photon) continue;
+ if(!photon) {
+ cout << "can't get photon"<<endl;
+ continue;
+ }
+ if(!VerifyAODGamma(photon)) {
+ continue;
+ }
+
if(!fV0Filter || fV0Filter->PhotonIsSelected(static_cast<AliConversionPhotonBase*>(photon), fInputEvent)) {
fGammas->Add(static_cast<TObject*>(photon));
}
}
if(DebugLevel() > 4) printf("Number of accepted gammas %d \n", fGammas->GetEntriesFast());
-
- // THnSparseF * trackMehist = GetMEHistogram(vertexBin, centBin, hMETracks);
- // hMEvents->Fill(vertexz, centrality);
+ hMEvents->Fill(vertexz, centrality);
+
+
- ///Add tracks to array
+ ///create track array
TObjArray tracks;
+ const Double_t etalim[2] = { fAxisEta.GetBinLowEdge(1), fAxisEta.GetBinUpEdge(fAxisEta.GetNbins())};
for(Int_t iTrack = 0; iTrack < fInputEvent->GetNumberOfTracks(); iTrack++) {
- AliVTrack * track = static_cast<AliVTrack*>(fInputEvent->GetTrack(iTrack));
- //if(track->Pt() < 0.5) continue;
- //if(TMath::Abs(track->Eta()) > 0.8) continue;
- //if(track->GetTPCNcls() > 70)continue;
- if(fTrackCuts.AcceptTrack(static_cast<AliAODTrack*>(track), static_cast<AliAODEvent*>(fInputEvent))) {
- tracks.Add(track);
- }
+ AliVTrack * track = static_cast<AliVTrack*>(fInputEvent->GetTrack(iTrack));
+ if(track->Pt() < fAxiscPt.GetBinLowEdge(1) ) continue;
+ if(track->Eta() < etalim[0] || track->Eta() > etalim[1]) continue;
+
+
+ if(!fTrackCuts || fTrackCuts->IsSelected((track))) {
+ tracks.Add(track);
+ //cout <<"a"<<endl;
+ } // else {
+ // cout <<"b"<<endl;
+ // }
}
-
+
Process(fGammas, &tracks, vertexBin, centBin);
PostData(1, fHistograms);
void AliAnalysisTaskdPhi::Process(TObjArray * gammas, TObjArray * tracks, Int_t vertexBin, Int_t centBin) {
///Process stuff
- if(DebugLevel() > 4) printf("Number of accepted tracks %d \n", tracks->GetEntriesFast());
+ if(DebugLevel() > 4) printf("Number of accepted gammas, tracks %d %d \n", gammas->GetEntriesFast(), tracks->GetEntriesFast());
+
AliAnaConvCorrBase * gCorr = GetCorrObject(vertexBin, centBin, fPhotonCorr);
- AliAnaConvCorrBase * piCorr = GetCorrObject(vertexBin, centBin, fPionCorr);
+ AliAnaConvCorrPion * piCorr = dynamic_cast<AliAnaConvCorrPion*>(GetCorrObject(vertexBin, centBin, fPionCorr));
if(!gCorr || !piCorr) {
AliError("corr object missing");
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) &&
}
}
+
//________________________________________________________________________
void AliAnalysisTaskdPhi::Terminate(Option_t *) {
if(name.BeginsWith("GammaConv")&&name.EndsWith("gamma")){
fDeltaAODBranchName=name;
AliInfo(Form("Set DeltaAOD BranchName to: %s",fDeltaAODBranchName.Data()));
+ cout <<fDeltaAODBranchName << endl;
return;
}
}
}
+
+
+///________________________________________________________________________
+Bool_t AliAnalysisTaskdPhi::VerifyAODGamma(AliAODConversionPhoton * gamma) {
+
+ AliAODEvent * event = static_cast<AliAODEvent*>(fInputEvent);
+
+ //cout << "label "<< gamma->GetV0Index() << endl;
+
+ AliAODv0 * v0 = NULL;
+
+ //Int_t v0idx = gamma->GetV0Index();
+ for(Int_t i = 0; i < event->GetNumberOfV0s(); i++) {
+ AliAODv0 * tv0 = event->GetV0(i);
+
+ //cout << i << " " << v0->GetID() << " " << v0->GetSecondaryVtx()->GetID() << " " << v0->GetLabel() << " " << v0->GetSecondaryVtx()->GetLabel() << endl;
+
+ if(tv0->GetSecondaryVtx()->GetID() == gamma->GetV0Index() ) {
+ v0 = tv0;
+ //cout << "found it" << endl;
+ break;
+ }
+ }
+
+ if(!v0) {
+ //cout << "v0 not found"<<endl;
+ return kFALSE;
+ }
+
+
+ AliAODTrack * d1 = dynamic_cast<AliAODTrack*>(v0->GetDaughter(0));
+ AliAODTrack * d2 = dynamic_cast<AliAODTrack*>(v0->GetDaughter(1));
+
+ Int_t t1 = -1;
+ Int_t t2 = -2;
+
+ if(d1) t1 = d1->GetID();
+ if(d2) t2 = d2->GetID();
+
+ Int_t g1 = gamma->GetLabel(0);
+ Int_t g2 = gamma->GetLabel(1);
+
+ if((t1 == g1 &&
+ t2 == g2) ||
+ (t1 == g2 &&
+ t2 == g1) ) {
+ //cout <<"match"<< " " << gamma->Pt() << " " << d1->Pt() + d2->Pt() <<endl;
+ }
+
+ else {
+
+ cout << g1 << " " << g2 <<endl;
+ cout << t1 << " " << t2 <<endl;
+
+ for(Int_t i = 0; i < event->GetNumberOfV0s(); i++) {
+ v0 = event->GetV0(i);
+ cout << i << " " << v0->GetSecondaryVtx()->GetID() << " " <<dynamic_cast<AliAODTrack*>(v0->GetDaughter(0))->GetID() << " " << dynamic_cast<AliAODTrack*>(v0->GetDaughter(1))->GetID() << endl;
+
+ }
+ }
+
+ // Float_t sumdpt = d1->Pt() + d2->Pt();
+ // cout << "pt: " << sumdpt << " " << gamma->Pt() << endl;
+
+ return kTRUE;
+
+
+
+}