#include <TObjArray.h>
#include <TPad.h>
+#include "AliAnalysisManager.h"
#include "AliCFAcceptanceCuts.h"
+#include "AliCFTrackIsPrimaryCuts.h"
#include "AliCFContainer.h"
#include "AliCFEffGrid.h"
#include "AliESDEvent.h"
#include "AliHFEtrackFilter.h"
#include "AliHFEtools.h"
#include "AliMCEvent.h"
+#include "AliMCEventHandler.h"
ClassImp(AliHFEefficiency)
//
DefineOutput(1, AliHFEcontainer::Class());
DefineOutput(2, TList::Class());
+
+ SetRunTerminate();
}
AliHFEefficiency::~AliHFEefficiency(){
if(fCutTRD){
AliHFEcutStep *hfeTRD = fFilter->GetCutStep("HFETRD");
AliHFEextraCuts *hfecuts = dynamic_cast<AliHFEextraCuts *>(hfeTRD->GetCut("HFETRDCuts"));
- hfecuts->SetMinTrackletsTRD(4);
+ if(hfecuts) hfecuts->SetMinTrackletsTRD(4);
}
AliHFEcutStep *hfeITS = fFilter->GetCutStep("HFEITS");
AliHFEextraCuts *hfeitscuts = dynamic_cast<AliHFEextraCuts *>(hfeITS->GetCut("HFEPixelsCuts"));
- hfeitscuts->SetRequireITSpixel(AliHFEextraCuts::kFirst);
+ if(hfeitscuts)hfeitscuts->SetRequireITSpixel(AliHFEextraCuts::kFirst);
+
+ AliHFEcutStep *primary = fFilter->GetCutStep("Primary");
+ AliCFTrackIsPrimaryCuts *primcuts = dynamic_cast<AliCFTrackIsPrimaryCuts *>(primary->GetCut("PrimaryCuts"));
+ if(primcuts){
+ primcuts->SetMaxDCAToVertexXY(3);
+ primcuts->SetMaxDCAToVertexZ(5);
+ }
fAcceptanceCuts = new AliCFAcceptanceCuts("Acceptance", "MC Acceptance Cuts");
fAcceptanceCuts->SetMinNHitITS(3);
// create additional histos for testing purpose
fOutput = new AliHFEcollection("histos", "QA histograms");
fOutput->CreateTH1F("hNtracks","Number of Tracks per Event", 100, 0, 100);
- fOutput->CreateTH1F("hPt","Pt of the tracks", 40, 0.1, 10);
- fOutput->BinLogAxis("hPt", 0);
+ fOutput->CreateTH1F("hPt","Pt of the tracks", 40, 0.1, 10, 0);
fOutput->CreateTH1F("kinkIndex", "Kink Index", 400, -200, 200);
fOutput->CreateTH1F("itspixel", "ITS PIXEL", 2, 0, 2);
fOutput->CreateTH1F("mcmother", "Mother PDG", 1000, -500, 500);
- fOutput->CreateTH2F("ptres", "Pt Resolution", 40, 0.1, 10, 200, -1.5, 1.5);
- fOutput->BinLogAxis("ptres", 0);
+ fOutput->CreateTH2F("ptres", "Pt Resolution", 40, 0.1, 10, 200, -1.5, 1.5, 0);
}
void AliHFEefficiency::UserExec(Option_t *){
// Event Loop
// Filter track, fill Efficiency container
//
+ AliESDEvent *esdevent = dynamic_cast<AliESDEvent *>(fInputEvent);
+ if(!esdevent){
+ AliError("ESD Event required");
+ return;
+ }
fEfficiency->NewEvent();
fFilter->SetRecEvent(fInputEvent);
if(fMCEvent){
+ AliMCEventHandler *mcH = dynamic_cast<AliMCEventHandler *>(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
+ if ( ! mcH ) {
+ AliError("Cannot get MC truth event handler");
+ return;
+ }
+ if(mcH &&(!mcH->InitOk())) return;
+ if(mcH &&(!mcH->TreeK())) return;
+ if(mcH &&(!mcH->TreeTR())) return;
fFilter->SetMC(fMCEvent);
FilterMC();
}
- fFilter->FilterTracks(dynamic_cast<AliESDEvent *>(fInputEvent));
+ fFilter->FilterTracks(esdevent);
TObjArray *tracks = fFilter->GetFilteredTracks();
TIterator *iter = tracks->MakeIterator();
fOutput->Fill("hNtracks", tracks->GetEntriesFast());
fOutput->Fill("itspixel",1);
else
fOutput->Fill("itspixel",0);
- AliMCParticle *mctrack = dynamic_cast<AliMCParticle *>(fMCEvent->GetTrack(TMath::Abs(track->GetLabel())));
- AliMCParticle *mother = dynamic_cast<AliMCParticle *>(fMCEvent->GetTrack(mctrack->Particle()->GetFirstMother()));
- fOutput->Fill("mcmother", mother->Particle()->GetPdgCode());
- fOutput->Fill("ptres", mctrack->Pt(), (track->Pt() - mctrack->Pt())/mctrack->Pt());
+ if(fMCEvent){
+ AliMCParticle *mctrack = dynamic_cast<AliMCParticle *>(fMCEvent->GetTrack(TMath::Abs(track->GetLabel())));
+ if(mctrack){
+ Int_t motherLabel = mctrack->Particle()->GetFirstMother();
+ if(motherLabel){
+ AliMCParticle *mother = dynamic_cast<AliMCParticle *>(fMCEvent->GetTrack(motherLabel));
+ if(mother)fOutput->Fill("mcmother", mother->Particle()->GetPdgCode());
+ }
+ fOutput->Fill("ptres", mctrack->Pt(), (track->Pt() - mctrack->Pt())/mctrack->Pt());
+ }
+ }
}
delete iter;
fFilter->Flush();
// Evaluate Results
//
fEfficiency = dynamic_cast<AliHFEcontainer *>(GetOutputData(1));
- if(!fEfficiency) return;
+ if(!fEfficiency){
+ AliError("No Output data available");
+ return;
+ }
+
+ if(!IsRunningTerminate()) return;
PostProcess();
TList *l = dynamic_cast<TList *>(GetOutputData(2));
- DrawPtResolution(l);
+ if(l) DrawPtResolution(l);
}
void AliHFEefficiency::FilterMC(){
AliMCParticle *track = NULL;
for(Int_t itrack = 0; itrack < fMCEvent->GetNumberOfTracks(); itrack++){
track = dynamic_cast<AliMCParticle *>(fMCEvent->GetTrack(itrack));
+ if(!track) continue;
if(!fMCcut->IsSelected(track)) continue;
cont[0] = track->Pt();
cont[1] = track->Eta();
}
void AliHFEefficiency::Load(const char* filename){
+ //
+ // Load results for post processing
+ //
TFile *input = TFile::Open(filename);
AliHFEcontainer *cin = dynamic_cast<AliHFEcontainer *>(input->Get("Efficiency"));
- fEfficiency = dynamic_cast<AliHFEcontainer *>(cin->Clone());
+ if(cin) fEfficiency = dynamic_cast<AliHFEcontainer *>(cin->Clone());
input->Close();
delete input;
}
delete grid;
}
-void AliHFEefficiency::DrawPtResolution(TList *l){
+void AliHFEefficiency::DrawPtResolution(const TList * const l){
//
// Draw pt resolution
//
TH2 *h2 = dynamic_cast<TH2 *>(l->FindObject("ptres"));
+ if(!h2) return;
TGraphErrors *mean = new TGraphErrors(h2->GetNbinsX());
TGraphErrors *rms = new TGraphErrors(h2->GetNbinsX());