X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=PWG3%2Fhfe%2FAliHFEefficiency.cxx;h=30bb40e96919c1de3828780f6bdc9bfab856cf96;hb=02f4889497ef9e8f8eb525c636fd4225fbadc838;hp=fac7f61e004ed0c0163961e164cd8fdaa9048a6a;hpb=91c7e1ecf4894e5dc835742b94867f089e1b9ee6;p=u%2Fmrichter%2FAliRoot.git diff --git a/PWG3/hfe/AliHFEefficiency.cxx b/PWG3/hfe/AliHFEefficiency.cxx index fac7f61e004..30bb40e9691 100644 --- a/PWG3/hfe/AliHFEefficiency.cxx +++ b/PWG3/hfe/AliHFEefficiency.cxx @@ -77,6 +77,8 @@ AliHFEefficiency::AliHFEefficiency(const Char_t *name): // DefineOutput(1, AliHFEcontainer::Class()); DefineOutput(2, TList::Class()); + + SetRunTerminate(); } AliHFEefficiency::~AliHFEefficiency(){ @@ -117,16 +119,18 @@ void AliHFEefficiency::UserCreateOutputObjects(){ if(fCutTRD){ AliHFEcutStep *hfeTRD = fFilter->GetCutStep("HFETRD"); AliHFEextraCuts *hfecuts = dynamic_cast(hfeTRD->GetCut("HFETRDCuts")); - hfecuts->SetMinTrackletsTRD(4); + if(hfecuts) hfecuts->SetMinTrackletsTRD(4); } AliHFEcutStep *hfeITS = fFilter->GetCutStep("HFEITS"); AliHFEextraCuts *hfeitscuts = dynamic_cast(hfeITS->GetCut("HFEPixelsCuts")); - hfeitscuts->SetRequireITSpixel(AliHFEextraCuts::kFirst); + if(hfeitscuts)hfeitscuts->SetRequireITSpixel(AliHFEextraCuts::kFirst); AliHFEcutStep *primary = fFilter->GetCutStep("Primary"); AliCFTrackIsPrimaryCuts *primcuts = dynamic_cast(primary->GetCut("PrimaryCuts")); - primcuts->SetMaxDCAToVertexXY(3); - primcuts->SetMaxDCAToVertexZ(5); + if(primcuts){ + primcuts->SetMaxDCAToVertexXY(3); + primcuts->SetMaxDCAToVertexZ(5); + } fAcceptanceCuts = new AliCFAcceptanceCuts("Acceptance", "MC Acceptance Cuts"); fAcceptanceCuts->SetMinNHitITS(3); @@ -136,13 +140,11 @@ void AliHFEefficiency::UserCreateOutputObjects(){ // 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 *){ @@ -150,17 +152,26 @@ void AliHFEefficiency::UserExec(Option_t *){ // Event Loop // Filter track, fill Efficiency container // + AliESDEvent *esdevent = dynamic_cast(fInputEvent); + if(!esdevent){ + AliError("ESD Event required"); + return; + } fEfficiency->NewEvent(); fFilter->SetRecEvent(fInputEvent); if(fMCEvent){ AliMCEventHandler *mcH = dynamic_cast(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()); - if(!mcH->InitOk()) return; - if(!mcH->TreeK()) return; - if(!mcH->TreeTR()) return; + 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(fInputEvent)); + fFilter->FilterTracks(esdevent); TObjArray *tracks = fFilter->GetFilteredTracks(); TIterator *iter = tracks->MakeIterator(); fOutput->Fill("hNtracks", tracks->GetEntriesFast()); @@ -172,14 +183,16 @@ void AliHFEefficiency::UserExec(Option_t *){ fOutput->Fill("itspixel",1); else fOutput->Fill("itspixel",0); - AliMCParticle *mctrack = dynamic_cast(fMCEvent->GetTrack(TMath::Abs(track->GetLabel()))); - if(mctrack){ - Int_t motherLabel = mctrack->Particle()->GetFirstMother(); - if(motherLabel){ - AliMCParticle *mother = dynamic_cast(fMCEvent->GetTrack(motherLabel)); - fOutput->Fill("mcmother", mother->Particle()->GetPdgCode()); + if(fMCEvent){ + AliMCParticle *mctrack = dynamic_cast(fMCEvent->GetTrack(TMath::Abs(track->GetLabel()))); + if(mctrack){ + Int_t motherLabel = mctrack->Particle()->GetFirstMother(); + if(motherLabel){ + AliMCParticle *mother = dynamic_cast(fMCEvent->GetTrack(motherLabel)); + if(mother)fOutput->Fill("mcmother", mother->Particle()->GetPdgCode()); + } + fOutput->Fill("ptres", mctrack->Pt(), (track->Pt() - mctrack->Pt())/mctrack->Pt()); } - fOutput->Fill("ptres", mctrack->Pt(), (track->Pt() - mctrack->Pt())/mctrack->Pt()); } } delete iter; @@ -193,11 +206,16 @@ void AliHFEefficiency::Terminate(Option_t *){ // Evaluate Results // fEfficiency = dynamic_cast(GetOutputData(1)); - if(!fEfficiency) return; + if(!fEfficiency){ + AliError("No Output data available"); + return; + } + + if(!IsRunningTerminate()) return; PostProcess(); TList *l = dynamic_cast(GetOutputData(2)); - DrawPtResolution(l); + if(l) DrawPtResolution(l); } void AliHFEefficiency::FilterMC(){ @@ -208,6 +226,7 @@ void AliHFEefficiency::FilterMC(){ AliMCParticle *track = NULL; for(Int_t itrack = 0; itrack < fMCEvent->GetNumberOfTracks(); itrack++){ track = dynamic_cast(fMCEvent->GetTrack(itrack)); + if(!track) continue; if(!fMCcut->IsSelected(track)) continue; cont[0] = track->Pt(); cont[1] = track->Eta(); @@ -222,9 +241,12 @@ void AliHFEefficiency::FilterMC(){ } void AliHFEefficiency::Load(const char* filename){ + // + // Load results for post processing + // TFile *input = TFile::Open(filename); AliHFEcontainer *cin = dynamic_cast(input->Get("Efficiency")); - fEfficiency = dynamic_cast(cin->Clone()); + if(cin) fEfficiency = dynamic_cast(cin->Clone()); input->Close(); delete input; } @@ -356,11 +378,12 @@ void AliHFEefficiency::CalculatePTsmearing(){ delete grid; } -void AliHFEefficiency::DrawPtResolution(TList *l){ +void AliHFEefficiency::DrawPtResolution(const TList * const l){ // // Draw pt resolution // TH2 *h2 = dynamic_cast(l->FindObject("ptres")); + if(!h2) return; TGraphErrors *mean = new TGraphErrors(h2->GetNbinsX()); TGraphErrors *rms = new TGraphErrors(h2->GetNbinsX());