]> git.uio.no Git - u/mrichter/AliRoot.git/blame - MUON/AliMUONReconstructor.cxx
Removing validation stage, which will probably be handled in the online DA (Laurent)
[u/mrichter/AliRoot.git] / MUON / AliMUONReconstructor.cxx
CommitLineData
cac2eb58 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
cac2eb58 15/* $Id$ */
16
37827b29 17//-----------------------------
18// Class AliMUONReconstructor
19//-----------------------------
9265505b 20// Class for the
21// MUON track reconstruction
30178c30 22
cf464691 23#include "AliMUONReconstructor.h"
b2d7df0b 24
96fdfe9a 25#include "AliMUONConstants.h"
b2d7df0b 26#include "AliMUONCalibrationData.h"
346fb008 27#include "AliMUONClusterFinderAZ.h"
b2d7df0b 28#include "AliMUONClusterReconstructor.h"
29#include "AliMUONData.h"
30#include "AliMUONDigitCalibrator.h"
cc87ebcd 31#include "AliMUONEventRecoCombi.h"
2cf44ef3 32#include "AliMUONDigitMaker.h"
cac2eb58 33#include "AliMUONTrack.h"
34#include "AliMUONTrackParam.h"
37827b29 35#include "AliMUONTrackExtrap.h"
196471e9 36#include "AliMUONTracker.h"
2457f726 37#include "AliMUONVTrackReconstructor.h"
b2d7df0b 38#include "AliMUONTrackReconstructor.h"
2457f726 39#include "AliMUONTrackReconstructorK.h"
cac2eb58 40#include "AliMUONTriggerTrack.h"
e1a10d41 41#include "AliMUONTriggerCircuit.h"
96fdfe9a 42#include "AliMUONTriggerCrateStore.h"
6a518391 43#include "AliMUONSegFactory.h"
44#include "AliMUONSegmentation.h"
f9247068 45#include "AliMUONPreClusterFinder.h"
46#include "AliMUONClusterFinderCOG.h"
47#include "AliMUONClusterFinderSimpleFit.h"
48#include "AliMUONClusterFinderMLEM.h"
3b00d01e 49
50#include "AliESD.h"
51#include "AliESDMuonTrack.h"
52#include "AliLog.h"
cf464691 53#include "AliRawReader.h"
b2d7df0b 54#include "AliRunLoader.h"
3b00d01e 55#include "AliCDBManager.h"
56
b2d7df0b 57#include "TTask.h"
94f6fba9 58#include "TStopwatch.h"
29f1b13a 59
9265505b 60/// \cond CLASSIMP
cac2eb58 61ClassImp(AliMUONReconstructor)
9265505b 62/// \endcond
b2d7df0b 63
cac2eb58 64//_____________________________________________________________________________
65AliMUONReconstructor::AliMUONReconstructor()
aa6ecf89 66 : AliReconstructor(),
aa6ecf89 67 fDigitMaker(new AliMUONDigitMaker()),
96fdfe9a 68 fCalibrationData(0x0),
69 fCrateManager(new AliMUONTriggerCrateStore()),
e1a10d41 70 fTriggerCircuit(new TClonesArray("AliMUONTriggerCircuit", 234)),
6a518391 71 fTransformer(new AliMUONGeometryTransformer(kTRUE)),
196471e9 72 fSegmentation(0x0),
73 fMUONData(new AliMUONData(0x0,"MUON","MUON"))
8789635b 74{
d19b6003 75/// Default constructor
76
94f6fba9 77 AliDebug(1,"");
96fdfe9a 78 // Crate manager
79 fCrateManager->ReadFromFile();
80
81 // set to digit maker
82 fDigitMaker->SetCrateManager(fCrateManager);
83
9c4b1ee7 84 // transformater
85 fTransformer->ReadGeometryData("volpath.dat", "geometry.root");
6a518391 86
87 // create segmentation and pass it to EventRecoCombi
88 AliMUONSegFactory factory(fTransformer);
89 fSegmentation = factory.CreateSegmentation();
90 AliMUONEventRecoCombi::Instance(fSegmentation);
9c4b1ee7 91
96fdfe9a 92 // trigger circuit
93 for (Int_t i = 0; i < AliMUONConstants::NTriggerCircuit(); i++) {
e1a10d41 94 AliMUONTriggerCircuit* c = new AliMUONTriggerCircuit();
9c4b1ee7 95 c->SetTransformer(fTransformer);
96fdfe9a 96 c->Init(i,*fCrateManager);
97 TClonesArray& circuit = *fTriggerCircuit;
e1a10d41 98 new(circuit[circuit.GetEntriesFast()])AliMUONTriggerCircuit(*c);
96fdfe9a 99 delete c;
9c4b1ee7 100 }
101
102
8789635b 103}
94f6fba9 104
8789635b 105//_____________________________________________________________________________
106AliMUONReconstructor::~AliMUONReconstructor()
cac2eb58 107{
d19b6003 108/// Destructor
109
94f6fba9 110 AliDebug(1,"");
b2d7df0b 111 delete fCalibrationData;
aa6ecf89 112 delete fDigitMaker;
96fdfe9a 113 delete fCrateManager;
114 delete fTriggerCircuit;
9c4b1ee7 115 delete fTransformer;
6a518391 116 delete fSegmentation;
196471e9 117 delete fMUONData;
cac2eb58 118}
b2d7df0b 119
120//_____________________________________________________________________________
121TTask*
196471e9 122AliMUONReconstructor::GetCalibrationTask() const
b2d7df0b 123{
d19b6003 124/// Create the calibration task(s).
b2d7df0b 125
3b00d01e 126 //const AliRun* run = fRunLoader->GetAliRun();
127 //Int_t runNumber = run->GetRunNumber();
128 Int_t runNumber = AliCDBManager::Instance()->GetRun();
9f9729c3 129 AliInfo("Calibration will occur.");
3b00d01e 130
9f9729c3 131 fCalibrationData = new AliMUONCalibrationData(runNumber);
132 if ( !fCalibrationData->IsValid() )
b2d7df0b 133 {
134 AliError("Could not retrieve calibrations !");
135 delete fCalibrationData;
136 fCalibrationData = 0x0;
137 return 0x0;
138 }
9f9729c3 139 TTask* calibration = new TTask("MUONCalibrator","MUON Digit calibrator");
ee103e97 140
141 TString opt(GetOption());
142 opt.ToUpper();
143 Bool_t statusMap(kTRUE);
144
145 if ( strstr(opt,"NOSTATUSMAP") )
146 {
147 AliWarning("Disconnecting status map : SHOULD BE USED FOR DEBUG ONLY. NOT FOR PRODUCTION !!!");
148 statusMap = kFALSE;
149 }
196471e9 150 calibration->Add(new AliMUONDigitCalibrator(fMUONData,fCalibrationData,statusMap));
9f9729c3 151 return calibration;
b2d7df0b 152}
153
f9247068 154//_____________________________________________________________________________
155AliMUONClusterReconstructor*
196471e9 156AliMUONReconstructor::CreateClusterReconstructor() const
f9247068 157{
06ca6d7b 158/// Create cluster reconstructor
159
f9247068 160 AliMUONVClusterFinder* clusterFinder(0x0);
161
162 TString opt(GetOption());
163 opt.ToUpper();
164
165 if ( strstr(opt,"PRECLUSTER") )
166 {
167 clusterFinder = new AliMUONPreClusterFinder;
168 }
169 else if ( strstr(opt,"COG") )
170 {
171 clusterFinder = new AliMUONClusterFinderCOG;
172 }
173 else if ( strstr(opt,"SIMPLEFIT") )
174 {
175 clusterFinder = new AliMUONClusterFinderSimpleFit;
176 }
177 else if ( strstr(opt,"MLEM:DRAW") )
178 {
179 clusterFinder = new AliMUONClusterFinderMLEM(kTRUE);
180 }
181 else if ( strstr(opt,"MLEM") )
182 {
183 clusterFinder = new AliMUONClusterFinderMLEM(kFALSE);
184 }
185
186 if ( clusterFinder)
187 {
188 AliInfo(Form("Will use %s for clusterizing",clusterFinder->ClassName()));
189 }
190
191 AliMUONClusterReconstructor* clusterReco =
196471e9 192 new AliMUONClusterReconstructor(fMUONData,clusterFinder,fTransformer);
f9247068 193 return clusterReco;
194}
195
cac2eb58 196//_____________________________________________________________________________
197void AliMUONReconstructor::Reconstruct(AliRunLoader* runLoader) const
198{
d19b6003 199/// Reconstruct
200/// \todo add more
201
cac2eb58 202 AliLoader* loader = runLoader->GetLoader("MUONLoader");
d2f8e464 203 Int_t nEvents = runLoader->GetNumberOfEvents();
204 Int_t evtNumber = runLoader->GetEventNumber();
cac2eb58 205
196471e9 206 fMUONData->SetLoader(loader);
3bc8b580 207
208// passing loader as argument.
2457f726 209 AliMUONVTrackReconstructor* recoEvent;
196471e9 210 if (strstr(GetOption(),"Original")) recoEvent = new AliMUONTrackReconstructor(fMUONData);
211 else if (strstr(GetOption(),"Combi")) recoEvent = new AliMUONTrackReconstructorK(fMUONData,"Combi");
212 else recoEvent = new AliMUONTrackReconstructorK(fMUONData,"Kalman");
2457f726 213
96fdfe9a 214 recoEvent->SetTriggerCircuit(fTriggerCircuit);
3bc8b580 215
196471e9 216 AliMUONClusterReconstructor* recoCluster = CreateClusterReconstructor();
3bc8b580 217
7e4a628d 218 AliMUONClusterFinderVS *recModel = recoCluster->GetRecoModel();
3bc8b580 219
8e0ae46c 220 if (!strstr(GetOption(),"VS")) {
1af223d7 221 recModel = (AliMUONClusterFinderVS*) new AliMUONClusterFinderAZ();
9ffe3ef4 222 recoCluster->SetRecoModel(recModel);
9ffe3ef4 223 }
7e4a628d 224 recModel->SetGhostChi2Cut(10);
d2f8e464 225 recModel->SetEventNumber(evtNumber);
cac2eb58 226
227 loader->LoadDigits("READ");
228 loader->LoadRecPoints("RECREATE");
229 loader->LoadTracks("RECREATE");
cc87ebcd 230
196471e9 231 TTask* calibration = GetCalibrationTask();
b2d7df0b 232
2457f726 233 Int_t chBeg = (strstr(GetOption(),"Combi") ? 6 : 0);
9c4b1ee7 234
cc87ebcd 235 // Loop over events
cac2eb58 236 for(Int_t ievent = 0; ievent < nEvents; ievent++) {
94f6fba9 237
238 AliDebug(1,Form("Event %d",ievent));
239
cac2eb58 240 runLoader->GetEvent(ievent);
241
8210cb40 242 //----------------------- digit2cluster & Trigger2Trigger -------------------
cac2eb58 243 if (!loader->TreeR()) loader->MakeRecPointsContainer();
cc87ebcd 244
cac2eb58 245 // tracking branch
2457f726 246 if (!strstr(GetOption(),"Combi")) {
196471e9 247 fMUONData->MakeBranch("RC");
248 fMUONData->SetTreeAddress("D,RC");
cc87ebcd 249 } else {
196471e9 250 fMUONData->SetTreeAddress("D");
251 fMUONData->SetTreeAddress("RCC");
cc87ebcd 252 }
addbf88a 253 // Important for avoiding a memory leak when reading digits ( to be investigated more in detail)
cc87ebcd 254 // In any case the reading of GLT is needed for the Trigger2Tigger method below
196471e9 255 fMUONData->SetTreeAddress("GLT");
cc87ebcd 256
196471e9 257 fMUONData->GetDigits();
b2d7df0b 258
259 if ( calibration )
260 {
261 calibration->ExecuteTask();
262 }
263
cc87ebcd 264 recoCluster->Digits2Clusters(chBeg);
b2d7df0b 265
2457f726 266 if (strstr(GetOption(),"Combi")) {
cc87ebcd 267 // Combined cluster / track finder
196471e9 268 AliMUONEventRecoCombi::Instance()->FillEvent(fMUONData, (AliMUONClusterFinderAZ*)recModel);
cc87ebcd 269 ((AliMUONClusterFinderAZ*) recModel)->SetReco(2);
270 }
196471e9 271 else fMUONData->Fill("RC");
cac2eb58 272
273 // trigger branch
196471e9 274 fMUONData->MakeBranch("TC");
275 fMUONData->SetTreeAddress("TC");
cc87ebcd 276 recoCluster->Trigger2Trigger();
196471e9 277 fMUONData->Fill("TC");
cac2eb58 278
cc87ebcd 279 //AZ loader->WriteRecPoints("OVERWRITE");
cac2eb58 280
281 //---------------------------- Track & TriggerTrack ---------------------
282 if (!loader->TreeT()) loader->MakeTracksContainer();
283
284 // trigger branch
196471e9 285 fMUONData->MakeBranch("RL"); //trigger track
286 fMUONData->SetTreeAddress("RL");
cac2eb58 287 recoEvent->EventReconstructTrigger();
196471e9 288 fMUONData->Fill("RL");
cac2eb58 289
290 // tracking branch
196471e9 291 fMUONData->MakeBranch("RT"); //track
292 fMUONData->SetTreeAddress("RT");
cac2eb58 293 recoEvent->EventReconstruct();
196471e9 294 fMUONData->Fill("RT");
cac2eb58 295
cc87ebcd 296 loader->WriteTracks("OVERWRITE");
297
2457f726 298 if (strstr(GetOption(),"Combi")) {
cc87ebcd 299 // Combined cluster / track
300 ((AliMUONClusterFinderAZ*) recModel)->SetReco(1);
196471e9 301 fMUONData->MakeBranch("RC");
302 fMUONData->SetTreeAddress("RC");
303 AliMUONEventRecoCombi::Instance()->FillRecP(fMUONData, (AliMUONTrackReconstructorK*)recoEvent);
304 fMUONData->Fill("RC");
cc87ebcd 305 }
306 loader->WriteRecPoints("OVERWRITE");
307
cac2eb58 308 //--------------------------- Resetting branches -----------------------
196471e9 309 fMUONData->ResetDigits();
310 fMUONData->ResetRawClusters();
311 fMUONData->ResetTrigger();
312 fMUONData->ResetRecTracks();
313 fMUONData->ResetRecTriggerTracks();
29f1b13a 314
cac2eb58 315 }
316 loader->UnloadDigits();
317 loader->UnloadRecPoints();
318 loader->UnloadTracks();
319
320 delete recoCluster;
321 delete recoEvent;
b2d7df0b 322 delete calibration;
cac2eb58 323}
cf464691 324
325//_____________________________________________________________________________
f9247068 326void AliMUONReconstructor::Reconstruct(AliRunLoader* runLoader,
327 AliRawReader* rawReader) const
cf464691 328{
d19b6003 329/// Recontruct
330/// \todo add more
331
94f6fba9 332 // AliLoader
cf464691 333 AliLoader* loader = runLoader->GetLoader("MUONLoader");
d2f8e464 334 Int_t evtNumber = runLoader->GetEventNumber();
335
196471e9 336 fMUONData->SetLoader(loader);
cf464691 337
94f6fba9 338 // passing loader as argument.
196471e9 339 fDigitMaker->SetMUONData(fMUONData);
1197ff51 340
3b00d01e 341 // disable trigger rawdata reading
342 if (strstr(GetOption(),"TriggerDisable"))
343 fDigitMaker->DisableTrigger();
344
196471e9 345 AliMUONClusterReconstructor* recoCluster = CreateClusterReconstructor();
2457f726 346
f9247068 347 AliMUONClusterFinderVS *recModel = recoCluster->GetRecoModel();
348
94f6fba9 349 if (!strstr(GetOption(),"VS"))
350 {
30eabfb8 351 recModel = (AliMUONClusterFinderVS*) new AliMUONClusterFinderAZ();
f9247068 352 recoCluster->SetRecoModel(recModel);
30eabfb8 353 }
7e4a628d 354 recModel->SetGhostChi2Cut(10);
d2f8e464 355 recModel->SetEventNumber(evtNumber);
8cde4af5 356
196471e9 357 TTask* calibration = GetCalibrationTask();
b2d7df0b 358
cf464691 359 loader->LoadRecPoints("RECREATE");
64b056bc 360
196471e9 361 // Digits are not stored on disk and created on flight from rawdata.
64b056bc 362 // In order to write digits on disk the following line should be uncommented
363 // loader->LoadDigits("RECREATE");
364
cc87ebcd 365 // Loop over events
8210cb40 366 Int_t iEvent = 0;
94f6fba9 367
368 TStopwatch totalTimer;
369 TStopwatch rawTimer;
370 TStopwatch calibTimer;
371 TStopwatch clusterTimer;
94f6fba9 372
373 rawTimer.Start(kTRUE); rawTimer.Stop();
374 calibTimer.Start(kTRUE); calibTimer.Stop();
375 clusterTimer.Start(kTRUE); clusterTimer.Stop();
94f6fba9 376
377 totalTimer.Start(kTRUE);
378
379 while (rawReader->NextEvent())
380 {
381 AliDebug(1,Form("Event %d",iEvent));
382
cf464691 383 runLoader->GetEvent(iEvent++);
8cde4af5 384
ce6a659c 385 //----------------------- raw2digits & raw2trigger-------------------
196471e9 386 // if (!loader->TreeD())
387 // {
388 // AliDebug(1,Form("Making Digit Container for event %d",iEvent));
389 // loader->MakeDigitsContainer();
390 // }
391 // Digits are not stored on disk and created on flight from rawdata.
392 // In order to write digits on disk the following lines should be uncommented
393 // fMUONData->MakeBranch("D,GLT");
394 // fMUONData->SetTreeAddress("D,GLT");
395 fMUONData->SetDataContainer("D, GLT");
94f6fba9 396 rawTimer.Start(kFALSE);
aa6ecf89 397 fDigitMaker->Raw2Digits(rawReader);
94f6fba9 398 rawTimer.Stop();
399
b2d7df0b 400 if ( calibration )
401 {
94f6fba9 402 calibTimer.Start(kFALSE);
b2d7df0b 403 calibration->ExecuteTask();
94f6fba9 404 calibTimer.Stop();
b2d7df0b 405 }
64b056bc 406 // Digits are not stored on disk and created on flight from rawdata.
407 // In order to write digits on disk the following lines should be uncommented
196471e9 408 // fMUONData->Fill("D,GLT");
64b056bc 409 // loader->WriteDigits("OVERWRITE");
8210cb40 410 //----------------------- digit2cluster & Trigger2Trigger -------------------
94f6fba9 411 clusterTimer.Start(kFALSE);
412
cf464691 413 if (!loader->TreeR()) loader->MakeRecPointsContainer();
8cde4af5 414
cf464691 415 // tracking branch
196471e9 416 fMUONData->MakeBranch("RC");
417 fMUONData->SetTreeAddress("RC");
f9247068 418 recoCluster->Digits2Clusters();
196471e9 419 fMUONData->Fill("RC");
cf464691 420
421 // trigger branch
196471e9 422 fMUONData->MakeBranch("TC");
423 fMUONData->SetTreeAddress("TC");
424 fMUONData->Fill("TC");
94f6fba9 425
cf464691 426 loader->WriteRecPoints("OVERWRITE");
427
94f6fba9 428 clusterTimer.Stop();
8cde4af5 429
94f6fba9 430
cf464691 431 //--------------------------- Resetting branches -----------------------
196471e9 432 fMUONData->ResetDigits();
433 fMUONData->ResetRawClusters();
434 fMUONData->ResetTrigger();
cf464691 435 }
94f6fba9 436
437 totalTimer.Stop();
438
cf464691 439 loader->UnloadRecPoints();
ce6a659c 440 loader->UnloadDigits();
2457f726 441
f9247068 442 delete recoCluster;
443
94f6fba9 444 AliInfo(Form("Execution time for converting RAW data to digits in MUON : R:%.2fs C:%.2fs",
445 rawTimer.RealTime(),rawTimer.CpuTime()));
446 AliInfo(Form("Execution time for calibrating MUON : R:%.2fs C:%.2fs",
447 calibTimer.RealTime(),calibTimer.CpuTime()));
448 AliInfo(Form("Execution time for clusterizing MUON : R:%.2fs C:%.2fs",
449 clusterTimer.RealTime(),clusterTimer.CpuTime()));
94f6fba9 450 AliInfo(Form("Total Execution time for Reconstruct(from raw) MUON : R:%.2fs C:%.2fs",
451 totalTimer.RealTime(),totalTimer.CpuTime()));
cf464691 452}
453
cac2eb58 454//_____________________________________________________________________________
455void AliMUONReconstructor::FillESD(AliRunLoader* runLoader, AliESD* esd) const
456{
d19b6003 457/// Fill ESD
458/// \todo add more
459
cac2eb58 460 TClonesArray* recTracksArray = 0;
461 TClonesArray* recTrigTracksArray = 0;
cc87ebcd 462
cac2eb58 463 AliLoader* loader = runLoader->GetLoader("MUONLoader");
464 loader->LoadTracks("READ");
196471e9 465 fMUONData->SetLoader(loader);
cac2eb58 466
cc87ebcd 467 // declaration
a2da7817 468 Int_t iEvent;// nPart;
469 Int_t nTrackHits;// nPrimary;
cac2eb58 470 Double_t fitFmin;
cac2eb58 471
472 Double_t bendingSlope, nonBendingSlope, inverseBendingMomentum;
473 Double_t xRec, yRec, zRec, chi2MatchTrigger;
474 Bool_t matchTrigger;
475
b002ac70 476 // setting pointer for tracks, triggertracks & trackparam at vertex
cac2eb58 477 AliMUONTrack* recTrack = 0;
8cde4af5 478 AliMUONTrackParam trackParam;
cac2eb58 479 AliMUONTriggerTrack* recTriggerTrack = 0;
2cf44ef3 480
cc87ebcd 481 iEvent = runLoader->GetEventNumber();
cac2eb58 482 runLoader->GetEvent(iEvent);
483
94f6fba9 484 // Get vertex
485 Double_t vertex[3] = {0};
486 const AliESDVertex *esdVert = esd->GetVertex();
43939bd8 487 if (esdVert->GetNContributors()) {
488 esdVert->GetXYZ(vertex);
196471e9 489 AliDebug(1, "find vertex\n");
43939bd8 490 }
cac2eb58 491 // setting ESD MUON class
30178c30 492 AliESDMuonTrack* theESDTrack = new AliESDMuonTrack() ;
cac2eb58 493
494 //-------------------- trigger tracks-------------
495 Long_t trigPat = 0;
196471e9 496 fMUONData->SetTreeAddress("RL");
497 fMUONData->GetRecTriggerTracks();
498 recTrigTracksArray = fMUONData->RecTriggerTracks();
cac2eb58 499
500 // ready global trigger pattern from first track
cc87ebcd 501 if (recTrigTracksArray)
cac2eb58 502 recTriggerTrack = (AliMUONTriggerTrack*) recTrigTracksArray->First();
503 if (recTriggerTrack) trigPat = recTriggerTrack->GetGTPattern();
504
505 //printf(">>> Event %d Number of Recconstructed tracks %d \n",iEvent, nrectracks);
cc87ebcd 506
cac2eb58 507 // -------------------- tracks-------------
196471e9 508 fMUONData->SetTreeAddress("RT");
509 fMUONData->GetRecTracks();
510 recTracksArray = fMUONData->RecTracks();
cc87ebcd 511
cac2eb58 512 Int_t nRecTracks = 0;
513 if (recTracksArray)
514 nRecTracks = (Int_t) recTracksArray->GetEntriesFast(); //
cc87ebcd 515
cac2eb58 516 // loop over tracks
517 for (Int_t iRecTracks = 0; iRecTracks < nRecTracks; iRecTracks++) {
518
519 // reading info from tracks
520 recTrack = (AliMUONTrack*) recTracksArray->At(iRecTracks);
521
8cde4af5 522 trackParam = *((AliMUONTrackParam*) (recTrack->GetTrackParamAtHit())->First());
211c52eb 523
8cde4af5 524 // extrapolate to the vertex if required
525 // if the vertex is not available, extrapolate to (0,0,0)
526 if (!strstr(GetOption(),"NoExtrapToVtx")) {
527 if (esdVert->GetNContributors())
528 AliMUONTrackExtrap::ExtrapToVertex(&trackParam, vertex[0],vertex[1],vertex[2]);
529 else
530 AliMUONTrackExtrap::ExtrapToVertex(&trackParam, 0.,0.,0.);
531 }
532
533 bendingSlope = trackParam.GetBendingSlope();
534 nonBendingSlope = trackParam.GetNonBendingSlope();
535 inverseBendingMomentum = trackParam.GetInverseBendingMomentum();
536 xRec = trackParam.GetNonBendingCoor();
537 yRec = trackParam.GetBendingCoor();
538 zRec = trackParam.GetZ();
cac2eb58 539
540 nTrackHits = recTrack->GetNTrackHits();
541 fitFmin = recTrack->GetFitFMin();
542 matchTrigger = recTrack->GetMatchTrigger();
543 chi2MatchTrigger = recTrack->GetChi2MatchTrigger();
544
545 // setting data member of ESD MUON
30178c30 546 theESDTrack->SetInverseBendingMomentum(inverseBendingMomentum);
547 theESDTrack->SetThetaX(TMath::ATan(nonBendingSlope));
548 theESDTrack->SetThetaY(TMath::ATan(bendingSlope));
889a0215 549 theESDTrack->SetZ(zRec);
550 theESDTrack->SetBendingCoor(yRec); // calculate vertex at ESD or Tracking level ?
551 theESDTrack->SetNonBendingCoor(xRec);
30178c30 552 theESDTrack->SetChi2(fitFmin);
553 theESDTrack->SetNHit(nTrackHits);
554 theESDTrack->SetMatchTrigger(matchTrigger);
555 theESDTrack->SetChi2MatchTrigger(chi2MatchTrigger);
cac2eb58 556
cc87ebcd 557 // storing ESD MUON Track into ESD Event
558 if (nRecTracks != 0)
30178c30 559 esd->AddMuonTrack(theESDTrack);
cac2eb58 560 } // end loop tracks
561
cac2eb58 562 // reset muondata
196471e9 563 fMUONData->ResetRecTracks();
564 fMUONData->ResetRecTriggerTracks();
cac2eb58 565
cc87ebcd 566 //} // end loop on event
567 loader->UnloadTracks();
2cf44ef3 568
30178c30 569 delete theESDTrack;
196471e9 570}
571
572//_____________________________________________________________________________
a2da7817 573void AliMUONReconstructor::FillESD(AliRunLoader* runLoader, AliRawReader* /*rawReader*/, AliESD* esd) const
574{
d19b6003 575/// Fill ESD
576/// \todo add more
577
a2da7817 578 // don't need rawReader ???
579 FillESD(runLoader, esd);
cac2eb58 580}
196471e9 581
582//_____________________________________________________________________________
583AliTracker* AliMUONReconstructor::CreateTracker(AliRunLoader* runLoader) const
584{
585 /// create tracker for MUON
586 /// go into the tracking framework finally (Ch.F)
587
588 AliLoader* loader = runLoader->GetLoader("MUONLoader");
589
590 fMUONData->SetLoader(loader);
591
592 AliMUONTracker* tracker = new AliMUONTracker();
593 tracker->SetMUONData(fMUONData);
594 tracker->SetTriggerCircuit(fTriggerCircuit);
595 tracker->SetOption(GetOption());
596
597 return tracker;
598
599}