]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG2/FORWARD/analysis/AliFMDAnalysisTaskSharing.cxx
Fixing warnings
[u/mrichter/AliRoot.git] / PWG2 / FORWARD / analysis / AliFMDAnalysisTaskSharing.cxx
CommitLineData
3bb122c7 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 <TMath.h>
78f6f750 10//#include "AliFMDDebug.h"
3bb122c7 11#include "AliFMDAnalysisTaskSharing.h"
12#include "AliAnalysisManager.h"
13#include "AliESDFMD.h"
78f6f750 14//#include "AliFMDGeometry.h"
3bb122c7 15#include "AliMCEventHandler.h"
b64db9b1 16#include "AliMCEvent.h"
3bb122c7 17#include "AliStack.h"
18#include "AliESDVertex.h"
6289b3e8 19#include "AliMultiplicity.h"
3bb122c7 20#include "AliFMDAnaParameters.h"
0210c863 21#include "TH1F.h"
22#include "TObjString.h"
bb0a45c3 23//#include "/home/canute/ALICE/AliRoot/PWG0/AliPWG0Helper.h"
78f6f750 24//#include "AliFMDParameters.h"
b64db9b1 25#include "AliGenEventHeader.h"
da0805e2 26#include "AliGenPythiaEventHeader.h"
b64db9b1 27#include "AliHeader.h"
28#include "AliStack.h"
29#include "AliMCParticle.h"
0a2f2742 30#include "AliFMDStripIndex.h"
da0805e2 31#include "AliESDVZERO.h"
32#include "AliESDtrack.h"
3bb122c7 33
0210c863 34// This is the task to do the FMD sharing or hit merging.
35// It reads the input ESDFMD data and posts an ESDFMD object to
36// the tasks that must be performed after this task ie.
37// Density, BackgroundCorrection and Dndeta.
38// Author: Hans Hjersing Dalsgaard, hans.dalsgaard@cern.ch
39
40
3bb122c7 41ClassImp(AliFMDAnalysisTaskSharing)
42
43//_____________________________________________________________________
44AliFMDAnalysisTaskSharing::AliFMDAnalysisTaskSharing()
45: fDebug(0),
46 fESD(0x0),
8dc7c4c2 47 foutputESDFMD(),
c78bc12b 48 fSharedThis(kFALSE),
7c3e5162 49 fSharedPrev(kFALSE),
a38d1871 50 fDiagList(0),
7c3e5162 51 fStandalone(kTRUE),
bb8a464f 52 fEsdVertex(0),
0a2f2742 53 fStatus(kTRUE),
aa303f0c 54 fLastTrackByStrip(0),
55 fLastOrbit(0)
3bb122c7 56{
57 // Default constructor
58 DefineInput (0, AliESDEvent::Class());
7c3e5162 59 DefineOutput(0, AliESDFMD::Class());
60 DefineOutput(1, AliESDVertex::Class());
61 DefineOutput(2, AliESDEvent::Class());
62 DefineOutput(3, TList::Class());
3bb122c7 63}
64//_____________________________________________________________________
7c3e5162 65AliFMDAnalysisTaskSharing::AliFMDAnalysisTaskSharing(const char* name, Bool_t SE):
3bb122c7 66 AliAnalysisTask(name, "AnalysisTaskFMD"),
67 fDebug(0),
68 fESD(0x0),
8dc7c4c2 69 foutputESDFMD(),
c78bc12b 70 fSharedThis(kFALSE),
7c3e5162 71 fSharedPrev(kFALSE),
a38d1871 72 fDiagList(0),
7c3e5162 73 fStandalone(kTRUE),
bb8a464f 74 fEsdVertex(0),
0a2f2742 75 fStatus(kTRUE),
da0805e2 76 fLastTrackByStrip(0),
aa303f0c 77 fLastOrbit(0)
3bb122c7 78{
0210c863 79 // named constructor
7c3e5162 80 fStandalone = SE;
81 if(fStandalone) {
82 DefineInput (0, AliESDEvent::Class());
83 DefineOutput(0, AliESDFMD::Class());
84 DefineOutput(1, AliESDVertex::Class());
85 DefineOutput(2, AliESDEvent::Class());
86 DefineOutput(3, TList::Class());
87 }
3bb122c7 88}
89//_____________________________________________________________________
90void AliFMDAnalysisTaskSharing::CreateOutputObjects()
91{
0210c863 92 // Create the output objects
7c3e5162 93 if(!foutputESDFMD)
94 foutputESDFMD = new AliESDFMD();
95
96 if(!fEsdVertex)
97 fEsdVertex = new AliESDVertex();
98 //Diagnostics
a38d1871 99 if(!fDiagList)
100 fDiagList = new TList();
101
102 fDiagList->SetName("Sharing diagnostics");
b64db9b1 103
104 AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance();
105 TH2F* hBg = pars->GetBackgroundCorrection(1, 'I', 0);
106 TH1F* hPrimary = new TH1F("hMultvsEtaNoCuts","hMultvsEtaNoCuts",
107 hBg->GetNbinsX(),
108 hBg->GetXaxis()->GetXmin(),
109 hBg->GetXaxis()->GetXmax());
110 hPrimary->Sumw2();
111 fDiagList->Add(hPrimary);
da0805e2 112 TH1F* hXvtx = new TH1F("hXvtx","x vertex distribution",100,-2,2);
113 TH1F* hYvtx = new TH1F("hYvtx","y vertex distribution",100,-2,2);
f55d559b 114 TH1F* hZvtx = new TH1F("hZvtx","z vertex distribution",pars->GetNvtxBins(),-1*pars->GetVtxCutZ(),pars->GetVtxCutZ());
115
da0805e2 116 fDiagList->Add(hXvtx);
117 fDiagList->Add(hYvtx);
f55d559b 118 fDiagList->Add(hZvtx);
119
b64db9b1 120 TH1F* hPrimVertexBin = 0;
0a2f2742 121 TH1F* hHits = 0;
b64db9b1 122 for(Int_t i = 0; i< pars->GetNvtxBins(); i++) {
123
124 hPrimVertexBin = new TH1F(Form("primmult_NoCuts_vtxbin%d",i),
125 Form("primmult_NoCuts_vtxbin%d",i),
126 hBg->GetNbinsX(),
127 hBg->GetXaxis()->GetXmin(),
128 hBg->GetXaxis()->GetXmax());
129 hPrimVertexBin->Sumw2();
130 fDiagList->Add(hPrimVertexBin);
131
132 }
133
7c3e5162 134 for(Int_t det = 1; det<=3; det++) {
135 Int_t nRings = (det==1 ? 1 : 2);
136
137 for(Int_t iring = 0;iring<nRings; iring++) {
138 Char_t ringChar = (iring == 0 ? 'I' : 'O');
139 TH1F* hEdist = new TH1F(Form("Edist_before_sharing_FMD%d%c", det, ringChar),
140 Form("Edist_before_sharing_FMD%d%c", det, ringChar),
bb8a464f 141 1000,0,25);
0210c863 142 TH1F* hEdistAfter = new TH1F(Form("Edist_after_sharing_FMD%d%c", det, ringChar),
7c3e5162 143 Form("Edist_after_sharing_FMD%d%c", det, ringChar),
bb8a464f 144 1000,0,25);
145
146
b64db9b1 147 //TH1F* hNstripsHit = new TH1F(Form("N_strips_hit_FMD%d%c",det,ringChar),
148 // Form("N_strips_hit_FMD%d%c",det,ringChar),
149 // 25,0,25);
a38d1871 150 fDiagList->Add(hEdist);
0210c863 151 fDiagList->Add(hEdistAfter);
b64db9b1 152 //fDiagList->Add(hNstripsHit);
0a2f2742 153
154 for(Int_t i = 0; i< pars->GetNvtxBins(); i++) {
155 hHits = new TH1F(Form("hMCHits_nocuts_FMD%d%c_vtxbin%d",det,ringChar,i),Form("hMCHits_FMD%d%c_vtxbin%d",det,ringChar,i),
156 hBg->GetNbinsX(),
157 hBg->GetXaxis()->GetXmin(),
158 hBg->GetXaxis()->GetXmax());
159 hHits->Sumw2();
160 fDiagList->Add(hHits);
7c3e5162 161
0a2f2742 162 }
163
7c3e5162 164 }
165 }
da0805e2 166 TH2F* hCorrelationFMDSPDhits = new TH2F("hCorrelationFMDSPDhits","hCorrelationFMDSPDhits;SPD;FMD ",100,0,200,100,0,500);
167 TH2F* hCorrelationFMDSPD = new TH2F("hCorrelationFMDSPD","hCorrelationFMDSPD;SPD;FMD ",100,0,200,100,0,500);
168 TH2F* hCorrelationFMD1SPD = new TH2F("hCorrelationFMD1SPD","hCorrelationFMD1SPD;SPD;FMD1 ",100,0,200,100,0,200);
169 TH2F* hCorrelationFMD2ISPD = new TH2F("hCorrelationFMD2ISPD","hCorrelationFMD2ISPD;SPD;FMD2I ",100,0,200,100,0,200);
170 TH2F* hCorrelationFMD2OSPD = new TH2F("hCorrelationFMD2OSPD","hCorrelationFMD2OSPD;SPD;FMD2O ",100,0,200,100,0,200);
171 TH2F* hCorrelationFMD3ISPD = new TH2F("hCorrelationFMD3ISPD","hCorrelationFMD3ISPD;SPD;FMD3I ",100,0,200,100,0,200);
172 TH2F* hCorrelationFMD3OSPD = new TH2F("hCorrelationFMD3OSPD","hCorrelationFMD3OSPD;SPD;FMD3O ",100,0,200,100,0,200);
173 TH2F* hCorrelationFMDGoodtracks = new TH2F("hCorrelationFMDGoodtracks","hCorrelationGoodtracks;good tracks;FMD ",100,0,200,100,0,200);
174 TH2F* hCorrelationFMDBadtracks = new TH2F("hCorrelationFMDBadtracks","hCorrelationBadtracks;bad tracks;FMD ",100,0,200,100,0,200);
175 TH2F* hCorrelationGoodbadtracks = new TH2F("hCorrelationGoodbadtracks","hCorrelationGoodbadtracks;good tracks;bad tracks ",100,0,200,100,0,200);
176 TH2F* hCorrelationSPDTracklets = new TH2F("hCorrelationSPDTracklets","hCorrelationSPDTracklets;hits ; tracklets ",100,0,500,100,0,200);
177 TH2F* hCorrelationClustersTracklets = new TH2F("hCorrelationClustersTracklets","hCorrelationClustersTracklets;clusters ; tracklets ",500,0,500,100,0,100);
178 TH2F* hCorrelationHitsRadius = new TH2F("hCorrelationHitsRadius","hCorrelationHitsRadius;hits ; radius ",100,0,500,100,0,10);
179 TH2F* hCorrelationHitsX = new TH2F("hCorrelationHitsX","hCorrelationHitsX;hits ; X ",100,0,500,100,-5,5);
180 TH2F* hCorrelationHitsY = new TH2F("hCorrelationHitsY","hCorrelationHitsY;hits ; Y ",100,0,500,100,-5,5);
181 fDiagList->Add(hCorrelationHitsRadius);
182 fDiagList->Add(hCorrelationHitsX);
183 fDiagList->Add(hCorrelationHitsY);
184 fDiagList->Add(hCorrelationFMDSPD);
185 fDiagList->Add(hCorrelationFMD1SPD);
186 fDiagList->Add(hCorrelationFMD2ISPD);
187 fDiagList->Add(hCorrelationFMD2OSPD);
188 fDiagList->Add(hCorrelationFMD3ISPD);
189 fDiagList->Add(hCorrelationFMD3OSPD);
190 fDiagList->Add(hCorrelationFMDGoodtracks);
191 fDiagList->Add(hCorrelationFMDBadtracks);
192 fDiagList->Add(hCorrelationGoodbadtracks);
193fDiagList->Add(hCorrelationFMDSPDhits);
194 fDiagList->Add(hCorrelationClustersTracklets);
195 fDiagList->Add(hCorrelationSPDTracklets);
196 TH2F* hCorrelationFMD23 = new TH2F("hCorrelationFMD23","hCorrelationFMD23;FMD2 ;FMD3 ",100,0,500,100,0,500);
197 TH2F* hCorrelationFMD2diff23 = new TH2F("hCorrelationFMD2diff23","hCorrelationFMD2diff23;FMD2 ;diff FMD23 ",100,0,100,100,0,100);
198 TH2F* hCorrelationFMD3diff23 = new TH2F("hCorrelationFMD3diff23","hCorrelationFMD3diff23;FMD3 ;diff FMD23 ",100,0,100,100,0,100);
199 TH2F* hCorrelationFMD1diff13 = new TH2F("hCorrelationFMD1diff13","hCorrelationFMD1diff13;FMD1 ;diff FMD13 ",100,0,100,100,0,100);
200 TH2F* hCorrelationFMD1diff12 = new TH2F("hCorrelationFMD1diff12","hCorrelationFMD1diff12;FMD1 ;diff FMD12 ",100,0,100,100,0,100);
201 TH2F* hCorrelationFMD12 = new TH2F("hCorrelationFMD12","hCorrelationFMD12;FMD1 ;FMD2 ",100,0,500,100,0,500);
202 TH2F* hCorrelationFMDBgCand = new TH2F("hCorrelationFMDBgCand","hCorrelationFMDBgCand;Bg Tr ;FMD ",100,0,100,500,0,500);
203
204 TH2F* hCorrelationFMDFlatTr = new TH2F("hCorrelationFMDFlatTr","hCorrelationFMDFlatTr;Bg Tr ;FMD ",100,0,100,500,0,500);
205 TH2F* hCorrelationFMDRatioFlatTr = new TH2F("hCorrelationFMDRatioFlatTr","hCorrelationFMDRatioFlatTr;Bg Tr ;FMD ",100,0,1,500,0,500);
206 fDiagList->Add(hCorrelationFMDBgCand);
207 fDiagList->Add(hCorrelationFMDFlatTr);
208 fDiagList->Add(hCorrelationFMDRatioFlatTr);
209 TH2F* hCorrelationFMDBgCandRelative = new TH2F("hCorrelationFMDBgCandRelative","hCorrelationFMDBgCandRelative;Bg Tr ;FMD ",100,0,2,500,0,500);
210 fDiagList->Add(hCorrelationFMDBgCandRelative);
211 fDiagList->Add(hCorrelationFMD2diff23);
212 fDiagList->Add(hCorrelationFMD3diff23);
213 fDiagList->Add(hCorrelationFMD1diff13);
214 fDiagList->Add(hCorrelationFMD1diff12);
215 fDiagList->Add(hCorrelationFMD23);
216 fDiagList->Add(hCorrelationFMD12);
217 TH2F* hTimeCorrelation = new TH2F("hCorrelationTime","hCorrelationTime ; time ; FMD hits",500,0,500,100,0,200);
218 fDiagList->Add(hTimeCorrelation);
219 TH1F* hHitDistribution = new TH1F("hFMDHitDistribution","hFMDHitDistribution ; FMD hits",500,0,500);
220
221 TH1F* hHitDistributionFMD1 = new TH1F("hFMDHitDistributionFMD1","hFMDHitDistributionFMD1 ; FMD1 hits",500,0,500);
222 TH1F* hHitDistributionFMD2I = new TH1F("hFMDHitDistributionFMD2I","hFMDHitDistributionFMD2I ; FMD2I hits",500,0,500);
223 TH1F* hHitDistributionFMD2O = new TH1F("hFMDHitDistributionFMD2O","hFMDHitDistributionFMD2O ; FMD2O hits",500,0,500);
224 TH1F* hHitDistributionFMD3I = new TH1F("hFMDHitDistributionFMD3I","hFMDHitDistributionFMD3I ; FMD3I hits",500,0,500);
225 TH1F* hHitDistributionFMD3O = new TH1F("hFMDHitDistributionFMD3O","hFMDHitDistributionFMD3O ; FMD3O hits",500,0,500);
226 TH1F* hTrVtxDistribution = new TH1F("hTrVtxDistribution","hTrVtxDistribution ; TrVtx",200,-500,500);
227 TH1F* hTrEtaDistribution = new TH1F("hTrEtaDistribution","hTrEtaDistribution ; TrEta",200,-9,9);
228 TH1F* hTrEtaDistribution2 = new TH1F("hTrEtaDistribution2","hTrEtaDistribution2 ; TrEta",200,-9,9);
229
230 TH1F* hFlatTracks = new TH1F("hFlatTracks","hFlatTracks ; Horizontal tracks",100,0,100);
aa303f0c 231
232 TH1F* hEnergyOfParticles = new TH1F("hEnergyOfParticles","hEnergyOfParticles",1000000,0,10);
233 fDiagList->Add(hEnergyOfParticles);
da0805e2 234 fDiagList->Add(hTrVtxDistribution);
235 fDiagList->Add(hTrEtaDistribution);
236 fDiagList->Add(hTrEtaDistribution2);
237 fDiagList->Add(hFlatTracks);
238 fDiagList->Add(hHitDistribution);
239 fDiagList->Add(hHitDistributionFMD1);
240 fDiagList->Add(hHitDistributionFMD2I);
241 fDiagList->Add(hHitDistributionFMD2O);
242 fDiagList->Add(hHitDistributionFMD3I);
243 fDiagList->Add(hHitDistributionFMD3O);
b64db9b1 244 TH1F* nMCevents = new TH1F("nMCEventsNoCuts","nMCEventsNoCuts",pars->GetNvtxBins(),0,pars->GetNvtxBins());
245
246 fDiagList->Add(nMCevents);
da0805e2 247
248
249
3bb122c7 250}
251//_____________________________________________________________________
252void AliFMDAnalysisTaskSharing::ConnectInputData(Option_t */*option*/)
253{
0210c863 254 // connect the input data
7c3e5162 255 if(fStandalone)
256 fESD = (AliESDEvent*)GetInputData(0);
3bb122c7 257}
258//_____________________________________________________________________
259void AliFMDAnalysisTaskSharing::Exec(Option_t */*option*/)
260{
0210c863 261 //perform analysis on one event
3bb122c7 262 AliESD* old = fESD->GetAliESDOld();
263 if (old) {
264 fESD->CopyFromOldESD();
265 }
266
7c3e5162 267 foutputESDFMD->Clear();
3bb122c7 268
da0805e2 269 Int_t delta = fESD->GetOrbitNumber() - fLastOrbit;
270 fLastOrbit = fESD->GetOrbitNumber();
271
272
b64db9b1 273 AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance();
bb8a464f 274 Double_t vertex[3];
f55d559b 275 Bool_t vtxStatus = pars->GetVertex(fESD,vertex);
bb8a464f 276 fEsdVertex->SetXYZ(vertex);
b64db9b1 277
278 // Process primaries here to get true MC distribution
279 if(pars->GetProcessPrimary())
280 ProcessPrimary();
da0805e2 281 const AliMultiplicity* testmult = fESD->GetMultiplicity();
282 Int_t nTrackLets = testmult->GetNumberOfTracklets();
283 TH2F* hCorrelationClustersTracklets = (TH2F*)fDiagList->FindObject("hCorrelationClustersTracklets");
284 hCorrelationClustersTracklets->Fill(testmult->GetNumberOfSingleClusters(),nTrackLets);
b64db9b1 285
f55d559b 286
6289b3e8 287
da0805e2 288 Bool_t isTriggered = pars->IsEventTriggered(fESD);
289
290 if(!isTriggered || !vtxStatus ) {
bb8a464f 291 fStatus = kFALSE;
292 return;
293 }
294 else
295 fStatus = kTRUE;
b64db9b1 296
da0805e2 297 TH1F* hXvtx = (TH1F*)fDiagList->FindObject("hXvtx");
298 if(vertex[0] != 0) hXvtx->Fill(vertex[0]);
299 TH1F* hYvtx = (TH1F*)fDiagList->FindObject("hYvtx");
300 if(vertex[1] != 0) hYvtx->Fill(vertex[1]);
f55d559b 301 TH1F* hZvtx = (TH1F*)fDiagList->FindObject("hZvtx");
302 hZvtx->Fill(vertex[2]);
da0805e2 303 //const AliMultiplicity* testmult = fESD->GetMultiplicity();
304 //std::cout<<vertex[2]<<std::endl;
305 //Int_t nTrackLets = testmult->GetNumberOfTracklets();
6289b3e8 306
da0805e2 307 if( TMath::Abs(vertex[2]) > pars->GetVtxCutZ()) {
308 fStatus = kFALSE;
309 return;
310 }
311
6289b3e8 312 if(nTrackLets < 1000) foutputESDFMD->SetUniqueID(kTRUE);
313 else foutputESDFMD->SetUniqueID(kFALSE);
b64db9b1 314
3bb122c7 315 AliESDFMD* fmd = fESD->GetFMDData();
b64db9b1 316
3bb122c7 317 if (!fmd) return;
da0805e2 318 Int_t nHits[3][2] = {{0,0},{0,0},{0,0}};
319
3bb122c7 320 for(UShort_t det=1;det<=3;det++) {
321 Int_t nRings = (det==1 ? 1 : 2);
322 for (UShort_t ir = 0; ir < nRings; ir++) {
323 Char_t ring = (ir == 0 ? 'I' : 'O');
324 UShort_t nsec = (ir == 0 ? 20 : 40);
325 UShort_t nstr = (ir == 0 ? 512 : 256);
7c3e5162 326
a38d1871 327 TH1F* hEdist = (TH1F*)fDiagList->FindObject(Form("Edist_before_sharing_FMD%d%c",det,ring));
7c3e5162 328
8dc7c4c2 329 for(UShort_t sec =0; sec < nsec; sec++) {
330 fSharedThis = kFALSE;
331 fSharedPrev = kFALSE;
0210c863 332
3bb122c7 333 for(UShort_t strip = 0; strip < nstr; strip++) {
7c3e5162 334 foutputESDFMD->SetMultiplicity(det,ring,sec,strip,0.);
3bb122c7 335 Float_t mult = fmd->Multiplicity(det,ring,sec,strip);
bb8a464f 336
8dc7c4c2 337 if(mult == AliESDFMD::kInvalidMult || mult == 0) continue;
7c3e5162 338
da0805e2 339
78f6f750 340 //Double_t eta = fmd->Eta(det,ring,sec,strip);
341 Float_t eta = pars->GetEtaFromStrip(det,ring,sec,strip,vertex[2]);
da0805e2 342
7c3e5162 343 hEdist->Fill(mult);
bb8a464f 344 if(fmd->IsAngleCorrected())
cc066cb9 345 mult = mult/TMath::Cos(Eta2Theta(eta));
0210c863 346 Float_t prevE = 0;
347 Float_t nextE = 0;
8dc823cc 348 if(strip != 0)
bb8a464f 349 if(fmd->Multiplicity(det,ring,sec,strip-1) != AliESDFMD::kInvalidMult) {
0210c863 350 prevE = fmd->Multiplicity(det,ring,sec,strip-1);
bb8a464f 351 if(fmd->IsAngleCorrected())
0210c863 352 prevE = prevE/TMath::Cos(Eta2Theta(fmd->Eta(det,ring,sec,strip-1)));
bb8a464f 353 }
8dc823cc 354 if(strip != nstr - 1)
bb8a464f 355 if(fmd->Multiplicity(det,ring,sec,strip+1) != AliESDFMD::kInvalidMult) {
0210c863 356 nextE = fmd->Multiplicity(det,ring,sec,strip+1);
bb8a464f 357 if(fmd->IsAngleCorrected())
0210c863 358 nextE = nextE/TMath::Cos(Eta2Theta(fmd->Eta(det,ring,sec,strip+1)));
bb8a464f 359 }
8dc823cc 360
0210c863 361 Float_t mergedEnergy = GetMultiplicityOfStrip(mult,eta,prevE,nextE,det,ring,sec,strip);
da0805e2 362 //if(mult> (pars->GetMPV(det,ring,eta) - pars->GetSigma(det,ring,eta)))
363 // mergedEnergy = mult;
364 //else mergedEnergy = 0;
365 if(mergedEnergy > 0.3 )
366 nHits[det-1][ir]++;
0210c863 367 foutputESDFMD->SetMultiplicity(det,ring,sec,strip,mergedEnergy);
bb8a464f 368 foutputESDFMD->SetEta(det,ring,sec,strip,eta);
7c3e5162 369
3bb122c7 370 }
371 }
372 }
373 }
da0805e2 374 //cluster cut
375 //if(testmult->GetNumberOfSingleClusters() > 15 + nTrackLets)
376 // {fStatus = kFALSE; std::cout<<"FMD : "<<nHits[0][0]<<" "<<nHits[1][0]<<" "<<nHits[1][1]<<" "<<nHits[2][0]<<" "<<nHits[2][1]<<" tracks "<<testmult->GetNumberOfSingleClusters()<<" "<<nTrackLets<<std::endl; return;}
377
378 TH2F* hCorrelationFMD23 = (TH2F*)fDiagList->FindObject("hCorrelationFMD23");
379 TH2F* hCorrelationFMD12 = (TH2F*)fDiagList->FindObject("hCorrelationFMD12");
380 TH2F* hCorrelationFMD2diff23 = (TH2F*)fDiagList->FindObject("hCorrelationFMD2diff23");
381 TH2F* hCorrelationFMD3diff23 = (TH2F*)fDiagList->FindObject("hCorrelationFMD3diff23");
382 TH2F* hCorrelationFMD1diff13 = (TH2F*)fDiagList->FindObject("hCorrelationFMD1diff13");
383 TH2F* hCorrelationFMD1diff12 = (TH2F*)fDiagList->FindObject("hCorrelationFMD1diff12");
384
385 TH2F* hCorrelationFMDSPD = (TH2F*)fDiagList->FindObject("hCorrelationFMDSPD");
386 TH2F* hCorrelationFMD1SPD = (TH2F*)fDiagList->FindObject("hCorrelationFMD1SPD");
387 TH2F* hCorrelationFMD2ISPD = (TH2F*)fDiagList->FindObject("hCorrelationFMD2ISPD");
388 TH2F* hCorrelationFMD2OSPD = (TH2F*)fDiagList->FindObject("hCorrelationFMD2OSPD");
389 TH2F* hCorrelationFMD3ISPD = (TH2F*)fDiagList->FindObject("hCorrelationFMD3ISPD");
390 TH2F* hCorrelationFMD3OSPD = (TH2F*)fDiagList->FindObject("hCorrelationFMD3OSPD");
391
392 TH2F* hCorrelationFMDSPDhits = (TH2F*)fDiagList->FindObject("hCorrelationFMDSPDhits");
393
394 TH2F* hCorrelationSPDTracklets = (TH2F*)fDiagList->FindObject("hCorrelationSPDTracklets");
395 TH2F* hTimeCorrelation = (TH2F*)fDiagList->FindObject("hCorrelationTime");
396 TH2F* hHitsRadius = (TH2F*)fDiagList->FindObject("hCorrelationHitsRadius");
397 TH2F* hHitsX = (TH2F*)fDiagList->FindObject("hCorrelationHitsX");
398 TH2F* hHitsY = (TH2F*)fDiagList->FindObject("hCorrelationHitsY");
399 TH1F* hFMDHitDistribution = (TH1F*)fDiagList->FindObject("hFMDHitDistribution");
400 TH1F* hFMD1HitDistribution = (TH1F*)fDiagList->FindObject("hFMDHitDistributionFMD1");
401 TH1F* hFMD2IHitDistribution = (TH1F*)fDiagList->FindObject("hFMDHitDistributionFMD2I");
402 TH1F* hFMD2OHitDistribution = (TH1F*)fDiagList->FindObject("hFMDHitDistributionFMD2O");
403 TH1F* hFMD3IHitDistribution = (TH1F*)fDiagList->FindObject("hFMDHitDistributionFMD3I");
404 TH1F* hFMD3OHitDistribution = (TH1F*)fDiagList->FindObject("hFMDHitDistributionFMD3O");
405 TH1F* hCorrelationFMDGoodtracks = (TH1F*)fDiagList->FindObject("hCorrelationFMDGoodtracks");
406 TH1F* hCorrelationFMDBadtracks = (TH1F*)fDiagList->FindObject("hCorrelationFMDBadtracks");
407 TH1F* hCorrelationGoodbadtracks = (TH1F*)fDiagList->FindObject("hCorrelationGoodbadtracks");
408 TH2F* hCorrelationFMDBgCand = (TH2F*)fDiagList->FindObject("hCorrelationFMDBgCand");
409 TH2F* hCorrelationFMDBgCandRelative = (TH2F*)fDiagList->FindObject("hCorrelationFMDBgCandRelative");
410
411 TH2F* hCorrelationFMDFlatTr = (TH2F*)fDiagList->FindObject("hCorrelationFMDFlatTr");
412 TH2F* hCorrelationFMDRatioFlatTr = (TH2F*)fDiagList->FindObject("hCorrelationFMDRatioFlatTr");
413 TH1F* hTrVtxDistribution = (TH1F*)fDiagList->FindObject("hTrVtxDistribution");
414 TH1F* hTrEtaDistribution = (TH1F*)fDiagList->FindObject("hTrEtaDistribution");
415 TH1F* hTrEtaDistribution2 = (TH1F*)fDiagList->FindObject("hTrEtaDistribution2");
416 hCorrelationFMDSPD->Fill(nTrackLets,nHits[0][0]+nHits[1][0]+nHits[1][1]+nHits[2][0]+nHits[2][1]);
417 TH1F* hFlatTracks = (TH1F*)fDiagList->FindObject("hFlatTracks");
418 hCorrelationFMD1SPD->Fill(nTrackLets,nHits[0][0]);
419 hCorrelationFMD2ISPD->Fill(nTrackLets,nHits[1][0]);
420 hCorrelationFMD2OSPD->Fill(nTrackLets,nHits[1][1]);
421 hCorrelationFMD3ISPD->Fill(nTrackLets,nHits[2][0]);
422 hCorrelationFMD3OSPD->Fill(nTrackLets,nHits[2][1]);
423 hCorrelationFMDSPDhits->Fill(testmult->GetNumberOfFiredChips(0),nHits[0][0]+nHits[1][0]+nHits[1][1]+nHits[2][0]+nHits[2][1]);
424 hCorrelationSPDTracklets->Fill(testmult->GetNumberOfFiredChips(0),nTrackLets);
425
426 hTimeCorrelation->Fill(delta,nHits[0][0]+nHits[1][0]+nHits[1][1]+nHits[2][0]+nHits[2][1]);
427 hCorrelationFMD23->Fill(nHits[1][0]+nHits[1][1],nHits[2][0]+nHits[2][1]);
428 hCorrelationFMD12->Fill(nHits[0][0],nHits[1][0]+nHits[1][1]);
429
430 // if(TMath::Abs(nHits[1]-nHits[2]) > 15 && (nHits[1]+nHits[2]) > 35) {fStatus = kFALSE; std::cout<<"difference : "<<TMath::Abs(nHits[1]-nHits[2])<<std::endl; return;}
431
432 // if(testmult->GetNumberOfFiredChips(0))
433 // if(testmult->GetNumberOfFiredChips(0) > 15 && ((Float_t)nTrackLets / (Float_t)testmult->GetNumberOfFiredChips(0)) < 0.4)
434 // {fStatus = kFALSE; std::cout<<nTrackLets<<" "<<testmult->GetNumberOfFiredChips(0)<<" "<<nHits[0]<<" "<<nHits[1]<<" "<<nHits[2]<<std::endl; return;}
435
436
437 Float_t diff23 = (Float_t)TMath::Abs(nHits[2][1] + nHits[2][0] - nHits[1][1] - nHits[1][0]);
438
439 Float_t diff13 = TMath::Abs(nHits[2][1] + nHits[2][0] - nHits[1][1] - nHits[1][0] - nHits[0][0]);
440 Float_t diff12 = TMath::Abs(nHits[1][0] - nHits[0][0]);
441
442 hCorrelationFMD1diff12->Fill(nHits[0][0], diff12);
443 hCorrelationFMD1diff13->Fill(nHits[0][0], diff13);
444 hCorrelationFMD2diff23->Fill(nHits[1][1], diff23);
445 hCorrelationFMD3diff23->Fill(nHits[2][1], diff23);
446
447 //
448 Float_t nTotalFMDhits = nHits[0][0]+nHits[1][0]+nHits[1][1]+nHits[2][0]+nHits[2][1] ;
449 Float_t radius = TMath::Sqrt(TMath::Power(vertex[0] + 0.03715,2) + TMath::Power(vertex[1] - 0.1659,2));
450
451 if(vertex[1] !=0 || vertex[1] !=0) {
452 hHitsRadius->Fill(nTotalFMDhits,radius);
453 hHitsX->Fill(nTotalFMDhits,vertex[0]);
454 hHitsY->Fill(nTotalFMDhits,vertex[1]); }
3bb122c7 455
da0805e2 456 hFMDHitDistribution->Fill(nTotalFMDhits);
457 hFMD1HitDistribution->Fill(nHits[0][0]);
458 hFMD2IHitDistribution->Fill(nHits[1][0]);
459 hFMD2OHitDistribution->Fill(nHits[1][1]);
460 hFMD3IHitDistribution->Fill(nHits[2][0]);
461 hFMD3OHitDistribution->Fill(nHits[2][0]);
462
463 // if(radius > 0.5) {fStatus = kFALSE; std::cout<<"FMD : "<<nTotalFMDhits<<std::endl; foutputESDFMD->Clear(); return;}
464 //if(TMath::Abs(vertex[1] - 0.1659) > 0.1 ) {fStatus = kFALSE; std::cout<<"FMD : "<<nTotalFMDhits<<std::endl; foutputESDFMD->Clear(); return;}
465
466 if(nTrackLets < pars->GetLowSPDLimit() || nTrackLets > pars->GetHighSPDLimit())
467 {fStatus = kFALSE; std::cout<<nTrackLets<<" "<<" "<<nHits[0][0]<<" "<<nHits[1][0]<<" "<<nHits[1][1]<<" "<<nHits[2][0]<<" "<<nHits[2][1]<<std::endl; return;}
468
469
470 AliESDtrack* track = 0;
471 Int_t ntracks = fESD->GetNumberOfTracks();
472 Float_t ngood =0, nbad = 0;
473 //std::cout<<" Primary vtx : "<<vertex[0]<<" "<<vertex[1]<<" "<<vertex[2]<<" "<<nTotalFMDhits<<std::endl;
474 Int_t nBgCandidates = 0;
475 Float_t nFlat = 0;
476 for(Int_t i=0;i<ntracks;i++) {
477 track = fESD->GetTrack(i);
478 //std::cout<<track->GetX()-vertex[0]<<" "<<track->GetY()-vertex[1]<<" "<<track->GetZ()-vertex[2]<<std::endl;
479 //std::cout<<track->GetX()<<" "<<track->GetY()<<" "<<track->GetZ()<<std::endl;
480 hTrVtxDistribution->Fill(track->GetZ());
481
482 if(TMath::Abs( track->GetZ()) > 50 && TMath::Abs(track->GetZ()) < 300) { // && TMath::Abs( track->GetY()) < 1)
483 nBgCandidates++;
484 hTrEtaDistribution->Fill(track->Eta());
485 }
486
487
488
489 if(TMath::Abs(track->GetX()-vertex[0]) > 0.3 || TMath::Abs(track->GetY()-vertex[1]) > 0.3 || TMath::Abs(track->GetZ()-vertex[2]) > 0.3) {
490 nbad++;
491 hTrEtaDistribution2->Fill(track->Eta()); }
492 else ngood++;
493
494 if(TMath::Abs(track->Pt()) < 0.1)
495 nFlat++;
496 }
497
498 Float_t ratioFlat = 0;
499 if(fESD->GetNumberOfTracks())
500 ratioFlat = nFlat/(Float_t)fESD->GetNumberOfTracks();
501 hCorrelationFMDFlatTr->Fill(nFlat,nTotalFMDhits);
502 hCorrelationFMDRatioFlatTr->Fill(ratioFlat,nTotalFMDhits);
503 hFlatTracks->Fill(nFlat);
b64db9b1 504
da0805e2 505 // std::cout<<fESD->GetT0zVertex()<<" "<<vertex[2]<<std::endl;
506 Float_t ratioBg = 0;
507 //if(fESD->GetNumberOfTracks() > 0)
508
509 if(fESD->GetNumberOfTracks() > 0)
510 ratioBg = (Float_t)nBgCandidates/(Float_t)fESD->GetNumberOfTracks();
511 hCorrelationFMDBgCand->Fill(nBgCandidates,nTotalFMDhits);
512 hCorrelationFMDBgCandRelative->Fill(ratioBg,nTotalFMDhits);
513
514
aa303f0c 515 // Float_t ratio = (nbad > 0 ? ngood / nbad : 0);
da0805e2 516
517 hCorrelationFMDGoodtracks->Fill(ngood,nTotalFMDhits);
518 hCorrelationFMDBadtracks->Fill(nbad,nTotalFMDhits);
519 hCorrelationGoodbadtracks->Fill(ngood,nbad);
520
7c3e5162 521 if(fStandalone) {
522 PostData(0, foutputESDFMD);
523 PostData(1, fEsdVertex);
524 PostData(2, fESD);
a38d1871 525 PostData(3, fDiagList);
7c3e5162 526 }
3bb122c7 527}
8dc823cc 528//_____________________________________________________________________
529Float_t AliFMDAnalysisTaskSharing::GetMultiplicityOfStrip(Float_t mult,
bb8a464f 530 Float_t eta,
0210c863 531 Float_t prevE,
532 Float_t nextE,
bb8a464f 533 UShort_t det,
534 Char_t ring,
41bad769 535 UShort_t /*sec*/,
536 UShort_t /*strip*/) {
0210c863 537 //analyse and perform sharing on one strip
8dc823cc 538 AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance();
6289b3e8 539
0210c863 540 Float_t mergedEnergy = 0;
cc066cb9 541 //Float_t nParticles = 0;
da0805e2 542 Float_t cutLow = 0.3;//0.15;
543
544 Float_t cutHigh = pars->GetMPV(det,ring,eta) - 2*pars->GetSigma(det,ring,eta);
aa303f0c 545
36f7d459 546 // if(ring == 'I')
547 // cutLow = 0.1;
cc066cb9 548
f58a4769 549 //cutLow = 0;
550 //AliFMDParameters* recopars = AliFMDParameters::Instance();
551 //cutLow = (5*recopars->GetPedestalWidth(det,ring,sec,strip))/(recopars->GetPulseGain(det,ring,sec,strip)*recopars->GetDACPerMIP());
da0805e2 552 //if(foutputESDFMD->GetUniqueID() == kFALSE ) {
553
554 if(mult > 12 || mult < cutLow)
555 {
556 // std::cout<<"rejecting hit in FMD "<<det<<" "<<ring<<std::endl;
557 fSharedThis = kFALSE;
558 fSharedPrev = kFALSE;
559 return 0;
560 }
561
cc066cb9 562
563
f58a4769 564
6289b3e8 565 // Float_t cutPart = pars->GetMPV(det,ring,eta) - 5*pars->GetSigma(det,ring,eta);
0210c863 566 Float_t totalE = mult;
bb8a464f 567
cc066cb9 568
cc066cb9 569 //std::cout<<det<<ring<<" "<<sec<<" "<<strip<<" "<<cutLow<<std::endl;
c78bc12b 570 if(fSharedThis) {
571 fSharedThis = kFALSE;
572 fSharedPrev = kTRUE;
8dc823cc 573 return 0.;
574 }
575
cc066cb9 576 /* if(mult < 0.33*pars->GetMPV(det,ring,eta)) {
6289b3e8 577 fSharedThis = kFALSE;
578 fSharedPrev = kFALSE;
579 return 0;
cc066cb9 580 }*/
0210c863 581 if(mult<nextE && nextE>cutHigh && foutputESDFMD->GetUniqueID() == kTRUE)
cc066cb9 582 {
583 fSharedThis = kFALSE;
584 fSharedPrev = kFALSE;
585 return 0;
586 }
da0805e2 587
bb8a464f 588
0210c863 589 if(prevE > cutLow && prevE < cutHigh && !fSharedPrev ) {
590 totalE += prevE;
8dc823cc 591 }
592
0210c863 593 if(nextE > cutLow && nextE < cutHigh ) {
594 totalE += nextE;
c78bc12b 595 fSharedThis = kTRUE;
8dc823cc 596 }
da0805e2 597 totalE = totalE*TMath::Cos(Eta2Theta(eta));
a38d1871 598 TH1F* hEdist = (TH1F*)fDiagList->FindObject(Form("Edist_after_sharing_FMD%d%c",det,ring));
da0805e2 599 if(totalE > cutLow)
600 hEdist->Fill(totalE);
601
bb8a464f 602
0210c863 603 if(totalE > 0) {
cc066cb9 604
0210c863 605 mergedEnergy = totalE;
c78bc12b 606 fSharedPrev = kTRUE;
cc066cb9 607 // if(det == 1 && ring =='I')
c78bc12b 608 }
da0805e2 609 else{
610 fSharedThis = kFALSE;
611 fSharedPrev = kFALSE;
c78bc12b 612 }
da0805e2 613
0210c863 614 // mergedEnergy = mult;
8dc823cc 615
da0805e2 616
617 /* }
618else {
619 TH1F* hEdist = (TH1F*)fDiagList->FindObject(Form("Edist_after_sharing_FMD%d%c",det,ring));
620 if(mult > cutLow)
621 fEtotal+=mult;
622 if(mult < cutLow) {
623 mergedEnergy = fEtotal;
624 fEtotal = 0;
625 hEdist->Fill(mergedEnergy);
626
627 }
628
629 }*/
630
0210c863 631 return mergedEnergy;
cc066cb9 632 //}
8dc823cc 633}
da0805e2 634//_____________________________________________________________________
635void AliFMDAnalysisTaskSharing::Terminate(Option_t* /* option*/) {
636
637 TH1F* hFMDHitDistribution = (TH1F*)fDiagList->FindObject("hFMDHitDistribution");
638 TH1F* hFMD1HitDistribution = (TH1F*)fDiagList->FindObject("hFMDHitDistributionFMD1");
639 TH1F* hFMD2IHitDistribution = (TH1F*)fDiagList->FindObject("hFMDHitDistributionFMD2I");
640 TH1F* hFMD2OHitDistribution = (TH1F*)fDiagList->FindObject("hFMDHitDistributionFMD2O");
641 TH1F* hFMD3IHitDistribution = (TH1F*)fDiagList->FindObject("hFMDHitDistributionFMD3I");
642 TH1F* hFMD3OHitDistribution = (TH1F*)fDiagList->FindObject("hFMDHitDistributionFMD3O");
643
644 TH1F* hZvtx = (TH1F*)fDiagList->FindObject("hZvtx");
645 for(UShort_t det=1;det<=3;det++) {
646 Int_t nRings = (det==1 ? 1 : 2);
647 for (UShort_t ir = 0; ir < nRings; ir++) {
648 Char_t ring = (ir == 0 ? 'I' : 'O');
649
650 TH1F* hEdist = (TH1F*)fDiagList->FindObject(Form("Edist_before_sharing_FMD%d%c",det,ring));
651 TH1F* hEdistAfter = (TH1F*)fDiagList->FindObject(Form("Edist_after_sharing_FMD%d%c",det,ring));
652 if(hZvtx->GetEntries()) {
653 hEdist->Scale(1./(Float_t)hZvtx->GetEntries());
654 hEdistAfter->Scale(1./(Float_t)hZvtx->GetEntries());
655 }
656
657 }
658
659 }
660 TH1F* hFlatTracks = (TH1F*)fDiagList->FindObject("hFlatTracks");
661 TH1F* hTrVtxDistribution = (TH1F*)fDiagList->FindObject("hTrVtxDistribution");
662 TH1F* hTrEtaDistribution = (TH1F*)fDiagList->FindObject("hTrEtaDistribution");
663 TH1F* hTrEtaDistribution2 = (TH1F*)fDiagList->FindObject("hTrEtaDistribution2");
664 if(hZvtx->GetEntries()) {
665 hFMDHitDistribution->Scale(1./(Float_t)hZvtx->GetEntries());
666 hFMD1HitDistribution->Scale(1./(Float_t)hZvtx->GetEntries());
667 hFMD2IHitDistribution->Scale(1./(Float_t)hZvtx->GetEntries());
668 hFMD2OHitDistribution->Scale(1./(Float_t)hZvtx->GetEntries());
669 hFMD3IHitDistribution->Scale(1./(Float_t)hZvtx->GetEntries());
670 hFMD3OHitDistribution->Scale(1./(Float_t)hZvtx->GetEntries());
671 hFlatTracks->Scale(1./(Float_t)hZvtx->GetEntries());
672 hTrVtxDistribution->Scale(1./(Float_t)hZvtx->GetEntries());
673 hTrEtaDistribution->Scale(1./(Float_t)hZvtx->GetEntries());
674 hTrEtaDistribution2->Scale(1./(Float_t)hZvtx->GetEntries());
675 }
676
b64db9b1 677
da0805e2 678
679
680}
bb8a464f 681//_____________________________________________________________________
0210c863 682Float_t AliFMDAnalysisTaskSharing::Eta2Theta(Float_t eta) const{
683 //convert the eta of a strip to a theta
bb8a464f 684 Float_t theta = 2*TMath::ATan(TMath::Exp(-1*eta));
685
686 if(eta < 0)
687 theta = theta-TMath::Pi();
688
cc066cb9 689 // std::cout<<"From eta2Theta: "<<theta<<" "<<eta<<std::endl;
bb8a464f 690 return theta;
691
692
693
694}
b64db9b1 695
696
697
bb8a464f 698//_____________________________________________________________________
b64db9b1 699void AliFMDAnalysisTaskSharing::ProcessPrimary() {
aa303f0c 700 //Get the unspoiled MC dN/deta before event cuts
b64db9b1 701 AliMCEventHandler* eventHandler = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
702 AliMCEvent* mcEvent = eventHandler->MCEvent();
703 if(!mcEvent)
704 return;
0a2f2742 705 fLastTrackByStrip.Reset(-1);
b64db9b1 706 AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance();
707
708 AliMCParticle* particle = 0;
709
710 AliStack* stack = mcEvent->Stack();
711
712 TH1F* hPrimary = (TH1F*)fDiagList->FindObject("hMultvsEtaNoCuts");
aa303f0c 713 TH1F* hEnergyOfParticles = (TH1F*)fDiagList->FindObject("hEnergyOfParticles");
b64db9b1 714 AliHeader* header = mcEvent->Header();
715 AliGenEventHeader* genHeader = header->GenEventHeader();
bb8a464f 716
ba77343d 717 // AliGenPythiaEventHeader* pythiaGenHeader = dynamic_cast<AliGenPythiaEventHeader*>(genHeader);
bb8a464f 718
70d74659 719 // if (!pythiaGenHeader) {
720 // std::cout<<" no pythia header!"<<std::endl;
721 // return;
722 // }
da0805e2 723
724
aa303f0c 725 //Int_t pythiaType = pythiaGenHeader->ProcessType();
da0805e2 726
727 //if(pythiaType==92||pythiaType==93){
728 // std::cout<<"single diffractive"<<std::endl;
729 // return;
730 // }
731 // if(pythiaType==94){
732 // std::cout<<"double diffractive"<<std::endl;
733 // return;
734 // }
bb8a464f 735
b64db9b1 736 TArrayF vertex;
737 genHeader->PrimaryVertex(vertex);
0a2f2742 738
b64db9b1 739 if(TMath::Abs(vertex.At(2)) > pars->GetVtxCutZ())
740 return;
741
742 Double_t delta = 2*pars->GetVtxCutZ()/pars->GetNvtxBins();
743 Double_t vertexBinDouble = (vertex.At(2) + pars->GetVtxCutZ()) / delta;
744 Int_t vertexBin = (Int_t)vertexBinDouble;
745
746 Bool_t firstTrack = kTRUE;
bb8a464f 747
b64db9b1 748 Int_t nTracks = stack->GetNprimary();
0a2f2742 749 if(pars->GetProcessHits())
750 nTracks = stack->GetNtrack();
b64db9b1 751 TH1F* nMCevents = (TH1F*)fDiagList->FindObject("nMCEventsNoCuts");
752 for(Int_t i = 0 ;i<nTracks;i++) {
7aad0c47 753 particle = (AliMCParticle*) mcEvent->GetTrack(i);
b64db9b1 754 if(!particle)
755 continue;
756
757 if(stack->IsPhysicalPrimary(i) && particle->Charge() != 0) {
758 hPrimary->Fill(particle->Eta());
759
760
761 TH1F* hPrimVtxBin = (TH1F*)fDiagList->FindObject(Form("primmult_NoCuts_vtxbin%d",vertexBin));
762 hPrimVtxBin->Fill(particle->Eta());
763
764 if(firstTrack) {
765 nMCevents->Fill(vertexBin);
766 firstTrack = kFALSE;
767 }
768
769 }
0a2f2742 770 if(pars->GetProcessHits()) {
771
772 for(Int_t j=0; j<particle->GetNumberOfTrackReferences();j++) {
773
774 AliTrackReference* ref = particle->GetTrackReference(j);
775 UShort_t det,sec,strip;
776 Char_t ring;
777 if(ref->DetectorId() != AliTrackReference::kFMD)
778 continue;
aa303f0c 779 if(particle->Charge() != 0)
780 hEnergyOfParticles->Fill(particle->E());
781
0a2f2742 782 AliFMDStripIndex::Unpack(ref->UserId(),det,ring,sec,strip);
783 Float_t thisStripTrack = fLastTrackByStrip(det,ring,sec,strip);
784 if(particle->Charge() != 0 && i != thisStripTrack ) {
785 //Double_t x,y,z;
786
787 Float_t eta = pars->GetEtaFromStrip(det,ring,sec,strip,vertex.At(2));//-1*TMath::Log(TMath::Tan(0.5*theta));
788 TH1F* hHits = (TH1F*)fDiagList->FindObject(Form("hMCHits_nocuts_FMD%d%c_vtxbin%d",det,ring,vertexBin));
789
790
791 hHits->Fill(eta);
792
793 Float_t nstrips = (ring =='O' ? 256 : 512);
794
795 fLastTrackByStrip(det,ring,sec,strip) = (Float_t)i;
796
797 if(strip >0)
798 fLastTrackByStrip(det,ring,sec,strip-1) = (Float_t)i;
799 if(strip < (nstrips - 1))
800 fLastTrackByStrip(det,ring,sec,strip+1) = (Float_t)i;
801
802 }
803
804
805 }
806
807
808 }
809
b64db9b1 810 }
811
812}
813
3bb122c7 814//_____________________________________________________________________
815//
816// EOF
817//