From 4b621d9c358e960282e509fc4c80d639f982d03f Mon Sep 17 00:00:00 2001 From: kkanaki Date: Thu, 11 Nov 2010 21:51:11 +0000 Subject: [PATCH] - implemented function that allows selection of HLT triggered events (Hege) - modified running macros accordingly with extra arguments - updated documentation, calling the macros without arguments prints usage examples - changed AliRoot and ROOT version for running on the GRID --- HLT/QA/tasks/AliAnalysisTaskHLT.cxx | 523 ++++++------------ HLT/QA/tasks/AliAnalysisTaskHLT.h | 58 +- HLT/QA/tasks/macros/CreateAlienHandler.C | 13 +- .../tasks/macros/compare-HLT-offline-grid.C | 82 ++- .../tasks/macros/compare-HLT-offline-local.C | 83 ++- 5 files changed, 278 insertions(+), 481 deletions(-) diff --git a/HLT/QA/tasks/AliAnalysisTaskHLT.cxx b/HLT/QA/tasks/AliAnalysisTaskHLT.cxx index 271425b22fa..8eb70fe9e5d 100644 --- a/HLT/QA/tasks/AliAnalysisTaskHLT.cxx +++ b/HLT/QA/tasks/AliAnalysisTaskHLT.cxx @@ -30,6 +30,8 @@ class AliAnalysisTask; class AliAnalysisManager; + +#include "AliHLTGlobalTriggerDecision.h" #include "TH1F.h" #include "TH2F.h" #include "TF1.h" @@ -51,6 +53,7 @@ ClassImp(AliAnalysisTaskHLT) AliAnalysisTaskHLT::AliAnalysisTaskHLT() : AliAnalysisTaskSE() + ,fUseHLTTrigger(kFALSE) ,fESDOfftrackCuts(0) ,fESDHLTtrackCuts(0) ,fOutputList(0) @@ -78,7 +81,6 @@ AliAnalysisTaskSE() ,fNclusVSphiOff(0) ,fNclusVSthetaOff(0) ,fStatusOff(0) - ,fStatusOff_Ocl(0) ,fEventSpecieOff(0) ,fChargeHLT(0) @@ -105,7 +107,6 @@ AliAnalysisTaskSE() ,fNclusVSphiHLT(0) ,fNclusVSthetaHLT(0) ,fStatusHLT(0) - ,fStatusHLT_Ocl(0) ,fEventSpecieHLT(0) ,fTrgClsArray(0) @@ -128,7 +129,8 @@ AliAnalysisTaskSE() AliAnalysisTaskHLT::AliAnalysisTaskHLT(const char *name) : - AliAnalysisTaskSE(name) + AliAnalysisTaskSE(name) + ,fUseHLTTrigger(kFALSE) ,fESDOfftrackCuts(0) ,fESDHLTtrackCuts(0) ,fOutputList(0) @@ -156,7 +158,6 @@ AliAnalysisTaskHLT::AliAnalysisTaskHLT(const char *name) ,fNclusVSphiOff(0) ,fNclusVSthetaOff(0) ,fStatusOff(0) - ,fStatusOff_Ocl(0) ,fEventSpecieOff(0) ,fChargeHLT(0) @@ -181,7 +182,6 @@ AliAnalysisTaskHLT::AliAnalysisTaskHLT(const char *name) ,fNclusVSphiHLT(0) ,fNclusVSthetaHLT(0) ,fStatusHLT(0) - ,fStatusHLT_Ocl(0) ,fEventSpecieHLT(0) ,fTrgClsArray(0) // ,fDCArOff_trig(0) @@ -200,14 +200,6 @@ AliAnalysisTaskHLT::AliAnalysisTaskHLT(const char *name) DefineOutput(1, TList::Class()); } -// const Float_t AliAnalysisTaskHLT::fgkEtaMin = -0.12; -// const Float_t AliAnalysisTaskHLT::fgkEtaMax = 0.12; -// const Float_t AliAnalysisTaskHLT::fgkPhiMin[5] = {3.83972, 4.18879, 4.53786, 4.88692, 5.23599}; -// const Float_t AliAnalysisTaskHLT::fgkPhiMax[5] = {4.18879, 4.53786, 4.88692, 5.23599, 5.58505}; -// const Float_t AliAnalysisTaskHLT::fgkNormX[5] = {-0.642788, -0.34202, 0, 0.34202, 0.642788}; -// const Float_t AliAnalysisTaskHLT::fgkNormY[5] = {-0.766044, -0.939693, -1, -0.939693, -0.766044}; -// const Float_t AliAnalysisTaskHLT::fgkInitPosX[5] = {-295.682, -157.329, 0, 157.329, 295.682}; -// const Float_t AliAnalysisTaskHLT::fgkInitPosY[5] = {-352.38, -432.259, -460, -432.259, -352.38}; //---------------------------------------------------------------------------------------------------- @@ -242,11 +234,11 @@ void AliAnalysisTaskHLT::UserCreateOutputObjects(){ (fHistTrigger->GetXaxis())->SetBinLabel(8,"onlTrkThruCE"); */ - fHistTrigger = new TH1F("fHistTrigger", "CTP trigger counter",21 , 0, 21); + fHistTrigger = new TH1F("fHistTrigger", "CTP trigger counter",24 , 0, 24); fHistTrigger->GetXaxis()->SetTitle(""); fHistTrigger->GetYaxis()->SetTitle("#Events"); - fHistHLTTrigger = new TH1F("fHistHLTTrigger", "HLT CTP trigger counter", 21, 0, 21); + fHistHLTTrigger = new TH1F("fHistHLTTrigger", "HLT CTP trigger counter", 24, 0, 24); fHistHLTTrigger->GetXaxis()->SetTitle(""); fHistHLTTrigger->GetYaxis()->SetTitle("#Events"); @@ -318,9 +310,6 @@ void AliAnalysisTaskHLT::UserCreateOutputObjects(){ fStatusOff = new TH1F("fStatus_off", "Status for different detectors (offline)",12, 0, 12); fStatusHLT = new TH1F("fStatus_hlt", "Status for different detectors (HLT)", 12, 0, 12); - fStatusOff_Ocl = new TH1F("fStatus_Ocl_off", "Status for different detectors when #TPCcl=0 (offline)",12, 0, 12); - fStatusHLT_Ocl = new TH1F("fStatus_Ocl_hlt", "Status for different detectors when #TPCcl=0 (HLT)", 12, 0, 12); - fEventSpecieOff = new TH1F("fEventSpecie_off","Eventspecie for Offline",18, 0, 18); fEventSpecieHLT = new TH1F("fEventSpecie_hlt","Eventspecie for HLT",18, 0, 18); @@ -352,7 +341,6 @@ void AliAnalysisTaskHLT::UserCreateOutputObjects(){ fOutputList->Add(fNclusVSphiOff); fOutputList->Add(fNclusVSthetaOff); fOutputList->Add(fStatusOff); - fOutputList->Add(fStatusOff_Ocl); fOutputList->Add(fEventSpecieOff); fOutputList->Add(fChargeHLT); @@ -379,7 +367,6 @@ void AliAnalysisTaskHLT::UserCreateOutputObjects(){ fOutputList->Add(fNclusVSphiHLT); fOutputList->Add(fNclusVSthetaHLT); fOutputList->Add(fStatusHLT); - fOutputList->Add(fStatusHLT_Ocl); fOutputList->Add(fEventSpecieHLT); SetupESDtrackCuts(); @@ -417,10 +404,7 @@ void AliAnalysisTaskHLT::NotifyRun(){ for(int iii=0;iii<12;iii++){ (fStatusHLT->GetXaxis())->SetBinLabel(iii+1,Statusnames[iii]); (fStatusOff->GetXaxis())->SetBinLabel(iii+1,Statusnames[iii]); - (fStatusHLT_Ocl->GetXaxis())->SetBinLabel(iii+1,Statusnames[iii]); - (fStatusOff_Ocl->GetXaxis())->SetBinLabel(iii+1,Statusnames[iii]); } - } void AliAnalysisTaskHLT::UserExec(Option_t *){ @@ -442,27 +426,27 @@ void AliAnalysisTaskHLT::UserExec(Option_t *){ return; } - //Fill CTP Trigger stuff //fHistTrigger->Fill(esdOFF->GetTriggerMask()); - for(Int_t i=0; iGetEntries(); i++){ if((esdOFF->GetFiredTriggerClasses()).Contains(((TObjString *)fTrgClsArray->At(i))->GetString()))// && esdOFF->GetEventSpecie()==16) fHistTrigger->Fill(i); if((esdHLT->GetFiredTriggerClasses()).Contains(((TObjString *)fTrgClsArray->At(i))->GetString()))// && esdOFF->GetEventSpecie()==16) fHistHLTTrigger->Fill(i); - } - + } - Double_t DCAcut = 7.0; - Double_t Momcut= 0.3; + //reject laser events -> Use offline info (HLT do not set this flag) + if((esdOFF->GetEventSpecie()==16)) return; + + // To check if anything was triggered in HLT. + if(fUseHLTTrigger){ + if (!((AliHLTGlobalTriggerDecision*)esdHLT->GetHLTTriggerDecision())->Result()){ + return; + // Process all and any events that were triggered by HLT. + } + } - char Titlename[100]; - sprintf(Titlename,"pseudorapidity (HLT), DCA cut = %f,\n Momentum cut = %f, TPC clusters > 70" , DCAcut, Momcut); - fEtaMomentumcutHLT->SetTitle(Titlename); - sprintf(Titlename,"pseudorapidity (offline), DCA cut = %f, Momentum cut = %f, TPC clusters > 70", DCAcut, Momcut); - fEtaMomentumcutOff->SetTitle(Titlename); Double_t bfield = esdOFF->GetMagneticField(); @@ -512,91 +496,81 @@ void AliAnalysisTaskHLT::UserExec(Option_t *){ } //At the moment no constrains on vertex before filling histograms //Should be changed. - if(1){ - //if( vertHLT && vertHLT->GetNContributors() >= 5 && (TMath::Abs(vertHLT->GetZ())<5.5) ){ - fEventSpecieHLT->Fill(esdHLT->GetEventSpecie()); + //if( vertHLT && vertHLT->GetNContributors() >= 5 && (TMath::Abs(vertHLT->GetZ())<5.5) ){ - for(Int_t i=0; iGetNumberOfTracks(); i++){ + fEventSpecieHLT->Fill(esdHLT->GetEventSpecie()); + + for(Int_t i=0; iGetNumberOfTracks(); i++){ - AliESDtrack *esdtrackHLT = esdHLT->GetTrack(i); - if(!esdtrackHLT){ - continue; - } - - //Fill which status flags that are set for an event - for(int jjj=0;jjj<12;jjj++){ - if(esdtrackHLT->GetStatus()&Statusnames[jjj]) { - fStatusHLT->Fill(jjj); - if(esdtrackHLT->GetTPCNcls()==0) fStatusHLT_Ocl->Fill(jjj); - } - } - - //reject laser events -> Use offline info (HLT do not set this flag) - if((esdOFF->GetEventSpecie()==16)) continue; - - //This condition is mostly affecting Offline->will cut away tracks that are counted twice - //With both kITSin and kTPCin flags set. - if(!(esdtrackHLT->GetStatus()&AliESDtrack::kTPCin)) continue; - - //ESD-cut - //At the moment not included! - //if(!fESDHLTtrackCuts->AcceptTrack(esdtrackHLT)) continue; - - //Calculating DCA "old" fashion - Float_t dca[2]; - esdtrackHLT->GetDZ(esdHLT->GetPrimaryVertex()->GetXv(), esdHLT->GetPrimaryVertex()->GetYv(), esdHLT->GetPrimaryVertex()->GetZv(), bfield, dca); - - // plotting the DCA calculated by Sergey - Float_t DCAr, DCAz = -99; - esdtrackHLT->GetImpactParametersTPC(DCAr, DCAz); - fDCArHLTSG->Fill(DCAr); - fDCAzHLTSG->Fill(DCAz); - - fDCArHLT->Fill(dca[0]); - fDCAzHLT->Fill(dca[1]); - - fChargeHLT->Fill(esdtrackHLT->Charge()); - - if((esdtrackHLT->GetStatus()&AliESDtrack::kTPCin) || (esdtrackHLT->GetStatus()&AliESDtrack::kTPCin && esdtrackHLT->GetStatus()&AliESDtrack::kTPCout)) - fNclusterHLT->Fill(esdtrackHLT->GetTPCNcls()); - - nr_tracksHLT++; - - if((esdtrackHLT->GetStatus()&AliESDtrack::kTPCin) || (esdtrackHLT->GetStatus()&AliESDtrack::kTPCin && esdtrackHLT->GetStatus()&AliESDtrack::kTPCout)){ - fNclusVSphiHLT->Fill(esdtrackHLT->Phi()*TMath::RadToDeg(), esdtrackHLT->GetTPCNcls()); - fNclusVSthetaHLT->Fill(esdtrackHLT->Theta()*TMath::RadToDeg(), esdtrackHLT->GetTPCNcls()); - } - - if(esdtrackHLT->GetStatus()&AliESDtrack::kTPCin) fMomentumHLTTpc->Fill(esdtrackHLT->Pt()); - if(esdtrackHLT->GetStatus()&AliESDtrack::kTPCin && esdtrackHLT->GetStatus()&AliESDtrack::kITSin) fMomentumHLTTpcIts->Fill(esdtrackHLT->Pt()); - - fEtaHLT->Fill(esdtrackHLT->Eta()); - fdEdxHLT->Fill( esdtrackHLT->GetTPCsignal() ); - fdEdxVSPHLT->Fill( TMath::Abs(esdtrackHLT->Pt()), esdtrackHLT->GetTPCsignal() ); - - fPhiHLT->Fill(esdtrackHLT->Phi()*TMath::RadToDeg()); - fThetaHLT->Fill(esdtrackHLT->Theta()*TMath::RadToDeg()); - fMomentumHLT->Fill( TMath::Abs(esdtrackHLT->Pt()) ); - - if(esdtrackHLT->GetStatus()&AliESDtrack::kTPCin) - fMomentumHLTTpc->Fill(esdtrackHLT->Pt()); - if(esdtrackHLT->GetStatus()&AliESDtrack::kTPCin && esdtrackHLT->GetStatus()&AliESDtrack::kITSin) - fMomentumHLTTpcIts->Fill(esdtrackHLT->Pt()); - - if(TMath::Abs(esdtrackHLT->Pt()) Fill(esdtrackHLT->Eta()); - if((esdtrackHLT->GetStatus()&AliESDtrack::kTPCin) || (esdtrackHLT->GetStatus()&AliESDtrack::kTPCin && esdtrackHLT->GetStatus()&AliESDtrack::kTPCout)) - fNclusterHLTwCut->Fill(esdtrackHLT->GetTPCNcls()); - - if(esdHLT->IsHLTTriggerFired()){ - - }// end if for triggered hlt events - } // end of loop over hlt tracks - } + AliESDtrack *esdtrackHLT = esdHLT->GetTrack(i); + if(!esdtrackHLT) continue; + + //Fill which status flags that are set for an event + for(int jjj=0;jjj<12;jjj++){ + if(esdtrackHLT->GetStatus()&Statusnames[jjj]) fStatusHLT->Fill(jjj); + } + + //This condition is mostly affecting Offline->will cut away tracks that are counted twice + //With both kITSin and kTPCin flags set. + if(!(esdtrackHLT->GetStatus()&AliESDtrack::kTPCin)) continue; + + //ESD-cut + //At the moment not included! + //if(!fESDHLTtrackCuts->AcceptTrack(esdtrackHLT)) continue; + + //Calculating DCA "old" fashion + Float_t dca[2]; + esdtrackHLT->GetDZ(esdHLT->GetPrimaryVertex()->GetXv(), esdHLT->GetPrimaryVertex()->GetYv(), esdHLT->GetPrimaryVertex()->GetZv(), bfield, dca); + + // plotting the DCA calculated by Sergey + Float_t DCAr, DCAz = -99; + esdtrackHLT->GetImpactParametersTPC(DCAr, DCAz); + fDCArHLTSG->Fill(DCAr); + fDCAzHLTSG->Fill(DCAz); + + fDCArHLT->Fill(dca[0]); + fDCAzHLT->Fill(dca[1]); + + fChargeHLT->Fill(esdtrackHLT->Charge()); + + if((esdtrackHLT->GetStatus()&AliESDtrack::kTPCin) || (esdtrackHLT->GetStatus()&AliESDtrack::kTPCin && esdtrackHLT->GetStatus()&AliESDtrack::kTPCout)) + fNclusterHLT->Fill(esdtrackHLT->GetTPCNcls()); - if(nr_tracksHLT>0) - fMultHLT->Fill(nr_tracksHLT); + nr_tracksHLT++; + + if((esdtrackHLT->GetStatus()&AliESDtrack::kTPCin) || (esdtrackHLT->GetStatus()&AliESDtrack::kTPCin && esdtrackHLT->GetStatus()&AliESDtrack::kTPCout)){ + fNclusVSphiHLT->Fill(esdtrackHLT->Phi()*TMath::RadToDeg(), esdtrackHLT->GetTPCNcls()); + fNclusVSthetaHLT->Fill(esdtrackHLT->Theta()*TMath::RadToDeg(), esdtrackHLT->GetTPCNcls()); + } + + if(esdtrackHLT->GetStatus()&AliESDtrack::kTPCin) fMomentumHLTTpc->Fill(esdtrackHLT->Pt()); + if(esdtrackHLT->GetStatus()&AliESDtrack::kTPCin && esdtrackHLT->GetStatus()&AliESDtrack::kITSin) fMomentumHLTTpcIts->Fill(esdtrackHLT->Pt()); + + fEtaHLT->Fill(esdtrackHLT->Eta()); + fdEdxHLT->Fill( esdtrackHLT->GetTPCsignal() ); + fdEdxVSPHLT->Fill( TMath::Abs(esdtrackHLT->Pt()), esdtrackHLT->GetTPCsignal() ); + + fPhiHLT->Fill(esdtrackHLT->Phi()*TMath::RadToDeg()); + fThetaHLT->Fill(esdtrackHLT->Theta()*TMath::RadToDeg()); + fMomentumHLT->Fill( TMath::Abs(esdtrackHLT->Pt()) ); + + if(esdtrackHLT->GetStatus()&AliESDtrack::kTPCin) + fMomentumHLTTpc->Fill(esdtrackHLT->Pt()); + if(esdtrackHLT->GetStatus()&AliESDtrack::kTPCin && esdtrackHLT->GetStatus()&AliESDtrack::kITSin) + fMomentumHLTTpcIts->Fill(esdtrackHLT->Pt()); + + if(TMath::Abs(esdtrackHLT->Pt()) <0.3) continue; + fEtaMomentumcutHLT->Fill(esdtrackHLT->Eta()); + if((esdtrackHLT->GetStatus()&AliESDtrack::kTPCin) || (esdtrackHLT->GetStatus()&AliESDtrack::kTPCin && esdtrackHLT->GetStatus()&AliESDtrack::kTPCout)) + fNclusterHLTwCut->Fill(esdtrackHLT->GetTPCNcls()); + + if(esdHLT->IsHLTTriggerFired()){ + + }// end if for triggered hlt events + } // end of loop over hlt tracks + + if(nr_tracksHLT>0) fMultHLT->Fill(nr_tracksHLT); //----------------- OFFLINE ESD tree ----------------// @@ -611,7 +585,6 @@ void AliAnalysisTaskHLT::UserExec(Option_t *){ AliVertex *primVertexOFF = new AliVertex(vertexOFF, 0., 0); Bool_t testVertex=kTRUE; - //Int_t nr_contributorsOff= vertHLT->GetNContributors(); if(vertOff->GetNContributors()<1) { // SPD vertex @@ -631,130 +604,79 @@ void AliAnalysisTaskHLT::UserExec(Option_t *){ //At the moment no constrains on vertex before filling histograms //Should be changed. - if(1){ - fEventSpecieOff->Fill(esdOFF->GetEventSpecie()); + fEventSpecieOff->Fill(esdOFF->GetEventSpecie()); + + for(Int_t i=0; iGetNumberOfTracks(); i++){ + + AliESDtrack *esdtrackOFF = esdOFF->GetTrack(i); + if (!esdtrackOFF) continue; + + //Fill histograms with which flags are set + for(int jjj=0;jjj<12;jjj++){ + if(esdtrackOFF->GetStatus()&Statusnames[jjj]) fStatusOff->Fill(jjj); + } + + //This condition is mostly affecting Offline->will cut away tracks that are counted twice + //With both kITSin and kTPCin flags set. + if(!(esdtrackOFF->GetStatus()&AliESDtrack::kTPCin))continue; + + // -- ESD cuts + //Not included at the moment + //if(!fESDOfftrackCuts->AcceptTrack(esdtrackOFF) ) continue; + nr_tracksOff++; + + //Filling of DCA for Offline + + Double_t x[3]; + esdtrackOFF->GetXYZ(x); + Double_t b[3]; + AliTracker::GetBxByBz(x,b); + Bool_t isOK = esdtrackOFF->RelateToVertexTPCBxByBz(vertOff, b, kVeryBig); + if(!isOK) return; + + const AliExternalTrackParam *track = esdtrackOFF->GetTPCInnerParam(); + if(!track) return; + + Float_t dca[2], cov[3]; // dca_xy, dca_z, sigma_xy, sigma_xy_z, sigma_z + esdtrackOFF->GetImpactParametersTPC(dca,cov); - for(Int_t i=0; iGetNumberOfTracks(); i++){ - - AliESDtrack *esdtrackOFF = esdOFF->GetTrack(i); - if (!esdtrackOFF) continue; - - - //Fill histograms with which flags are set - for(int jjj=0;jjj<12;jjj++){ - if(esdtrackOFF->GetStatus()&Statusnames[jjj]) { - fStatusOff->Fill(jjj); - if(esdtrackOFF->GetTPCNcls()==0) fStatusOff_Ocl->Fill(jjj); - } - } - - // reject laser events - if((esdOFF->GetEventSpecie()==16)) continue; - - //This condition is mostly affecting Offline->will cut away tracks that are counted twice - //With both kITSin and kTPCin flags set. - if(!(esdtrackOFF->GetStatus()&AliESDtrack::kTPCin))continue; - - // -- ESD cuts - //Not included at the moment - //if(!fESDOfftrackCuts->AcceptTrack(esdtrackOFF) ) continue; - nr_tracksOff++; - - //Filling of DCA for Offline - - Double_t x[3]; - esdtrackOFF->GetXYZ(x); - Double_t b[3]; - AliTracker::GetBxByBz(x,b); - Bool_t isOK = esdtrackOFF->RelateToVertexTPCBxByBz(vertOff, b, kVeryBig); - if(!isOK) return; - - const AliExternalTrackParam *track = esdtrackOFF->GetTPCInnerParam(); - if(!track) return; - - Float_t dca[2], cov[3]; // dca_xy, dca_z, sigma_xy, sigma_xy_z, sigma_z - esdtrackOFF->GetImpactParametersTPC(dca,cov); - - fDCArOff->Fill(dca[0]); - fDCAzOff->Fill(dca[1]); - fChargeOff->Fill(esdtrackOFF->Charge()); - - if((esdtrackOFF->GetStatus()&AliESDtrack::kTPCin) || (esdtrackOFF->GetStatus()&AliESDtrack::kTPCin && esdtrackOFF->GetStatus()&AliESDtrack::kTPCout)) - fNclusterOff->Fill(esdtrackOFF->GetTPCNcls()); - - if(esdtrackOFF->GetTPCNcls()>0) fNclusVSphiOff->Fill(esdtrackOFF->Phi()*TMath::RadToDeg(), esdtrackOFF->GetTPCNcls()); - if(esdtrackOFF->GetTPCNcls()>0) fNclusVSthetaOff->Fill(esdtrackOFF->Theta()*TMath::RadToDeg(), esdtrackOFF->GetTPCNcls()); - - if(esdtrackOFF->GetStatus()&AliESDtrack::kTPCin) fMomentumOffTpc->Fill(esdtrackOFF->Pt()); - if(esdtrackOFF->GetStatus()&AliESDtrack::kTPCin && esdtrackOFF->GetStatus()&AliESDtrack::kITSin) fMomentumOffTpcIts->Fill(esdtrackOFF->Pt()); - - fEtaOff->Fill(esdtrackOFF->Eta()); - fdEdxOff->Fill( esdtrackOFF->GetTPCsignal() ); - fdEdxVSPOff->Fill( TMath::Abs(esdtrackOFF->Pt()), esdtrackOFF->GetTPCsignal() ); - - fPhiOff->Fill(esdtrackOFF->Phi()*TMath::RadToDeg()); - fThetaOff->Fill(esdtrackOFF->Theta()*TMath::RadToDeg()); - fMomentumOff->Fill( TMath::Abs(esdtrackOFF->Pt()) ); - - if(esdtrackOFF->GetStatus()&AliESDtrack::kTPCin) - fMomentumOffTpc->Fill(esdtrackOFF->Pt()); - if(esdtrackOFF->GetStatus()&AliESDtrack::kTPCin && esdtrackOFF->GetStatus()&AliESDtrack::kITSin) - fMomentumOffTpcIts->Fill(esdtrackOFF->Pt()); - - if(TMath::Abs(esdtrackOFF->Pt()) < Momcut) continue; - fEtaMomentumcutOff->Fill(esdtrackOFF->Eta()); - if(esdtrackOFF->GetTPCNcls()>0) - fNclusterOffwCut->Fill(esdtrackOFF->GetTPCNcls()); - - - if(esdHLT->IsHLTTriggerFired()){ - - } // end if for triggered offl events - - } // end of loop over offl tracks + fDCArOff->Fill(dca[0]); + fDCAzOff->Fill(dca[1]); + fChargeOff->Fill(esdtrackOFF->Charge()); + + if((esdtrackOFF->GetStatus()&AliESDtrack::kTPCin) || (esdtrackOFF->GetStatus()&AliESDtrack::kTPCin && esdtrackOFF->GetStatus()&AliESDtrack::kTPCout)) + fNclusterOff->Fill(esdtrackOFF->GetTPCNcls()); + + if(esdtrackOFF->GetTPCNcls()>0) fNclusVSphiOff->Fill(esdtrackOFF->Phi()*TMath::RadToDeg(), esdtrackOFF->GetTPCNcls()); + if(esdtrackOFF->GetTPCNcls()>0) fNclusVSthetaOff->Fill(esdtrackOFF->Theta()*TMath::RadToDeg(), esdtrackOFF->GetTPCNcls()); + + if(esdtrackOFF->GetStatus()&AliESDtrack::kTPCin) fMomentumOffTpc->Fill(esdtrackOFF->Pt()); + if(esdtrackOFF->GetStatus()&AliESDtrack::kTPCin && esdtrackOFF->GetStatus()&AliESDtrack::kITSin) fMomentumOffTpcIts->Fill(esdtrackOFF->Pt()); + + fEtaOff->Fill(esdtrackOFF->Eta()); + fdEdxOff->Fill( esdtrackOFF->GetTPCsignal() ); + fdEdxVSPOff->Fill( TMath::Abs(esdtrackOFF->Pt()), esdtrackOFF->GetTPCsignal() ); + + fPhiOff->Fill(esdtrackOFF->Phi()*TMath::RadToDeg()); + fThetaOff->Fill(esdtrackOFF->Theta()*TMath::RadToDeg()); + fMomentumOff->Fill( TMath::Abs(esdtrackOFF->Pt()) ); + + if(esdtrackOFF->GetStatus()&AliESDtrack::kTPCin) + fMomentumOffTpc->Fill(esdtrackOFF->Pt()); + if(esdtrackOFF->GetStatus()&AliESDtrack::kTPCin && esdtrackOFF->GetStatus()&AliESDtrack::kITSin) + fMomentumOffTpcIts->Fill(esdtrackOFF->Pt()); + + if(TMath::Abs(esdtrackOFF->Pt()) < 0.3) continue; + fEtaMomentumcutOff->Fill(esdtrackOFF->Eta()); + if(esdtrackOFF->GetTPCNcls()>0) fNclusterOffwCut->Fill(esdtrackOFF->GetTPCNcls()); + +// if(esdHLT->IsHLTTriggerFired()){ +// +// } // end if for triggered offl events + + } // end of loop over offline tracks - } - if(nr_tracksOff>0) - fMultOff->Fill(nr_tracksOff); - - // if(esdHLT->IsHLTTriggerFired()){ - // - // for(Int_t i=0; iGetNumberOfTracks(); i++){ - // - // AliESDtrack *esdTrk = esdOFF->GetTrack(i); - // Double_t dz[2] = {-999., -999.}; - // Double_t covar[3] = {0}; - // esdTrk->PropagateToDCA(vtx, bfield, 250., dz, covar); - // fHistOfflDZTrig->Fill(TMath::Abs(dz[0]), TMath::Abs(dz[1])); - // - // fHistOfflDZ->Fill(TMath::Abs(dz[0]), TMath::Abs(dz[1])); - // - // /* - // Double_t pnt[3] = {0., 0., 0.}; - // Double_t norm[3] = {0., 0., 1.}; - // if(esdTrk->Intersect(pnt, norm, bfield)){ - // if(TMath::Sqrt(pnt[0]*pnt[0]+pnt[1]*pnt[1]) < 250) { - // fNtracksThruZ0++; - // fNtracksThruZ0Trig++; - // fHistTrigger->Fill(6., 1); - // fHistTrigger->Fill(7., 1); - // } - // } - // */ - // - // fHistOfflTrkDCATrig->Fill(TMath::Abs(esdTrk->GetD(0., 0., bfield))); - // fDCAOff->Fill(TMath::Abs(esdTrk->GetD(0., 0., bfield))); - // - // if(esdTrk->GetTPCNcls()>0){ - // fHistOfflTrkNclsTrig->Fill(esdTrk->GetTPCNcls()); - // fHistOfflTrkNcls->Fill(esdTrk->GetTPCNcls()); - // } - // - // fHistOfflTrkPTrig->Fill(TMath::Abs(esdTrk->P())); - // fHistOfflTrkP->Fill(TMath::Abs(esdTrk->P())); - // fHistOffldEdx->Fill( esdTrk->GetTPCsignal()); - // fHistOffldEdxVsP->Fill(TMath::Abs(esdTrk->P()), esdTrk->GetTPCsignal()); - // } + if(nr_tracksOff>0) fMultOff->Fill(nr_tracksOff); delete primVertexOFF; delete primVertexHLT; @@ -765,131 +687,6 @@ void AliAnalysisTaskHLT::UserExec(Option_t *){ void AliAnalysisTaskHLT::Terminate(Option_t *){ // see header file of AliAnalysisTask for documentation -// -// // Draw result to the screen -// // Called once at the end of the query -// -// Bool_t print_png=kFALSE; -// if(print_png){ -// -// //Drawing histograms -// Int_t maxbin =0; -// TCanvas *c1 = new TCanvas("c1","Info pr track, Offline vs Online",10,10,1210,810); -// -// c1->Divide(3,2); -// -// c1->cd(1); -// maxbin =fEtaOff->GetBinContent(fEtaOff->GetMaximumBin()); -// if(maxbin < fEtaHLT->GetBinContent(fEtaHLT->GetMaximumBin())) -// maxbin=fEtaHLT->GetBinContent(fEtaHLT->GetMaximumBin()); -// fEtaOff->SetMaximum(maxbin+20); -// fEtaOff->SetTitle("Pseudorapidity (without momentum cut)"); -// fEtaOff->SetLineColor(2); -// fEtaOff->DrawCopy(""); -// fEtaHLT->DrawCopy("sameS"); -// -// TLegend *legend = new TLegend(0.70,0.60,0.90,0.75); -// legend->AddEntry(fEtaOff, "Offline", "LP"); -// legend->AddEntry(fEtaHLT,"HLT","LP"); -// legend->SetFillColor(10); -// legend->SetBorderSize(0); -// legend->Draw(""); -// -// c1->cd(2); -// maxbin =fEtaMomentumcutOff->GetBinContent(fEtaMomentumcutOff->GetMaximumBin()); -// if(maxbin < fEtaMomentumcutHLT->GetBinContent(fEtaMomentumcutHLT->GetMaximumBin())) -// maxbin=fEtaMomentumcutHLT->GetBinContent(fEtaMomentumcutHLT->GetMaximumBin()); -// fEtaMomentumcutOff->SetMaximum(maxbin+20); -// fEtaMomentumcutOff->SetTitle("Pseudorapidity"); -// fEtaMomentumcutOff->SetLineColor(2); -// fEtaMomentumcutOff->DrawCopy(""); -// fEtaMomentumcutHLT->DrawCopy("sames"); -// -// c1->cd(3); -// maxbin =fNclusterOff->GetBinContent(fNclusterOff->GetMaximumBin()); -// if(maxbin < fNclusterHLT->GetBinContent(fNclusterHLT->GetMaximumBin())) -// maxbin=fNclusterHLT->GetBinContent(fNclusterHLT->GetMaximumBin()); -// fNclusterOff->SetMaximum(maxbin+20); -// fNclusterOff->SetLineColor(2); -// fNclusterOff->SetTitle("Nr clusters per track"); -// fNclusterOff->DrawCopy(""); -// fNclusterHLT->DrawCopy("sames"); -// -// c1->cd(4); -// maxbin =fPhiOff->GetBinContent(fPhiOff->GetMaximumBin()); -// if(maxbin < fPhiHLT->GetBinContent(fPhiHLT->GetMaximumBin())) -// maxbin=fPhiHLT->GetBinContent(fPhiHLT->GetMaximumBin()); -// fPhiOff->SetMinimum(0); -// fPhiOff->SetMaximum(maxbin+20); -// fPhiOff->SetLineColor(2); -// fPhiOff->SetTitle("Azimuthal angle distribution"); -// fPhiOff->DrawCopy(""); -// fPhiHLT->DrawCopy("sames"); -// -// c1->cd(5); -// maxbin =fThetaOff->GetBinContent(fThetaOff->GetMaximumBin()); -// if(maxbin < fThetaHLT->GetBinContent(fThetaHLT->GetMaximumBin())) -// maxbin=fThetaHLT->GetBinContent(fThetaHLT->GetMaximumBin()); -// fThetaOff->SetMaximum(maxbin+20); -// fThetaOff->SetLineColor(2); -// fThetaOff->SetTitle("Polar angle distribution"); -// fThetaOff->DrawCopy(""); -// fThetaHLT->DrawCopy("sames"); -// -// c1->cd(6); -// maxbin =fMomentumOff->GetBinContent(fMomentumOff->GetMaximumBin()); -// if(maxbin < fMomentumHLT->GetBinContent(fMomentumHLT->GetMaximumBin())) -// maxbin=fMomentumHLT->GetBinContent(fMomentumHLT->GetMaximumBin()); -// fMomentumOff->SetMaximum(maxbin+200); -// fMomentumOff->GetXaxis()->SetRangeUser(0,5); -// fMomentumOff->SetLineColor(2); -// fMomentumOff->SetTitle("Momentum"); -// fMomentumOff->DrawCopy(""); -// fMomentumHLT->DrawCopy("sames"); -// -// TCanvas *c2= new TCanvas("c2", "Info pr event, Offline vs Online", 10 , 10,1210, 810); -// TLegend *legend2 = new TLegend(0.70,0.60,0.90,0.75); -// c2->Divide(3,2); -// c2->cd(1); -// fXvertexOff->SetTitle("Primary Vertex Distribution in X"); -// fXvertexOff->SetLineColor(2); -// fXvertexOff->GetXaxis()->SetRangeUser(-0.5,0.5); -// legend2->AddEntry(fXvertexOff,"Offline","LP"); -// fXvertexOff->DrawCopy(""); -// fXvertexHLT->DrawCopy("sames"); -// legend2->AddEntry(fXvertexHLT,"HLT","LP"); -// legend2->SetFillColor(10); -// legend2->SetBorderSize(0); -// legend2->Draw(); -// c2->cd(2); -// fYvertexOff->SetTitle("Primary Vertex Distribution in Y"); -// fYvertexOff->SetLineColor(2); -// fYvertexOff->GetXaxis()->SetRangeUser(-0.5,0.5); -// fYvertexOff->DrawCopy(""); -// fYvertexHLT->DrawCopy("sames"); -// c2->cd(3); -// fZvertexOff->SetTitle("Primary Vertex Distribution in Z"); -// fZvertexOff->SetLineColor(2); -// fZvertexOff->DrawCopy(""); -// fZvertexHLT->DrawCopy("sames"); -// -// c2->cd(4); -// fMultHLT->SetTitle("Track Multiplicity, NumberTracks>0"); -// fMultHLT->DrawCopy(""); -// fMultOff->SetLineColor(2); -// fMultOff->DrawCopy("sames"); -// -// string filename="Info_pr_track"; -// char plotname[100]; -// sprintf(plotname,"%s.png",filename.c_str()); -// // c1->Print("Info_pr_track.png","png"); -// c1->Print(plotname,"png"); -// -// filename="Info_pr_Event"; -// sprintf(plotname,"%s.png",filename.c_str()); -// c2->Print(plotname,"png"); -// } - } void AliAnalysisTaskHLT::SetupESDtrackCuts() { diff --git a/HLT/QA/tasks/AliAnalysisTaskHLT.h b/HLT/QA/tasks/AliAnalysisTaskHLT.h index eaf797ebd66..e7dfbba8f40 100644 --- a/HLT/QA/tasks/AliAnalysisTaskHLT.h +++ b/HLT/QA/tasks/AliAnalysisTaskHLT.h @@ -51,7 +51,11 @@ class AliAnalysisTaskHLT : public AliAnalysisTaskSE { virtual void Terminate(Option_t *); virtual void NotifyRun(); - private: + //Use only triggered events + void SetUseHLTTriggerDecision(Bool_t useHLT = kFALSE) {fUseHLTTrigger = useHLT;} + + +private: /** copy constructor */ AliAnalysisTaskHLT(const AliAnalysisTaskHLT&); @@ -77,8 +81,7 @@ class AliAnalysisTaskHLT : public AliAnalysisTaskSE { */ - static const Int_t fNcontrArray[]; //! Array to hold the different number of contributors - static const Int_t fNcontr; //! Array size + Bool_t fUseHLTTrigger; // use HLT Trigger Decision //---------------------------------------------------------------------------------- @@ -114,7 +117,6 @@ class AliAnalysisTaskHLT : public AliAnalysisTaskSE { TH2F *fNclusVSphiOff; //! clusters per track vs. azimuthal angle TH2F *fNclusVSthetaOff; //! clusters per track vs. polar angle TH1F *fStatusOff; //! Status counters - TH1F *fStatusOff_Ocl; //! Status counters for TPCNcl=0 TH1F *fEventSpecieOff; //! Event Specie Offline TH1F *fChargeHLT; //! Charge distribution @@ -141,55 +143,11 @@ class AliAnalysisTaskHLT : public AliAnalysisTaskSE { TH2F *fNclusVSphiHLT; //! clusters per track vs. azimuthal angle TH2F *fNclusVSthetaHLT; //! clusters per track vs. polar angle TH1F *fStatusHLT; //! Status counters - TH1F *fStatusHLT_Ocl; //! Status counters for TPCNcl=0 TH1F *fEventSpecieHLT; //! Event Specie HLT - TObjArray *fTrgClsArray; //! array of trigger classes - - - -// TH1F *fDCAOff_trig; //! track DCA to beam line for triggered events -// TH1F *fNclusterOff_trig; //! #clusters per track for triggered events -// -// TH1F *fDCAHLT_trig; -// TH1F *fNclusterHLT_trig; - - -// TH1F *fHistOfflTrkDCANoTrigNclsCut1; //! with cut on #clusters>=60 -// TH1F *fHistOfflTrkDCANoTrigNclsCut2; //! with cut on #clusters<60 -// -// TH1F *fHistOfflResPtInv; //! resolution on 1/pt for offline tracks -// TH1F *fHistOnlResPtInv; //! resoltion on 1/pt for online tracks -// -// TH1F *fHistOffldZ; //! resolution on z -// TH1F *fHistOnldZ; //! resolution on z -// -// TH1F *fHistOffldX; //! resolution on r -// TH1F *fHistOnldX; //! resolution on r -// -// TH1F *fHistOfflPhi; //! resolution on azimuthal angle -// TH1F *fHistOnlPhi; //! resolution on azimuthal angle -// -// TH1F *fHistOfflTheta; //! resolution on polar angle -// TH1F *fHistOnlTheta; //! resolution on polar angle -// -// TH2F *fHistOnlDZ; //! online trigger tracks distance to beam and Z to IP -// TH2F *fHistOfflDZ; //! offline tracks distance to beam and Z to IP -// TH2F *fHistOfflDZTrig; //! -// TH2F *fHistOfflDZNoTrig; //! - - -// static const Float_t fgkPhiMin[5]; -// static const Float_t fgkPhiMax[5]; -// static const Float_t fgkEtaMin; -// static const Float_t fgkEtaMax; -// static const Float_t fgkNormX[5]; -// static const Float_t fgkNormY[5]; -// static const Float_t fgkInitPosX[5]; -// static const Float_t fgkInitPosY[5]; - - ClassDef(AliAnalysisTaskHLT, 2); + + ClassDef(AliAnalysisTaskHLT, 0); }; #endif diff --git a/HLT/QA/tasks/macros/CreateAlienHandler.C b/HLT/QA/tasks/macros/CreateAlienHandler.C index 642d003ad7a..daeeeb87eb9 100755 --- a/HLT/QA/tasks/macros/CreateAlienHandler.C +++ b/HLT/QA/tasks/macros/CreateAlienHandler.C @@ -23,8 +23,14 @@ AliAnalysisGrid* CreateAlienHandler(TString runNumber, TString dataDir, TString // check the versions available on alien with the command 'packages' plugin->SetAPIVersion("V1.1x"); - plugin->SetROOTVersion("v5-27-06"); - plugin->SetAliROOTVersion("v4-20-12-AN"); + plugin->SetROOTVersion("v5-27-06b"); + plugin->SetAliROOTVersion("v4-21-04-AN"); + + cout << "===========================================================================================" << endl; + cout << " " << endl; + cout << " The user is responsible for updating the AliRoot and ROOT versions for running on the GRID."<< endl; + cout << " " << endl; + cout << "===========================================================================================" << endl; //Allow non-default outputs plugin->SetDefaultOutputs(kFALSE); @@ -120,8 +126,9 @@ AliAnalysisGrid* CreateAlienHandler(TString runNumber, TString dataDir, TString plugin->SetOutputFiles("HLT-OFFLINE-EMCAL-comparison.root"); } if(bGLOBAL){ + plugin->AddIncludePath("-I$ALICE_ROOT/HLT/BASE"); plugin->SetAnalysisSource("AliAnalysisTaskHLT.cxx"); - plugin->SetAdditionalLibs("AliAnalysisTaskHLT.h AliAnalysisTaskHLT.cxx"); + plugin->SetAdditionalLibs("libHLTbase.so AliAnalysisTaskHLT.h AliAnalysisTaskHLT.cxx"); plugin->SetOutputFiles("HLT-OFFLINE-GLOBAL-comparison.root"); } if(bD0) { diff --git a/HLT/QA/tasks/macros/compare-HLT-offline-grid.C b/HLT/QA/tasks/macros/compare-HLT-offline-grid.C index 9ac678799ca..e05c457e223 100644 --- a/HLT/QA/tasks/macros/compare-HLT-offline-grid.C +++ b/HLT/QA/tasks/macros/compare-HLT-offline-grid.C @@ -16,12 +16,21 @@ * - GRID output directory with respect to the working one, where the output files of the task are located (you have to create it yourself in advance) * - run in full mode, i.e. completely on the GRID with all the chunks of the run processed * - specify the analysis task you want to run + * - specify whether you are interested only in HLT triggered events * * @ingroup alihlt_qa - * @author zbyin@mail.ccnu.edu.cn, Kalliopi.Kanaki@ift.uib.no + * @author Hege.Erdal@student.uib.no, Kalliopi.Kanaki@ift.uib.no */ -void compare_HLT_offline_grid(TString runNumber, TString dataDir, TString gridWorkingDir, TString gridOutputDir, const char* mode = "full", const char* detectorTask="global"){ +void compare_HLT_offline_grid(TString runNumber, + TString dataDir, + TString gridWorkingDir, + TString gridOutputDir, + const char* mode = "full", + const char* detectorTask="global", + bool fUseHLTTrigger=kFALSE + ) +{ TStopwatch timer; timer.Start(); @@ -41,7 +50,7 @@ void compare_HLT_offline_grid(TString runNumber, TString dataDir, TString gridWo gSystem->Load("libANALYSISalice"); gSystem->Load("libHLTbase"); gROOT->ProcessLine(".include $ALICE_ROOT/include"); - gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C"); + //gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C"); Bool_t bAll=kFALSE, bTPC=kFALSE, bPHOS=kFALSE, bEMCAL=kFALSE, bITS=kFALSE, bGLOBAL=kFALSE, bD0=kFALSE; @@ -55,10 +64,6 @@ void compare_HLT_offline_grid(TString runNumber, TString dataDir, TString gridWo argument=((TObjString*)pTokens->At(i))->GetString(); if(argument.IsNull()) continue; - if(argument.CompareTo("tpc", TString::kIgnoreCase)==0){ - bTPC = kTRUE; - continue; - } if(argument.CompareTo("phos", TString::kIgnoreCase)==0){ bPHOS = kTRUE; continue; @@ -67,10 +72,6 @@ void compare_HLT_offline_grid(TString runNumber, TString dataDir, TString gridWo bEMCAL = kTRUE; continue; } - if(argument.CompareTo("its", TString::kIgnoreCase)==0){ - bITS = kTRUE; - continue; - } if(argument.CompareTo("global", TString::kIgnoreCase)==0){ bGLOBAL = kTRUE; continue; @@ -80,10 +81,8 @@ void compare_HLT_offline_grid(TString runNumber, TString dataDir, TString gridWo continue; } if(argument.CompareTo("all",TString::kIgnoreCase)==0){ - bTPC = kTRUE; bPHOS = kTRUE; - bEMCAL = kTRUE; - bITS = kTRUE; + bEMCAL = kTRUE; bGLOBAL = kTRUE; bAll = kTRUE; continue; @@ -102,8 +101,8 @@ void compare_HLT_offline_grid(TString runNumber, TString dataDir, TString gridWo mgr->SetNSysInfo(1000); //To use Physics Selection - AliPhysicsSelectionTask* physSelTask =AddTaskPhysicsSelection(kFALSE,kTRUE); - + //AliPhysicsSelectionTask *physSelTask = AddTaskPhysicsSelection(kFALSE,kTRUE); + // Create and configure the alien handler plugin gROOT->LoadMacro("CreateAlienHandler.C"); AliAnalysisGrid *alienHandler = CreateAlienHandler(runNumber, dataDir, gridWorkingDir, gridOutputDir, mode, detectorTask); @@ -113,7 +112,6 @@ void compare_HLT_offline_grid(TString runNumber, TString dataDir, TString gridWo mgr->SetGridHandler(alienHandler); //-------------- Compile the analysis tasks ---------- // - if(bTPC) gROOT->LoadMacro("AliAnalysisTaskHLTTPC.cxx+"); if(bPHOS && bEMCAL) { AliHLTSystem * pHLT = AliHLTPluginBase::GetInstance(); pHLT->LoadComponentLibraries("libHLTbase"); @@ -133,65 +131,53 @@ void compare_HLT_offline_grid(TString runNumber, TString dataDir, TString gridWo gROOT->LoadMacro("AliAnalysisTaskHLTPHOS.cxx+"); } else if(bEMCAL) { - AliHLTSystem * pHLT = AliHLTPluginBase::GetInstance(); + AliHLTSystem * pHLT = AliHLTPluginBase::GetInstance(); pHLT->LoadComponentLibraries("libHLTbase"); pHLT->LoadComponentLibraries("libAliHLTUtil"); pHLT->LoadComponentLibraries("libAliHLTGlobal"); gROOT->LoadMacro("AliAnalysisTaskHLTCalo.cxx+"); gROOT->LoadMacro("AliAnalysisTaskHLTEMCAL.cxx+"); } - if(bITS) gROOT->LoadMacro("AliAnalysisTaskHLTITS.cxx+"); if(bGLOBAL) gROOT->LoadMacro("AliAnalysisTaskHLT.cxx+"); if(bD0) gROOT->LoadMacro("AliAnalysisTaskD0Trigger.cxx+"); //-------------- define the tasks ------------// - if(bTPC){ - AliAnalysisTaskHLTTPC *taskTPC = new AliAnalysisTaskHLTTPC("offhlt_comparison_TPC"); - mgr->AddTask(taskTPC); - AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("tpc_histograms", TList::Class(), AliAnalysisManager::kOutputContainer, "HLT-OFFLINE-TPC-comparison.root"); - mgr->ConnectInput(taskTPC,0,mgr->GetCommonInputContainer()); - mgr->ConnectOutput(taskTPC,1,coutput1); - } - if(bPHOS){ AliAnalysisTaskHLTPHOS *taskPHOS = new AliAnalysisTaskHLTPHOS("offhlt_comparison_PHOS"); mgr->AddTask(taskPHOS); - AliAnalysisDataContainer *coutput2 = mgr->CreateContainer("phos_histograms",TList::Class(), AliAnalysisManager::kOutputContainer, "HLT-OFFLINE-PHOS-comparison.root"); + AliAnalysisDataContainer *coutputPHOS = mgr->CreateContainer("phos_histograms",TList::Class(), AliAnalysisManager::kOutputContainer, "HLT-OFFLINE-PHOS-comparison.root"); mgr->ConnectInput(taskPHOS,0,mgr->GetCommonInputContainer()); - mgr->ConnectOutput(taskPHOS,1,coutput2); + mgr->ConnectOutput(taskPHOS,1,coutputPHOS); } if(bEMCAL){ AliAnalysisTaskHLTEMCAL *taskEMCAL = new AliAnalysisTaskHLTEMCAL("offhlt_comparison_EMCAL"); mgr->AddTask(taskEMCAL); - AliAnalysisDataContainer *coutput5 = mgr->CreateContainer("emcal_histograms",TList::Class(), AliAnalysisManager::kOutputContainer, "HLT-OFFLINE-EMCAL-comparison.root"); + AliAnalysisDataContainer *coutputEMCAL = mgr->CreateContainer("emcal_histograms",TList::Class(), AliAnalysisManager::kOutputContainer, "HLT-OFFLINE-EMCAL-comparison.root"); mgr->ConnectInput(taskEMCAL,0,mgr->GetCommonInputContainer()); - mgr->ConnectOutput(taskEMCAL,1,coutput5); + mgr->ConnectOutput(taskEMCAL,1,coutputEMCAL); } - if(bITS){ - AliAnalysisTaskHLTITS *taskITS = new AliAnalysisTaskHLTITS("offhlt_comparison_ITS"); - mgr->AddTask(taskITS); - AliAnalysisDataContainer *coutput3 = mgr->CreateContainer("its_histograms",TList::Class(), AliAnalysisManager::kOutputContainer, "HLT-OFFLINE-ITS-comparison.root"); - mgr->ConnectInput(taskITS,0,mgr->GetCommonInputContainer()); - mgr->ConnectOutput(taskITS,1,coutput3); - } - if(bGLOBAL){ AliAnalysisTaskHLT *taskGLOBAL = new AliAnalysisTaskHLT("offhlt_comparison_GLOBAL"); - taskGLOBAL->SelectCollisionCandidates(); + taskGLOBAL->SetUseHLTTriggerDecision(fUseHLTTrigger); + if(fUseHLTTrigger==kTRUE) printf("\n\nOnly HLT triggered events will be used to fill the distributions for task %s.\n\n", taskGLOBAL->GetName()); + //taskGLOBAL->SelectCollisionCandidates(); mgr->AddTask(taskGLOBAL); - AliAnalysisDataContainer *coutput4 = mgr->CreateContainer("global_histograms",TList::Class(), AliAnalysisManager::kOutputContainer, "HLT-OFFLINE-GLOBAL-comparison.root"); + if(fUseHLTTrigger==kTRUE) + AliAnalysisDataContainer *coutputGLOBAL = mgr->CreateContainer("global_histograms",TList::Class(), AliAnalysisManager::kOutputContainer, "HLT-OFFLINE-GLOBAL-comparison.root"); + else + AliAnalysisDataContainer *coutputGLOBAL = mgr->CreateContainer("global_histograms",TList::Class(), AliAnalysisManager::kOutputContainer, "HLT-OFFLINE-GLOBAL-comparison_triggered.root"); mgr->ConnectInput(taskGLOBAL,0,mgr->GetCommonInputContainer()); - mgr->ConnectOutput(taskGLOBAL,1,coutput4); + mgr->ConnectOutput(taskGLOBAL,1,coutputGLOBAL); } if(bD0){ float cuts[7]={0.5,0.04,0.7,0.8,0.05,-0.00025,0.7}; AliAnalysisTaskD0Trigger *taskD0 = new AliAnalysisTaskD0Trigger("offhlt_comparison_D0_Trigger",cuts); mgr->AddTask(taskD0); - AliAnalysisDataContainer *coutput6 = mgr->CreateContainer("D0_histograms",TList::Class(), AliAnalysisManager::kOutputContainer, "HLT-OFFLINE-D0-comparison.root"); + AliAnalysisDataContainer *coutputD0 = mgr->CreateContainer("D0_histograms",TList::Class(), AliAnalysisManager::kOutputContainer, "HLT-OFFLINE-D0-comparison.root"); mgr->ConnectInput(taskD0,0,mgr->GetCommonInputContainer()); - mgr->ConnectOutput(taskD0,1,coutput6); + mgr->ConnectOutput(taskD0,1,coutputD0); } // Enable debug printouts mgr->SetDebugLevel(2); @@ -203,3 +189,11 @@ void compare_HLT_offline_grid(TString runNumber, TString dataDir, TString gridWo timer.Stop(); timer.Print(); } + +void compare_HLT_offline_grid(){ + cout << " " << endl; + cout << " Usage examples:" << endl; + cout << " compare-HLT-offline-grid.C'(runNumber, dataDir, gridWorkingDir, gridOutputDir, mode, taskOption, fUseHLTTrigger)' 2>&1 | tee log" << endl; + cout << " compare-HLT-offline-grid.C'(\"000115322\",\"/alice/data/2010/LHC10b\",\"ESDcomparison\",\"output\",\"full\",\"global\",kTRUE)' 2>&1 | tee log" << endl; + cout << " " << endl; +} diff --git a/HLT/QA/tasks/macros/compare-HLT-offline-local.C b/HLT/QA/tasks/macros/compare-HLT-offline-local.C index d43835f99bc..f222248ecb9 100644 --- a/HLT/QA/tasks/macros/compare-HLT-offline-local.C +++ b/HLT/QA/tasks/macros/compare-HLT-offline-local.C @@ -6,10 +6,12 @@ * The output is a root file containing the histograms defined in the * analysis task. There is one output file per detector. * + * Run without arguments to get a few examples how to use the macro. + * * Usage: *
- *   aliroot -b -q -l compare_HLT_offline_local.C'("/home/blabla/AliESDs.root","phos")' 2>&1 | tee task.log
- *   aliroot -b -q -l compare_HLT_offline_local.C'("/home/blabla/AliESDs.root","phos tpc global")' 2>&1 | tee task.log
+ *   aliroot -b -q -l compare_HLT_offline_local.C'("/home/blabla/AliESDs.root","global","./",kTRUE,10)' 2>&1 | tee task.log
+ *   aliroot -b -q -l compare_HLT_offline_local.C'("/home/blabla/AliESDs.root","phos global pwg1",kTRUE,10)' 2>&1 | tee task.log
  *   aliroot -q compare-HLT-offline-local.C'("alien:///alice/data/2010/LHC10b/000115322/ESDs/pass1/10000115322040.20/AliESDs.root","global")' 2>&1 | tee log
  * 
* @@ -19,10 +21,16 @@ * The .txt file takes the place of the first argument in that case. * * @ingroup alihlt_qa - * @author zbyin@mail.ccnu.edu.cn, Kalliopi.Kanaki@ift.uib.no, Hege.Erdal@student.uib.no + * @author Kalliopi.Kanaki@ift.uib.no, Hege.Erdal@student.uib.no */ -void compare_HLT_offline_local(TString file="files.txt", const char* detectorTask="global", Long64_t nEvents=1234567890){ +void compare_HLT_offline_local(TString file, + const char* detectorTask="global", + TString taskFolder="$ALICE_ROOT/HLT/QA/tasks/", + bool fUseHLTTrigger=kFALSE, + Long64_t nEvents=1234567890 + ) +{ TStopwatch timer; timer.Start(); @@ -52,7 +60,7 @@ void compare_HLT_offline_local(TString file="files.txt", const char* detectorTas gSystem->Load("libPWG1.so"); gROOT->ProcessLine(".include $ALICE_ROOT/include"); - gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C"); + //gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C"); Bool_t bPHOS=kFALSE, bGLOBAL=kFALSE, bEMCAL = kFALSE, bPWG1 = kFALSE, bD0=kFALSE; @@ -102,21 +110,36 @@ void compare_HLT_offline_local(TString file="files.txt", const char* detectorTas gSystem->Load("libHLTbase"); gSystem->Load("libAliHLTUtil"); gSystem->Load("libAliHLTGlobal"); - gROOT->LoadMacro("$ALICE_ROOT/HLT/QA/tasks/AliAnalysisTaskHLTCalo.cxx+"); - gROOT->LoadMacro("$ALICE_ROOT/HLT/QA/tasks/AliAnalysisTaskHLTPHOS.cxx+"); + TString strTask1("AliAnalysisTaskCalo.cxx+"); + TString strTask2("AliAnalysisTaskPHOS.cxx+"); + gROOT->LoadMacro(taskFolder+strTask1); + gROOT->LoadMacro(taskFolder+strTask2); + cout << "\n========= You are loading the following tasks --> "<< taskFolder+strTask1 << " and " << taskFolder+strTask2 << endl; } if(bEMCAL){ gSystem->Load("libHLTbase"); gSystem->Load("libAliHLTUtil"); gSystem->Load("libAliHLTGlobal"); - gROOT->LoadMacro("$ALICE_ROOT/HLT/QA/tasks/AliAnalysisTaskHLTCalo.cxx+"); - gROOT->LoadMacro("$ALICE_ROOT/HLT/QA/tasks/AliAnalysisTaskHLTEMCAL.cxx+"); + TString strTask1("AliAnalysisTaskCalo.cxx+"); + TString strTask2("AliAnalysisTaskEMCAL.cxx+"); + gROOT->LoadMacro(taskFolder+strTask1); + gROOT->LoadMacro(taskFolder+strTask2); + cout << "\n========= You are loading the following tasks --> "<< taskFolder+strTask1 << " and " << taskFolder+strTask2 << endl; } - if(bGLOBAL) gROOT->LoadMacro("$ALICE_ROOT/HLT/QA/tasks/AliAnalysisTaskHLT.cxx+"); - if(bPWG1) gROOT->LoadMacro("$ALICE_ROOT/HLT/QA/tasks/macros/AddTaskPerformance.C"); - if(bD0) gROOT->LoadMacro("$ALICE_ROOT/HLT/QA/tasks/AliAnalysisTaskD0Trigger.cxx+"); + if(bGLOBAL){ + TString strTask("AliAnalysisTaskHLT.cxx+"); + gROOT->LoadMacro(taskFolder+strTask); + cout << "\n========= You are loading the following task --> "<< taskFolder+strTask << endl; + } + if(bD0){ + TString strTask("AliAnalysisTaskD0Trigger.cxx+"); + gROOT->LoadMacro(taskFolder+strTask); + cout << "\n========= You are loading the following task --> "<< taskFolder+strTask << endl; + } + + if(bPWG1) gROOT->LoadMacro("$ALICE_ROOT/HLT/QA/tasks/macros/AddTaskPerformance.C"); if(file.Contains("alien")) TGrid::Connect("alien://"); @@ -137,7 +160,8 @@ void compare_HLT_offline_local(TString file="files.txt", const char* detectorTas return; } - + //To only select HLT triggered events + //Bool_t fUseHLTTrigger=kFALSE; //-------- Make the analysis manager ---------------// @@ -157,26 +181,31 @@ void compare_HLT_offline_local(TString file="files.txt", const char* detectorTas if(bPHOS){ AliAnalysisTaskHLTPHOS *taskPHOS = new AliAnalysisTaskHLTPHOS("offhlt_comparison_PHOS"); mgr->AddTask(taskPHOS); - AliAnalysisDataContainer *coutput2 = mgr->CreateContainer("phos_histograms",TList::Class(), AliAnalysisManager::kOutputContainer, "HLT-OFFLINE-PHOS-comparison.root"); + AliAnalysisDataContainer *coutputPHOS = mgr->CreateContainer("phos_histograms",TList::Class(), AliAnalysisManager::kOutputContainer, "HLT-OFFLINE-PHOS-comparison.root"); mgr->ConnectInput(taskPHOS,0,mgr->GetCommonInputContainer()); - mgr->ConnectOutput(taskPHOS,1,coutput2); + mgr->ConnectOutput(taskPHOS,1,coutputPHOS); } if(bEMCAL){ AliAnalysisTaskHLTEMCAL *taskEMCAL = new AliAnalysisTaskHLTEMCAL("offhlt_comparison_EMCAL"); mgr->AddTask(taskEMCAL); - AliAnalysisDataContainer *coutput5 = mgr->CreateContainer("emcal_histograms",TList::Class(), AliAnalysisManager::kOutputContainer, "HLT-OFFLINE-EMCAL-comparison.root"); + AliAnalysisDataContainer *coutputEMCAL = mgr->CreateContainer("emcal_histograms",TList::Class(), AliAnalysisManager::kOutputContainer, "HLT-OFFLINE-EMCAL-comparison.root"); mgr->ConnectInput(taskEMCAL,0,mgr->GetCommonInputContainer()); - mgr->ConnectOutput(taskEMCAL,1,coutput5); + mgr->ConnectOutput(taskEMCAL,1,coutputEMCAL); } if(bGLOBAL){ AliAnalysisTaskHLT *taskGLOBAL = new AliAnalysisTaskHLT("offhlt_comparison_GLOBAL"); + taskGLOBAL->SetUseHLTTriggerDecision(fUseHLTTrigger); + if(fUseHLTTrigger==kTRUE) printf("\n\nOnly HLT triggered events will be used to fill the distributions for task %s.\n\n", taskGLOBAL->GetName()); //taskGLOBAL->SelectCollisionCandidates(); mgr->AddTask(taskGLOBAL); - AliAnalysisDataContainer *coutput4 = mgr->CreateContainer("global_histograms",TList::Class(), AliAnalysisManager::kOutputContainer, "HLT-OFFLINE-GLOBAL-comparison.root"); + if(fUseHLTTrigger==kFALSE) + AliAnalysisDataContainer *coutputGLOBAL = mgr->CreateContainer("global_histograms",TList::Class(), AliAnalysisManager::kOutputContainer, "HLT-OFFLINE-GLOBAL-comparison.root"); + else + AliAnalysisDataContainer *coutputGLOBAL = mgr->CreateContainer("global_histograms",TList::Class(), AliAnalysisManager::kOutputContainer,"HLT-OFFLINE-GLOBAL-comparison_triggered.root"); mgr->ConnectInput(taskGLOBAL,0,mgr->GetCommonInputContainer()); - mgr->ConnectOutput(taskGLOBAL,1,coutput4); + mgr->ConnectOutput(taskGLOBAL,1,coutputGLOBAL); } if(bPWG1){ @@ -193,9 +222,9 @@ void compare_HLT_offline_local(TString file="files.txt", const char* detectorTas float cuts[7]={0.5,0.04,0.7,0.8,0.05,-0.00025,0.7}; AliAnalysisTaskD0Trigger *taskD0 = new AliAnalysisTaskD0Trigger("offhlt_comparison_D0",cuts); mgr->AddTask(taskD0); - AliAnalysisDataContainer *coutput6 = mgr->CreateContainer("D0_histograms",TList::Class(), AliAnalysisManager::kOutputContainer, "HLT-OFFLINE-D0-comparison.root"); + AliAnalysisDataContainer *coutputD0 = mgr->CreateContainer("D0_histograms",TList::Class(), AliAnalysisManager::kOutputContainer, "HLT-OFFLINE-D0-comparison.root"); mgr->ConnectInput(taskD0,0,mgr->GetCommonInputContainer()); - mgr->ConnectOutput(taskD0,1,coutput6); + mgr->ConnectOutput(taskD0,1,coutputD0); } if (!mgr->InitAnalysis()) return; @@ -205,3 +234,15 @@ void compare_HLT_offline_local(TString file="files.txt", const char* detectorTas timer.Stop(); timer.Print(); } + +void compare_HLT_offline_local(){ + cout << " " << endl; + cout << " Usage examples:" << endl; + cout << " compare-HLT-offline-local.C'(file, taskOption, taskFolder, fUseHLTTrigger, nEvents)' 2>&1 | tee log" << endl; + cout << " compare-HLT-offline-local.C'(\"AliESDs.root\",\"global\")' 2>&1 | tee log" << endl; + cout << " compare-HLT-offline-local.C'(\"AliESDs.root\",\"global\",\"./\",kFALSE,nEvents)' 2>&1 | tee log" << endl; + cout << " compare-HLT-offline-local.C'(\"AliESDs.root\",\"global phos pwg1 D0\", \"./\", kTRUE, nEvents)' 2>&1 | tee log" << endl; + cout << " compare-HLT-offline-local.C'(\"files.txt\",\"all\")' 2>&1 | tee log" << endl; + cout << " compare-HLT-offline-local.C'(\"alien:///alice/data/2010/LHC10b/000115322/ESDs/pass1/10000115322040.20/AliESDs.root\",\"global\")' 2>&1 | tee log" << endl; + cout << " " << endl; +} -- 2.39.3