fVtxXResMax(1.e99),
fVtxYResMax(1.e99),
fVtxZResMax(1.e99),
+ fVtxNCtrbMin(0),
+ fVtxNCtrbMax((Int_t)1.e9),
+ fVtxTPC(0),
fBitMap(0x0)
{
//
fVtxXResMax(1.e99),
fVtxYResMax(1.e99),
fVtxZResMax(1.e99),
+ fVtxNCtrbMin(0),
+ fVtxNCtrbMax((Int_t)1.e9),
+ fVtxTPC(0),
fBitMap(0x0)
{
//
fVtxXResMax(c.fVtxXResMax),
fVtxYResMax(c.fVtxYResMax),
fVtxZResMax(c.fVtxZResMax),
+ fVtxNCtrbMin(c.fVtxNCtrbMin),
+ fVtxNCtrbMax(c.fVtxNCtrbMax),
+ fVtxTPC(c.fVtxTPC),
fBitMap(c.fBitMap)
{
//
fVtxXResMax=c.fVtxXResMax;
fVtxYResMax=c.fVtxYResMax;
fVtxZResMax=c.fVtxZResMax;
+ fVtxNCtrbMin=c.fVtxNCtrbMin;
+ fVtxNCtrbMax=c.fVtxNCtrbMax;
+ fVtxTPC=c.fVtxTPC;
fBitMap=c.fBitMap;
}
fBitMap->SetBitNumber(0,kFALSE);
if(fRequireVtxCuts){
- const AliESDVertex* vtxESD = esd->GetVertex();
+ const AliESDVertex* vtxESD = fVtxTPC ? esd->GetPrimaryVertexTPC() : esd->GetPrimaryVertexSPD() ;
if(!vtxESD){
for(Int_t j=1;j<kNCuts;j++)fBitMap->SetBitNumber(j,kFALSE);
+ AliWarning("Cannot get vertex, skipping event");
return;
}
// Require the vertex to have been reconstructed successfully
if (strcmp(vtxESD->GetName(), "default")==0){
- AliWarning(Form(" No reconstructed vertex found, skip event"));
+ AliWarning(Form(" No reconstructed vertex found, skipping event"));
for(Int_t j=1;j<kNCuts;j++)fBitMap->SetBitNumber(j,kFALSE);
return;
}
vtxRes[1] = vtxESD->GetYRes();
vtxRes[2] = vtxESD->GetZRes();
+ Int_t nCtrb = vtxESD->GetNContributors();
+
// Apply the cut
if (vtxPos[0]>fVtxXMax || vtxPos[0]<fVtxXMin)
fBitMap->SetBitNumber(5,kFALSE);
if (vtxRes[2]==0 || vtxRes[2]>fVtxZResMax)
fBitMap->SetBitNumber(6,kFALSE);
+ if (nCtrb<fVtxNCtrbMin || nCtrb>fVtxNCtrbMax)
+ fBitMap->SetBitNumber(7,kFALSE);
+
}
return;
}
fhQA[kNTracks][index]->Fill(nTracks);
//look at vertex parameters:
- const AliESDVertex* vtxESD = esd->GetVertex();
+ const AliESDVertex* vtxESD = fVtxTPC ? esd->GetPrimaryVertexTPC() : esd->GetPrimaryVertexSPD();
if(!vtxESD)return;
// Require the vertex to have been reconstructed successfully
if (strcmp(vtxESD->GetName(), "default")==0)return;
// vertex position and uncertainties
- fhQA[kVtxPosX][index]->Fill(vtxESD->GetXv());
- fhQA[kVtxPosY][index]->Fill(vtxESD->GetYv());
- fhQA[kVtxPosZ][index]->Fill(vtxESD->GetZv());
- fhQA[kVtxResX][index]->Fill(vtxESD->GetXRes());
- fhQA[kVtxResY][index]->Fill(vtxESD->GetYRes());
- fhQA[kVtxResZ][index]->Fill(vtxESD->GetZRes());
+ fhQA[kVtxPosX] [index]->Fill(vtxESD->GetXv());
+ fhQA[kVtxPosY] [index]->Fill(vtxESD->GetYv());
+ fhQA[kVtxPosZ] [index]->Fill(vtxESD->GetZv());
+ fhQA[kVtxResX] [index]->Fill(vtxESD->GetXRes());
+ fhQA[kVtxResY] [index]->Fill(vtxESD->GetYRes());
+ fhQA[kVtxResZ] [index]->Fill(vtxESD->GetZRes());
+ fhQA[kVtxNCtrb][index]->Fill(vtxESD->GetNContributors());
}
fhQA[kVtxPosX][i] = new TH1F(Form("%s_Vtx_Pos_X%s",GetName(),str), "",100,-5.,5.);
fhQA[kVtxPosY][i] = new TH1F(Form("%s_Vtx_Pos_Y%s",GetName(),str), "",100,-5.,5.);
fhQA[kVtxPosZ][i] = new TH1F(Form("%s_Vtx_Pos_Z%s",GetName(),str), "",200,-50.,50.);
-
fhQA[kVtxResX][i] = new TH1F(Form("%s_Vtx_Res_X%s",GetName(),str), "",100,-1.,1.);
fhQA[kVtxResY][i] = new TH1F(Form("%s_Vtx_Res_Y%s",GetName(),str), "",100,-1.,1.);
fhQA[kVtxResZ][i] = new TH1F(Form("%s_Vtx_Res_Z%s",GetName(),str), "",100,-1.,1.);
+ fhQA[kVtxNCtrb][i] = new TH1F(Form("%s_Vtx_N_Ctrb%s",GetName(),str), "",1000,0.,1000.);
fhQA[kNTracks][i] ->SetXTitle("Number of ESD tracks");
fhQA[kVtxPosX][i] ->SetXTitle("Vertex Position X (cm)");
fhQA[kVtxResX][i] ->SetXTitle("Vertex Resolution X (cm)");
fhQA[kVtxResY][i] ->SetXTitle("Vertex Resolution Y (cm)");
fhQA[kVtxResZ][i] ->SetXTitle("Vertex Resolution Z (cm)");
-
+ fhQA[kVtxNCtrb][i] ->SetXTitle("Number of contributors");
}
for(Int_t i=0; i<kNCuts; i++) fhQA[i][1]->SetLineColor(color);
void SetVertexYResCut(Double_t yMax=1.e99){fVtxYResMax=yMax;} // cut values setter
void SetVertexZResCut(Double_t zMax=1.e99){fVtxZResMax=zMax;} // cut values setter
+ void SetVertexNContributors(Int_t min, Int_t max) {fVtxNCtrbMin=min; fVtxNCtrbMax=max;}
+ void SetUseTPCVertex() {fVtxTPC=kTRUE;}
+
Int_t GetNTracksMin() const {return fNTracksMin;} // cut values getter
Int_t GetNTracksMax() const {return fNTracksMax;} // cut values getter
Bool_t GetRequireVtxCuts() const {return fRequireVtxCuts;} // cut value getter
void SetHistogramBins(Int_t index, Int_t nbins, Double_t *bins);
void SetHistogramBins(Int_t index, Int_t nbins, Double_t xmin, Double_t xmax);
enum{kNTracks=0,
- kVtxPosX,
- kVtxPosY,
- kVtxPosZ,
- kVtxResX,
- kVtxResY,
- kVtxResZ,
- kNCuts=7,
- kNStepQA=2
- };
+ kVtxPosX,
+ kVtxPosY,
+ kVtxPosZ,
+ kVtxResX,
+ kVtxResY,
+ kVtxResZ,
+ kVtxNCtrb,
+ kNCuts,
+ kNStepQA=2
+ };
protected:
void SelectionBitMap(TObject* obj);
Double_t fVtxXResMax ;//Maximum value of sigma_vtx in X
Double_t fVtxYResMax ;//Maximum value of sigma_vtx in X
Double_t fVtxZResMax ;//Maximum value of sigma_vtx in X
+ Int_t fVtxNCtrbMin; //Min number of contributors to vertex
+ Int_t fVtxNCtrbMax; //Max number of contributors to vertex
+ Bool_t fVtxTPC; //Flag for use of TPC vertex
TBits *fBitMap ; //cut mask