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