//* 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 "TF1.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"
+
+#include <iostream>
ClassImp(AliAnalysisTaskHLT)
-//======================================================================================================
+//===============================================================//
AliAnalysisTaskHLT::AliAnalysisTaskHLT()
:
AliAnalysisTaskSE()
- ,fESDOfftrackCuts(0)
- ,fESDHLTtrackCuts(0)
+ ,fUseHLTTrigger(kFALSE)
+ //,fESDOfftrackCuts(0)
+ //,fESDHLTtrackCuts(0)
,fOutputList(0)
- ,fHistTrigger(0)
- ,fHistHLTTrigger(0)
+ //,fHistTrigger(0)
,fChargeOff(0)
,fMomentumOff(0)
- ,fMomentumOffTpc(0)
- ,fMomentumOffTpcIts(0)
,fDCArOff(0)
,fDCAzOff(0)
,fNclusterOff(0)
- ,fNclusterOffwCut(0)
- ,fdEdxOff(0)
- ,fdEdxVSPOff(0)
+ ,fNITSclusterOff(0)
,fPhiOff(0)
- ,fThetaOff(0)
+ ,fEtaOff(0)
,fMultOff(0)
- ,fXYvertexOff(0)
,fXvertexOff(0)
,fYvertexOff(0)
,fZvertexOff(0)
- ,fEtaOff(0)
- ,fEtaMomentumcutOff(0)
- ,fNclusVSphiOff(0)
- ,fNclusVSthetaOff(0)
- ,fStatusOff(0)
- ,fStatusOff_Ocl(0)
+ ,fSPDXvertexOff(0)
+ ,fSPDYvertexOff(0)
+ ,fSPDZvertexOff(0)
,fEventSpecieOff(0)
+ ,fV0cent(0)
,fChargeHLT(0)
,fMomentumHLT(0)
- ,fMomentumHLTTpc(0)
- ,fMomentumHLTTpcIts(0)
,fDCArHLT(0)
,fDCAzHLT(0)
- ,fDCArHLTSG(0)
- ,fDCAzHLTSG(0)
,fNclusterHLT(0)
- ,fNclusterHLTwCut(0)
- ,fdEdxHLT(0)
- ,fdEdxVSPHLT(0)
+ ,fNITSclusterHLT(0)
,fPhiHLT(0)
- ,fThetaHLT(0)
+ ,fEtaHLT(0)
+
+ ,fChargeHLTcut(0)
+ ,fMomentumHLTcut(0)
+ ,fDCArHLTcut(0)
+ ,fDCAzHLTcut(0)
+ ,fNclusterHLTcut(0)
+ ,fNITSclusterHLTcut(0)
+ ,fPhiHLTcut(0)
+ ,fEtaHLTcut(0)
+
,fMultHLT(0)
- ,fXYvertexHLT(0)
,fXvertexHLT(0)
,fYvertexHLT(0)
,fZvertexHLT(0)
- ,fEtaHLT(0)
- ,fEtaMomentumcutHLT(0)
- ,fNclusVSphiHLT(0)
- ,fNclusVSthetaHLT(0)
- ,fStatusHLT(0)
- ,fStatusHLT_Ocl(0)
+ ,fSPDXvertexHLT(0)
+ ,fSPDYvertexHLT(0)
+ ,fSPDZvertexHLT(0)
,fEventSpecieHLT(0)
- ,fTrgClsArray(0)
- // ,fDCArOff_trig(0)
- // ,fNclusterOff_trig(0)
- //
- // ,fDCAHLT_trig(0)
- // ,fNclusterHLT_trig(0)
-
+ ,fBeamType()
+ ,fTextBox(0)
+ ,fCuts(0)
+ ,fSwitch(kTRUE)
+ ,fCentrality()
+ ,fEta(0)
+ ,fPt(0)
+ ,fDCAr(0)
+ ,fDCAz(0)
+ ,fVertexZ(0)
{
-
// 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)
+AliAnalysisTaskHLT::AliAnalysisTaskHLT(const char *name, float eta, float pt, float DCAr, float DCAz, float vertexZ)
:
- AliAnalysisTaskSE(name)
- ,fESDOfftrackCuts(0)
- ,fESDHLTtrackCuts(0)
+ AliAnalysisTaskSE(name)
+ ,fUseHLTTrigger(kFALSE)
+ //,fESDOfftrackCuts(0)
+ //,fESDHLTtrackCuts(0)
,fOutputList(0)
- ,fHistTrigger(0)
- ,fHistHLTTrigger(0)
+ //,fHistTrigger(0)
,fChargeOff(0)
,fMomentumOff(0)
- ,fMomentumOffTpc(0)
- ,fMomentumOffTpcIts(0)
,fDCArOff(0)
,fDCAzOff(0)
,fNclusterOff(0)
- ,fNclusterOffwCut(0)
- ,fdEdxOff(0)
- ,fdEdxVSPOff(0)
+ ,fNITSclusterOff(0)
,fPhiOff(0)
- ,fThetaOff(0)
+ ,fEtaOff(0)
,fMultOff(0)
- ,fXYvertexOff(0)
,fXvertexOff(0)
,fYvertexOff(0)
,fZvertexOff(0)
- ,fEtaOff(0)
- ,fEtaMomentumcutOff(0)
- ,fNclusVSphiOff(0)
- ,fNclusVSthetaOff(0)
- ,fStatusOff(0)
- ,fStatusOff_Ocl(0)
,fEventSpecieOff(0)
-
+ ,fV0cent(0)
+ ,fNcontOff(0)
+
,fChargeHLT(0)
,fMomentumHLT(0)
- ,fMomentumHLTTpc(0)
- ,fMomentumHLTTpcIts(0)
- ,fDCArHLTSG(0)
- ,fDCAzHLTSG(0)
,fNclusterHLT(0)
- ,fNclusterHLTwCut(0)
- ,fdEdxHLT(0)
- ,fdEdxVSPHLT(0)
+ ,fNITSclusterHLT(0)
,fPhiHLT(0)
- ,fThetaHLT(0)
+ ,fEtaHLT(0)
+
+ ,fChargeHLTcut(0)
+ ,fMomentumHLTcut(0)
+ ,fDCArHLTcut(0)
+ ,fDCAzHLTcut(0)
+ ,fNclusterHLTcut(0)
+ ,fNITSclusterHLTcut(0)
+ ,fPhiHLTcut(0)
+ ,fEtaHLTcut(0)
+
,fMultHLT(0)
- ,fXYvertexHLT(0)
,fXvertexHLT(0)
,fYvertexHLT(0)
,fZvertexHLT(0)
- ,fEtaHLT(0)
- ,fEtaMomentumcutHLT(0)
- ,fNclusVSphiHLT(0)
- ,fNclusVSthetaHLT(0)
- ,fStatusHLT(0)
- ,fStatusHLT_Ocl(0)
,fEventSpecieHLT(0)
- ,fTrgClsArray(0)
- // ,fDCArOff_trig(0)
- // ,fNclusterOff_trig(0)
- //
- // ,fDCAHLT_trig(0)
- // ,fNclusterHLT_trig(0)
-
-{
-
+ ,fNcontHLT(0)
+
+ ,fBeamType()
+ ,fTextBox(0)
+ ,fCuts(0)
+ ,fSwitch(kTRUE)
+ ,fCentrality()
+ ,fEta(eta)
+ ,fPt(pt)
+ ,fDCAr(DCAr)
+ ,fDCAz(DCAz)
+ ,fVertexZ(vertexZ)
+{
// Constructor
// Define input and output slots here
// Input slot #0 works with a TChain
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",21 , 0, 21);
- fHistTrigger->GetXaxis()->SetTitle("");
- fHistTrigger->GetYaxis()->SetTitle("#Events");
-
- fHistHLTTrigger = new TH1F("fHistHLTTrigger", "HLT CTP trigger counter", 21, 0, 21);
- fHistHLTTrigger->GetXaxis()->SetTitle("");
- fHistHLTTrigger->GetYaxis()->SetTitle("#Events");
+ //fHistTrigger = new TH1F("fHistTrigger", "CTP trigger counter", 24, 0, 24);
+ //fHistTrigger->GetXaxis()->SetTitle("");
+ //fHistTrigger->GetYaxis()->SetTitle("#Events");
+
+ //=========== event properties =================//
+
+ if(fBeamType.Contains("Pb")){
+ fMultOff = new TH1F("fMult_off", "",200,0,2000);
+ fMultHLT = new TH1F("fMult_hlt", "TPC track multiplicity",200,0,2000); fMultHLT->SetXTitle("TPC track multiplicity");
+ fNcontOff = new TH1F("fNcont_off","",200,0,2000);
+ fNcontHLT = new TH1F("fNcont_hlt","# of contributors",200,0,2000); fNcontHLT->SetXTitle("# of contributors");
+ fV0cent = new TH1F("fV0cent", "V0 centrality", 100,0, 100); fV0cent->SetXTitle("V0 centrality");
+ }
+ else {
+ fMultOff = new TH1F("fMult_off","",200,0,200);
+ fMultHLT = new TH1F("fMult_hlt","TPC track multiplicity",200,0,200); fMultHLT->SetXTitle("TPC track multiplicity");
+ fNcontOff = new TH1F("fNcont_off","",200,0,200);
+ fNcontHLT = new TH1F("fNcont_hlt","# of contributors",200,0,200); fNcontHLT->SetXTitle("# of contributors");
+ }
+
+ fXvertexOff = new TH1F("fXvertex_off","",200,-0.5,0.5);
+ fXvertexHLT = new TH1F("fXvertex_hlt","X primary vertex",200,-0.5,0.5); fXvertexHLT->SetXTitle("x (cm)");
+
+ fYvertexOff = new TH1F("fYvertex_off","",200,-0.5,0.5);
+ fYvertexHLT = new TH1F("fYvertex_hlt","Y primary vertex",200,-0.5,0.5); fYvertexHLT->SetXTitle("y (cm)");
+
+ fZvertexOff = new TH1F("fZvertex_off","",100,-20,20);
+ fZvertexHLT = new TH1F("fZvertex_hlt","Z primary vertex",100,-20,20); fZvertexHLT->SetXTitle("z (cm)");
- 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);
+ fSPDXvertexOff = new TH1F("fSPDXvertex_off","",200,-0.5,0.5);
+ fSPDXvertexHLT = new TH1F("fSPDXvertex_hlt","X SPD primary vertex",200,-0.5,0.5); fSPDXvertexHLT->SetXTitle("x (cm)");
+
+ fSPDYvertexOff = new TH1F("fSPDYvertex_off","",200,-0.5,0.5);
+ fSPDYvertexHLT = new TH1F("fSPDYvertex_hlt","Y SPD primary vertex",200,-0.5,0.5); fSPDYvertexHLT->SetXTitle("y (cm)");
+
+ fSPDZvertexOff = new TH1F("fSPDZvertex_off","",100,-20,20);
+ fSPDZvertexHLT = new TH1F("fSPDZvertex_hlt","Z SPD primary vertex",100,-20,20); fSPDZvertexHLT->SetXTitle("z (cm)");
+
+ fEventSpecieOff = new TH1F("fEventSpecie_off","",18, 0, 18);
+ fEventSpecieHLT = new TH1F("fEventSpecie_hlt","event species",18, 0, 18);
- fMomentumOffTpc = new TH1F("fMomentumTpc_off","Momentum for kTPCin (offline)",100,-3,3);
- fMomentumHLTTpc = new TH1F("fMomentumTpc_hlt","Momentum for kTPCin (HLT)", 100,-3,3);
+ //============== track properties =================//
- fMomentumOffTpcIts = new TH1F("fMomentumTpcIts_off","Momentum for kTPCin && kITSin (offline)",100,-3,3);
- fMomentumHLTTpcIts = new TH1F("fMomentumTpcIts_hlt","Momentum for kTPCin && kITSin (HLT)", 100,-3,3);
+ fChargeOff = new TH1F("fCharge_off", "", 3, -1.5, 1.5);
+ fChargeHLT = new TH1F("fCharge_hlt", "charge distribution", 3, -1.5, 1.5); fChargeHLT->SetXTitle("polarity");
+
+ fMomentumOff = new TH1F("fMomentum_off", "", 100, 0, 10);
+ fMomentumHLT = new TH1F("fMomentum_hlt", "transverse momentum", 100, 0, 10); fMomentumHLT->SetXTitle("p_{T} (GeV/c)");
- fDCArOff = new TH1F("fDCA_off", "DCAr to beam line (offline)",200, -100, 100);
- fDCArHLT = new TH1F("fDCA_hlt", "DCAr to beam line (HLT)", 200, -100, 100);
- fDCArHLTSG = new TH1F("fDCA_hltSG","DCAr to beam line (HLT)", 200, -100, 100);
+ fDCArOff = new TH1F("fDCAr_off", "", 200, -15, 15);
+ fDCArHLT = new TH1F("fDCAr_hlt", "DCAr", 200, -15, 15); fDCArHLT->SetXTitle("DCAr (cm)");
- fDCAzOff = new TH1F("fDCAz_off", "DCAz to beam line (offline)",200, -20, 20);
- fDCAzHLT = new TH1F("fDCAz_hlt", "DCAz to beam line (HLT)", 200, -20, 20);
- fDCAzHLTSG = new TH1F("fDCAz_hltSG","DCAz to beam line (HLT)", 200, -20, 20);
-
- fNclusterOff = new TH1F("fNcluster_off","clusters per track (offline)", 200, 0, 200);
- fNclusterHLT = new TH1F("fNcluster_hlt","clusters per track (HLT)", 200, 0, 200);
+ fDCAzOff = new TH1F("fDCAz_off", "", 200, -15, 15);
+ fDCAzHLT = new TH1F("fDCAz_hlt", "DCAz", 200, -15, 15); fDCAzHLT->SetXTitle("DCAz (cm)");
- 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);
-
- 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);
+ fNclusterOff = new TH1F("fNcluster_off","", 200, 0, 200);
+ fNclusterHLT = new TH1F("fNcluster_hlt","TPC clusters/track", 200, 0, 200); fNclusterHLT->SetXTitle("TPC clusters/track");
+
+ fNITSclusterOff = new TH1F("fNITScluster_off","", 10, 0, 10);
+ fNITSclusterHLT = new TH1F("fNITScluster_hlt","ITS clusters/track", 10, 0, 10); fNITSclusterHLT->SetXTitle("ITS clusters/track");
- 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.);
+ fPhiOff = new TH1F("fPhi_off","",90,0,360);
+ fPhiHLT = new TH1F("fPhi_hlt","azimuthal angle",90,0,360); fPhiHLT->SetXTitle("#phi (deg)");
- fPhiOff = new TH1F("fPhi_off","azimuthal angle distribution (offline)",90,0,360);
- fPhiHLT = new TH1F("fPhi_hlt","azimuthal angle distribution (HLT)", 90,0,360);
+ fEtaOff = new TH1F("fEta_off","",100,-2,2);
+ fEtaHLT = new TH1F("fEta_hlt","pseudorapidity",100,-2,2); fEtaHLT->SetXTitle("#eta");
- fThetaOff = new TH1F("fTheta_off","polar angle distribution (offline)",180,0,180);
- fThetaHLT = new TH1F("fTheta_hlt","polar angle distribution (HLT)", 180,0,180);
+ fChargeHLTcut = new TH1F("fCharge_hltcut", "", 3, -1.5, 1.5); fChargeHLTcut->SetXTitle("polarity");
+ fMomentumHLTcut = new TH1F("fMomentum_hltcut", "",100, 0, 10); fMomentumHLTcut ->SetXTitle("p_{T} (GeV/c)");
+ fDCArHLTcut = new TH1F("fDCAr_hltcut", "",200, -15, 15); fDCArHLTcut->SetXTitle("DCAr (cm)");
+ fDCAzHLTcut = new TH1F("fDCAz_hltcut", "",200, -15, 15); fDCAzHLTcut->SetXTitle("DCAz (cm)");
+ fNclusterHLTcut = new TH1F("fNcluster_hltcut", "",200, 0, 200); fNclusterHLTcut->SetXTitle("TPC clusters/track");
+ fNITSclusterHLTcut = new TH1F("fNITScluster_hltcut","", 10, 0, 10); fNITSclusterHLTcut->SetXTitle("ITS clusters/track");
+ fPhiHLTcut = new TH1F("fPhi_hltcut", "", 90, 0, 360); fPhiHLTcut->SetXTitle("#phi (deg)");
+ fEtaHLTcut = new TH1F("fEta_hltcut", "",100, -2, 2); fEtaHLTcut->SetXTitle("#eta");
+
+ //--------------------------------------------------//
- fMultOff = new TH1F("fMult_off","track multiplicity (offline)",150,0,15000);
- fMultHLT = new TH1F("fMult_hlt","track multiplicity (HLT)", 150,0,15000);
-
- 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);
+ fTextBox = new TText();
+ fCuts = new TText();
+ fCuts->SetName("cuts");
+ TString s = Form("|#eta|<%2g, p_{T}>%2g, |DCAr|<%2g, |DCAz|<%2g, |vertexZ|<%2g", TMath::Abs(fEta), TMath::Abs(fPt), TMath::Abs(fDCAr), TMath::Abs(fDCAz),TMath::Abs(fVertexZ));
+ fCuts->SetTitle(s);
- fXvertexOff = new TH1F("fXvertex_off","X primary vertex (offline)",500,-5,5);
- fXvertexHLT = new TH1F("fXvertex_hlt","X primary vertex (HLT)", 500,-5,5);
-
- fYvertexOff = new TH1F("fYvertex_off","Y primary vertex (offline)",500,-5,5);
- fYvertexHLT = new TH1F("fYvertex_hlt","Y primary vertex (HLT)", 500,-5,5);
-
- fZvertexOff = new TH1F("fZvertex_off","Z primary vertex (offline)",250,-30,30);
- fZvertexHLT = new TH1F("fZvertex_hlt","Z primary vertex (HLT)", 250,-30,30);
+ //fOutputList->Add(fHistTrigger);
+ fOutputList->Add(fChargeOff); fOutputList->Add(fChargeHLT); fOutputList->Add(fChargeHLTcut);
+ fOutputList->Add(fMomentumOff); fOutputList->Add(fMomentumHLT); fOutputList->Add(fMomentumHLTcut);
+ fOutputList->Add(fDCArOff); fOutputList->Add(fDCArHLT); fOutputList->Add(fDCArHLTcut);
+ fOutputList->Add(fDCAzOff); fOutputList->Add(fDCAzHLT); fOutputList->Add(fDCAzHLTcut);
+ fOutputList->Add(fNclusterOff); fOutputList->Add(fNclusterHLT); fOutputList->Add(fNclusterHLTcut);
+ fOutputList->Add(fNITSclusterOff); fOutputList->Add(fNITSclusterHLT); fOutputList->Add(fNITSclusterHLTcut);
+ fOutputList->Add(fPhiOff); fOutputList->Add(fPhiHLT); fOutputList->Add(fPhiHLTcut);
+ fOutputList->Add(fEtaOff); fOutputList->Add(fEtaHLT); fOutputList->Add(fEtaHLTcut);
- fEtaOff = new TH1F("fEta_off","pseudorapidity (offline)",100,-2,2);
- fEtaHLT = new TH1F("fEta_hlt","pseudorapidity (HLT)", 100,-2,2);
-
- fEtaMomentumcutOff = new TH1F("fEtaMomentumcut_off","pseudorapidity DCAcut (offline)",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);
- 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);
- 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);
+ fOutputList->Add(fMultOff); fOutputList->Add(fMultHLT);
+ 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(fEventSpecieOff); fOutputList->Add(fEventSpecieHLT);
+ fOutputList->Add(fNcontOff); fOutputList->Add(fNcontHLT);
- 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 ------------------//
-
- fOutputList->Add(fHistTrigger);
- fOutputList->Add(fHistHLTTrigger);
-
- fOutputList->Add(fChargeOff);
- fOutputList->Add(fMomentumOff);
- fOutputList->Add(fMomentumOffTpc);
- fOutputList->Add(fMomentumOffTpcIts);
- fOutputList->Add(fDCArOff);
- fOutputList->Add(fDCAzOff);
- fOutputList->Add(fNclusterOff);
- fOutputList->Add(fNclusterOffwCut);
- fOutputList->Add(fdEdxOff);
- fOutputList->Add(fdEdxVSPOff);
- fOutputList->Add(fPhiOff);
- fOutputList->Add(fThetaOff);
- fOutputList->Add(fMultOff);
- fOutputList->Add(fXYvertexOff);
- fOutputList->Add(fXvertexOff);
- fOutputList->Add(fYvertexOff);
- fOutputList->Add(fZvertexOff);
- fOutputList->Add(fEtaOff);
- fOutputList->Add(fEtaMomentumcutOff);
- fOutputList->Add(fNclusVSphiOff);
- fOutputList->Add(fNclusVSthetaOff);
- fOutputList->Add(fStatusOff);
- fOutputList->Add(fStatusOff_Ocl);
- fOutputList->Add(fEventSpecieOff);
-
- fOutputList->Add(fChargeHLT);
- fOutputList->Add(fMomentumHLT);
- fOutputList->Add(fMomentumHLTTpc);
- fOutputList->Add(fMomentumHLTTpcIts);
- fOutputList->Add(fDCArHLT);
- fOutputList->Add(fDCAzHLT);
- fOutputList->Add(fDCArHLTSG);
- fOutputList->Add(fDCAzHLTSG);
- fOutputList->Add(fNclusterHLT);
- fOutputList->Add(fNclusterHLTwCut);
- fOutputList->Add(fdEdxHLT);
- fOutputList->Add(fdEdxVSPHLT);
- fOutputList->Add(fPhiHLT);
- fOutputList->Add(fThetaHLT);
- fOutputList->Add(fMultHLT);
- fOutputList->Add(fXYvertexHLT);
- fOutputList->Add(fXvertexHLT);
- fOutputList->Add(fYvertexHLT);
- fOutputList->Add(fZvertexHLT);
- fOutputList->Add(fEtaHLT);
- fOutputList->Add(fEtaMomentumcutHLT);
- 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(fTextBox);
+ fOutputList->Add(fCuts);
+ 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 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();
+ //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 -----------------------//
- Int_t nr_tracksHLT=0;
- Double_t vertexHLT[3];
-
- const AliESDVertex *vertHLT=esdHLT->GetPrimaryVertexTracks();
+ Int_t nr_tracksHLT = 0;
+ 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;
- Int_t nr_contributorsHLT= vertHLT->GetNContributors();
-
- if(nr_contributorsHLT<1) {
- // SPD vertex
- vertHLT = esdHLT->GetPrimaryVertexSPD();
- if(nr_contributorsHLT<1) {
- // NO GOOD VERTEX, SKIP EVENT
- testVertexHLT=kFALSE;
- }
- }
- if(testVertexHLT){
- fXYvertexHLT->Fill(vertHLT->GetX(), vertHLT->GetY() );
+ if(vertHLT->GetStatus()==kTRUE){
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.
- if(1){
- //if( vertHLT && vertHLT->GetNContributors() >= 5 && (TMath::Abs(vertHLT->GetZ())<5.5) ){
- fEventSpecieHLT->Fill(esdHLT->GetEventSpecie());
+ 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);
- }
- }
-
- //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()) <Momcut) 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);
+ 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->GetStatus()&AliESDtrack::kTPCin)) continue; // only interested in tracks with kTPCin flag
+ if(esdtrackHLT->GetTPCNcls()<=0) continue;
+ nr_tracksHLT++;
+
+ Double_t x[3];
+ esdtrackHLT->GetXYZ(x);
+ Double_t b[3];
+ AliTracker::GetBxByBz(x,b);
+ Bool_t isOK = esdtrackHLT->RelateToVertexTPCBxByBz(vertHLT, b, kVeryBig);
+
+ Float_t dca[2]={0,0}; Float_t cov[3]={0,0,0}; // dca_xy, dca_z, sigma_xy, sigma_xy_z, sigma_z
+ if(isOK){
+ const AliExternalTrackParam *track = esdtrackHLT->GetTPCInnerParam();
+ if(!track) return;
+ esdtrackHLT->GetImpactParametersTPC(dca,cov);
+ fDCArHLT->Fill(dca[0]);
+ fDCAzHLT->Fill(dca[1]);
+ }
+
+// Float_t dca[2];
+// if(vertHLT->GetStatus()==kTRUE){
+// esdtrackHLT->GetDZ(esdHLT->GetPrimaryVertex()->GetX(), esdHLT->GetPrimaryVertex()->GetY(), esdHLT->GetPrimaryVertex()->GetZ(), bfield, dca);
+// 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()));
+
+ if( TMath::Abs(esdtrackHLT->Eta())<TMath::Abs(fEta) &&
+ TMath::Abs(esdtrackHLT->Pt())>TMath::Abs(fPt) &&
+ TMath::Abs(dca[0])<TMath::Abs(fDCAr) &&
+ TMath::Abs(dca[1])<TMath::Abs(fDCAz) &&
+ TMath::Abs(vertHLT->GetZ())<TMath::Abs(fVertexZ) )
+ {
+ fChargeHLTcut->Fill(esdtrackHLT->Charge());
+ fNclusterHLTcut->Fill(esdtrackHLT->GetTPCNcls());
+ fDCArHLTcut->Fill(dca[0]);
+ fDCAzHLTcut->Fill(dca[1]);
+ fNITSclusterHLTcut->Fill(esdtrackHLT->GetNcls(0));
+ fEtaHLTcut->Fill(esdtrackHLT->Eta());
+ fPhiHLTcut->Fill(esdtrackHLT->Phi()*TMath::RadToDeg());
+ fMomentumHLTcut->Fill(TMath::Abs(esdtrackHLT->Pt()));
+ }
+ } // end of loop over hlt tracks
+
+ if(nr_tracksHLT>0) fMultHLT->Fill(nr_tracksHLT);
//----------------- OFFLINE ESD tree ----------------//
- Int_t nr_tracksOff=0;
- 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;
-
- //Int_t nr_contributorsOff= vertHLT->GetNContributors();
-
- if(vertOff->GetNContributors()<1) {
- // SPD vertex
- vertOff = esdOFF->GetPrimaryVertexSPD();
- if(vertOff->GetNContributors()<1) {
- // NO GOOD VERTEX, SKIP EVENT
- testVertex=kFALSE;
- }
+ 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"));
}
- if(testVertex){
- fXYvertexOff->Fill(vertOff->GetX(), vertOff->GetY() );
- fXvertexOff->Fill( vertOff->GetX() );
- fYvertexOff->Fill( vertOff->GetY() );
- fZvertexOff->Fill( vertOff->GetZ() );
- }
-
- //At the moment no constrains on vertex before filling histograms
- //Should be changed.
- if(1){
- fEventSpecieOff->Fill(esdOFF->GetEventSpecie());
-
- for(Int_t i=0; i<esdOFF->GetNumberOfTracks(); 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
+ if(vertOFF->GetStatus()==kTRUE){
+ 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());
}
- if(nr_tracksOff>0)
- fMultOff->Fill(nr_tracksOff);
-
- // 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;
+
+ fEventSpecieOff->Fill(esdOFF->GetEventSpecie());
+
+ 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){
+ const AliExternalTrackParam *track = esdtrackOFF->GetTPCInnerParam();
+ if(!track) return;
+ Float_t dca[2]={0,0}; Float_t cov[3]={0,0,0}; // dca_xy, dca_z, sigma_xy, sigma_xy_z, sigma_z
+ esdtrackOFF->GetImpactParametersTPC(dca,cov);
+ fDCArOff->Fill(dca[0]);
+ fDCAzOff->Fill(dca[1]);
+ }
+// // calculate the offline DCAs the same way like for HLT. The above way is calculating the DCA for the TPC inner barrel surface (Kelly, 17.04.11)
+// Float_t dca[2];
+// if(vertOFF->GetStatus()==kTRUE){
+// esdtrackOFF->GetDZ(esdOFF->GetPrimaryVertex()->GetX(), esdOFF->GetPrimaryVertex()->GetY(), esdOFF->GetPrimaryVertex()->GetZ(), bfield, dca);
+// }
+
+ 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
+// see header file of AliAnalysisTask for documentation
+}
+
+// void AliAnalysisTaskHLT::SetupESDtrackCuts(){ // not called
+// // Setup ESD cuts
+// // NB! Work in progress!
//
-// Bool_t print_png=kFALSE;
-// if(print_png){
+// Bool_t selPrimaries = kTRUE;
+//
+// fESDOfftrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2009(selPrimaries);
+// //To make Offline cuts = HLT cuts
+// fESDOfftrackCuts->SetRequireITSRefit(kFALSE);
+// fESDOfftrackCuts->SetEtaRange(-0.9,+0.9);
//
-// //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");
+// //HLT
+// //NB! Need to understand this a bit more! Which cuts should we keep?
+// fESDHLTtrackCuts = new AliESDtrackCuts;
//
-// 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");
+// // TPC
+// fESDHLTtrackCuts->SetRequireTPCStandAlone(kTRUE); // to get chi2 and ncls of kTPCin
+// fESDHLTtrackCuts->SetMinNClustersTPC(70);
+// fESDHLTtrackCuts->SetMaxChi2PerClusterTPC(4);
+// fESDHLTtrackCuts->SetAcceptKinkDaughters(kFALSE);
//
-// 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");
+// fESDHLTtrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,
+// AliESDtrackCuts::kAny);
//
-// 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");
+// if(selPrimaries) { // 7*(0.0050+0.0060/pt^0.9)
+// fESDHLTtrackCuts->SetMaxDCAToVertexXYPtDep("0.0350+0.0420/pt^0.9");
+// }
//
-// c2->cd(4);
-// fMultHLT->SetTitle("Track Multiplicity, NumberTracks>0");
-// fMultHLT->DrawCopy("");
-// fMultOff->SetLineColor(2);
-// fMultOff->DrawCopy("sames");
+// fESDHLTtrackCuts->SetMaxDCAToVertexZ(1.e6);
+// fESDHLTtrackCuts->SetDCAToVertex2D(kFALSE);
+// fESDHLTtrackCuts->SetRequireSigmaToVertex(kFALSE);
+// fESDHLTtrackCuts->SetEtaRange(-0.9,+0.9);
//
-// 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() {
- // 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;
-}
+// return;
+// }