1 // QA task for central production study
2 // author: Martin Poghosyan
11 #include "AliVEvent.h"
12 #include "AliESDEvent.h"
13 #include "AliESDtrack.h"
14 #include "AliHeader.h"
15 #include "AliESDInputHandler.h"
16 #include "AliAnalysisManager.h"
17 #include "AliMultiplicity.h"
18 #include "AliTriggerAnalysis.h"
19 #include "AliESDVertex.h"
20 #include "AliESDtrackCuts.h"
22 #include "AliAnalysisTaskCPQA.h"
25 ClassImp(AliAnalysisTaskCPQA)
27 //________________________________________________________________________
28 AliAnalysisTaskCPQA::AliAnalysisTaskCPQA(const char *name)
29 : AliAnalysisTaskSE(name),
37 for(Int_t i = 0; i<4; i++)
45 fhReferenceMultiplicity[i]=0;
53 DefineOutput(1, TList::Class());
56 AliAnalysisTaskCPQA::~AliAnalysisTaskCPQA()
58 if (fOutputList && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) {
59 printf("Deleteing output\n");
67 delete fTriggerAnalysis;
75 //________________________________________________________________________
76 void AliAnalysisTaskCPQA::UserCreateOutputObjects()
78 fTriggerAnalysis = new AliTriggerAnalysis();
79 if (fUseMC) fTriggerAnalysis->SetAnalyzeMC(1);
84 fOutputList = new TList();
85 fOutputList->SetOwner();
88 fhEvent = new TH1F("hEvent","hEvent",100, -0.5, 99.5);
89 fOutputList->Add(fhEvent);
91 for(Int_t i = 0; i<4; i++)
93 fhV0A[i] = Hist2D(Form("hV0A_%d",i), 5, -1.5, 3.5, 5, -1.5, 3.5,"V0A_{online}","V0A_{offline}"); fOutputList->Add(fhV0A[i]);
94 fhV0C[i] = Hist2D(Form("hV0C_%d",i), 5, -1.5, 3.5, 5, -1.5, 3.5,"V0C_{online}","V0C_{offline}"); fOutputList->Add(fhV0C[i]);
95 fhV0online[i] = Hist2D(Form("hV0online_%d",i) , 5, -1.5, 3.5, 5, -1.5, 3.5,"V0C_{online}","V0A_{online}"); fOutputList->Add(fhV0online[i]);
96 fhV0offline[i] = Hist2D(Form("hV0offline_%d",i), 5, -1.5, 3.5, 5, -1.5, 3.5,"V0C_{offline}","V0A_{offline}"); fOutputList->Add(fhV0offline[i]);
97 fhSPDFiredChip[i] = Hist1D(Form("fhSPDFiredChip_%d",i), 1200, -0.5, 1199.5); fOutputList->Add(fhSPDFiredChip[i]);
98 fhSPDFastOrChip[i] = Hist1D(Form("fhSPDFastOrChip_%d",i), 1200, -0.5, 1199.5); fOutputList->Add(fhSPDFastOrChip[i]);
99 fhReferenceMultiplicity[i] = Hist1D(Form("fhReferenceMultiplicity_%d",i), 50, -10.5, 39.5); fOutputList->Add(fhReferenceMultiplicity[i]);
100 fhVtxTrack[i] = Hist3D(Form("fhVtxTrack_%d",i), 100, -1, 1, 100, -1, 1, 1000, -30, 30, "x_{vtx}", "y_{vtx}", "z_{vtx}"); fOutputList->Add(fhVtxTrack[i]);
103 PostData(1, fOutputList);
110 TH1F* AliAnalysisTaskCPQA::Hist1D(const char* name, Int_t nBins, Double_t xMin, Double_t xMax, const char* xLabel, Int_t color, Int_t lst, const char* yLabel)
112 // create a 1D histogram
114 TH1F* res = new TH1F(name, name, nBins, xMin, xMax);
115 if (xLabel) res->GetXaxis()->SetTitle(xLabel);
116 if (yLabel) res->GetYaxis()->SetTitle(yLabel);
117 res->SetLineColor(color);
118 res->SetMarkerColor(color);
119 res->SetLineStyle(lst);
124 TH2F *AliAnalysisTaskCPQA::Hist2D(const char* name, Int_t nBinsx, Double_t xMin, Double_t xMax, Int_t nBinsy, Double_t yMin, Double_t yMax, const char* xLabel, const char* yLabel, Int_t color)
126 // create a 2D histogram
128 TH2F *res = new TH2F(name, name, nBinsx, xMin, xMax, nBinsy, yMin, yMax);
129 if (xLabel) res->GetXaxis()->SetTitle(xLabel);
130 if (yLabel) res->GetYaxis()->SetTitle(yLabel);
131 // res->SetMarkerStyle(kFullCircle);
132 // res->SetOption("E");
133 res->SetLineColor(color);
134 // fOutputList->Add(res);
138 TH3F *AliAnalysisTaskCPQA::Hist3D(const char* name, Int_t nBinsx, Double_t xMin, Double_t xMax, Int_t nBinsy, Double_t yMin, Double_t yMax, Int_t nBinsz, Double_t zMin, Double_t zMax, const char* xLabel, const char* yLabel, const char *zLabel)
140 // create a 3D histogram
142 TH3F *res = new TH3F(name, name, nBinsx, xMin, xMax, nBinsy, yMin, yMax, nBinsz, zMin, zMax);
143 if (xLabel) res->GetXaxis()->SetTitle(xLabel);
144 if (yLabel) res->GetYaxis()->SetTitle(yLabel);
145 if (zLabel) res->GetZaxis()->SetTitle(zLabel);
146 // res->SetMarkerStyle(kFullCircle);
147 // res->SetOption("E");
148 // res->SetLineColor(color);
149 // fOutputList->Add(res);
155 //________________________________________________________________________
156 void AliAnalysisTaskCPQA::UserExec(Option_t *)
159 // Called for each event
162 AliVEvent *event = InputEvent();
164 Error("UserExec", "Could not retrieve event");
168 fESD = dynamic_cast<AliESDEvent*> (InputEvent());
177 PostData(1, fOutputList);
180 //________________________________________________________________________
181 void AliAnalysisTaskCPQA::Terminate(Option_t*)
187 void AliAnalysisTaskCPQA::LoopESDMC()
190 // Called for each event
197 AliMCEvent *mcEvent = (AliMCEvent*) MCEvent();
199 Error("LoopESDMC", "Could not retrieve MC event");
204 AliHeader* header = mcEvent->Header();
207 AliDebug(AliLog::kError, "Header not available");
211 AliGenEventHeader* genHeader = header->GenEventHeader();
214 AliDebug(AliLog::kError, "GenHeader not available");
226 //________________________________________________________________________
227 void AliAnalysisTaskCPQA::LoopESD()
230 Bool_t fkIsPhysSel = kFALSE;
237 if(fESD->IsTriggerClassFired("CINT1-B-NOPF-ALLNOTRD")) TrType=0;
238 else if(fESD->IsTriggerClassFired("CINT1-AC-NOPF-ALLNOTRD")) TrType=1;
239 else if(fESD->IsTriggerClassFired("CINT1-E-NOPF-ALLNOTRD")) TrType=3;
241 else if(fESD->IsTriggerClassFired("CINT1-B-NOPF-FASTNOTRD")) TrType=0;
242 else if(fESD->IsTriggerClassFired("CINT1-AC-NOPF-FASTNOTRD")) TrType=1;
243 else if(fESD->IsTriggerClassFired("CINT1-E-NOPF-FASTNOTRD")) TrType=3;
245 else if(fESD->IsTriggerClassFired("CINT1B-ABCE-NOPF-ALL")) TrType=0;
246 else if(fESD->IsTriggerClassFired("CINT1A-ABCE-NOPF-ALL")) TrType=1;
247 else if(fESD->IsTriggerClassFired("CINT1C-ABCE-NOPF-ALL")) TrType=2;
248 else if(fESD->IsTriggerClassFired("CINT1-E-NOPF-ALL")) TrType=3;
250 UInt_t mask = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected();
251 fkIsPhysSel=(mask & AliVEvent::kMB) ? 1 : 0; // check if minimum bias trigger class fired
254 if(!fkIsPhysSel) return;
255 printf("TrType = %d\n",TrType);
256 if(TrType==-1) return;
262 Int_t V0Aonline = fTriggerAnalysis->V0Trigger(fESD, AliTriggerAnalysis::kASide, kTRUE) ;
263 Int_t V0Conline = fTriggerAnalysis->V0Trigger(fESD, AliTriggerAnalysis::kCSide, kTRUE) ;
264 Int_t V0Aoffline = fTriggerAnalysis->V0Trigger(fESD, AliTriggerAnalysis::kASide, kFALSE) ;
265 Int_t V0Coffline = fTriggerAnalysis->V0Trigger(fESD, AliTriggerAnalysis::kCSide, kFALSE) ;
268 fhV0A[TrType]->Fill(V0Aonline, V0Aoffline);
269 fhV0C[TrType]->Fill(V0Conline, V0Coffline);
270 fhV0online[TrType]->Fill(V0Conline, V0Aonline);
271 fhV0offline[TrType]->Fill(V0Coffline, V0Aoffline);
274 if(V0Aoffline!=0 || V0Coffline!=0)
281 const AliMultiplicity *mult = fESD->GetMultiplicity();
282 for (Int_t i=0; i<1200; i++)
284 if(mult->TestFiredChipMap(i)) fhSPDFiredChip[TrType]->Fill(i);
285 if(mult->TestFastOrFiredChips(i)) fhSPDFastOrChip[TrType]->Fill(i);
289 fhReferenceMultiplicity[TrType]->Fill(AliESDtrackCuts::GetReferenceMultiplicity(fESD,AliESDtrackCuts::kTrackletsITSTPC,1.2));
292 const AliESDVertex *primaryTrackVtx = fESD->GetPrimaryVertexTracks();
293 if (!primaryTrackVtx->GetStatus() && !primaryTrackVtx->GetStatus() )
300 fhVtxTrack[TrType]->Fill(primaryTrackVtx->GetX(), primaryTrackVtx->GetY(), primaryTrackVtx->GetZ());