fVtxXResMax(1.e99),
fVtxYResMax(1.e99),
fVtxZResMax(1.e99),
- fBitMap(0x0),
- fhNBinsNTracks(0),
- fhBinLimNTracks(0),
- fhNBinsVtxPosX(0),
- fhBinLimVtxPosX(0),
- fhNBinsVtxPosY(0),
- fhBinLimVtxPosY(0),
- fhNBinsVtxPosZ(0),
- fhBinLimVtxPosZ(0),
- fhNBinsVtxResX(0),
- fhBinLimVtxResX(0),
- fhNBinsVtxResY(0),
- fhBinLimVtxResY(0),
- fhNBinsVtxResZ(0),
- fhBinLimVtxResZ(0)
+ fVtxNCtrbMin(0),
+ fVtxNCtrbMax((Int_t)1.e9),
+ fVtxTPC(0),
+ fVtxSPD(0),
+ fBitMap(0x0)
{
//
//ctor
fVtxXResMax(1.e99),
fVtxYResMax(1.e99),
fVtxZResMax(1.e99),
- fBitMap(0x0),
- fhNBinsNTracks(0),
- fhBinLimNTracks(0),
- fhNBinsVtxPosX(0),
- fhBinLimVtxPosX(0),
- fhNBinsVtxPosY(0),
- fhBinLimVtxPosY(0),
- fhNBinsVtxPosZ(0),
- fhBinLimVtxPosZ(0),
- fhNBinsVtxResX(0),
- fhBinLimVtxResX(0),
- fhNBinsVtxResY(0),
- fhBinLimVtxResY(0),
- fhNBinsVtxResZ(0),
- fhBinLimVtxResZ(0)
+ fVtxNCtrbMin(0),
+ fVtxNCtrbMax((Int_t)1.e9),
+ fVtxTPC(0),
+ fVtxSPD(0),
+ fBitMap(0x0)
{
//
//ctor
fVtxXResMax(c.fVtxXResMax),
fVtxYResMax(c.fVtxYResMax),
fVtxZResMax(c.fVtxZResMax),
- fBitMap(c.fBitMap),
- fhNBinsNTracks(c.fhNBinsNTracks),
- fhBinLimNTracks(c.fhBinLimNTracks),
- fhNBinsVtxPosX(c.fhNBinsVtxPosX),
- fhBinLimVtxPosX(c.fhBinLimVtxPosX),
- fhNBinsVtxPosY(c.fhNBinsVtxPosY),
- fhBinLimVtxPosY(c.fhBinLimVtxPosY),
- fhNBinsVtxPosZ(c.fhNBinsVtxPosZ),
- fhBinLimVtxPosZ(c.fhBinLimVtxPosZ),
- fhNBinsVtxResX(c.fhNBinsVtxResX),
- fhBinLimVtxResX(c.fhBinLimVtxResX),
- fhNBinsVtxResY(c.fhNBinsVtxResY),
- fhBinLimVtxResY(c.fhBinLimVtxResY),
- fhNBinsVtxResZ(c.fhNBinsVtxResZ),
- fhBinLimVtxResZ(c.fhBinLimVtxResZ)
+ fVtxNCtrbMin(c.fVtxNCtrbMin),
+ fVtxNCtrbMax(c.fVtxNCtrbMax),
+ fVtxTPC(c.fVtxTPC),
+ fVtxSPD(c.fVtxSPD),
+ fBitMap(c.fBitMap)
{
//
//copy constructor
}
}
- if(fhBinLimNTracks)delete fhBinLimNTracks;
- if(fhBinLimVtxPosX)delete fhBinLimVtxPosX;
- if(fhBinLimVtxPosY)delete fhBinLimVtxPosY;
- if(fhBinLimVtxPosZ)delete fhBinLimVtxPosZ;
- if(fhBinLimVtxResX)delete fhBinLimVtxResX;
- if(fhBinLimVtxResY)delete fhBinLimVtxResY;
- if(fhBinLimVtxResZ)delete fhBinLimVtxResZ;
-
if(fBitMap)delete fBitMap;
}
-
-//_____________________________________________________________________________
-void AliCFEventRecCuts::Init() {
- //
- // initialises all QA histograms
- //
- if(fIsQAOn)
- DefineHistograms();
-}
-
//_____________________________________________________________________________
void AliCFEventRecCuts::Initialise()
{
fhQA[i][j]=0x0;
}
}
-
- //set default bin number/ranges for QA histograms
-
- SetHistogramBins(kNTracks,23,-0.5,22.5);
- SetHistogramBins(kVtxPosX,100,-5,5);
- SetHistogramBins(kVtxPosY,100,-5,5);
- SetHistogramBins(kVtxPosZ,100,-50,50);
- SetHistogramBins(kVtxResX,100,-1,1);
- SetHistogramBins(kVtxResY,100,-1,1);
- SetHistogramBins(kVtxResZ,100,-1,1);
-
}
//____________________________________________________________________
fVtxXResMax=c.fVtxXResMax;
fVtxYResMax=c.fVtxYResMax;
fVtxZResMax=c.fVtxZResMax;
+ fVtxNCtrbMin=c.fVtxNCtrbMin;
+ fVtxNCtrbMax=c.fVtxNCtrbMax;
+ fVtxTPC=c.fVtxTPC;
+ fVtxSPD=c.fVtxSPD;
fBitMap=c.fBitMap;
- fhNBinsNTracks=c.fhNBinsNTracks;
- fhBinLimNTracks=c.fhBinLimNTracks;
- fhNBinsVtxPosX=c.fhNBinsVtxPosX;
- fhBinLimVtxPosX=c.fhBinLimVtxPosX;
- fhNBinsVtxPosY=c.fhNBinsVtxPosY;
- fhBinLimVtxPosY=c.fhBinLimVtxPosY;
- fhNBinsVtxPosZ=c.fhNBinsVtxPosZ;
- fhBinLimVtxPosZ=c.fhBinLimVtxPosZ;
- fhNBinsVtxResX=c.fhNBinsVtxResX;
- fhBinLimVtxResX=c.fhBinLimVtxResX;
- fhNBinsVtxResY=c.fhNBinsVtxResY;
- fhBinLimVtxResY=c.fhBinLimVtxResY;
- fhNBinsVtxResZ=c.fhNBinsVtxResZ;
- fhBinLimVtxResZ=c.fhBinLimVtxResZ;
}
for (Int_t i=0; i<c.kNCuts; i++){
//Check if the requested cuts are passed
//
- TBits *bitmap = SelectionBitMap(obj);
+ SelectionBitMap(obj);
+
+ if (fIsQAOn) FillHistograms(obj,0);
Bool_t isSelected = kTRUE;
- for (UInt_t icut=0; icut<bitmap->GetNbits();icut++)
- if(!bitmap->TestBitNumber(icut)) isSelected = kFALSE;
+ for (UInt_t icut=0; icut<fBitMap->GetNbits();icut++)
+ if(!fBitMap->TestBitNumber(icut)) isSelected = kFALSE;
- return isSelected;
+ if (!isSelected) return kFALSE ;
+ if (fIsQAOn) FillHistograms(obj,1);
+ return kTRUE;
}
-
//____________________________________________________________________
-TBits *AliCFEventRecCuts::SelectionBitMap(TObject* obj) {
+void AliCFEventRecCuts::SelectionBitMap(TObject* obj) {
//
//cut on the number of charged tracks and on the event vertex.
//so far specific to AliESDEvents
//Check if the requested cuts are passed and return a bitmap
for(Int_t j=0;j<kNCuts;j++)fBitMap->SetBitNumber(j,kFALSE);
AliESDEvent* esd = dynamic_cast<AliESDEvent *>(obj);
- if ( !esd ) return fBitMap ;
+ if ( !esd ) return;
//now start checking the cuts,
//first assume the event will be accepted:
fBitMap->SetBitNumber(0,kFALSE);
if(fRequireVtxCuts){
- const AliESDVertex* vtxESD = esd->GetVertex();
+ const AliESDVertex* vtxESD = 0x0;
+ if (fVtxTPC) vtxESD = esd->GetPrimaryVertexTPC() ;
+ else if (fVtxSPD) vtxESD = esd->GetPrimaryVertexSPD() ;
+ else vtxESD = esd->GetPrimaryVertexTracks() ;
if(!vtxESD){
for(Int_t j=1;j<kNCuts;j++)fBitMap->SetBitNumber(j,kFALSE);
- return fBitMap;
+ 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 fBitMap;
+ return;
}
// Pick up the position and uncertainties
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);
- }
- return fBitMap;
-}
-
-//_____________________________________________________________________________
-void AliCFEventRecCuts::GetBitMap(TObject* obj, TBits *bitmap) {
- //
- // retrieve the pointer to the bitmap
- //
- bitmap = SelectionBitMap(obj);
+ 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 = 0x0;
+ if (fVtxTPC) vtxESD = esd->GetPrimaryVertexTPC() ;
+ else if (fVtxSPD) vtxESD = esd->GetPrimaryVertexSPD() ;
+ else vtxESD = esd->GetPrimaryVertexTracks() ;
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());
}
-//_____________________________________________________________________________
+//____________________________________________________________________
void AliCFEventRecCuts::SetHistogramBins(Int_t index, Int_t nbins, Double_t *bins)
{
//
- // QA histogram axis parameters
- // variable bin size:user inputs nbins and the vector of bin limits
- //
+ //setting x-axis bin limits of QA histogram fhQA[index]
+ //
- switch(index){
- case kNTracks:
- fhNBinsNTracks=nbins;
- fhBinLimNTracks=new Double_t[nbins+1];
- for(Int_t i=0;i<nbins+1;i++)fhBinLimNTracks[i]=bins[i];
- break;
- case kVtxPosX:
- fhNBinsVtxPosX=nbins;
- fhBinLimVtxPosX=new Double_t[nbins+1];
- for(Int_t i=0;i<nbins+1;i++)fhBinLimVtxPosX[i]=bins[i];
- break;
- case kVtxPosY:
- fhNBinsVtxPosY=nbins;
- fhBinLimVtxPosY=new Double_t[nbins+1];
- for(Int_t i=0;i<nbins+1;i++)fhBinLimVtxPosY[i]=bins[i];
- break;
- case kVtxPosZ:
- fhNBinsVtxPosZ=nbins;
- fhBinLimVtxPosZ=new Double_t[nbins+1];
- for(Int_t i=0;i<nbins+1;i++)fhBinLimVtxPosZ[i]=bins[i];
- break;
- case kVtxResX:
- fhNBinsVtxResX=nbins;
- fhBinLimVtxResX=new Double_t[nbins+1];
- for(Int_t i=0;i<nbins+1;i++)fhBinLimVtxResX[i]=bins[i];
- break;
- case kVtxResY:
- fhNBinsVtxResY=nbins;
- fhBinLimVtxResY=new Double_t[nbins+1];
- for(Int_t i=0;i<nbins+1;i++)fhBinLimVtxResY[i]=bins[i];
- break;
- case kVtxResZ:
- fhNBinsVtxResZ=nbins;
- fhBinLimVtxResZ=new Double_t[nbins+1];
- for(Int_t i=0;i<nbins+1;i++)fhBinLimVtxResZ[i]=bins[i];
- break;
+ for(Int_t i=0;i<kNStepQA;i++){
+ if(!fhQA[index][i]){AliWarning("non-existing histogram!");
+ return;
+ }
+ fhQA[index][i]->GetXaxis()->Set(nbins,bins);
}
-
}
-
-//_____________________________________________________________________________
+//____________________________________________________________________
void AliCFEventRecCuts::SetHistogramBins(Int_t index, Int_t nbins, Double_t xmin, Double_t xmax)
{
//
- // QA histogram axis parameters
- // fixed bin size: user inputs nbins, xmin and xmax
- //
- switch(index){
- case kNTracks:
- fhNBinsNTracks=nbins;
- fhBinLimNTracks=new Double_t[nbins+1];
- for(Int_t i=0;i<nbins+1;i++)fhBinLimNTracks[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
- break;
- case kVtxPosX:
- fhNBinsVtxPosX=nbins;
- fhBinLimVtxPosX=new Double_t[nbins+1];
- for(Int_t i=0;i<nbins+1;i++)fhBinLimVtxPosX[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
- break;
- case kVtxPosY:
- fhNBinsVtxPosY=nbins;
- fhBinLimVtxPosY=new Double_t[nbins+1];
- for(Int_t i=0;i<nbins+1;i++)fhBinLimVtxPosY[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
- break;
- case kVtxPosZ:
- fhNBinsVtxPosZ=nbins;
- fhBinLimVtxPosZ=new Double_t[nbins+1];
- for(Int_t i=0;i<nbins+1;i++)fhBinLimVtxPosZ[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
- break;
- case kVtxResX:
- fhNBinsVtxResX=nbins;
- fhBinLimVtxResX=new Double_t[nbins+1];
- for(Int_t i=0;i<nbins+1;i++)fhBinLimVtxResX[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
- break;
- case kVtxResY:
- fhNBinsVtxResY=nbins;
- fhBinLimVtxResY=new Double_t[nbins+1];
- for(Int_t i=0;i<nbins+1;i++)fhBinLimVtxResY[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
- break;
- case kVtxResZ:
- fhNBinsVtxResZ=nbins;
- fhBinLimVtxResZ=new Double_t[nbins+1];
- for(Int_t i=0;i<nbins+1;i++)fhBinLimVtxResZ[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
- break;
+ //setting x-axis bins and range of QA histogram fhQA[index]
+ //
+
+ for(Int_t i=0;i<kNStepQA;i++){
+ if(!fhQA[index][i]){AliWarning("non-existing histogram!");
+ return;
+ }
+ fhQA[index][i]->GetXaxis()->Set(nbins,xmin,xmax);
}
}
// book QA histograms
- Char_t str[256];
+ Char_t str[5];
for (Int_t i=0; i<kNStepQA; i++) {
- if (i==0) sprintf(str," ");
- else sprintf(str,"_cut");
-
- fhQA[kNTracks][i] = new TH1F(Form("%s_NTracks%s",GetName(),str), "",fhNBinsNTracks,fhBinLimNTracks);
- fhQA[kVtxPosX][i] = new TH1F(Form("%s_Vtx_Pos_X%s",GetName(),str), "",fhNBinsVtxPosX,fhBinLimVtxPosX);
- fhQA[kVtxPosY][i] = new TH1F(Form("%s_Vtx_Pos_Y%s",GetName(),str), "",fhNBinsVtxPosY,fhBinLimVtxPosY);
- fhQA[kVtxPosZ][i] = new TH1F(Form("%s_Vtx_Pos_Z%s",GetName(),str), "",fhNBinsVtxPosZ,fhBinLimVtxPosZ);
-
- fhQA[kVtxResX][i] = new TH1F(Form("%s_Vtx_Res_X%s",GetName(),str), "",fhNBinsVtxResX,fhBinLimVtxResX);
- fhQA[kVtxResY][i] = new TH1F(Form("%s_Vtx_Res_Y%s",GetName(),str), "",fhNBinsVtxResY,fhBinLimVtxResY);
- fhQA[kVtxResZ][i] = new TH1F(Form("%s_Vtx_Res_Z%s",GetName(),str), "",fhNBinsVtxResZ,fhBinLimVtxResZ);
+ if (i==0) snprintf(str,5," ");
+ else snprintf(str,5,"_cut");
+
+ fhQA[kNTracks][i] = new TH1F(Form("%s_NTracks%s",GetName(),str), "",501,-0.5,500.5);
+ 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 AliCFEventRecCuts::AddQAHistograms(TList *list) const {
+void AliCFEventRecCuts::AddQAHistograms(TList *qaList) {
//
// saves the histograms in a TList
//
- if(!fIsQAOn) return;
+
+ DefineHistograms();
for (Int_t j=0; j<kNStepQA; j++) {
for(Int_t i=0; i<kNCuts; i++)
- list->Add(fhQA[i][j]);
+ qaList->Add(fhQA[i][j]);
}
}