#include "TH1F.h"
#include "TH2F.h"
+#include "TF1.h"
#include "TCanvas.h"
#include "TLegend.h"
#include "TStyle.h"
,fHistTrigger(0)
,fHistHLTTrigger(0)
,fChargeOff(0)
- ,fMomentumOff(0)
+ ,fMomentumOff(0)
+ ,fMomentumOffTpc(0)
+ ,fMomentumOffTpcIts(0)
,fDCAOff(0)
,fNclusterOff(0)
,fNclusterOffwCut(0)
,fPhiOff(0)
,fThetaOff(0)
,fMultOff(0)
- ,fVertexVSNtracksOff(0)
+ ,fXVertexVSNtracksOff(0)
+ ,fYVertexVSNtracksOff(0)
+ ,fZVertexVSNtracksOff(0)
+ ,fZVertexOffTemp(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)
,fChargeHLT(0)
,fMomentumHLT(0)
+ ,fMomentumHLTTpc(0)
+ ,fMomentumHLTTpcIts(0)
,fDCAHLT(0)
,fNclusterHLT(0)
,fNclusterHLTwCut(0)
,fPhiHLT(0)
,fThetaHLT(0)
,fMultHLT(0)
- ,fVertexVSNtracksHLT(0)
+ ,fXVertexVSNtracksHLT(0)
+ ,fYVertexVSNtracksHLT(0)
+ ,fZVertexVSNtracksHLT(0)
+ ,fZVertexHLTTemp(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)
+ ,fTrgClsArray(0)
// ,fDCAOff_trig(0)
// ,fNclusterOff_trig(0)
// ,fNclusterHLT_trig(0)
{
+ for(int jj=0;jj<7;jj++){
+ fXvertexVSNcontriOff[jj]=0;
+ fXvertexVSNcontriHLT[jj]=0;
+ }
+ for(int jj=0;jj<7;jj++){
+ fYvertexVSNcontriOff[jj]=0;
+ fYvertexVSNcontriHLT[jj]=0;
+ }
+ for(int jj=0;jj<7;jj++){
+ fZvertexVSNcontriOff[jj]=0;
+ fZvertexVSNcontriHLT[jj]=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());
+ // DefineOutput(1, TList::Class());
}
AliAnalysisTaskHLT::AliAnalysisTaskHLT(const char *name)
:
AliAnalysisTaskSE(name)
+ ,fESDOfftrackCuts(0)
+ ,fESDHLTtrackCuts(0)
,fOutputList(0)
,fHistTrigger(0)
,fHistHLTTrigger(0)
,fChargeOff(0)
- ,fMomentumOff(0)
+ ,fMomentumOff(0)
+ ,fMomentumOffTpc(0)
+ ,fMomentumOffTpcIts(0)
,fDCAOff(0)
,fNclusterOff(0)
,fNclusterOffwCut(0)
,fPhiOff(0)
,fThetaOff(0)
,fMultOff(0)
- ,fVertexVSNtracksOff(0)
+ ,fXVertexVSNtracksOff(0)
+ ,fYVertexVSNtracksOff(0)
+ ,fZVertexVSNtracksOff(0)
+ ,fZVertexOffTemp(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)
,fChargeHLT(0)
,fMomentumHLT(0)
+ ,fMomentumHLTTpc(0)
+ ,fMomentumHLTTpcIts(0)
,fDCAHLT(0)
,fNclusterHLT(0)
,fNclusterHLTwCut(0)
,fPhiHLT(0)
,fThetaHLT(0)
,fMultHLT(0)
- ,fVertexVSNtracksHLT(0)
+ ,fXVertexVSNtracksHLT(0)
+ ,fYVertexVSNtracksHLT(0)
+ ,fZVertexVSNtracksHLT(0)
+ ,fZVertexHLTTemp(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)
+ ,fTrgClsArray(0)
// ,fDCAOff_trig(0)
// ,fNclusterOff_trig(0)
//
// ,fNclusterHLT_trig(0)
{
- // Constructor
+ for(int jj=0;jj<7;jj++){
+ fXvertexVSNcontriOff[jj]=0;
+ fXvertexVSNcontriHLT[jj]=0;
+ }
+ for(int jj=0;jj<7;jj++){
+ fYvertexVSNcontriOff[jj]=0;
+ fYvertexVSNcontriHLT[jj]=0;
+ }
+ for(int jj=0;jj<7;jj++){
+ fZvertexVSNcontriOff[jj]=0;
+ fZvertexVSNcontriHLT[jj]=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());
}
// 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};
+const Int_t AliAnalysisTaskHLT::fNcontrArray[] ={3,6,9,12,15,18,21};
+const Int_t AliAnalysisTaskHLT::fNcontr = 7;
//----------------------------------------------------------------------------------------------------
void AliAnalysisTaskHLT::UserCreateOutputObjects(){
(fHistTrigger->GetXaxis())->SetBinLabel(8,"onlTrkThruCE");
*/
- fHistTrigger = new TH1F("fHistTrigger", "CTP trigger counter", 64, 0, 64);
+ fHistTrigger = new TH1F("fHistTrigger", "CTP trigger counter",12 , 0, 12);
fHistTrigger->GetXaxis()->SetTitle("");
fHistTrigger->GetYaxis()->SetTitle("#Events");
- fHistHLTTrigger = new TH1F("fHistHLTTrigger", "HLT CTP trigger counter", 64, 0, 64);
+ fHistHLTTrigger = new TH1F("fHistHLTTrigger", "HLT CTP trigger counter", 12, 0, 12);
fHistHLTTrigger->GetXaxis()->SetTitle("");
fHistHLTTrigger->GetYaxis()->SetTitle("#Events");
fMomentumOff = new TH1F("fMomentum_off", "momentum (offline)",1000, 0., 100);
fMomentumHLT = new TH1F("fMomentum_hlt", "momentum (HLT)", 1000, 0., 100);
+
+ fMomentumOffTpc = new TH1F("fMomentumTpc_off","Momentum for kTPCin (offline)",100,-3,3);
+ fMomentumHLTTpc = new TH1F("fMomentumTpc_hlt","Momentum for kTPCin (HLT)", 100,-3,3);
+
+ 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);
- 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);
+ fDCAOff = new TH1F("fDCA_off","DCA to beam line (offline)",200, -20, 20);
+ fDCAHLT = new TH1F("fDCA_hlt","DCA 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);
fMultOff = new TH1F("fMult_off","track multiplicity (offline)",100,0,100);
fMultHLT = new TH1F("fMult_hlt","track multiplicity (HLT)", 100,0,100);
- 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);
+ fXVertexVSNtracksOff = new TH2F("fXVertexNtracs_off", "X Vertex resolution vs nr contributing tracks (Offline)",21, 0, 20, 40, 0, 4);
+ fXVertexVSNtracksHLT = new TH2F("fXVertexNtracs_hlt", "X Vertex resolution vs nr contributing tracks (HLT)",21, 0, 20, 40, 0, 4);
+
+ fYVertexVSNtracksOff = new TH2F("fYVertexNtracs_off", "Y Vertex resolution vs nr contributing tracks (Offline)",21, 0, 20, 40, 0, 4);
+ fYVertexVSNtracksHLT = new TH2F("fYVertexNtracs_hlt", "Y Vertex resolution vs nr contributing tracks (HLT)",21, 0, 20, 40, 0, 4);
+
+ fZVertexVSNtracksOff = new TH2F("fZVertexNtracs_off", "Z Vertex resolution vs nr contributing tracks (Offline)",21, 0, 20, 40, 0, 10);
+ fZVertexVSNtracksHLT = new TH2F("fZVertexNtracs_hlt", "Z Vertex resolution vs nr contributing tracks (HLT)",21, 0, 20, 40, 0, 10);
+
+ fZVertexOffTemp = new TH1F("fZVertexTemo_off", "Temporary storage (Offline)", 250, -30, 30);
+ fZVertexHLTTemp = new TH1F("fZVertexTemo_hlt", "Temporary storage (HLT)", 250, -30, 30);
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);
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);
-
- fEtaDCAcutOff = new TH1F("fEtaDCAcut_off","pseudorapidity DCAcut (offline)",100,-3,3);
- fEtaDCAcutHLT = new TH1F("fEtaDCAcut_hlt","pseudorapidity DCAcut (HLT)", 100,-3,3);
+ fEtaOff = new TH1F("fEta_off","pseudorapidity (offline)",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);
-
- 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 (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);
fEventSpecieOff = new TH1F("fEventSpecie_off","Eventspecie for Offline",18, 0, 18);
fEventSpecieHLT = new TH1F("fEventSpecie_hlt","Eventspecie for HLT",18, 0, 18);
+ for(int jj=0;jj<fNcontr;jj++){
+ fXvertexVSNcontriOff[jj] = new TH1F(Form("fXVertex_vs_Ncontributors%d_off",fNcontrArray[jj]),Form("X position for vertex for %d contributors to vertex (Offline)"),250,-1,1);
+ fYvertexVSNcontriOff[jj] = new TH1F(Form("fYVertex_vs_Ncontributors%d_off",fNcontrArray[jj]),Form("Y position for vertex for %d contributors to vertex (Offline)"),250,-1,1 );
+ fZvertexVSNcontriOff[jj] = new TH1F(Form("fZVertex_vs_Ncontributors%d_off",fNcontrArray[jj]),Form("Z position for vertex for %d contributors to vertex (Offline)"),250,-30,30);
+ fXvertexVSNcontriHLT[jj] = new TH1F(Form("fXVertex_vs_Ncontributors%d_hlt",fNcontrArray[jj]),Form("X position for vertex for %d contributors to vertex (HLT)"), 250, -1,1);
+ fYvertexVSNcontriHLT[jj] = new TH1F(Form("fYVertex_vs_Ncontributors%d_hlt",fNcontrArray[jj]),Form("Y position for vertex for %d contributors to vertex (HLT)"), 250, -1,1);
+ fZvertexVSNcontriHLT[jj] = new TH1F(Form("fZVertex_vs_Ncontributors%d_hlt",fNcontrArray[jj]),Form("Z position for vertex for %d contributors to vertex (HLT)"), 250,-30,30);
+ }
//---------------------- add histograms to the output TList ------------------//
fOutputList->Add(fHistTrigger);
fOutputList->Add(fChargeOff);
fOutputList->Add(fMomentumOff);
+ fOutputList->Add(fMomentumOffTpc);
+ fOutputList->Add(fMomentumOffTpcIts);
fOutputList->Add(fDCAOff);
fOutputList->Add(fNclusterOff);
fOutputList->Add(fNclusterOffwCut);
fOutputList->Add(fPhiOff);
fOutputList->Add(fThetaOff);
fOutputList->Add(fMultOff);
- fOutputList->Add(fVertexVSNtracksOff);
+ fOutputList->Add(fXVertexVSNtracksOff);
+ fOutputList->Add(fYVertexVSNtracksOff);
+ fOutputList->Add(fZVertexVSNtracksOff);
+ fOutputList->Add(fZVertexOffTemp);
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(fEtaMomentumcutOff);
fOutputList->Add(fNclusVSphiOff);
fOutputList->Add(fNclusVSthetaOff);
fOutputList->Add(fStatusOff);
fOutputList->Add(fChargeHLT);
fOutputList->Add(fMomentumHLT);
+ fOutputList->Add(fMomentumHLTTpc);
+ fOutputList->Add(fMomentumHLTTpcIts);
fOutputList->Add(fDCAHLT);
fOutputList->Add(fNclusterHLT);
fOutputList->Add(fNclusterHLTwCut);
fOutputList->Add(fPhiHLT);
fOutputList->Add(fThetaHLT);
fOutputList->Add(fMultHLT);
- fOutputList->Add(fVertexVSNtracksHLT);
+ fOutputList->Add(fXVertexVSNtracksHLT);
+ fOutputList->Add(fYVertexVSNtracksHLT);
+ fOutputList->Add(fZVertexVSNtracksHLT);
+ fOutputList->Add(fZVertexHLTTemp);
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(fEtaMomentumcutHLT);
fOutputList->Add(fNclusVSphiHLT);
fOutputList->Add(fNclusVSthetaHLT);
fOutputList->Add(fStatusHLT);
fOutputList->Add(fStatusHLT_Ocl);
fOutputList->Add(fEventSpecieHLT);
+ for(int jj=0;jj<fNcontr;jj++){
+ fOutputList->Add(fXvertexVSNcontriOff[jj]);
+ fOutputList->Add(fXvertexVSNcontriHLT[jj]);
+ }
+ for(int jj=0;jj<fNcontr;jj++){
+ fOutputList->Add(fYvertexVSNcontriOff[jj]);
+ fOutputList->Add(fYvertexVSNcontriHLT[jj]);
+ }
+
+ for(int jj=0;jj<fNcontr;jj++){
+ fOutputList->Add(fZvertexVSNcontriOff[jj]);
+ fOutputList->Add(fZvertexVSNcontriHLT[jj]);
+ }
+
SetupESDtrackCuts();
}
//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);
fHistHLTTrigger->Fill(i);
}
+ //Select only beam-interaction
+ if(!(esdHLT->GetFiredTriggerClasses()).Contains("CINT1B-ABCE-NOPF-ALL"))
+ return;
+
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);
+ 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();
AliVertex *primVertexHLT = new AliVertex(vertexHLT, 0., 0);
Bool_t testVertexHLT=kTRUE;
- if(vertHLT->GetNContributors()<1) {
+ Int_t nr_contributorsHLT= vertHLT->GetNContributors();
+
+ if(nr_contributorsHLT<1) {
// SPD vertex
vertHLT = esdHLT->GetPrimaryVertexSPD();
- if(vertHLT->GetNContributors()<1) {
+ if(nr_contributorsHLT<1) {
// NO GOOD VERTEX, SKIP EVENT
testVertexHLT=kFALSE;
}
}
- fVertexVSNtracksHLT->Fill(vertHLT->GetNContributors(),vertHLT->GetZv());
- if(vertHLT->GetZ()!=0){
+ if(testVertexHLT){
fXYvertexHLT->Fill(vertHLT->GetX(), vertHLT->GetY() );
fXvertexHLT->Fill( vertHLT->GetX() );
fYvertexHLT->Fill( vertHLT->GetY() );
fZvertexHLT->Fill( vertHLT->GetZ() );
- }
-
+ fZVertexHLTTemp->Fill(vertHLT->GetZ());
+ for(int kkk=0; kkk<fNcontr-1;kkk++){
+ if(nr_contributorsHLT>=fNcontrArray[kkk] && nr_contributorsHLT<=fNcontrArray[kkk+1]){
+ fXvertexVSNcontriHLT[kkk]->Fill(vertHLT->GetX());
+ fYvertexVSNcontriHLT[kkk]->Fill(vertHLT->GetY());
+ fZvertexVSNcontriHLT[kkk]->Fill(vertHLT->GetZ());
+ }
+ }
+ if(nr_contributorsHLT>=fNcontrArray[fNcontr-1]){
+ fXvertexVSNcontriHLT[fNcontr-1]->Fill(vertHLT->GetX());
+ fYvertexVSNcontriHLT[fNcontr-1]->Fill(vertHLT->GetY());
+ fZvertexVSNcontriHLT[fNcontr-1]->Fill(vertHLT->GetZ());
+ }
- if(testVertexHLT){
- //if( vertHLT && vertHLT->GetNContributors() >= 5 && (TMath::Abs(vertHLT->GetZ())<5.5) ){
+ }
+ //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(esdtrackHLT->GetTPCNcls()>0) fNclusterHLT->Fill(esdtrackHLT->GetTPCNcls());
+ //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;
+
+ fDCAHLT->Fill(esdtrackHLT->GetD(esdHLT->GetPrimaryVertex()->GetXv(), esdHLT->GetPrimaryVertex()->GetYv(), bfield) );
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((esdtrackHLT->GetStatus()&AliESDtrack::kTPCin) || (esdtrackHLT->GetStatus()&AliESDtrack::kTPCin && esdtrackHLT->GetStatus()&AliESDtrack::kTPCout))
+ fNclusterHLT->Fill(esdtrackHLT->GetTPCNcls());
+
+ //ESD-cut
+ //At the moment not included!
+ //if(!fESDHLTtrackCuts->AcceptTrack(esdtrackHLT)) continue;
- if((esdHLT->GetEventSpecie()==16)) {
- Printf("Reject laser event %d",esdOFF->GetEventSpecie());
- continue; //reject laser events
+ 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->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() );
+ 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; //cut away tracks with mom<0.3GeV
- fEtaDCAcutHLT->Fill(esdtrackHLT->Eta());
+ fEtaHLT->Fill(esdtrackHLT->Eta());
+ fdEdxHLT->Fill( esdtrackHLT->GetTPCsignal() );
+ fdEdxVSPHLT->Fill( TMath::Abs(esdtrackHLT->Pt()), esdtrackHLT->GetTPCsignal() );
+
+ //cut away tracks with mom<0.3GeV
+ //if(TMath::Abs(esdtrackHLT->Pt()) <Momcut) continue;
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()) );
-
-
+ 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
}
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;
- // Printf("This vertex is away");
}
}
- fVertexVSNtracksOff->Fill(vertOff->GetNContributors(),vertOff->GetZv());
- if(vertOff->GetZ()!=0){
+ if(testVertex){
fXYvertexOff->Fill(vertOff->GetX(), vertOff->GetY() );
fXvertexOff->Fill( vertOff->GetX() );
fYvertexOff->Fill( vertOff->GetY() );
fZvertexOff->Fill( vertOff->GetZ() );
- }
- if(testVertex){
+ for(int kkk=0; kkk<fNcontr-1;kkk++){
+ if(nr_contributorsOff>=fNcontrArray[kkk] && nr_contributorsOff<=fNcontrArray[kkk+1] ){
+ fXvertexVSNcontriOff[kkk]->Fill(vertOff->GetX() );
+ fYvertexVSNcontriOff[kkk]->Fill(vertOff->GetY() );
+ fZvertexVSNcontriOff[kkk]->Fill(vertOff->GetZ() );
+ }
+ }
+ if(nr_contributorsOff>=fNcontrArray[fNcontr-1]){
+ fXvertexVSNcontriOff[fNcontr-1]->Fill(vertOff->GetX());
+ fYvertexVSNcontriOff[fNcontr-1]->Fill(vertOff->GetY());
+ fZvertexVSNcontriOff[fNcontr-1]->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;
- 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]) {
if(esdtrackOFF->GetTPCNcls()==0) fStatusOff_Ocl->Fill(jjj);
}
}
- if(esdtrackOFF->GetTPCNcls()>0) fNclusterOff->Fill(esdtrackOFF->GetTPCNcls());
+ // 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;
+
+ fDCAOff->Fill(esdtrackOFF->GetD(esdOFF->GetPrimaryVertex()->GetXv(), esdOFF->GetPrimaryVertex()->GetYv(), bfield) );
+ fChargeOff->Fill(esdtrackOFF->Charge());
+
+ if((esdtrackOFF->GetStatus()&AliESDtrack::kTPCin) || (esdtrackOFF->GetStatus()&AliESDtrack::kTPCin && esdtrackOFF->GetStatus()&AliESDtrack::kTPCout))
+ fNclusterOff->Fill(esdtrackOFF->GetTPCNcls());
+
+ // -- ESD cuts
+ //Not included at the moment
+ //if(!fESDOfftrackCuts->AcceptTrack(esdtrackOFF) ) continue;
- 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) );
+ 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->P()), esdtrackOFF->GetTPCsignal() );
-
- if(TMath::Abs(esdtrackOFF->Pt()) < Momcut) continue;//cut away tracks with mom<0.3GeV
- fEtaDCAcutOff->Fill(esdtrackOFF->Eta());
+ fdEdxVSPOff->Fill( TMath::Abs(esdtrackOFF->Pt()), esdtrackOFF->GetTPCsignal() );
+
+ //cut away tracks with mom<0.3GeV
+ //if(TMath::Abs(esdtrackOFF->Pt()) < Momcut) continue;
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()) );
-
+ 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()){
Bool_t print_png=kFALSE;
if(print_png){
+
+ TF1 *signalX= new TF1("signalX","gaus",-1,1);
+ TF1 *signalY= new TF1("signalY","gaus",-1,1);
+ TF1 *signalZ= new TF1("signalZ","gaus",-30,30);
- Int_t maxbin =0;
+ signalZ->SetLineColor(8);
+ signalZ->SetLineWidth(2);
+
+ fXVertexVSNtracksHLT->SetMarkerStyle(7);
+ fXVertexVSNtracksHLT->SetMarkerSize(7);
+ fXVertexVSNtracksOff->SetMarkerStyle(7);
+ fXVertexVSNtracksOff->SetMarkerSize(7);
+
+ fYVertexVSNtracksHLT->SetMarkerStyle(7);
+ fYVertexVSNtracksHLT->SetMarkerSize(7);
+ fYVertexVSNtracksOff->SetMarkerStyle(7);
+ fYVertexVSNtracksOff->SetMarkerSize(7);
+
+ fZVertexVSNtracksHLT->Sumw2();
+ fZVertexVSNtracksHLT->SetMarkerStyle(21);
+ fZVertexVSNtracksHLT->SetMarkerSize(0.7);
+ fZVertexVSNtracksOff->Sumw2();
+ fZVertexVSNtracksOff->SetMarkerStyle(21);
+ fZVertexVSNtracksOff->SetMarkerSize(0.7);
+
+ for(int jj=0;jj<fNcontr;jj++){
+
+ fXvertexVSNcontriOff[jj]->Fit(signalX,"RQ");
+ fXVertexVSNtracksOff->Fill(fNcontrArray[jj],signalX->GetParameter(2));
+
+ fYvertexVSNcontriOff[jj]->Fit(signalY,"RQ");
+ fYVertexVSNtracksOff->Fill(fNcontrArray[jj],signalY->GetParameter(2));
+
+ fZvertexVSNcontriOff[jj]->Fit(signalZ,"RQ");
+ fZVertexVSNtracksOff->Fill(fNcontrArray[jj],signalZ->GetParameter(2));
+ fZVertexVSNtracksOff->Fill(fNcontrArray[jj],signalZ->GetParameter(2), signalZ->GetParError(2));
+
+ fXvertexVSNcontriHLT[jj]->Fit(signalX,"RQ");
+ fXVertexVSNtracksHLT->Fill(fNcontrArray[jj],signalX->GetParameter(2));
+
+ fYvertexVSNcontriHLT[jj]->Fit(signalY,"RQ");
+ fYVertexVSNtracksHLT->Fill(fNcontrArray[jj],signalY->GetParameter(2));
+
+ fZvertexVSNcontriHLT[jj]->Fit(signalZ,"RQ");
+ fZVertexVSNtracksHLT->Fill(fNcontrArray[jj],signalZ->GetParameter(2));
+ fZVertexVSNtracksHLT->Fill(fNcontrArray[jj],signalZ->GetParameter(2), signalZ->GetParError(2));
+ }
+
+ //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);
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");
+ 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());
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->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);
+ AliESDtrackCuts::kAny);
+
if(selPrimaries) { // 7*(0.0050+0.0060/pt^0.9)
fESDHLTtrackCuts->SetMaxDCAToVertexXYPtDep("0.0350+0.0420/pt^0.9");
}
void SetupESDtrackCuts();
+
+
+
+ /*
+ * ---------------------------------------------------------------------------------
+ * Members - private
+ * ---------------------------------------------------------------------------------
+ */
+
+
+ static const Int_t fNcontrArray[]; //! Array to hold the different number of contributors
+ static const Int_t fNcontr; //! Array size
+
+
//----------------------------------------------------------------------------------
-
- AliESDtrackCuts *fESDOfftrackCuts; // ESD cuts
- AliESDtrackCuts *fESDHLTtrackCuts; // ESD cuts - on HLT object
-
+
+
+ AliESDtrackCuts *fESDOfftrackCuts; //! ESD cuts
+ AliESDtrackCuts *fESDHLTtrackCuts; //! ESD cuts - on HLT object
+
TList *fOutputList; // list of output histograms
- TH1F *fHistTrigger, *fHistHLTTrigger; // trigger counters
-
- TH1F *fChargeOff; // Charge distribution
- TH1F *fMomentumOff; // momentum
- TH1F *fDCAOff; // track DCA to beam line
- TH1F *fNclusterOff; // #clusters per track
- TH1F *fNclusterOffwCut; // #clusters per track w cuts
- TH1F *fdEdxOff; // TPC signal (offline)
- TH2F *fdEdxVSPOff; // dE/dx vs. momentum
- TH1F *fPhiOff; // azimuthal angle distribution
- TH1F *fThetaOff; // polar angle distribution
- TH1F *fMultOff; // track multiplicity of the event
- TH2F *fVertexVSNtracksOff;// Vertex resolution vs nr contrib tracks
- TH2F *fXYvertexOff; // XY primary vertex distribution
- TH1F *fXvertexOff; // X primary vertex distribution
- TH1F *fYvertexOff; // Y primary vertex distribution
- TH1F *fZvertexOff; // Z primary vertex distribution
- TH1F *fEtaOff; // pseudorapidity
- TH1F *fEtaDCAcutOff; // pseudorapidity with DCA cut
- TH1F *fEtaOffTpc; // pseudorapidity for kTPCin
- TH1F *fEtaOffTpcIts; // pseudorapidity for kTPCin && kITSin
- 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 *fHistTrigger, *fHistHLTTrigger; //! trigger counters
+
+ TH1F *fChargeOff; //! Charge distribution
+ TH1F *fMomentumOff; //! momentum
+ TH1F *fMomentumOffTpc; //! pseudorapidity for kTPCin
+ TH1F *fMomentumOffTpcIts; //! pseudorapidity for kTPCin && kITSin
+ TH1F *fDCAOff; //! track DCA to beam line
+ TH1F *fNclusterOff; //! #clusters per track
+ TH1F *fNclusterOffwCut; //! #clusters per track w cuts
+ TH1F *fdEdxOff; //! TPC signal (offline)
+ TH2F *fdEdxVSPOff; //! dE/dx vs. momentum
+ TH1F *fPhiOff; //! azimuthal angle distribution
+ TH1F *fThetaOff; //! polar angle distribution
+ TH1F *fMultOff; //! track multiplicity of the event
+ TH2F *fXVertexVSNtracksOff;//! X Vertex resolution vs nr contrib tracks
+ TH2F *fYVertexVSNtracksOff;//! Y Vertex resolution vs nr contrib tracks
+ TH2F *fZVertexVSNtracksOff;//! Z Vertex resolution vs nr contrib tracks
+ TH1F *fZVertexOffTemp; //! Temporary histogram to calculate vertex distribution
+ TH2F *fXYvertexOff; //! XY primary vertex distribution
+ TH1F *fXvertexOff; //! X primary vertex distribution
+ TH1F *fYvertexOff; //! Y primary vertex distribution
+ TH1F *fZvertexOff; //! Z primary vertex distribution
+ TH1F *fEtaOff; //! pseudorapidity
+ TH1F *fEtaMomentumcutOff; //! pseudorapidity with DCA cut
+ 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
- TH1F *fMomentumHLT; // momentum
- TH1F *fDCAHLT; // track DCA to beam line
- TH1F *fNclusterHLT; // #clusters per track
- TH1F *fNclusterHLTwCut; // #clusters per track with cuts
- TH1F *fdEdxHLT; // TPC signal (offline)
- TH2F *fdEdxVSPHLT; // dE/dx vs. momentum
- TH1F *fPhiHLT; // azimuthal angle distribution
- TH1F *fThetaHLT; // polar angle distribution
- TH1F *fMultHLT; // track multiplicity of the event
- TH2F *fVertexVSNtracksHLT;// Vertex resolution vs nr contrib tracks
- TH2F *fXYvertexHLT; // XY primary vertex distribution
- TH1F *fXvertexHLT; // X primary vertex distribution
- TH1F *fYvertexHLT; // Y primary vertex distribution
- TH1F *fZvertexHLT; // Z primary vertex distribution
- TH1F *fEtaHLT; // pseudorapidity
- TH1F *fEtaDCAcutHLT; // pseudorapidity with DCA cut
- TH1F *fEtaHLTTpc; // pseudorapidity for kTPCin
- TH1F *fEtaHLTTpcIts; // pseudorapidity for kTPCin && kITSin
- 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
+ TH1F *fChargeHLT; //! Charge distribution
+ TH1F *fMomentumHLT; //! momentum
+ TH1F *fMomentumHLTTpc; //! pseudorapidity for kTPCin
+ TH1F *fMomentumHLTTpcIts; //! pseudorapidity for kTPCin && kITSin
+ TH1F *fDCAHLT; //! track DCA to beam line
+ TH1F *fNclusterHLT; //! #clusters per track
+ TH1F *fNclusterHLTwCut; //! #clusters per track with cuts
+ TH1F *fdEdxHLT; //! TPC signal (offline)
+ TH2F *fdEdxVSPHLT; //! dE/dx vs. momentum
+ TH1F *fPhiHLT; //! azimuthal angle distribution
+ TH1F *fThetaHLT; //! polar angle distribution
+ TH1F *fMultHLT; //! track multiplicity of the event
+ TH2F *fXVertexVSNtracksHLT;//! X Vertex resolution vs nr contrib tracks
+ TH2F *fYVertexVSNtracksHLT;//! Y Vertex resolution vs nr contrib tracks
+ TH2F *fZVertexVSNtracksHLT;//! Z Vertex resolution vs nr contrib tracks
+ TH1F *fZVertexHLTTemp; //! Temporary histogram to calculate vertex distribution
+ TH2F *fXYvertexHLT; //! XY primary vertex distribution
+ TH1F *fXvertexHLT; //! X primary vertex distribution
+ TH1F *fYvertexHLT; //! Y primary vertex distribution
+ TH1F *fZvertexHLT; //! Z primary vertex distribution
+ TH1F *fEtaHLT; //! pseudorapidity
+ TH1F *fEtaMomentumcutHLT; //! pseudorapidity with DCA cut
+ 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
-
+ TObjArray *fTrgClsArray; //! array of trigger classes
+
+
+ TH1F *fXvertexVSNcontriOff[7]; //! X vertex distribution for various number of contributors
+ TH1F *fYvertexVSNcontriOff[7]; //! Y vertex distribution for various number of contributors
+ TH1F *fZvertexVSNcontriOff[7]; //! Z vertex distribution for various number of contributors
+ TH1F *fXvertexVSNcontriHLT[7]; //! X vertex distribution for various number of contributors
+ TH1F *fYvertexVSNcontriHLT[7]; //! Y vertex distribution for various number of contributors
+ TH1F *fZvertexVSNcontriHLT[7]; //! Z vertex distribution for various number of contributors
+
+
+
// TH1F *fDCAOff_trig; //! track DCA to beam line for triggered events
// TH1F *fNclusterOff_trig; //! #clusters per track for triggered events
//