From 0ebb458a7b07dcc7d2d138fa46a93521364235bb Mon Sep 17 00:00:00 2001 From: auras Date: Sat, 25 Oct 2014 19:57:54 +0200 Subject: [PATCH] New MFT Analysis Tools --- MFT/AliAnalysisTaskMFTExample.cxx | 18 +++++-- MFT/AliMFTAnalysisTools.cxx | 79 ++++++++++++++++++++++++++++++- MFT/AliMFTAnalysisTools.h | 9 ++++ MFT/AliMFTPlane.cxx | 2 +- 4 files changed, 100 insertions(+), 8 deletions(-) diff --git a/MFT/AliAnalysisTaskMFTExample.cxx b/MFT/AliAnalysisTaskMFTExample.cxx index f6b10791016..0a6c54f03c5 100755 --- a/MFT/AliAnalysisTaskMFTExample.cxx +++ b/MFT/AliAnalysisTaskMFTExample.cxx @@ -197,30 +197,38 @@ void AliAnalysisTaskMFTExample::UserExec(Option_t *) { recMuon2 = aodEv->GetTrack(jTrack); AliAODDimuon *dimuon = new AliAODDimuon(recMuon1, recMuon2); - if (dimuon->Charge()) continue; + if (dimuon->Charge()) { + delete dimuon; + continue; + } // pt and mass all OS dimuons fHistPtDimuonsOS -> Fill(dimuon->Pt()); fHistMassDimuonsOS -> Fill(dimuon->Mass()); + delete dimuon; + // pt and mass J/psi dimuons if (!isMuon1FromJpsi) continue; if (recMuon2->GetLabel() >= 0) { mcMuon2 = (AliAODMCParticle*) stackMC->At(recMuon2->GetLabel()); if (mcMuon2) { if (mcMuon2->GetMother() == mcMuon1->GetMother()) { - AliAODDimuon *dimuon = new AliAODDimuon; - dimuon->SetMuons(recMuon1,recMuon2); + AliAODDimuon *dimuonJpsi = new AliAODDimuon; + dimuonJpsi->SetMuons(recMuon1,recMuon2); Double_t pca[3]={0}; Double_t pcaQuality=0; TLorentzVector kinem(0,0,0,0); - if (!AliMFTAnalysisTools::CalculatePCA(dimuon, pca, pcaQuality, kinem)) continue; + if (!AliMFTAnalysisTools::CalculatePCA(dimuonJpsi, pca, pcaQuality, kinem)) { + delete dimuonJpsi; + continue; + } fHistPtDimuonsJpsi -> Fill(kinem.Pt()); fHistMassDimuonsJpsi -> Fill(kinem.M()); fHistResidualXVtxJpsi -> Fill(1.e4*(pca[0] - fPrimaryVertex[0])); fHistResidualYVtxJpsi -> Fill(1.e4*(pca[1] - fPrimaryVertex[1])); fHistResidualZVtxJpsi -> Fill(1.e4*(pca[2] - fPrimaryVertex[2])); - delete dimuon; + delete dimuonJpsi; } } } diff --git a/MFT/AliMFTAnalysisTools.cxx b/MFT/AliMFTAnalysisTools.cxx index 815d929646b..d65930879fb 100644 --- a/MFT/AliMFTAnalysisTools.cxx +++ b/MFT/AliMFTAnalysisTools.cxx @@ -137,8 +137,6 @@ Bool_t AliMFTAnalysisTools::ExtrapAODMuonToXY(AliAODTrack *muon, Double_t xy[2], // We look for the above-defined PCA - Double_t xPCA=0, yPCA=0, zPCA=0; - AliMUONTrackParam *param = new AliMUONTrackParam(); param -> SetNonBendingCoor(muon->XAtDCA()); param -> SetBendingCoor(muon->YAtDCA()); @@ -675,3 +673,80 @@ const TMatrixD AliMFTAnalysisTools::ConvertCovMatrixAOD2MUON(AliAODTrack *muon) //==================================================================================================================================================== +Bool_t AliMFTAnalysisTools::IsCorrectMatch(AliAODTrack *muon) { + + for (Int_t iPlane=0; iPlaneGetCocktailHeaders(); + Int_t nGenHeaders = genHeaders->GetEntries(); + + for (Int_t i=0; iAt(i); + TString genName = gh->GetName(); + Int_t nPart = gh->NProduced(); + if (label>=partCounter && label<(partCounter+nPart)) return genName; + partCounter += nPart; + } + + TString empty=""; + return empty; + +} + +//==================================================================================================================================================== + +void AliMFTAnalysisTools::GetTrackPrimaryGenerator(AliAODTrack *track, AliAODMCHeader *header, TClonesArray *arrayMC, TString &nameGen) { + + // method to check if a track comes from a given generator + + Int_t label = TMath::Abs(track->GetLabel()); + nameGen = GetGenerator(label,header); + + // In case the particle is not primary nameGen will contain blank spaces. In this case, we search backward for the primary which originated the chain + + while (nameGen.IsWhitespace()) { + AliAODMCParticle *mcPart = (AliAODMCParticle*) arrayMC->At(label); + if (!mcPart) { + printf("AliMFTAnalysisTools::GetTrackPrimaryGenerator - BREAK: No valid AliAODMCParticle at label %i\n",label); + break; + } + Int_t motherLabel = mcPart->GetMother(); + if (motherLabel < 0) { + printf("AliMFTAnalysisTools::GetTrackPrimaryGenerator - BREAK: Reached primary particle without valid mother\n"); + break; + } + label = motherLabel; + nameGen = GetGenerator(label,header); + } + + return; + +} + +//==================================================================================================================================================== + +Bool_t AliMFTAnalysisTools::IsTrackInjected(AliAODTrack *track, AliAODMCHeader *header, TClonesArray *arrayMC){ + + // method to check if a track comes from the signal event or from the underlying Hijing event + + TString nameGen; + + GetTrackPrimaryGenerator(track,header,arrayMC,nameGen); + + if (nameGen.IsWhitespace() || nameGen.Contains("ijing")) return kFALSE; + + return kTRUE; +} + +//==================================================================================================================================================== + diff --git a/MFT/AliMFTAnalysisTools.h b/MFT/AliMFTAnalysisTools.h index b51a633956e..e6e0a7f7c2e 100644 --- a/MFT/AliMFTAnalysisTools.h +++ b/MFT/AliMFTAnalysisTools.h @@ -22,6 +22,9 @@ #include "AliLog.h" #include "TMatrixD.h" #include "TClonesArray.h" +#include "AliAODMCHeader.h" +#include "AliGenEventHeader.h" +#include "AliAODMCParticle.h" //==================================================================================================================================================== @@ -58,6 +61,12 @@ public: else return !(muon->GetMFTClusterPattern() & (1<<(iPlane+AliMFTConstants::fNMaxPlanes))); } + static Bool_t IsCorrectMatch(AliAODTrack *muon); + + static TString GetGenerator(Int_t label, AliAODMCHeader* header); + static void GetTrackPrimaryGenerator(AliAODTrack *track, AliAODMCHeader *header, TClonesArray *arrayMC, TString &nameGen); + static Bool_t IsTrackInjected(AliAODTrack *track, AliAODMCHeader *header, TClonesArray *arrayMC); + static void ConvertCovMatrixMUON2AOD(const TMatrixD& covMUON, Double_t covAOD[21]); static const TMatrixD ConvertCovMatrixAOD2MUON(AliAODTrack *muon); diff --git a/MFT/AliMFTPlane.cxx b/MFT/AliMFTPlane.cxx index bad7caa944d..9a5dbd94f93 100644 --- a/MFT/AliMFTPlane.cxx +++ b/MFT/AliMFTPlane.cxx @@ -683,7 +683,7 @@ void AliMFTPlane::DrawPlane(Option_t *opt) { cnv->Draw(); TH2D *h = new TH2D("tmp", GetName(), - 1, fZCenter-0.5, fZCenter+0.5, + 1, fZCenter-1.1*(0.5*fThicknessSupport+fThicknessActive), fZCenter+1.1*(0.5*fThicknessSupport+fThicknessActive), 1, 1.1*GetSupportElement(0)->GetAxis(1)->GetXmin(), 1.1*GetSupportElement(0)->GetAxis(1)->GetXmax()); h->SetXTitle("z [cm]"); h->SetYTitle("y [cm]"); -- 2.43.0