#include "AliITSCalibrationSDD.h"
#include "AliITSresponseSDD.h"
#include "AliGeomManager.h"
+#include "AliMultiplicity.h"
#include <TSystem.h>
#include <TTree.h>
#include <TH1F.h>
fMinTPCpts(70),
fMinPt(0.5),
fNPtBins(8),
+ fMinMult(0),
+ fMaxMult(1e9),
fFitter(0),
fRunNb(0),
fOCDBLocation("local://$ALICE_ROOT/OCDB")
fOutput->SetOwner();
fOutput->SetName("OutputHistos");
- fHistNEvents = new TH1F("hNEvents", "Number of processed events",4,-1.5,2.5);
+ fHistNEvents = new TH1F("hNEvents", "Number of processed events",kNEvStatBins,-0.5,kNEvStatBins-0.5);
fHistNEvents->Sumw2();
fHistNEvents->SetMinimum(0);
- fHistNEvents->GetXaxis()->SetBinLabel(2,"All Events");
- fHistNEvents->GetXaxis()->SetBinLabel(3,"After Vertex cut");
- fHistNEvents->GetXaxis()->SetBinLabel(4,"After Pileup cut");
+ fHistNEvents->GetXaxis()->SetBinLabel(kEvAll+1,"All Events");
+ fHistNEvents->GetXaxis()->SetBinLabel(kEvCnt+1,"After Centrality cut");
+ fHistNEvents->GetXaxis()->SetBinLabel(kEvVtx+1,"After Vertex cut");
+ fHistNEvents->GetXaxis()->SetBinLabel(kEvPlp+1,"After Pileup cut");
+ fHistNEvents->GetXaxis()->SetBinLabel(kNTracks+1,"Tracks Accepted");
fOutput->Add(fHistNEvents);
fHistPtAccept = new TH1F("hPtAccept","Pt distrib of accepted tracks",50,0.,5.);
return;
}
//
+ if (!AcceptCentrality(esd)) return;
+ fHistNEvents->Fill(kEvCnt);
+
const AliESDVertex* vtx=0,*vtxSPD=0;
- fHistNEvents->Fill(0);
+ fHistNEvents->Fill(kEvAll);
if (fUseVertex) { // check the vertex if it is requested as an extra point
vtx = esd->GetPrimaryVertex();
vtxSPD = esd->GetPrimaryVertexSPD();
if (!AcceptVertex(vtx,vtxSPD)) return;
}
- fHistNEvents->Fill(1);
+
+ fHistNEvents->Fill(kEvVtx);
if (fRemovePileupWithSPD){
// skip events tagged by SPD as pileup
if(esd->IsPileupFromSPD()) return;
}
- fHistNEvents->Fill(2);
+ fHistNEvents->Fill(kEvPlp);
//
fFitter->SetBz(esd->GetMagneticField());
if(!array) continue;
arrayITS = PrepareTrack(array, vtx);
//
+ fHistNEvents->Fill(kNTracks);
+ //
Int_t npts = arrayITS->GetNPoints();
Int_t npts1 = fUseVertexForZOnly ? npts-1 : npts;
//
fHistNEvents = dynamic_cast<TH1F*>(fOutput->FindObject("hNEvents"));
if(fHistNEvents){
- printf("Number of analyzed events = %d\n",(Int_t)(fHistNEvents->GetBinContent(2)));
+ printf("Number of analyzed events = %d, %d tracks accepted\n",
+ (Int_t)fHistNEvents->GetBinContent(kEvAcc+1),(Int_t)fHistNEvents->GetBinContent(kNTracks+1));
}else{
printf("Warning: pointer to fHistNEvents is NULL\n");
}
}
+//_______________________________________________________________________________________
+Bool_t AliAnalysisTaskITSAlignQA::AcceptCentrality(const AliESDEvent *esd) const
+{
+ // check if events is in the required multiplicity range
+ //
+ const AliMultiplicity *alimult = esd->GetMultiplicity();
+ Int_t nclsSPDouter=0;
+ if(alimult) nclsSPDouter = alimult->GetNumberOfITSClusters(1);
+ if(nclsSPDouter<fMinMult || nclsSPDouter>fMaxMult) return kFALSE;
+ //
+ return kTRUE;
+}
class AliAnalysisTaskITSAlignQA : public AliAnalysisTaskSE {
public:
-
+ enum {kEvAll=0,kEvCnt,kEvVtx,kEvPlp,kNTracks,kNEvStatBins, kEvAcc=kEvPlp};
AliAnalysisTaskITSAlignQA();
virtual ~AliAnalysisTaskITSAlignQA();
void SetUseVertex(Bool_t v=kTRUE) { fUseVertex = v; }
void SetUseVertexForZOnly(Bool_t v=kTRUE) { fUseVertexForZOnly = v; } // Use the vertex for SDD Z residuals only
void SetRemovePileupWithSPD(Bool_t opt=kTRUE) { fRemovePileupWithSPD = opt; }
-
- void SetOCDBInfo(UInt_t runNb, const char *location) {
+ void SetMinMaxMult(Double_t mn=0,Double_t mx=1e9) {fMinMult=mn; fMaxMult=mx;}
+ void SetOCDBInfo(UInt_t runNb, const char *location) {
fRunNb=runNb;
fOCDBLocation=location;
}
Bool_t AcceptTrack(const AliESDtrack * track);
Bool_t AcceptVertex(const AliESDVertex * vtx, const AliESDVertex * vtxSPD);
+ Bool_t AcceptCentrality(const AliESDEvent *esd) const;
void CreateSPDHistos();
void CreateSDDHistos();
void CreateSSDHistos();
Int_t fMinTPCpts; // Minimum number of TPC points per track
Float_t fMinPt; // Minimum pt to accept tracks
Int_t fNPtBins; // number of pt bins
+ Double_t fMinMult; // min centrality cut
+ Double_t fMaxMult; // max centrality cut
Double_t fPtBinLimits[kMaxPtBins+1]; // limits of Pt bins
AliITSTPArrayFit* fFitter; // Track Point fitter
Int_t fRunNb; // Run number
TString fOCDBLocation; // OCDB location
- ClassDef(AliAnalysisTaskITSAlignQA,4);
+ ClassDef(AliAnalysisTaskITSAlignQA,5);
};
-AliAnalysisTaskITSAlignQA *AddTaskITSAlign(Int_t nrun, Int_t year){
+AliAnalysisTaskITSAlignQA *AddTaskITSAlign(Int_t nrun, Int_t year, Bool_t pbpb=kFALSE) {
AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
if (!mgr) {
// taskali->SelectCollisionCandidates();
taskali->SetOCDBInfo(nrun,Form("alien://folder=/alice/data/%d/OCDB",year)) ;
mgr->AddTask(taskali);
-
+ //
+ taskali->SetUseVertex(kTRUE);
+ taskali->SetUseVertexForZOnly(kFALSE);
+ taskali->SetMinMaxMult(0.,1070.);
+ if (pbpb) {
+ // taskali->SetMinMaxMult(20.,1070.);
+ taskali->SetRemovePileupWithSPD(kFALSE);
+ //
+ // taskali->SetDoSPDResiduals(kFALSE);
+ // taskali->SetDoSDDResiduals(kFALSE);
+ // taskali->SetDoSSDResiduals(kFALSE);
+ //
+ }
+ //
TString outputFileName = AliAnalysisManager::GetCommonFileName();
outputFileName += ":ITSAlignQA";