]> git.uio.no Git - u/mrichter/AliRoot.git/blame - MUON/AliMUONReconstructor.cxx
coding violation fixes
[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
3d1463c8 17//-----------------------------------------------------------------------------
22899106 18/// \class AliMUONReconstructor
19///
20/// Implementation of AliReconstructor for MUON subsystem.
21///
22/// The behavior of the MUON reconstruction can be changed, besides
23/// the usual methods found in AliReconstruction (e.g. to disable tracking)
24/// by using AliReconstruction::SetOption("MUON",options)
25/// where options should be a space separated string.
26///
27/// Valid options are :
28///
29/// SAVEDIGITS : if you want to save in the TreeD the *calibrated* digits
30/// that are used for the clustering
31///
32/// SIMPLEFIT : use the AliMUONClusterFinderSimpleFit clusterizer
33///
2060b217 34/// MLEM : another implementation of AZ, where preclustering is external (default)
93d7b017 35/// MLEMV3 : MLEM with preclustering=PRECLUSTERV2
36/// MLEMV3 : MLEM with preclustering=PRECLUSTERV3
37///
22899106 38/// PRECLUSTER : use only AliMUONPreClusterFinder. Only for debug as
39/// the produced clusters do not have a position, hence the tracking will not
40/// work
93d7b017 41/// PRECLUSTERV2 : another version of the preclustering
42/// PRECLUSTERV3 : yet another version of the preclustering
22899106 43///
44/// COG : use AliMUONClusterFinderCOG clusterizer. Not really a production
45/// option either, as center-of-gravity is generally not a good estimate
46/// of the cluster position...
47///
48/// NOCLUSTERING : bypass completely the clustering stage
49///
22899106 50/// NOLOCALRECONSTRUCTION : for debug, to disable local reconstruction (and hence
51/// "recover" old behavior)
52///
53/// TRIGGERDISABLE : disable the treatment of MUON trigger
54///
93d7b017 55/// DIGITSTOREV1 : use the V1 implementation of the digitstore
56/// DIGITSTOREV2R : use the V2R implementation of the digitstore
57///
22899106 58/// \author Laurent Aphecetche, Subatech
3d1463c8 59//-----------------------------------------------------------------------------
30178c30 60
cf464691 61#include "AliMUONReconstructor.h"
b2d7df0b 62
22899106 63#include "AliCDBManager.h"
22899106 64#include "AliLog.h"
b2d7df0b 65#include "AliMUONCalibrationData.h"
22899106 66#include "AliMUONClusterFinderCOG.h"
67#include "AliMUONClusterFinderMLEM.h"
68#include "AliMUONClusterFinderSimpleFit.h"
b2d7df0b 69#include "AliMUONClusterReconstructor.h"
2060b217 70#include "AliMUONClusterStoreV2.h"
22899106 71#include "AliMUONConstants.h"
b2d7df0b 72#include "AliMUONDigitCalibrator.h"
2cf44ef3 73#include "AliMUONDigitMaker.h"
22899106 74#include "AliMUONDigitStoreV1.h"
93d7b017 75#include "AliMUONDigitStoreV2R.h"
22899106 76#include "AliMUONGeometryTransformer.h"
77#include "AliMUONPreClusterFinder.h"
93d7b017 78#include "AliMUONPreClusterFinderV2.h"
79#include "AliMUONPreClusterFinderV3.h"
196471e9 80#include "AliMUONTracker.h"
22899106 81#include "AliMUONVTrackStore.h"
8c0b5e70 82#include "AliMUONTriggerChamberEff.h"
e1a10d41 83#include "AliMUONTriggerCircuit.h"
96fdfe9a 84#include "AliMUONTriggerCrateStore.h"
22899106 85#include "AliMUONTriggerStoreV1.h"
86#include "AliMUONVClusterFinder.h"
3304fa09 87#include "AliMUONRecoParam.h"
88544f7e 88#include "AliMpCDB.h"
cf464691 89#include "AliRawReader.h"
93d7b017 90#include "AliCodeTimer.h"
22899106 91#include <Riostream.h>
92#include <TClonesArray.h>
93#include <TString.h>
94#include <TTree.h>
2060b217 95
9265505b 96/// \cond CLASSIMP
cac2eb58 97ClassImp(AliMUONReconstructor)
22899106 98/// \endcond
b2d7df0b 99
3304fa09 100AliMUONRecoParam* AliMUONReconstructor::fgRecoParam = 0x0; // reconstruction parameters
101
cac2eb58 102//_____________________________________________________________________________
22899106 103AliMUONReconstructor::AliMUONReconstructor() :
104AliReconstructor(),
105fCrateManager(0x0),
106fDigitMaker(0x0),
ef4cb4f1 107fTransformer(new AliMUONGeometryTransformer()),
22899106 108fDigitStore(0x0),
109fTriggerCircuit(0x0),
110fCalibrationData(0x0),
111fDigitCalibrator(0x0),
112fClusterReconstructor(0x0),
113fClusterStore(0x0),
114fTriggerStore(0x0),
115fTrackStore(0x0),
93d7b017 116fTrigChamberEff(0x0)
8789635b 117{
22899106 118 /// normal ctor
88544f7e 119
88544f7e 120 // Load mapping
a55f49a0 121 if ( ! AliMpCDB::LoadDDLStore() ) {
88544f7e 122 AliFatal("Could not access mapping from OCDB !");
123 }
124
a55f49a0 125 // Load geometry data
126 fTransformer->LoadGeometryData();
88544f7e 127
3304fa09 128 // initialize reconstruction parameters in not already done
129 if (!fgRecoParam) {
130 AliWarning("Reconstruction parameters not initialized - Use default one");
131 fgRecoParam = AliMUONRecoParam::GetLowFluxParam();
132 }
88544f7e 133
22899106 134}
d19b6003 135
22899106 136//_____________________________________________________________________________
137AliMUONReconstructor::~AliMUONReconstructor()
138{
139 /// dtor
140 delete fDigitMaker;
141 delete fDigitStore;
142 delete fTransformer;
143 delete fCrateManager;
144 delete fTriggerCircuit;
145 delete fCalibrationData;
146 delete fDigitCalibrator;
147 delete fClusterReconstructor;
148 delete fClusterStore;
149 delete fTriggerStore;
150 delete fTrackStore;
8c0b5e70 151 delete fTrigChamberEff;
22899106 152}
96fdfe9a 153
3304fa09 154//_____________________________________________________________________________
155void AliMUONReconstructor::SetRecoParam(AliMUONRecoParam *param)
156{
157 /// set reconstruction parameters
158
159 // remove existing parameters
160 if (fgRecoParam) {
161 cout<<"AliMUONReconstructor::SetRecoParam: Reconstruction parameters already initialized - overwrite them"<<endl;
162 delete fgRecoParam;
163 }
164
165 fgRecoParam = param;
166}
167
22899106 168//_____________________________________________________________________________
169void
170AliMUONReconstructor::Calibrate(AliMUONVDigitStore& digitStore) const
171{
172 /// Calibrate the digitStore
173 if (!fDigitCalibrator)
174 {
175 CreateCalibrator();
176 }
93d7b017 177 AliCodeTimerAuto(Form("%s::Calibrate(AliMUONVDigitStore*)",fDigitCalibrator->ClassName()))
22899106 178 fDigitCalibrator->Calibrate(digitStore);
179}
96fdfe9a 180
22899106 181//_____________________________________________________________________________
182void
183AliMUONReconstructor::Clusterize(const AliMUONVDigitStore& digitStore,
184 AliMUONVClusterStore& clusterStore) const
185{
186 /// Creates clusters from digits.
9c4b1ee7 187
3304fa09 188 TString sopt(fgRecoParam->GetClusteringMode());
22899106 189 sopt.ToUpper();
190 if ( sopt.Contains("NOCLUSTERING") ) return;
191
3304fa09 192 if (!fClusterReconstructor) CreateClusterReconstructor();
193
194 // if the required clustering mode does not exist
195 if (!fClusterReconstructor) return;
9c4b1ee7 196
93d7b017 197 AliCodeTimerAuto(Form("%s::Digits2Clusters(const AliMUONVDigitStore&,AliMUONVClusterStore&)",
198 fClusterReconstructor->ClassName()))
22899106 199 fClusterReconstructor->Digits2Clusters(digitStore,clusterStore);
8789635b 200}
94f6fba9 201
8789635b 202//_____________________________________________________________________________
22899106 203AliMUONVClusterStore*
204AliMUONReconstructor::ClusterStore() const
cac2eb58 205{
22899106 206 /// Return (and create if necessary) the cluster container
207 if (!fClusterStore)
208 {
2060b217 209 fClusterStore = new AliMUONClusterStoreV2;
22899106 210 }
211 return fClusterStore;
212}
d19b6003 213
22899106 214//_____________________________________________________________________________
215void
216AliMUONReconstructor::ConvertDigits(AliRawReader* rawReader,
217 AliMUONVDigitStore* digitStore,
218 AliMUONVTriggerStore* triggerStore) const
219{
220 /// Convert raw data into digit and trigger stores
221 CreateDigitMaker();
93d7b017 222
223 AliCodeTimerStart(Form("%s::Raw2Digits(AliRawReader*,AliMUONVDigitStore*,AliMUONVTriggerStore*)",
224 fDigitMaker->ClassName()))
22899106 225 fDigitMaker->Raw2Digits(rawReader,digitStore,triggerStore);
93d7b017 226 AliCodeTimerStop(Form("%s::Raw2Digits(AliRawReader*,AliMUONVDigitStore*,AliMUONVTriggerStore*)",
227 fDigitMaker->ClassName()))
22899106 228 Calibrate(*digitStore);
cac2eb58 229}
b2d7df0b 230
231//_____________________________________________________________________________
22899106 232void
233AliMUONReconstructor::ConvertDigits(AliRawReader* rawReader, TTree* digitsTree) const
b2d7df0b 234{
22899106 235 /// convert raw data into a digit tree
2060b217 236 AliCodeTimerAuto("")
22899106 237
238 Bool_t alone = ( TriggerStore() == 0 );
b2d7df0b 239
22899106 240 Bool_t ok = DigitStore()->Connect(*digitsTree,alone);
241 if ( TriggerStore() )
b476b122 242 {
22899106 243 ok = ok && TriggerStore()->Connect(*digitsTree,kFALSE);
b476b122 244 }
ee103e97 245
22899106 246 if (!ok)
247 {
248 AliError("Could not make branches on TreeD");
249 }
250 else
251 {
252 ConvertDigits(rawReader,DigitStore(),TriggerStore());
2060b217 253 AliCodeTimerStart("Fill digits")
22899106 254 digitsTree->Fill();
2060b217 255 AliCodeTimerStop("Fill digits")
22899106 256 DigitStore()->Clear();
257 }
258}
259
260//_____________________________________________________________________________
261AliMUONTriggerCrateStore*
262AliMUONReconstructor::CrateManager() const
263{
264 /// Return (and create if necessary) the trigger crate store
265 if (fCrateManager) return fCrateManager;
266 fCrateManager = new AliMUONTriggerCrateStore;
267 fCrateManager->ReadFromFile();
268 return fCrateManager;
269}
270
271//_____________________________________________________________________________
272void
273AliMUONReconstructor::CreateDigitMaker() const
274{
275 /// Create (and create if necessary) the digit maker
276 if (fDigitMaker) return;
277
93d7b017 278 AliCodeTimerAuto("")
22899106 279
280 fDigitMaker = new AliMUONDigitMaker;
22899106 281}
282
283//_____________________________________________________________________________
284void
285AliMUONReconstructor::CreateTriggerCircuit() const
286{
287 /// Return (and create if necessary) the trigger circuit object
288 if (fTriggerCircuit) return;
289
93d7b017 290 AliCodeTimerAuto("")
22899106 291
32ab62c9 292 fTriggerCircuit = new AliMUONTriggerCircuit(fTransformer);
22899106 293
32ab62c9 294}
8c0b5e70 295
296//_____________________________________________________________________________
297void
298AliMUONReconstructor::CreateTriggerChamberEff() const
299{
300 /// Create (and create if necessary) the trigger chamber efficiency class
301 if (fTrigChamberEff) return;
302
93d7b017 303 AliCodeTimerAuto("")
8c0b5e70 304
305 fTrigChamberEff = new AliMUONTriggerChamberEff(fTransformer,fDigitMaker,kTRUE);
306 //fTrigChamberEff->SetDebugLevel(1);
307}
308
22899106 309//_____________________________________________________________________________
310AliTracker*
d76c31f4 311AliMUONReconstructor::CreateTracker() const
22899106 312{
313 /// Create the MUONTracker object
ee103e97 314
22899106 315 CreateTriggerCircuit();
316 CreateDigitMaker();
8c0b5e70 317 CreateTriggerChamberEff();
22899106 318
d76c31f4 319 AliMUONTracker* tracker = new AliMUONTracker(fDigitMaker,fTransformer,fTriggerCircuit,fTrigChamberEff);
22899106 320
321 return tracker;
b2d7df0b 322}
323
f9247068 324//_____________________________________________________________________________
22899106 325void
196471e9 326AliMUONReconstructor::CreateClusterReconstructor() const
f9247068 327{
3304fa09 328 /// Create cluster reconstructor, depending on clustering mode set in RecoParam
22899106 329
93d7b017 330 AliCodeTimerAuto("")
06ca6d7b 331
22899106 332 AliDebug(1,"");
333
f9247068 334 AliMUONVClusterFinder* clusterFinder(0x0);
335
3304fa09 336 TString opt(fgRecoParam->GetClusteringMode());
f9247068 337 opt.ToUpper();
338
93d7b017 339 if ( strstr(opt,"PRECLUSTERV2") )
340 {
341 clusterFinder = new AliMUONPreClusterFinderV2;
342 }
343 else if ( strstr(opt,"PRECLUSTERV3") )
344 {
345 clusterFinder = new AliMUONPreClusterFinderV3;
346 }
347 else if ( strstr(opt,"PRECLUSTER") )
f9247068 348 {
349 clusterFinder = new AliMUONPreClusterFinder;
350 }
351 else if ( strstr(opt,"COG") )
352 {
93d7b017 353 clusterFinder = new AliMUONClusterFinderCOG(new AliMUONPreClusterFinder);
f9247068 354 }
93d7b017 355 else if ( strstr(opt,"SIMPLEFITV3") )
356 {
357 clusterFinder = new AliMUONClusterFinderSimpleFit(new AliMUONClusterFinderCOG(new AliMUONPreClusterFinderV3));
358 }
f9247068 359 else if ( strstr(opt,"SIMPLEFIT") )
360 {
93d7b017 361 clusterFinder = new AliMUONClusterFinderSimpleFit(new AliMUONClusterFinderCOG(new AliMUONPreClusterFinder));
f9247068 362 }
363 else if ( strstr(opt,"MLEM:DRAW") )
364 {
93d7b017 365 clusterFinder = new AliMUONClusterFinderMLEM(kTRUE,new AliMUONPreClusterFinder);
f9247068 366 }
93d7b017 367 else if ( strstr(opt,"MLEMV3") )
368 {
369 clusterFinder = new AliMUONClusterFinderMLEM(kFALSE,new AliMUONPreClusterFinderV3);
370 }
371 else if ( strstr(opt,"MLEMV2") )
372 {
373 clusterFinder = new AliMUONClusterFinderMLEM(kFALSE,new AliMUONPreClusterFinderV2);
374 }
f9247068 375 else if ( strstr(opt,"MLEM") )
376 {
93d7b017 377 clusterFinder = new AliMUONClusterFinderMLEM(kFALSE,new AliMUONPreClusterFinder);
f9247068 378 }
22899106 379 else
380 {
3304fa09 381 AliError(Form("clustering mode \"%s\" does not exist",opt.Data()));
382 return;
22899106 383 }
f9247068 384
3304fa09 385 AliInfo(Form("Will use %s for clusterizing",clusterFinder->ClassName()));
f9247068 386
22899106 387 fClusterReconstructor = new AliMUONClusterReconstructor(clusterFinder,fTransformer);
f9247068 388}
389
cac2eb58 390//_____________________________________________________________________________
22899106 391void
392AliMUONReconstructor::CreateCalibrator() const
cac2eb58 393{
22899106 394 /// Create the calibrator
2457f726 395
93d7b017 396 AliCodeTimerAuto("")
3bc8b580 397
22899106 398 Int_t runNumber = AliCDBManager::Instance()->GetRun();
3bc8b580 399
22899106 400 AliInfo("Calibration will occur.");
401
402 fCalibrationData = new AliMUONCalibrationData(runNumber);
403 if ( !fCalibrationData->IsValid() )
404 {
405 AliError("Could not retrieve calibrations !");
406 delete fCalibrationData;
407 fCalibrationData = 0x0;
408 return;
409 }
410
411 // Check that we get all the calibrations we'll need
412 if ( !fCalibrationData->Pedestals() ||
413 !fCalibrationData->Gains() ||
414 !fCalibrationData->HV() )
415 {
416 AliFatal("Could not access all required calibration data");
9ffe3ef4 417 }
cc87ebcd 418
22899106 419 TString opt(GetOption());
420 opt.ToUpper();
421 Bool_t statusMap(kTRUE);
b2d7df0b 422
22899106 423 if ( strstr(opt,"NOSTATUSMAP") )
424 {
22f7c9ba 425 AliWarning("NOSTATUSMAP is obsolete");
22899106 426 }
22f7c9ba 427
428 fDigitCalibrator = new AliMUONDigitCalibrator(*fCalibrationData);
22899106 429}
9c4b1ee7 430
22899106 431//_____________________________________________________________________________
432AliMUONVDigitStore*
433AliMUONReconstructor::DigitStore() const
434{
435 /// Return (and create if necessary) the digit container
436 if (!fDigitStore)
437 {
93d7b017 438 TString sopt(GetOption());
439 sopt.ToUpper();
440
441 AliInfo(Form("Options=%s",sopt.Data()));
442
443 if ( sopt.Contains("DIGITSTOREV1") )
444 {
445 fDigitStore = AliMUONVDigitStore::Create("AliMUONDigitStoreV1");
446 }
447 else if ( sopt.Contains("DIGITSTOREV2R") )
448 {
449 fDigitStore = AliMUONVDigitStore::Create("AliMUONDigitStoreV2R");
450 }
451 else if ( sopt.Contains("DIGITSTOREV2S") )
452 {
453 fDigitStore = AliMUONVDigitStore::Create("AliMUONDigitStoreV2S");
454 }
455
456 if (!fDigitStore) fDigitStore = AliMUONVDigitStore::Create("AliMUONDigitStoreV2R");
457
458 AliInfo(Form("Will use %s to store digits during reconstruction",fDigitStore->ClassName()));
22899106 459 }
460 return fDigitStore;
461}
94f6fba9 462
22899106 463//_____________________________________________________________________________
464void
465AliMUONReconstructor::FillTreeR(AliMUONVTriggerStore* triggerStore,
466 AliMUONVClusterStore* clusterStore,
467 TTree& clustersTree) const
468{
469 /// Write the trigger and cluster information into TreeR
470
93d7b017 471 AliCodeTimerAuto("")
cc87ebcd 472
22899106 473 AliDebug(1,"");
474
475 Bool_t ok(kFALSE);
476 if ( triggerStore )
477 {
478 Bool_t alone = ( clusterStore ? kFALSE : kTRUE );
479 ok = triggerStore->Connect(clustersTree,alone);
480 if (!ok)
b2d7df0b 481 {
22899106 482 AliError("Could not create triggerStore branches in TreeR");
cc87ebcd 483 }
cac2eb58 484 }
22899106 485
486 if ( clusterStore )
487 {
488 Bool_t alone = ( triggerStore ? kFALSE : kTRUE );
489 ok = clusterStore->Connect(clustersTree,alone);
490 if (!ok)
491 {
492 AliError("Could not create triggerStore branches in TreeR");
493 }
494 }
495
496 if (ok) // at least one type of branches created successfully
497 {
498 clustersTree.Fill();
499 }
cac2eb58 500}
cf464691 501
502//_____________________________________________________________________________
22899106 503Bool_t
504AliMUONReconstructor::HasDigitConversion() const
cf464691 505{
22899106 506 /// We *do* have digit conversion, but we might advertise it only
507 /// if we want to save the digits.
508
509 TString opt(GetOption());
510 opt.ToUpper();
511 if ( opt.Contains("SAVEDIGITS" ) && !opt.Contains("NOLOCALRECONSTRUCTION") )
512 {
513 return kTRUE;
514 }
515 else
516 {
517 return kFALSE;
518 }
519}
f9247068 520
22899106 521//_____________________________________________________________________________
522void
523AliMUONReconstructor::Reconstruct(AliRawReader* rawReader, TTree* clustersTree) const
524{
525 /// This method is called by AliReconstruction if HasLocalReconstruction()==kTRUE AND
526 /// HasDigitConversion()==kFALSE
8cde4af5 527
22899106 528 if ( !clustersTree )
529 {
530 AliError("clustersTree is 0x0 !");
531 return;
532 }
b2d7df0b 533
93d7b017 534 ConvertDigits(rawReader,DigitStore(),TriggerStore());
535 Clusterize(*(DigitStore()),*(ClusterStore()));
22899106 536
537 FillTreeR(TriggerStore(),ClusterStore(),*clustersTree);
538}
64b056bc 539
196471e9 540//_____________________________________________________________________________
22899106 541void
542AliMUONReconstructor::Reconstruct(TTree* digitsTree, TTree* clustersTree) const
a2da7817 543{
22899106 544 /// This method is called by AliReconstruction if HasLocalReconstruction()==kTRUE
545 /// AND HasDigitConversion()==kTRUE
546
2060b217 547 AliCodeTimerAuto("")
93d7b017 548
22899106 549 AliDebug(1,"");
550
551 if (!digitsTree || !clustersTree)
552 {
553 AliError(Form("Tree is null : digitsTree=%p clustersTree=%p",
554 digitsTree,clustersTree));
555 return;
556 }
d19b6003 557
22899106 558 if (!fDigitStore)
559 {
560 fDigitStore = AliMUONVDigitStore::Create(*digitsTree);
561 if (!fDigitStore)
562 {
563 AliError(Form("Could not get DigitStore from %s",digitsTree->GetName()));
564 }
565 else
566 {
567 AliInfo(Form("Created %s from %s",fDigitStore->ClassName(),digitsTree->GetName()));
568 }
569 }
570 if (!fTriggerStore)
571 {
572 fTriggerStore = AliMUONVTriggerStore::Create(*digitsTree);
573 if (!fTriggerStore)
574 {
575 AliError(Form("Could not get TriggerStore from %s",digitsTree->GetName()));
576 }
577 else
578 {
579 AliInfo(Form("Created %s from %s",fTriggerStore->ClassName(),digitsTree->GetName()));
580 }
581 }
582
583 if (!fTriggerStore && !fDigitStore)
584 {
585 AliError("No store at all. Nothing to do.");
586 return;
587 }
588
589 // insure we start with empty stores
590 if ( fDigitStore )
591 {
592 fDigitStore->Clear();
593 Bool_t alone = ( fTriggerStore ? kFALSE : kTRUE );
594 Bool_t ok = fDigitStore->Connect(*digitsTree,alone);
595 if (!ok)
596 {
597 AliError("Could not connect digitStore to digitsTree");
598 return;
599 }
600 }
601 if ( fTriggerStore )
602 {
603 fTriggerStore->Clear();
604 Bool_t alone = ( fDigitStore ? kFALSE : kTRUE );
605 Bool_t ok = fTriggerStore->Connect(*digitsTree,alone);
606 if (!ok)
607 {
608 AliError("Could not connect triggerStore to digitsTree");
609 return;
610 }
611 }
612
613 digitsTree->GetEvent(0);
614
615 if ( fDigitStore )
616 {
e729a0c8 617 // Insure we got calibrated digits (if we reconstruct from pure simulated,
618 // i.e. w/o going through raw data, this will be the case)
619 TIter next(fDigitStore->CreateIterator());
620 AliMUONVDigit* digit = static_cast<AliMUONVDigit*>(next());
621 if (!digit->IsCalibrated())
622 {
623 Calibrate(*fDigitStore);
624 }
22899106 625 Clusterize(*fDigitStore,*(ClusterStore()));
626 }
627
628 FillTreeR(fTriggerStore,ClusterStore(),*clustersTree);
cac2eb58 629}
196471e9 630
631//_____________________________________________________________________________
22899106 632AliMUONVTriggerStore*
633AliMUONReconstructor::TriggerStore() const
196471e9 634{
22899106 635 /// Return (and create if necessary and allowed) the trigger container
636 TString sopt(GetOption());
637 sopt.ToUpper();
638
639 if (sopt.Contains("TRIGGERDISABLE"))
640 {
641 delete fTriggerStore;
642 fTriggerStore = 0x0;
643 }
644 else
645 {
646 if (!fTriggerStore)
647 {
648 fTriggerStore = new AliMUONTriggerStoreV1;
649 }
650 }
651 return fTriggerStore;
196471e9 652}