]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGLF/FORWARD/analysis/AliFMDAnalysisTaskDndeta.cxx
add maximum M02 band cut, retune fit param, define temporary m02 cut for eta and...
[u/mrichter/AliRoot.git] / PWGLF / FORWARD / analysis / AliFMDAnalysisTaskDndeta.cxx
CommitLineData
7c3e5162 1
2#include <TROOT.h>
3#include <TSystem.h>
4#include <TInterpreter.h>
5#include <TChain.h>
6#include <TFile.h>
7#include <TList.h>
8#include <iostream>
bb8a464f 9#include "TH1F.h"
7c3e5162 10#include "TH2F.h"
11#include "AliFMDAnalysisTaskDndeta.h"
12#include "AliAnalysisManager.h"
13#include "AliESDFMD.h"
14#include "AliESDEvent.h"
15#include "AliAODEvent.h"
16#include "AliAODHandler.h"
17#include "AliMCEventHandler.h"
18#include "AliStack.h"
19#include "AliLog.h"
20#include "AliESDVertex.h"
21#include "TMath.h"
22#include "AliFMDAnaParameters.h"
78f6f750 23//#include "AliFMDGeometry.h"
bb8a464f 24#include "AliGenEventHeader.h"
5c7816c0 25#include "AliGenPythiaEventHeader.h"
cc066cb9 26#include "AliHeader.h"
78f6f750 27//#include "TDatabasePDG.h"
28//#include "TParticlePDG.h"
cc066cb9 29#include "AliFMDStripIndex.h"
5c7816c0 30#include "AliESDInputHandler.h"
507687cd 31#include "AliGenDPMjetEventHeader.h"
032f0117 32#include "AliLog.h"
7c3e5162 33ClassImp(AliFMDAnalysisTaskDndeta)
34
35
36AliFMDAnalysisTaskDndeta::AliFMDAnalysisTaskDndeta()
37: fDebug(0),
38 fOutputList(0),
39 fInputList(0),
7c3e5162 40 fVertexString(0x0),
41 fNevents(),
059c7c6b 42 fNNSDevents(),
bb8a464f 43 fNMCevents(),
059c7c6b 44 fNMCNSDevents(),
bb8a464f 45 fStandalone(kTRUE),
daedf077 46 fLastTrackByStrip(0),
059c7c6b 47 fVtxEff(1),
48 fVtxEffNSD(1)
7c3e5162 49{
50 // Default constructor
51 DefineInput (0, TList::Class());
52 DefineOutput(0, TList::Class());
53}
54//_____________________________________________________________________
55AliFMDAnalysisTaskDndeta::AliFMDAnalysisTaskDndeta(const char* name, Bool_t SE):
56 AliAnalysisTask(name, "Density"),
57 fDebug(0),
58 fOutputList(0),
59 fInputList(0),
7c3e5162 60 fVertexString(0x0),
61 fNevents(),
059c7c6b 62 fNNSDevents(),
bb8a464f 63 fNMCevents(),
059c7c6b 64 fNMCNSDevents(),
bb8a464f 65 fStandalone(kTRUE),
daedf077 66 fLastTrackByStrip(0),
059c7c6b 67 fVtxEff(1),
68 fVtxEffNSD(1)
7c3e5162 69{
70 fStandalone = SE;
71 if(fStandalone) {
72 DefineInput (0, TList::Class());
73 DefineInput(1, TObjString::Class());
74 DefineOutput(0, TList::Class());
75
76 }
77}
78//_____________________________________________________________________
79void AliFMDAnalysisTaskDndeta::CreateOutputObjects()
80{
81 AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance();
82
7c3e5162 83 if(!fOutputList)
84 fOutputList = new TList();
85 fOutputList->SetName("BackgroundCorrected");
86
87
88 TH2F* hMult = 0;
059c7c6b 89 TH2F* hMultNSD = 0;
cc066cb9 90 TH1F* hHits = 0;
6c63da78 91 TH2F* hMultTrVtx = 0;
bb8a464f 92 TH1F* hPrimVertexBin = 0;
059c7c6b 93 TH1F* hPrimVertexBinNSD = 0;
bb8a464f 94
5ea1e0a9 95 TH2F* hBgTmp = pars->GetBackgroundCorrection(1, 'I', 0);
bb8a464f 96 TH1F* hPrimary = new TH1F("hMultvsEta","hMultvsEta",
5ea1e0a9 97 hBgTmp->GetNbinsX(),
98 hBgTmp->GetXaxis()->GetXmin(),
99 hBgTmp->GetXaxis()->GetXmax());
bb8a464f 100 hPrimary->Sumw2();
101 fOutputList->Add(hPrimary);
059c7c6b 102 TH1F* hPrimaryNSD = new TH1F("hMultvsEtaNSD","hMultvsEtaNSD",
103 hBgTmp->GetNbinsX(),
104 hBgTmp->GetXaxis()->GetXmin(),
105 hBgTmp->GetXaxis()->GetXmax());
106 hPrimaryNSD->Sumw2();
107 fOutputList->Add(hPrimaryNSD);
7c3e5162 108 Int_t nVtxbins = pars->GetNvtxBins();
b85ea106 109 TH2F* hBg = 0;
110 for(Int_t i = 0; i< nVtxbins; i++) {
111
112 for(Int_t det =1; det<=3;det++)
113 {
114 Int_t nRings = (det==1 ? 1 : 2);
115 for(Int_t ring = 0;ring<nRings;ring++)
116 {
117 Char_t ringChar = (ring == 0 ? 'I' : 'O');
118 Int_t nSec = (ring == 0 ? 20 : 40);
119
120
121
122 hBg = pars->GetBackgroundCorrection(det, ringChar, i);
7c3e5162 123 hMult = new TH2F(Form("dNdeta_FMD%d%c_vtxbin%d",det,ringChar,i),Form("dNdeta_FMD%d%c_vtxbin%d",det,ringChar,i),
124 hBg->GetNbinsX(),
125 hBg->GetXaxis()->GetXmin(),
126 hBg->GetXaxis()->GetXmax(),
127 nSec, 0, 2*TMath::Pi());
059c7c6b 128 hMultTrVtx = new TH2F(Form("dNdetaTrVtx_FMD%d%c_vtxbin%d",det,ringChar,i),Form("dNdetaTrVtx_FMD%d%c_vtxbin%d",det,ringChar,i),
129 hBg->GetNbinsX(),
130 hBg->GetXaxis()->GetXmin(),
131 hBg->GetXaxis()->GetXmax(),
132 nSec, 0, 2*TMath::Pi());
133 hMultNSD = new TH2F(Form("dNdetaNSD_FMD%d%c_vtxbin%d",det,ringChar,i),Form("dNdetaNSD_FMD%d%c_vtxbin%d",det,ringChar,i),
6c63da78 134 hBg->GetNbinsX(),
135 hBg->GetXaxis()->GetXmin(),
136 hBg->GetXaxis()->GetXmax(),
137 nSec, 0, 2*TMath::Pi());
18d4b9ae 138 hHits = new TH1F(Form("hMCHits_FMD%d%c_vtxbin%d",det,ringChar,i),Form("hMCHits_FMD%d%c_vtxbin%d",det,ringChar,i),
cc066cb9 139 hBg->GetNbinsX(),
140 hBg->GetXaxis()->GetXmin(),
141 hBg->GetXaxis()->GetXmax());
b85ea106 142 hHits->Sumw2();
143 fOutputList->Add(hHits);
cc066cb9 144
7c3e5162 145 hMult->Sumw2();
146 fOutputList->Add(hMult);
6c63da78 147
148 hMultTrVtx->Sumw2();
149 fOutputList->Add(hMultTrVtx);
b85ea106 150
059c7c6b 151 hMultNSD->Sumw2();
152 fOutputList->Add(hMultNSD);
153
7c3e5162 154 }
b85ea106 155 }
156 }
7c3e5162 157
bb8a464f 158 for(Int_t i = 0; i< nVtxbins; i++) {
159
160 hPrimVertexBin = new TH1F(Form("primmult_vtxbin%d",i),
161 Form("primmult_vtxbin%d",i),
5ea1e0a9 162 hBgTmp->GetNbinsX(),
163 hBgTmp->GetXaxis()->GetXmin(),
164 hBgTmp->GetXaxis()->GetXmax());
bb8a464f 165 hPrimVertexBin->Sumw2();
166 fOutputList->Add(hPrimVertexBin);
059c7c6b 167
168 hPrimVertexBinNSD = new TH1F(Form("primmult_NSD_vtxbin%d",i),
169 Form("primmult_NSD_vtxbin%d",i),
170 hBgTmp->GetNbinsX(),
171 hBgTmp->GetXaxis()->GetXmin(),
172 hBgTmp->GetXaxis()->GetXmax());
173 hPrimVertexBinNSD->Sumw2();
174 fOutputList->Add(hPrimVertexBinNSD);
175
176
04f1ff3d 177 //SPD part
178 TH2F* hSPDMult = new TH2F(Form("dNdeta_SPD_vtxbin%d",i),Form("dNdeta_SPD_vtxbin%d",i),
179 hBgTmp->GetNbinsX(),
180 hBgTmp->GetXaxis()->GetXmin(),
181 hBgTmp->GetXaxis()->GetXmax(),
182 20, 0, 2*TMath::Pi());
183 hSPDMult->Sumw2();
184 fOutputList->Add(hSPDMult);
185 TH2F* hSPDMultTrVtx = new TH2F(Form("dNdetaTrVtx_SPD_vtxbin%d",i),Form("dNdetaTrVtx_SPD_vtxbin%d",i),
186 hBgTmp->GetNbinsX(),
187 hBgTmp->GetXaxis()->GetXmin(),
188 hBgTmp->GetXaxis()->GetXmax(),
189 20, 0, 2*TMath::Pi());
190 hSPDMultTrVtx->Sumw2();
191 fOutputList->Add(hSPDMultTrVtx);
059c7c6b 192
193 TH2F* hSPDMultNSD = new TH2F(Form("dNdetaNSD_SPD_vtxbin%d",i),Form("dNdetaNSD_SPD_vtxbin%d",i),
194 hBgTmp->GetNbinsX(),
195 hBgTmp->GetXaxis()->GetXmin(),
196 hBgTmp->GetXaxis()->GetXmax(),
197 20, 0, 2*TMath::Pi());
198 hSPDMultNSD->Sumw2();
199 fOutputList->Add(hSPDMultNSD);
200
bb8a464f 201 }
202
daedf077 203 //AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance();
204
059c7c6b 205 // TH2F* dNdetadphiHistogramTotal = new TH2F("dNdetadphiHistogramTotal","dNdetadphiHistogram;#eta;#Phi",pars->GetNetaBins(),-6,6,20,0,2*TMath::Pi());
daedf077 206 //dNdetadphiHistogramTotal->SetErrorOption("g");
059c7c6b 207 //fOutputList->Add(dNdetadphiHistogramTotal);
daedf077 208
209
210
7c3e5162 211 fNevents.SetBins(nVtxbins,0,nVtxbins);
212 fNevents.SetName("nEvents");
059c7c6b 213 fNNSDevents.SetBins(nVtxbins,0,nVtxbins);
214 fNNSDevents.SetName("nNSDEvents");
215
bb8a464f 216 fNMCevents.SetBins(nVtxbins,0,nVtxbins);
217 fNMCevents.SetName("nMCEvents");
059c7c6b 218 fNMCNSDevents.SetBins(nVtxbins,0,nVtxbins);
219 fNMCNSDevents.SetName("nMCNSDEvents");
7c3e5162 220 fOutputList->Add(&fNevents);
059c7c6b 221 fOutputList->Add(&fNNSDevents);
bb8a464f 222 fOutputList->Add(&fNMCevents);
059c7c6b 223 fOutputList->Add(&fNMCNSDevents);
7c3e5162 224}
225//_____________________________________________________________________
226void AliFMDAnalysisTaskDndeta::ConnectInputData(Option_t */*option*/)
227{
228 if(fStandalone) {
229 fInputList = (TList*)GetInputData(0);
7c3e5162 230 }
231}
232//_____________________________________________________________________
233void AliFMDAnalysisTaskDndeta::Exec(Option_t */*option*/)
234{
b64db9b1 235 AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance();
9f55be54 236 fVertexString = (TObjString*)fInputList->At(0);
237
7c3e5162 238 Int_t vtxbin = fVertexString->GetString().Atoi();
9f55be54 239
7c3e5162 240 fNevents.Fill(vtxbin);
9f55be54 241
059c7c6b 242 //AliESDInputHandler* eventHandler = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
243 //AliESDEvent* esd = eventHandler->GetEvent();
244 Bool_t nsd = pars->IsEventTriggered(AliFMDAnaParameters::kNSD);
245 if(nsd) fNNSDevents.Fill(vtxbin);
246
7c3e5162 247 for(UShort_t det=1;det<=3;det++) {
7c3e5162 248 Int_t nRings = (det==1 ? 1 : 2);
249 for (UShort_t ir = 0; ir < nRings; ir++) {
250 Char_t ringChar = (ir == 0 ? 'I' : 'O');
9f55be54 251
059c7c6b 252 TH2F* hMultTotal = (TH2F*)fOutputList->FindObject(Form("dNdeta_FMD%d%c_vtxbin%d",det,ringChar,vtxbin));
6c63da78 253 TH2F* hMultTotalTrVtx = (TH2F*)fOutputList->FindObject(Form("dNdetaTrVtx_FMD%d%c_vtxbin%d",det,ringChar,vtxbin));
059c7c6b 254 TH2F* hMultTotalNSD = (TH2F*)fOutputList->FindObject(Form("dNdetaNSD_FMD%d%c_vtxbin%d",det,ringChar,vtxbin));
255
7c3e5162 256
059c7c6b 257 TH2F* hMultInput = (TH2F*)fInputList->FindObject(Form("mult_FMD%d%c_vtxbin%d",det,ringChar,vtxbin));
6c63da78 258 TH2F* hMultInputTrVtx = (TH2F*)fInputList->FindObject(Form("multTrVtx_FMD%d%c_vtxbin%d",det,ringChar,vtxbin));
059c7c6b 259 TH2F* hMultInputNSD = (TH2F*)fInputList->FindObject(Form("multNSD_FMD%d%c_vtxbin%d",det,ringChar,vtxbin));
1282ce49 260
7c3e5162 261 hMultTotal->Add(hMultInput);
6c63da78 262 hMultTotalTrVtx->Add(hMultInputTrVtx);
059c7c6b 263 if(nsd)
264 hMultTotalNSD->Add(hMultInputNSD);
265
7c3e5162 266 }
267 }
bb8a464f 268
04f1ff3d 269 //SPD code
270 TH2F* hMultSPDTotal = (TH2F*)fOutputList->FindObject(Form("dNdeta_SPD_vtxbin%d",vtxbin));
271 TH2F* hMultSPDTotalTrVtx = (TH2F*)fOutputList->FindObject(Form("dNdetaTrVtx_SPD_vtxbin%d",vtxbin));
059c7c6b 272 TH2F* hMultSPDTotalNSD = (TH2F*)fOutputList->FindObject(Form("dNdetaNSD_SPD_vtxbin%d",vtxbin));
04f1ff3d 273 TH2F* hMultSPDInput = (TH2F*)fInputList->FindObject(Form("mult_SPD_vtxbin%d",vtxbin));
274 TH2F* hMultSPDInputTrVtx = (TH2F*)fInputList->FindObject(Form("multTrVtx_SPD_vtxbin%d",vtxbin));
059c7c6b 275 TH2F* hMultSPDInputNSD = (TH2F*)fInputList->FindObject(Form("multNSD_SPD_vtxbin%d",vtxbin));
276
04f1ff3d 277 hMultSPDTotal->Add(hMultSPDInput);
278 hMultSPDTotalTrVtx->Add(hMultSPDInputTrVtx);
059c7c6b 279 if(nsd)
280 hMultSPDTotalNSD->Add(hMultSPDInputNSD);
04f1ff3d 281
b64db9b1 282 if(pars->GetProcessPrimary())
bb8a464f 283 ProcessPrimary();
284
059c7c6b 285 //TH2F* dNdetadphiHistogram = (TH2F*)fOutputList->FindObject("dNdetadphiHistogramSPDTrVtx");
daedf077 286
059c7c6b 287 // TH2F* dNdetadphiHistogramTotal = (TH2F*)fOutputList->FindObject("dNdetadphiHistogramTotal");
daedf077 288
059c7c6b 289 // if(vtxbin == 4)
290 // dNdetadphiHistogramTotal->Add(dNdetadphiHistogram);
daedf077 291
292
293
294
7c3e5162 295 if(fStandalone) {
296 PostData(0, fOutputList);
297 }
298
299}
300//_____________________________________________________________________
301void AliFMDAnalysisTaskDndeta::Terminate(Option_t */*option*/) {
302
7c3e5162 303 AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance();
304
305 Int_t nVtxbins = pars->GetNvtxBins();
306
307 for(UShort_t det=1;det<=3;det++) {
7c3e5162 308 Int_t nRings = (det==1 ? 1 : 2);
309 for (UShort_t ir = 0; ir < nRings; ir++) {
1282ce49 310 Char_t ringChar = (ir == 0 ? 'I' : 'O');
7c3e5162 311 for(Int_t i =0; i<nVtxbins; i++) {
b64db9b1 312
6c63da78 313 TH2F* hMultTotal = (TH2F*)fOutputList->FindObject(Form("dNdeta_FMD%d%c_vtxbin%d",det,ringChar,i));
032f0117 314 fOutputList->Add(hMultTotal->Clone(Form("%s_orig", hMultTotal->GetName())));
315 if(fVtxEff) {
daedf077 316 hMultTotal->Scale(fVtxEff);
032f0117 317 }
daedf077 318
059c7c6b 319 TH2F* hMultTotalNSD = (TH2F*)fOutputList->FindObject(Form("dNdetaNSD_FMD%d%c_vtxbin%d",det,ringChar,i));
032f0117 320 fOutputList->Add(hMultTotalNSD->Clone(Form("%s_orig", hMultTotalNSD->GetName())));
321 if(fVtxEffNSD) {
059c7c6b 322 hMultTotalNSD->Scale(fVtxEffNSD);
032f0117 323 }
059c7c6b 324
6c63da78 325 //TH2F* hMultTrVtx = (TH2F*)hMultTotal->Clone(Form("dNdeta_FMD%d%c_TrVtx_vtxbin%d",det,ringChar,i));
326 TH2F* hMultTrVtx = (TH2F*)fOutputList->FindObject(Form("dNdetaTrVtx_FMD%d%c_vtxbin%d",det,ringChar,i));
25f47050 327
1282ce49 328 TH1D* hMultProj = hMultTotal->ProjectionX(Form("dNdeta_FMD%d%c_vtxbin%d_proj",det,ringChar,i),1,hMultTotal->GetNbinsY());
059c7c6b 329 TH1D* hMultProjTrVtx = hMultTrVtx->ProjectionX(Form("dNdeta_FMD%d%c_TrVtx_vtxbin%d_proj",det,ringChar,i),1,hMultTrVtx->GetNbinsY());
330 TH1D* hMultProjNSD = hMultTotalNSD->ProjectionX(Form("dNdetaNSD_FMD%d%c_vtxbin%d_proj",det,ringChar,i),1,hMultTotalNSD->GetNbinsY());
331
04f1ff3d 332 //fOutputList->Add(hMultTrVtx);
1282ce49 333 fOutputList->Add(hMultProj);
b64db9b1 334 fOutputList->Add(hMultProjTrVtx);
059c7c6b 335 fOutputList->Add(hMultProjNSD);
7c3e5162 336 }
337 }
338 }
04f1ff3d 339
340 for(Int_t i =0; i<nVtxbins; i++) {
341
342 TH2F* hSPDMult = (TH2F*)fOutputList->FindObject(Form("dNdeta_SPD_vtxbin%d",i));
343 TH2F* hSPDMultTrVtx = (TH2F*)fOutputList->FindObject(Form("dNdetaTrVtx_SPD_vtxbin%d",i));
059c7c6b 344 TH2F* hSPDMultNSD = (TH2F*)fOutputList->FindObject(Form("dNdetaNSD_SPD_vtxbin%d",i));
04f1ff3d 345
daedf077 346 if(fVtxEff)
347 hSPDMult->Scale(fVtxEff);
348
059c7c6b 349 if(fVtxEffNSD)
df2a9c32 350 hSPDMultNSD->Scale(fVtxEffNSD);
daedf077 351
04f1ff3d 352 TH1D* hMultProj = hSPDMult->ProjectionX(Form("dNdeta_SPD_vtxbin%d_proj",i),1,hSPDMult->GetNbinsY());
353 TH1D* hMultProjTrVtx = hSPDMultTrVtx->ProjectionX(Form("dNdetaTrVtx_SPD_vtxbin%d_proj",i),1,hSPDMultTrVtx->GetNbinsY());
059c7c6b 354 TH1D* hMultProjNSD = hSPDMultNSD->ProjectionX(Form("dNdetaNSD_SPD_vtxbin%d_proj",i),1,hSPDMultNSD->GetNbinsY());
04f1ff3d 355 fOutputList->Add(hMultProj);
356 fOutputList->Add(hMultProjTrVtx);
059c7c6b 357 fOutputList->Add(hMultProjNSD);
04f1ff3d 358
359 }
360
059c7c6b 361 std::cout<<"FMD analysis accepted "<<fNevents.GetEntries()<<" INEL events and "<<fNNSDevents.GetEntries()<<" NSD events"<<std::endl;
bb8a464f 362}
363//_____________________________________________________________________
364void AliFMDAnalysisTaskDndeta::ProcessPrimary() {
cc066cb9 365
1b418b63 366 AliMCEventHandler* eventHandler =
367 dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()
368 ->GetMCtruthEventHandler());
369 if (!eventHandler) return;
370
b64db9b1 371 AliMCEvent* mcEvent = eventHandler->MCEvent();
1b418b63 372 if(!mcEvent) return;
b64db9b1 373
cc066cb9 374 fLastTrackByStrip.Reset(-1);
375
bb8a464f 376 AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance();
377
378 AliMCParticle* particle = 0;
b64db9b1 379 AliStack* stack = mcEvent->Stack();
bb8a464f 380
381 TH1F* hPrimary = (TH1F*)fOutputList->FindObject("hMultvsEta");
059c7c6b 382 TH1F* hPrimaryNSD = (TH1F*)fOutputList->FindObject("hMultvsEtaNSD");
b64db9b1 383 AliHeader* header = mcEvent->Header();
cc066cb9 384 AliGenEventHeader* genHeader = header->GenEventHeader();
059c7c6b 385
0f6643af 386 AliGenPythiaEventHeader* pythiaGenHeader = dynamic_cast<AliGenPythiaEventHeader*>(genHeader);
507687cd 387 AliGenDPMjetEventHeader* dpmHeader = dynamic_cast<AliGenDPMjetEventHeader*>(header->GenEventHeader());
059c7c6b 388 Bool_t nsd = kTRUE;
507687cd 389
390 if (!pythiaGenHeader && !dpmHeader) {
391 std::cout<<" no pythia or dpm header!"<<std::endl;
0f6643af 392 }
393 else {
507687cd 394 if(pythiaGenHeader) {
395 Int_t pythiaType = pythiaGenHeader->ProcessType();
396
397 if(pythiaType==92||pythiaType==93)
398 nsd = kFALSE;
399
400 }
401 if(dpmHeader) {
402 Int_t processType = dpmHeader->ProcessType();
403 if(processType == 5 || processType == 6)
404 nsd = kFALSE;
0f6643af 405
507687cd 406 }
0f6643af 407 }
507687cd 408
cc066cb9 409 TArrayF vertex;
410 genHeader->PrimaryVertex(vertex);
411 if(TMath::Abs(vertex.At(2)) > pars->GetVtxCutZ())
412 return;
413 Double_t delta = 2*pars->GetVtxCutZ()/pars->GetNvtxBins();
414 Double_t vertexBinDouble = (vertex.At(2) + pars->GetVtxCutZ()) / delta;
415 Int_t vertexBin = (Int_t)vertexBinDouble;
0a2f2742 416
bb8a464f 417 Bool_t firstTrack = kTRUE;
059c7c6b 418 Bool_t firstTrackNSD = kTRUE;
419
541c19ed 420 TH1F* hPrimVtxBinNSD = (TH1F*)fOutputList->FindObject(Form("primmult_NSD_vtxbin%d",vertexBin));
421 TH1F* hPrimVtxBin = (TH1F*)fOutputList->FindObject(Form("primmult_vtxbin%d",vertexBin));
bb0a45c3 422
423 // we loop over the primaries only unless we need the hits (diagnostics running slowly)
424 Int_t nTracks = stack->GetNprimary();
b64db9b1 425 if(pars->GetProcessHits())
bb0a45c3 426 nTracks = stack->GetNtrack();
427
bb8a464f 428 for(Int_t i = 0 ;i<nTracks;i++) {
7aad0c47 429 particle = (AliMCParticle*) mcEvent->GetTrack(i);
bb8a464f 430 if(!particle)
431 continue;
bb0a45c3 432
bb8a464f 433 if(stack->IsPhysicalPrimary(i) && particle->Charge() != 0) {
434 hPrimary->Fill(particle->Eta());
541c19ed 435 hPrimVtxBin->Fill(particle->Eta());
436 if(firstTrack) {
437 fNMCevents.Fill(vertexBin);
438 firstTrack = kFALSE;
439 }
440
059c7c6b 441 if(nsd) {
442 hPrimaryNSD->Fill(particle->Eta());
541c19ed 443 hPrimVtxBinNSD->Fill(particle->Eta());
059c7c6b 444 if(firstTrackNSD) {
445 fNMCNSDevents.Fill(vertexBin);
446 firstTrackNSD = kFALSE;
447 }
448 }
541c19ed 449
450
b3546e91 451
bb0a45c3 452 }
f1eff0e8 453 if(pars->GetProcessHits()) {
b85ea106 454
bb0a45c3 455 for(Int_t j=0; j<particle->GetNumberOfTrackReferences();j++) {
cc066cb9 456
55cadbf9 457 AliTrackReference* ref = particle->GetTrackReference(j);
458 UShort_t det,sec,strip;
459 Char_t ring;
460 if(ref->DetectorId() != AliTrackReference::kFMD)
461 continue;
462 AliFMDStripIndex::Unpack(ref->UserId(),det,ring,sec,strip);
463 Float_t thisStripTrack = fLastTrackByStrip(det,ring,sec,strip);
464 if(particle->Charge() != 0 && i != thisStripTrack ) {
465 //Double_t x,y,z;
466
467 Float_t eta = pars->GetEtaFromStrip(det,ring,sec,strip,vertex.At(2));//-1*TMath::Log(TMath::Tan(0.5*theta));
18d4b9ae 468 TH1F* hHits = (TH1F*)fOutputList->FindObject(Form("hMCHits_FMD%d%c_vtxbin%d",det,ring,vertexBin));
b85ea106 469
470
55cadbf9 471 hHits->Fill(eta);
b85ea106 472
55cadbf9 473 Float_t nstrips = (ring =='O' ? 256 : 512);
474
475 fLastTrackByStrip(det,ring,sec,strip) = (Float_t)i;
cc066cb9 476
55cadbf9 477 if(strip >0)
478 fLastTrackByStrip(det,ring,sec,strip-1) = (Float_t)i;
479 if(strip < (nstrips - 1))
480 fLastTrackByStrip(det,ring,sec,strip+1) = (Float_t)i;
481
482 }
b85ea106 483
484
b3546e91 485 }
b85ea106 486
487
bb0a45c3 488 }
b85ea106 489
490
491
bb0a45c3 492 }
7c3e5162 493}
494//_____________________________________________________________________
495//
496//
497// EOF
5be76c19 498// EOF