//* provided "as is" without express or implied warranty. *
//**************************************************************************
-
/** @file AliAnalysisTaskHLT.cxx
@author Kalliopi Kanaki, Hege Erdal
@date
class AliAnalysisTask;
class AliAnalysisManager;
+#include "AliAnalysisTaskHLT.h"
+#include "AliHLTGlobalTriggerDecision.h"
#include "TH1F.h"
#include "TH2F.h"
-#include "TCanvas.h"
-#include "TLegend.h"
-#include "TStyle.h"
#include "TString.h"
#include "AliESDEvent.h"
#include "AliESDtrackCuts.h"
#include "AliESDInputHandler.h"
+#include "AliTracker.h"
+#include "AliCentrality.h"
-#include "AliAnalysisTaskHLT.h"
+#include "TText.h"
+#include "TTimeStamp.h"
ClassImp(AliAnalysisTaskHLT)
-//======================================================================================================
+//===============================================================//
AliAnalysisTaskHLT::AliAnalysisTaskHLT()
:
AliAnalysisTaskSE()
- ,fESDOfftrackCuts(0)
- ,fESDHLTtrackCuts(0)
+ ,fUseHLTTrigger(kFALSE)
+ //,fESDOfftrackCuts(0)
+ //,fESDHLTtrackCuts(0)
,fOutputList(0)
,fHistTrigger(0)
- ,fHistHLTTrigger(0)
,fChargeOff(0)
- ,fMomentumOff(0)
- ,fDCAOff(0)
+ ,fMomentumOff(0)
+ ,fDCArOff(0)
+ ,fDCAzOff(0)
,fNclusterOff(0)
+ ,fNITSclusterOff(0)
,fNclusterOffwCut(0)
- ,fdEdxOff(0)
- ,fdEdxVSPOff(0)
,fPhiOff(0)
- ,fThetaOff(0)
,fMultOff(0)
- ,fVertexVSNtracksOff(0)
,fXYvertexOff(0)
,fXvertexOff(0)
,fYvertexOff(0)
,fZvertexOff(0)
+ ,fSPDXvertexOff(0)
+ ,fSPDYvertexOff(0)
+ ,fSPDZvertexOff(0)
,fEtaOff(0)
- ,fEtaDCAcutOff(0)
- ,fEtaOffTpc(0)
- ,fEtaOffTpcIts(0)
+ ,fEtaMomentumcutOff(0)
,fNclusVSphiOff(0)
,fNclusVSthetaOff(0)
- ,fStatusOff(0)
- ,fStatusOff_Ocl(0)
,fEventSpecieOff(0)
+ ,fV0cent(0)
,fChargeHLT(0)
,fMomentumHLT(0)
- ,fDCAHLT(0)
+ ,fDCArHLT(0)
+ ,fDCAzHLT(0)
,fNclusterHLT(0)
+ ,fNITSclusterHLT(0)
,fNclusterHLTwCut(0)
- ,fdEdxHLT(0)
- ,fdEdxVSPHLT(0)
,fPhiHLT(0)
- ,fThetaHLT(0)
,fMultHLT(0)
- ,fVertexVSNtracksHLT(0)
,fXYvertexHLT(0)
,fXvertexHLT(0)
,fYvertexHLT(0)
,fZvertexHLT(0)
+ ,fSPDXvertexHLT(0)
+ ,fSPDYvertexHLT(0)
+ ,fSPDZvertexHLT(0)
,fEtaHLT(0)
- ,fEtaDCAcutHLT(0)
- ,fEtaHLTTpc(0)
- ,fEtaHLTTpcIts(0)
+ ,fEtaMomentumcutHLT(0)
,fNclusVSphiHLT(0)
,fNclusVSthetaHLT(0)
- ,fStatusHLT(0)
- ,fStatusHLT_Ocl(0)
,fEventSpecieHLT(0)
- // ,fDCAOff_trig(0)
- // ,fNclusterOff_trig(0)
- //
- // ,fDCAHLT_trig(0)
- // ,fNclusterHLT_trig(0)
-
+ ,fBeamType()
+ ,fTextBox(0)
+ ,fSwitch(kTRUE)
+ ,fCentrality()
{
// Constructor
// Define input and output slots here
// Input slot #0 works with a TChain
// DefineInput(0, TChain::Class());
// Output slot #0 writes into a TH1 container
-
- //DefineOutput(1, TList::Class());
}
AliAnalysisTaskHLT::AliAnalysisTaskHLT(const char *name)
:
- AliAnalysisTaskSE(name)
+ AliAnalysisTaskSE(name)
+ ,fUseHLTTrigger(kFALSE)
+ //,fESDOfftrackCuts(0)
+ //,fESDHLTtrackCuts(0)
,fOutputList(0)
,fHistTrigger(0)
- ,fHistHLTTrigger(0)
,fChargeOff(0)
- ,fMomentumOff(0)
- ,fDCAOff(0)
+ ,fMomentumOff(0)
+ ,fDCArOff(0)
+ ,fDCAzOff(0)
,fNclusterOff(0)
+ ,fNITSclusterOff(0)
,fNclusterOffwCut(0)
- ,fdEdxOff(0)
- ,fdEdxVSPOff(0)
,fPhiOff(0)
- ,fThetaOff(0)
,fMultOff(0)
- ,fVertexVSNtracksOff(0)
,fXYvertexOff(0)
,fXvertexOff(0)
,fYvertexOff(0)
,fZvertexOff(0)
,fEtaOff(0)
- ,fEtaDCAcutOff(0)
- ,fEtaOffTpc(0)
- ,fEtaOffTpcIts(0)
+ ,fEtaMomentumcutOff(0)
,fNclusVSphiOff(0)
,fNclusVSthetaOff(0)
- ,fStatusOff(0)
- ,fStatusOff_Ocl(0)
,fEventSpecieOff(0)
-
+ ,fV0cent(0)
+ ,fNcontOff(0)
+
,fChargeHLT(0)
,fMomentumHLT(0)
- ,fDCAHLT(0)
,fNclusterHLT(0)
+ ,fNITSclusterHLT(0)
,fNclusterHLTwCut(0)
- ,fdEdxHLT(0)
- ,fdEdxVSPHLT(0)
,fPhiHLT(0)
- ,fThetaHLT(0)
,fMultHLT(0)
- ,fVertexVSNtracksHLT(0)
,fXYvertexHLT(0)
,fXvertexHLT(0)
,fYvertexHLT(0)
,fZvertexHLT(0)
,fEtaHLT(0)
- ,fEtaDCAcutHLT(0)
- ,fEtaHLTTpc(0)
- ,fEtaHLTTpcIts(0)
+ ,fEtaMomentumcutHLT(0)
,fNclusVSphiHLT(0)
,fNclusVSthetaHLT(0)
- ,fStatusHLT(0)
- ,fStatusHLT_Ocl(0)
,fEventSpecieHLT(0)
- // ,fDCAOff_trig(0)
- // ,fNclusterOff_trig(0)
- //
- // ,fDCAHLT_trig(0)
- // ,fNclusterHLT_trig(0)
-
-{
+ ,fNcontHLT(0)
+
+ ,fBeamType()
+ ,fTextBox(0)
+ ,fSwitch(kTRUE)
+ ,fCentrality()
+{
// Constructor
-
// Define input and output slots here
// Input slot #0 works with a TChain
// DefineInput(0, TChain::Class());
// Output slot #0 writes into a TH1 container
-
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};
-
-//----------------------------------------------------------------------------------------------------
+//------------------------------------------------------------------------//
void AliAnalysisTaskHLT::UserCreateOutputObjects(){
// Create histograms
OpenFile(1);
-
fOutputList = new TList();
+ fOutputList->SetOwner();
fOutputList->SetName(GetName());
/*
(fHistTrigger->GetXaxis())->SetBinLabel(8,"onlTrkThruCE");
*/
- fHistTrigger = new TH1F("fHistTrigger", "CTP trigger counter", 64, 0, 64);
+ 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", 64, 0, 64);
- fHistHLTTrigger->GetXaxis()->SetTitle("");
- fHistHLTTrigger->GetYaxis()->SetTitle("#Events");
-
- fChargeOff = new TH1F("fCharge_off", "Charge distribution (Offline)", 12, -3, 3);
- fChargeHLT = new TH1F("fCharge_hlt", "Charge distribution (HLT)", 12, -3, 3);
-
-
- fMomentumOff = new TH1F("fMomentum_off", "momentum (offline)",1000, 0., 100);
- fMomentumHLT = new TH1F("fMomentum_hlt", "momentum (HLT)", 1000, 0., 100);
+ //=========== event properties =================//
+
+ if(fBeamType.Contains("Pb")){
+ fMultOff = new TH1F("fMult_off", "TPC track multiplicity (OFF)",200,0,2000);
+ fMultHLT = new TH1F("fMult_hlt", "TPC track multiplicity (HLT)",200,0,2000);
+ fNcontOff = new TH1F("fNcont_off","# of contributors (OFF)",200,0,2000);
+ fNcontHLT = new TH1F("fNcont_hlt","# of contributors (HLT)",200,0,2000);
+ fV0cent = new TH1F("fV0cent", "V0 centrality", 100,0, 100);
+ }
+ else {
+ fMultOff = new TH1F("fMult_off","TPC track multiplicity (OFF)",200,0,200);
+ fMultHLT = new TH1F("fMult_hlt","TPC track multiplicity (HLT)",200,0,200);
+ fNcontOff = new TH1F("fNcont_off","# of contributors (OFF)",200,0,200);
+ fNcontHLT = new TH1F("fNcont_hlt","# of contributors (HLT)",200,0,200);
+ }
- fDCAOff = new TH1F("fDCA_off","DCA to beam line (offline)",200, -100, 100);
- fDCAHLT = new TH1F("fDCA_hlt","DCA to beam line (HLT)", 200, -100, 100);
+ fXYvertexOff = new TH2F("fXYvertex_off","XY primary vertex (OFF)",100,-1,1,100,-1,1);
+ fXYvertexHLT = new TH2F("fXYvertex_hlt","XY primary vertex (HLT)",100,-1,1,100,-1,1);
+
+ fXvertexOff = new TH1F("fXvertex_off","X primary vertex (OFF)",200,-0.5,0.5);
+ fXvertexHLT = new TH1F("fXvertex_hlt","X primary vertex (HLT)",200,-0.5,0.5);
- fNclusterOff = new TH1F("fNcluster_off","clusters per track (offline)", 200, 0, 200);
- fNclusterHLT = new TH1F("fNcluster_hlt","clusters per track (HLT)", 200, 0, 200);
+ fYvertexOff = new TH1F("fYvertex_off","Y primary vertex (OFF)",200,-0.5,0.5);
+ fYvertexHLT = new TH1F("fYvertex_hlt","Y primary vertex (HLT)",200,-0.5,0.5);
- fNclusterOffwCut = new TH1F("fNcluster_wcut_off","clusters per track with cuts (offline)", 200, 0, 200);
- fNclusterHLTwCut = new TH1F("fNcluster_wcut_hlt","clusters per track with cuts (HLT)", 200, 0, 200);
+ fZvertexOff = new TH1F("fZvertex_off","Z primary vertex (OFF)",100,-20,20);
+ fZvertexHLT = new TH1F("fZvertex_hlt","Z primary vertex (HLT)",100,-20,20);
+
+ fSPDXvertexOff = new TH1F("fSPDXvertex_off","X SPD primary vertex (OFF)",200,-0.5,0.5);
+ fSPDXvertexHLT = new TH1F("fSPDXvertex_hlt","X SPD primary vertex (HLT)",200,-0.5,0.5);
- fdEdxOff = new TH1F("fdEdx_off","energy loss (offline)", 500, 0, 500);
- fdEdxHLT = new TH1F("fdEdx_hlt","energy loss (HLT) - not filled yet",500, 0, 500);
+ fSPDYvertexOff = new TH1F("fSPDYvertex_off","Y SPD primary vertex (OFF)",200,-0.5,0.5);
+ fSPDYvertexHLT = new TH1F("fSPDYvertex_hlt","Y SPD primary vertex (HLT)",200,-0.5,0.5);
- fdEdxVSPOff = new TH2F("fdEdx_vs_P_off","dE/dx vs. momentum (offline)", 300, 0., 3., 500, 0., 500.);
- fdEdxVSPHLT = new TH2F("fdEdx_vs_P_hlt","dE/dx vs. momentum (HLT) - not filled yet",300, 0., 3., 500, 0., 500.);
+ fSPDZvertexOff = new TH1F("fSPDZvertex_off","Z SPD primary vertex (OFF)",100,-20,20);
+ fSPDZvertexHLT = new TH1F("fSPDZvertex_hlt","Z SPD primary vertex (HLT)",100,-20,20);
+
+ fEventSpecieOff = new TH1F("fEventSpecie_off","Eventspecie for OFF",18, 0, 18);
+ fEventSpecieHLT = new TH1F("fEventSpecie_hlt","Eventspecie for HLT",18, 0, 18);
- fPhiOff = new TH1F("fPhi_off","azimuthal angle distribution (offline)",90,0,360);
- fPhiHLT = new TH1F("fPhi_hlt","azimuthal angle distribution (HLT)", 90,0,360);
-
- fThetaOff = new TH1F("fTheta_off","polar angle distribution (offline)",180,0,180);
- fThetaHLT = new TH1F("fTheta_hlt","polar angle distribution (HLT)", 180,0,180);
-
- fMultOff = new TH1F("fMult_off","track multiplicity (offline)",100,0,100);
- fMultHLT = new TH1F("fMult_hlt","track multiplicity (HLT)", 100,0,100);
+ //============== track properties =================//
- fVertexVSNtracksOff = new TH2F("fVertexNtracs_off", "Vertex resolution vs nr contributing tracks (Offline)",20, 0, 20, 40, -2, 2);
- fVertexVSNtracksHLT = new TH2F("fVertexNtracs_hlt", "Vertex resolution vs nr contributing tracks (HLT)",20, 0, 20, 40, -2, 2);
-
- fXYvertexOff = new TH2F("fXYvertex_off","XY primary vertex (offline)",100,-5,5,100,-5,5);
- fXYvertexHLT = new TH2F("fXYvertex_hlt","XY primary vertex (HLT)", 100,-5,5,100,-5,5);
+ fChargeOff = new TH1F("fCharge_off", "Charge distribution (OFF)", 3, -1.5, 1.5);
+ fChargeHLT = new TH1F("fCharge_hlt", "Charge distribution (HLT)", 3, -1.5, 1.5);
- fXvertexOff = new TH1F("fXvertex_off","X primary vertex (offline)",1000,-1,1);
- fXvertexHLT = new TH1F("fXvertex_hlt","X primary vertex (HLT)", 1000,-1,1);
+ fMomentumOff = new TH1F("fMomentum_off", "p_{T} (OFF)", 100, 0, 10);
+ fMomentumHLT = new TH1F("fMomentum_hlt", "p_{T} (HLT)", 100, 0, 10);
- fYvertexOff = new TH1F("fYvertex_off","Y primary vertex (offline)",1000,-1,1);
- fYvertexHLT = new TH1F("fYvertex_hlt","Y primary vertex (HLT)", 1000,-1,1);
+ fDCArOff = new TH1F("fDCAr_off", "DCAr to beam line (OFF)", 200, -15, 15);
+ fDCArHLT = new TH1F("fDCAr_hlt", "DCAr to beam line (HLT)", 200, -15, 15);
+
+ fDCAzOff = new TH1F("fDCAz_off", "DCAz to beam line (OFF)", 200, -15, 15);
+ fDCAzHLT = new TH1F("fDCAz_hlt", "DCAz to beam line (HLT)", 200, -15, 15);
- fZvertexOff = new TH1F("fZvertex_off","Z primary vertex (offline)",250,-30,30);
- fZvertexHLT = new TH1F("fZvertex_hlt","Z primary vertex (HLT)", 250,-30,30);
-
- fEtaOff = new TH1F("fEta_off","pseudorapidity (offline)",100,-3,3);
- fEtaHLT = new TH1F("fEta_hlt","pseudorapidity (HLT)", 100,-3,3);
+ fNclusterOff = new TH1F("fNcluster_off","TPC clusters/track (OFF)", 200, 0, 200);
+ fNclusterHLT = new TH1F("fNcluster_hlt","TPC clusters/track (HLT)", 200, 0, 200);
+
+ fNITSclusterOff = new TH1F("fNITScluster_off","ITS clusters/track (OFF)", 10, 0, 10);
+ fNITSclusterHLT = new TH1F("fNITScluster_hlt","ITS clusters/track (HLT)", 10, 0, 10);
- fEtaDCAcutOff = new TH1F("fEtaDCAcut_off","pseudorapidity DCAcut (offline)",100,-3,3);
- fEtaDCAcutHLT = new TH1F("fEtaDCAcut_hlt","pseudorapidity DCAcut (HLT)", 100,-3,3);
+ fPhiOff = new TH1F("fPhi_off","azimuthal angle distribution (OFF)",90,0,360);
+ fPhiHLT = new TH1F("fPhi_hlt","azimuthal angle distribution (HLT)", 90,0,360);
+
+ fEtaOff = new TH1F("fEta_off","pseudorapidity (OFF)",100,-2,2);
+ fEtaHLT = new TH1F("fEta_hlt","pseudorapidity (HLT)",100,-2,2);
+
+
- fEtaOffTpc = new TH1F("fEtaTpc_off","pseudorapidity for kTPCin (offline)",100,-3,3);
- fEtaHLTTpc = new TH1F("fEtaTpc_hlt","pseudorapidity for kTPCin (HLT)", 100,-3,3);
+ fNclusterOffwCut = new TH1F("fNcluster_wcut_off","TPC clusters per track with cuts (OFF)", 200, 0, 200);
+ fNclusterHLTwCut = new TH1F("fNcluster_wcut_hlt","TPC clusters per track with cuts (HLT)", 200, 0, 200);
- fEtaOffTpcIts = new TH1F("fEtaTpcIts_off","pseudorapidity for kTPCin && kITSin (offline)",100,-3,3);
- fEtaHLTTpcIts = new TH1F("fEtaTpcIts_hlt","pseudorapidity for kTPCin && kITSin (HLT)", 100,-3,3);
+ fEtaMomentumcutOff = new TH1F("fEtaMomentumcut_off","pseudorapidity DCAcut (OFF)",100,-2,2);
+ fEtaMomentumcutHLT = new TH1F("fEtaMomentumcut_hlt","pseudorapidity DCAcut (HLT)", 100,-2,2);
- fNclusVSphiOff = new TH2F("fNclus_vs_phi_off","clusters per track vs. #phi (offline)",360,0,360,160,0,160);
+ fNclusVSphiOff = new TH2F("fNclus_vs_phi_off","clusters per track vs. #phi (OFF)",360,0,360,160,0,160);
fNclusVSphiHLT = new TH2F("fNclus_vs_phi_hlt","clusters per track vs. #phi (HLT)", 360,0,360,160,0,160);
- fNclusVSthetaOff = new TH2F("fNclus_vs_theta_off","clusters per track vs. #theta (offline)",180,0,180,160,0,160);
+ fNclusVSthetaOff = new TH2F("fNclus_vs_theta_off","clusters per track vs. #theta (OFF)",180,0,180,160,0,160);
fNclusVSthetaHLT = new TH2F("fNclus_vs_theta_hlt","clusters per track vs. #theta (HLT)", 180,0,180,160,0,160);
-
- 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);
-
- //---------------------- add histograms to the output TList ------------------//
+ fTextBox = new TText();
fOutputList->Add(fHistTrigger);
- fOutputList->Add(fHistHLTTrigger);
-
- fOutputList->Add(fChargeOff);
- fOutputList->Add(fMomentumOff);
- fOutputList->Add(fDCAOff);
- fOutputList->Add(fNclusterOff);
- fOutputList->Add(fNclusterOffwCut);
- fOutputList->Add(fdEdxOff);
- fOutputList->Add(fdEdxVSPOff);
- fOutputList->Add(fPhiOff);
- fOutputList->Add(fThetaOff);
- fOutputList->Add(fMultOff);
- fOutputList->Add(fVertexVSNtracksOff);
- fOutputList->Add(fXYvertexOff);
- fOutputList->Add(fXvertexOff);
- fOutputList->Add(fYvertexOff);
- fOutputList->Add(fZvertexOff);
- fOutputList->Add(fEtaOff);
- fOutputList->Add(fEtaDCAcutOff);
- fOutputList->Add(fEtaOffTpc);
- fOutputList->Add(fEtaOffTpcIts);
- fOutputList->Add(fNclusVSphiOff);
- fOutputList->Add(fNclusVSthetaOff);
- fOutputList->Add(fStatusOff);
- fOutputList->Add(fStatusOff_Ocl);
- fOutputList->Add(fEventSpecieOff);
-
- fOutputList->Add(fChargeHLT);
- fOutputList->Add(fMomentumHLT);
- fOutputList->Add(fDCAHLT);
- fOutputList->Add(fNclusterHLT);
- fOutputList->Add(fNclusterHLTwCut);
- fOutputList->Add(fdEdxHLT);
- fOutputList->Add(fdEdxVSPHLT);
- fOutputList->Add(fPhiHLT);
- fOutputList->Add(fThetaHLT);
- fOutputList->Add(fMultHLT);
- fOutputList->Add(fVertexVSNtracksHLT);
- fOutputList->Add(fXYvertexHLT);
- fOutputList->Add(fXvertexHLT);
- fOutputList->Add(fYvertexHLT);
- fOutputList->Add(fZvertexHLT);
- fOutputList->Add(fEtaHLT);
- fOutputList->Add(fEtaDCAcutHLT);
- fOutputList->Add(fEtaHLTTpc);
- fOutputList->Add(fEtaHLTTpcIts);
- fOutputList->Add(fNclusVSphiHLT);
- fOutputList->Add(fNclusVSthetaHLT);
- fOutputList->Add(fStatusHLT);
- fOutputList->Add(fStatusHLT_Ocl);
- fOutputList->Add(fEventSpecieHLT);
-
- SetupESDtrackCuts();
-}
-void AliAnalysisTaskHLT::NotifyRun(){
- // This will not work if the active trigger classes change from run to run.
- // Then one has to know all trigger classes before processing the data.
-
- AliESDEvent *esdOFF = dynamic_cast<AliESDEvent*>(InputEvent());
- TString trgClasses = esdOFF->GetESDRun()->GetActiveTriggerClasses();
+ fOutputList->Add(fChargeOff); fOutputList->Add(fChargeHLT);
+ fOutputList->Add(fMomentumOff); fOutputList->Add(fMomentumHLT);
+ fOutputList->Add(fDCArOff); fOutputList->Add(fDCArHLT);
+ fOutputList->Add(fDCAzOff); fOutputList->Add(fDCAzHLT);
+ fOutputList->Add(fNclusterOff); fOutputList->Add(fNclusterHLT);
+ fOutputList->Add(fNITSclusterOff); fOutputList->Add(fNITSclusterHLT);
+ fOutputList->Add(fNclusterOffwCut); fOutputList->Add(fNclusterHLTwCut);
+ fOutputList->Add(fPhiOff); fOutputList->Add(fPhiHLT);
+ fOutputList->Add(fMultOff); fOutputList->Add(fMultHLT);
+ fOutputList->Add(fXYvertexOff); fOutputList->Add(fXYvertexHLT);
+ fOutputList->Add(fXvertexOff); fOutputList->Add(fXvertexHLT);
+ fOutputList->Add(fYvertexOff); fOutputList->Add(fYvertexHLT);
+ fOutputList->Add(fZvertexOff); fOutputList->Add(fZvertexHLT);
+ fOutputList->Add(fSPDXvertexOff); fOutputList->Add(fSPDXvertexHLT);
+ fOutputList->Add(fSPDYvertexOff); fOutputList->Add(fSPDYvertexHLT);
+ fOutputList->Add(fSPDZvertexOff); fOutputList->Add(fSPDZvertexHLT);
+ fOutputList->Add(fEtaOff); fOutputList->Add(fEtaHLT);
+ fOutputList->Add(fEtaMomentumcutOff); fOutputList->Add(fEtaMomentumcutHLT);
+ fOutputList->Add(fNclusVSphiOff); fOutputList->Add(fNclusVSphiHLT);
+ fOutputList->Add(fNclusVSthetaOff); fOutputList->Add(fNclusVSthetaHLT);
+ fOutputList->Add(fEventSpecieOff); fOutputList->Add(fEventSpecieHLT);
+ fOutputList->Add(fNcontOff); fOutputList->Add(fNcontHLT);
+
+ fOutputList->Add(fTextBox);
+ if(fBeamType.Contains("Pb")) fOutputList->Add(fV0cent);
- fTrgClsArray = trgClasses.Tokenize(" ");
-
- for(Int_t i=0; i<fTrgClsArray->GetEntries(); i++){
- TString str = ((TObjString *)fTrgClsArray->At(i))->GetString();
- (fHistTrigger->GetXaxis())->SetBinLabel(i+1, str.Data());
- (fHistHLTTrigger->GetXaxis())->SetBinLabel(i+1, str.Data());
- }
- esdOFF = NULL;
-
- TString Statusnames[12]={"kTPCin",
- "kITSin",
- "kTPCout",
- "kITSout",
- "kITSrefit",
- "kTPCrefit",
- "kTRDin",
- "kTRDout",
- "kTRDrefit",
- "kTOFin",
- "kTOFout",
- "kTOFrefit"};
-
- 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]);
- }
-
+ //SetupESDtrackCuts();
+ PostData(1, fOutputList);
}
void AliAnalysisTaskHLT::UserExec(Option_t *){
// see header file of AliAnalysisTask for documentation
- AliESDEvent *esdOFF = dynamic_cast<AliESDEvent*>(InputEvent());
-
+ AliESDEvent *esdOFF = dynamic_cast<AliESDEvent*>(InputEvent());
if(!esdOFF){
- Printf("ERROR: fESD not available");
- return;
+ printf("Error:UserExec OFF esd not available\n");
+ return;
}
-
+
+ if(esdOFF->GetEventSpecie()==16) return; // skip calibration events, HLT doesn't set this flag yet
+
AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*>(fInputHandler);
+ if(!esdH){
+ printf("The ESD input handler is empty\n");
+ return;
+ }
+
AliESDEvent *esdHLT = NULL;
- if(esdH) esdHLT = esdH->GetHLTEvent();
-
+ if(esdH) esdHLT = esdH->GetHLTEvent();
if(!esdHLT){
- Printf("ERROR: HLTesd not available");
- return;
+ printf("Error:UserExec HLT esd not available\n");
+ return;
}
-
-
- //Fill CTP Trigger stuff
- //fHistTrigger->Fill(esdOFF->GetTriggerMask());
-
- for(Int_t i=0; i<fTrgClsArray->GetEntries(); 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);
+
+ if(fSwitch==kTRUE){
+ TTimeStamp *timestamp = new TTimeStamp(esdHLT->GetTimeStamp());
+ fTextBox->SetName("text");
+ TString s = Form("Run %d, Date %d", esdHLT->GetRunNumber(), timestamp->GetDate());
+ printf("You are analyzing run %d from date %d\n\n", esdHLT->GetRunNumber(), timestamp->GetDate());
+ fTextBox->SetTitle(s);
+ fSwitch=kFALSE;
}
- Double_t DCAcut = 7.0;
- Double_t Momcut= 0.3;
-
- char test[50];
- sprintf(test,"pseudorapidity (HLT), DCA cut = %f,\n Momentum cut = %f, TPC clusters > 70" , DCAcut, Momcut);
- fEtaDCAcutHLT->SetTitle(test);
- sprintf(test,"pseudorapidity (offline), DCA cut = %f, Momentum cut = %f, TPC clusters > 70", DCAcut, Momcut);
- fEtaDCAcutOff->SetTitle(test);
-
Double_t bfield = esdOFF->GetMagneticField();
- UInt_t Statusnames[12]={AliESDtrack::kTPCin,
- AliESDtrack::kITSin,
- AliESDtrack::kTPCout,
- AliESDtrack::kITSout,
- AliESDtrack::kITSrefit,
- AliESDtrack::kTPCrefit,
- AliESDtrack::kTRDin,
- AliESDtrack::kTRDout,
- AliESDtrack::kTRDrefit,
- AliESDtrack::kTOFin,
- AliESDtrack::kTOFout,
- AliESDtrack::kTOFrefit};
+// UInt_t Statusnames[12]={AliESDtrack::kTPCin,
+// AliESDtrack::kITSin,
+// AliESDtrack::kTPCout,
+// AliESDtrack::kITSout,
+// AliESDtrack::kITSrefit,
+// AliESDtrack::kTPCrefit,
+// AliESDtrack::kTRDin,
+// AliESDtrack::kTRDout,
+// AliESDtrack::kTRDrefit,
+// AliESDtrack::kTOFin,
+// AliESDtrack::kTOFout,
+// AliESDtrack::kTOFrefit};
//---------------- HLT ESD tree -----------------------//
- if(esdHLT->GetNumberOfTracks()!=0)
- fMultHLT->Fill( esdHLT->GetNumberOfTracks() );
-
- Double_t vertexHLT[3];
-
- const AliESDVertex *vertHLT=esdHLT->GetPrimaryVertexTracks();
-
- vertexHLT[0] = vertHLT->GetX();
- vertexHLT[1] = vertHLT->GetY();
- vertexHLT[2] = vertHLT->GetZ();
- AliVertex *primVertexHLT = new AliVertex(vertexHLT, 0., 0);
-
- Bool_t testVertexHLT=kTRUE;
- if(vertHLT->GetNContributors()<1) {
- // SPD vertex
- vertHLT = esdHLT->GetPrimaryVertexSPD();
- if(vertHLT->GetNContributors()<1) {
- // NO GOOD VERTEX, SKIP EVENT
- testVertexHLT=kFALSE;
- }
- }
- fVertexVSNtracksHLT->Fill(vertHLT->GetNContributors(),vertHLT->GetZv());
- if(vertHLT->GetZ()!=0){
+ Int_t nr_tracksHLT = 0;
+ const AliESDVertex *vertHLT = esdHLT->GetPrimaryVertexTracks();
+
+
+ if(vertHLT->GetStatus()==kTRUE){
fXYvertexHLT->Fill(vertHLT->GetX(), vertHLT->GetY() );
fXvertexHLT->Fill( vertHLT->GetX() );
fYvertexHLT->Fill( vertHLT->GetY() );
fZvertexHLT->Fill( vertHLT->GetZ() );
+
+ fSPDXvertexHLT->Fill(esdHLT->GetPrimaryVertexSPD()->GetX());
+ fSPDYvertexHLT->Fill(esdHLT->GetPrimaryVertexSPD()->GetY());
+ fSPDZvertexHLT->Fill(esdHLT->GetPrimaryVertexSPD()->GetZ());
+
+ fNcontHLT->Fill(vertHLT->GetNContributors());
}
+ //At the moment no constrains on vertex before filling histograms
+ //Should be changed.
+ fEventSpecieHLT->Fill(esdHLT->GetEventSpecie());
- if(testVertexHLT){
- //if( vertHLT && vertHLT->GetNContributors() >= 5 && (TMath::Abs(vertHLT->GetZ())<5.5) ){
-
- fEventSpecieHLT->Fill(esdHLT->GetEventSpecie());
-
- for(Int_t i=0; i<esdHLT->GetNumberOfTracks(); i++){
+ for(Int_t i=0; i<esdHLT->GetNumberOfTracks(); 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);
- }
- }
-
- if(esdtrackHLT->GetTPCNcls()>0) fNclusterHLT->Fill(esdtrackHLT->GetTPCNcls());
- fChargeHLT->Fill(esdtrackHLT->Charge());
-
- if(esdtrackHLT->GetStatus()&AliESDtrack::kTPCin) fEtaHLTTpc->Fill(esdtrackHLT->Eta());
- if (esdtrackHLT->GetStatus()&AliESDtrack::kTPCin && esdtrackHLT->GetStatus()&AliESDtrack::kITSin) fEtaHLTTpcIts->Fill(esdtrackHLT->Eta());
- //ESD-cut
- if(!fESDHLTtrackCuts->AcceptTrack(esdtrackHLT) )continue;
-
- if((esdHLT->GetEventSpecie()==16)) {
- Printf("Reject laser event %d",esdOFF->GetEventSpecie());
- continue; //reject laser events
- }
-
- if(esdtrackHLT->GetTPCNcls()>0) fNclusVSphiHLT->Fill(esdtrackHLT->Phi()*TMath::RadToDeg(), esdtrackHLT->GetTPCNcls());
- if(esdtrackHLT->GetTPCNcls()>0) fNclusVSthetaHLT->Fill(esdtrackHLT->Theta()*TMath::RadToDeg(), esdtrackHLT->GetTPCNcls());
- fEtaHLT->Fill(esdtrackHLT->Eta());
-
- fDCAHLT->Fill(esdtrackHLT->GetD(esdHLT->GetPrimaryVertex()->GetXv(), esdHLT->GetPrimaryVertex()->GetYv(), bfield) );
-
- fdEdxHLT->Fill( esdtrackHLT->GetTPCsignal() );
- fdEdxVSPHLT->Fill( TMath::Abs(esdtrackHLT->P()), esdtrackHLT->GetTPCsignal() );
+ 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(TMath::Abs(esdtrackHLT->Pt()) <Momcut) continue; //cut away tracks with mom<0.3GeV
- fEtaDCAcutHLT->Fill(esdtrackHLT->Eta());
- fPhiHLT->Fill(esdtrackHLT->Phi()*TMath::RadToDeg());
- fThetaHLT->Fill(esdtrackHLT->Theta()*TMath::RadToDeg());
- if(esdtrackHLT->GetTPCNcls()>0) fNclusterHLTwCut->Fill(esdtrackHLT->GetTPCNcls());
- fMomentumHLT->Fill( TMath::Abs(esdtrackHLT->P()) );
+ if(!(esdtrackHLT->GetStatus()&AliESDtrack::kTPCin)) continue; // only interested in tracks with kTPCin flag
+ if(esdtrackHLT->GetTPCNcls()<=0) continue;
+ nr_tracksHLT++;
+
+ //Calculating DCA "old" fashion
+ Float_t dca[2];
+ esdtrackHLT->GetDZ(esdHLT->GetPrimaryVertex()->GetXv(), esdHLT->GetPrimaryVertex()->GetYv(), esdHLT->GetPrimaryVertex()->GetZv(), bfield, dca);
-
- if(esdHLT->IsHLTTriggerFired()){
-
- }// end if for triggered hlt events
- } // end of loop over hlt tracks
- }
+ fDCArHLT->Fill(dca[0]);
+ fDCAzHLT->Fill(dca[1]);
+
+ fChargeHLT->Fill(esdtrackHLT->Charge());
+ fNclusterHLT->Fill(esdtrackHLT->GetTPCNcls());
+ fNITSclusterHLT->Fill(esdtrackHLT->GetNcls(0));
+ fEtaHLT->Fill(esdtrackHLT->Eta());
+ fPhiHLT->Fill(esdtrackHLT->Phi()*TMath::RadToDeg());
+ fMomentumHLT->Fill(TMath::Abs(esdtrackHLT->Pt()));
+ } // end of loop over hlt tracks
+ if(nr_tracksHLT>0) fMultHLT->Fill(nr_tracksHLT);
//----------------- OFFLINE ESD tree ----------------//
- if(esdOFF->GetNumberOfTracks()!=0)
- fMultOff->Fill( esdOFF->GetNumberOfTracks() );
-
- Double_t vertexOFF[3];
-
- const AliESDVertex *vertOff=esdOFF->GetPrimaryVertexTracks();
-
- vertexOFF[0] = vertOff->GetX();
- vertexOFF[1] = vertOff->GetY();
- vertexOFF[2] = vertOff->GetZ();
- AliVertex *primVertexOFF = new AliVertex(vertexOFF, 0., 0);
- Bool_t testVertex=kTRUE;
-
- if(vertOff->GetNContributors()<1) {
- // SPD vertex
- vertOff = esdOFF->GetPrimaryVertexSPD();
- if(vertOff->GetNContributors()<1) {
- // NO GOOD VERTEX, SKIP EVENT
- testVertex=kFALSE;
- // Printf("This vertex is away");
- }
+ Int_t nr_tracksOff = 0;
+ const AliESDVertex *vertOFF = esdOFF->GetPrimaryVertexTracks();
+
+ if(fBeamType.Contains("Pb")){
+ fCentrality = esdOFF->GetCentrality();
+ // this information is only available from the offline ESD for 2010 PbPb data, the V0 info was not stored in the HLTesd (17.04.11, Kelly)
+ if(!fCentrality){
+ printf("Centrality pointer is empty\n");
+ return;
+ }
+ else fV0cent->Fill(fCentrality->GetCentralityPercentile("V0M"));
}
- fVertexVSNtracksOff->Fill(vertOff->GetNContributors(),vertOff->GetZv());
- if(vertOff->GetZ()!=0){
- fXYvertexOff->Fill(vertOff->GetX(), vertOff->GetY() );
- fXvertexOff->Fill( vertOff->GetX() );
- fYvertexOff->Fill( vertOff->GetY() );
- fZvertexOff->Fill( vertOff->GetZ() );
- }
-
- if(testVertex){
-
- fEventSpecieOff->Fill(esdOFF->GetEventSpecie());
-
- for(Int_t i=0; i<esdOFF->GetNumberOfTracks(); i++){
-
- AliESDtrack *esdtrackOFF = esdOFF->GetTrack(i);
-
- if (!esdtrackOFF) continue;
-
- fChargeOff->Fill(esdtrackOFF->Charge());
-
- if(esdtrackOFF->GetStatus()&AliESDtrack::kTPCin) fEtaOffTpc->Fill(esdtrackOFF->Eta());
- if (esdtrackOFF->GetStatus()&AliESDtrack::kTPCin && esdtrackOFF->GetStatus()&AliESDtrack::kITSin) fEtaOffTpcIts->Fill(esdtrackOFF->Eta());
-
- //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);
- }
- }
- if(esdtrackOFF->GetTPCNcls()>0) fNclusterOff->Fill(esdtrackOFF->GetTPCNcls());
-
-
- if(!fESDOfftrackCuts->AcceptTrack(esdtrackOFF) ) continue;// -- ESD cuts
- if((esdOFF->GetEventSpecie()==16)) continue; // reject laser events
- if(esdtrackOFF->GetTPCNcls()>0) fNclusVSphiOff->Fill(esdtrackOFF->Phi()*TMath::RadToDeg(), esdtrackOFF->GetTPCNcls());
- if(esdtrackOFF->GetTPCNcls()>0) fNclusVSthetaOff->Fill(esdtrackOFF->Theta()*TMath::RadToDeg(), esdtrackOFF->GetTPCNcls());
-
- fDCAOff->Fill(esdtrackOFF->GetD(esdOFF->GetPrimaryVertex()->GetXv(), esdOFF->GetPrimaryVertex()->GetYv(), bfield) );
- fEtaOff->Fill(esdtrackOFF->Eta());
- fdEdxOff->Fill( esdtrackOFF->GetTPCsignal() );
- fdEdxVSPOff->Fill( TMath::Abs(esdtrackOFF->P()), esdtrackOFF->GetTPCsignal() );
-
- if(TMath::Abs(esdtrackOFF->Pt()) < Momcut) continue;//cut away tracks with mom<0.3GeV
- fEtaDCAcutOff->Fill(esdtrackOFF->Eta());
- fPhiOff->Fill(esdtrackOFF->Phi()*TMath::RadToDeg());
- fThetaOff->Fill(esdtrackOFF->Theta()*TMath::RadToDeg());
- if(esdtrackOFF->GetTPCNcls()>0) fNclusterOffwCut->Fill(esdtrackOFF->GetTPCNcls());
- fMomentumOff->Fill( TMath::Abs(esdtrackOFF->P()) );
-
-
- if(esdHLT->IsHLTTriggerFired()){
-
- } // end if for triggered offl events
-
- } // end of loop over offl tracks
+ if(vertOFF->GetStatus()==kTRUE){
+ fXYvertexOff->Fill(vertOFF->GetX(), vertOFF->GetY() );
+ fXvertexOff->Fill( vertOFF->GetX() );
+ fYvertexOff->Fill( vertOFF->GetY() );
+ fZvertexOff->Fill( vertOFF->GetZ() );
+ fSPDXvertexOff->Fill(esdOFF->GetPrimaryVertexSPD()->GetX());
+ fSPDYvertexOff->Fill(esdOFF->GetPrimaryVertexSPD()->GetY());
+ fSPDZvertexOff->Fill(esdOFF->GetPrimaryVertexSPD()->GetZ());
+
+ fNcontOff->Fill(vertOFF->GetNContributors());
}
+ fEventSpecieOff->Fill(esdOFF->GetEventSpecie());
- // if(esdHLT->IsHLTTriggerFired()){
- //
- // for(Int_t i=0; i<esdOFF->GetNumberOfTracks(); 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());
- // }
-
- delete primVertexOFF;
- delete primVertexHLT;
+ for(Int_t i=0; i<esdOFF->GetNumberOfTracks(); i++){
+
+ AliESDtrack *esdtrackOFF = esdOFF->GetTrack(i);
+ if (!esdtrackOFF) continue;
+
+ if(!(esdtrackOFF->GetStatus()&AliESDtrack::kTPCin)) continue;
+ if(esdtrackOFF->GetTPCNcls()<=0) continue;
+ nr_tracksOff++;
+
+ 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());
+ fNclusterOff->Fill(esdtrackOFF->GetTPCNcls());
+ fNITSclusterOff->Fill(esdtrackOFF->GetNcls(0));
+ fEtaOff->Fill(esdtrackOFF->Eta());
+ fPhiOff->Fill(esdtrackOFF->Phi()*TMath::RadToDeg());
+ fMomentumOff->Fill( TMath::Abs(esdtrackOFF->Pt()) );
+
+ } // end of loop over offline tracks
- // Post output data.
+ if(nr_tracksOff>0) fMultOff->Fill(nr_tracksOff);
+
PostData(1, fOutputList);
}
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){
-
- 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 =fEtaDCAcutOff->GetBinContent(fEtaDCAcutOff->GetMaximumBin());
- if(maxbin < fEtaDCAcutHLT->GetBinContent(fEtaDCAcutHLT->GetMaximumBin()))
- maxbin=fEtaDCAcutHLT->GetBinContent(fEtaDCAcutHLT->GetMaximumBin());
- fEtaDCAcutOff->SetMaximum(maxbin+20);
- fEtaDCAcutOff->SetTitle("Pseudorapidity");
- fEtaDCAcutOff->SetLineColor(2);
- fEtaDCAcutOff->DrawCopy("");
- fEtaDCAcutHLT->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");
- }
-
+// see header file of AliAnalysisTask for documentation
}
-void AliAnalysisTaskHLT::SetupESDtrackCuts() {
- // Setup ESD cuts
-
- Bool_t selPrimaries = kTRUE;
-
- fESDOfftrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2009(selPrimaries);
-
- fESDHLTtrackCuts = new AliESDtrackCuts;
-
- // TPC
- fESDHLTtrackCuts->SetRequireTPCStandAlone(kTRUE); // to get chi2 and ncls of kTPCin
- fESDHLTtrackCuts->SetMinNClustersTPC(70);
- fESDHLTtrackCuts->SetMaxChi2PerClusterTPC(4);
- fESDHLTtrackCuts->SetAcceptKinkDaughters(kFALSE);
-
- // -- fESDHLTtrackCuts->SetRequireTPCRefit(kTRUE); -- JMT not present in HLT ESD
- // ITS
- // -- fESDHLTtrackCuts->SetRequireITSRefit(kTRUE); -- JMT not present in HLT ESD
-
- fESDHLTtrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,
- AliESDtrackCuts::kAny);
- if(selPrimaries) { // 7*(0.0050+0.0060/pt^0.9)
- fESDHLTtrackCuts->SetMaxDCAToVertexXYPtDep("0.0350+0.0420/pt^0.9");
- }
-
- fESDHLTtrackCuts->SetMaxDCAToVertexZ(1.e6);
- fESDHLTtrackCuts->SetDCAToVertex2D(kFALSE);
- fESDHLTtrackCuts->SetRequireSigmaToVertex(kFALSE);
- fESDHLTtrackCuts->SetEtaRange(-0.9,+0.9);
-
- return;
-}
+// void AliAnalysisTaskHLT::SetupESDtrackCuts(){ // not called
+// // Setup ESD cuts
+// // NB! Work in progress!
+//
+// Bool_t selPrimaries = kTRUE;
+//
+// fESDOfftrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2009(selPrimaries);
+// //To make Offline cuts = HLT cuts
+// fESDOfftrackCuts->SetRequireITSRefit(kFALSE);
+// fESDOfftrackCuts->SetEtaRange(-0.9,+0.9);
+//
+//
+// //HLT
+// //NB! Need to understand this a bit more! Which cuts should we keep?
+// fESDHLTtrackCuts = new AliESDtrackCuts;
+//
+// // TPC
+// fESDHLTtrackCuts->SetRequireTPCStandAlone(kTRUE); // to get chi2 and ncls of kTPCin
+// fESDHLTtrackCuts->SetMinNClustersTPC(70);
+// fESDHLTtrackCuts->SetMaxChi2PerClusterTPC(4);
+// fESDHLTtrackCuts->SetAcceptKinkDaughters(kFALSE);
+//
+// fESDHLTtrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,
+// AliESDtrackCuts::kAny);
+//
+// if(selPrimaries) { // 7*(0.0050+0.0060/pt^0.9)
+// fESDHLTtrackCuts->SetMaxDCAToVertexXYPtDep("0.0350+0.0420/pt^0.9");
+// }
+//
+// fESDHLTtrackCuts->SetMaxDCAToVertexZ(1.e6);
+// fESDHLTtrackCuts->SetDCAToVertex2D(kFALSE);
+// fESDHLTtrackCuts->SetRequireSigmaToVertex(kFALSE);
+// fESDHLTtrackCuts->SetEtaRange(-0.9,+0.9);
+//
+// return;
+// }