AliRoot Core  da88d91 (da88d91)
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
AliMUONReconstructor.cxx
Go to the documentation of this file.
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  **************************************************************************/
15 /* $Id$ */
16 
17 //-----------------------------------------------------------------------------
74 //-----------------------------------------------------------------------------
75 
76 #include "AliMUONReconstructor.h"
77 
78 #include "AliMUONCalibrationData.h"
84 #include "AliMUONClusterStoreV1.h"
85 #include "AliMUONClusterStoreV2.h"
86 #include "AliMUONConstants.h"
87 #include "AliMUONDigitCalibrator.h"
88 #include "AliMUONDigitMaker.h"
89 #include "AliMUONDigitStoreV1.h"
90 #include "AliMUONDigitStoreV2R.h"
92 #include "AliMUONPadStatusMaker.h"
97 #include "AliMUONTracker.h"
98 #include "AliMUONTriggerCircuit.h"
99 #include "AliMUONTriggerStoreV1.h"
100 #include "AliMUONVClusterFinder.h"
101 #include "AliMUONVClusterServer.h"
102 #include "AliMUONVTrackStore.h"
104 #include "AliMUONTriggerUtilities.h"
105 
106 #include "AliMpArea.h"
107 #include "AliMpCDB.h"
108 #include "AliMpConstants.h"
109 #include "AliMpDDLStore.h"
110 #include "AliMpSegmentation.h"
111 
112 #include "AliRawReader.h"
113 #include "AliCDBManager.h"
114 #include "AliCodeTimer.h"
115 #include "AliLog.h"
116 #include "AliRunInfo.h"
117 
118 #include <Riostream.h>
119 #include <TObjArray.h>
120 #include <TClonesArray.h>
121 #include <TString.h>
122 #include <TTree.h>
123 
127 
128 //_____________________________________________________________________________
130 AliReconstructor(),
131 fDigitMaker(0x0),
132 fTransformer(new AliMUONGeometryTransformer()),
133 fDigitStore(0x0),
134 fTriggerCircuit(0x0),
135 fCalibrationData(0x0),
136 fDigitCalibrator(0x0),
137 fTriggerStore(0x0),
138 fTrackStore(0x0),
139 fClusterStore(0x0),
140 fTriggerProcessor(0x0),
141 fTriggerUtilities(0x0),
142 fClusterServers(),
143 fTrackers(),
144 fShouldCalibrate(kTRUE)
145 {
147 
148  AliDebug(1,"");
149 
150  // Unload mapping objects
151  // if they have been loaded from the obsolete OCDB mapping objects
152 
153  if ( AliMpDDLStore::Instance(false) ) {
154  AliCDBManager::Instance()->UnloadFromCache("MUON/Calib/DDLStore");
155  delete AliMpDDLStore::Instance();
156  }
157 
158  if ( AliMpSegmentation::Instance(false) ) {
159  AliCDBManager::Instance()->UnloadFromCache("MUON/Calib/Mapping");
161  }
162 
163  // Load mapping
164  if ( ! AliMpCDB::LoadDDLStore() ) {
165  AliFatal("Could not access mapping from OCDB !");
166  }
167 
168  // Load geometry data
169  fTransformer->LoadGeometryData();
170 
171  fClusterServers.SetOwner(kTRUE);
172  fTrackers.SetOwner(kTRUE);
173 }
174 
175 //_____________________________________________________________________________
176 AliMUONReconstructor::~AliMUONReconstructor()
177 {
179 
180  AliDebug(1,"");
181 
182  delete fDigitCalibrator;
183 
184  delete fDigitMaker;
185  delete fDigitStore;
186  delete fTransformer;
187  delete fTriggerCircuit;
188  delete fTriggerStore;
189  delete fTrackStore;
190  delete fClusterStore;
191  delete fTriggerProcessor;
192  delete fTriggerUtilities;
193 
194  delete AliMpSegmentation::Instance(false);
195  delete AliMpDDLStore::Instance(false);
196 
197  delete fCalibrationData;
198 }
199 
200 //_____________________________________________________________________________
201 void
202 AliMUONReconstructor::Calibrate(AliMUONVDigitStore& digitStore) const
203 {
205  if (!fDigitCalibrator)
206  {
207  CreateCalibrator();
208  }
209 
210  if ( fShouldCalibrate )
211  {
212  AliCodeTimerAuto(Form("%s::Calibrate(AliMUONVDigitStore*)",fDigitCalibrator->ClassName()),0)
213  fDigitCalibrator->Calibrate(digitStore);
214  }
215 }
216 
217 //_____________________________________________________________________________
218 void
219 AliMUONReconstructor::ConvertDigits(AliRawReader* rawReader,
220  AliMUONVDigitStore* digitStore,
221  AliMUONVTriggerStore* triggerStore) const
222 {
224  CreateDigitMaker();
225 
226  // Skip reconstruction if event is Calibration
227  if ( GetRecoParam()->GetEventSpecie() == AliRecoParam::kCalib ) {
228  digitStore->Clear(); // Remove possible digits from previous event
229  triggerStore->Clear(); // Remove possible triggers from previous event
230  AliInfo("Calibration event: do not convert digits");
231  return;
232  }
233 
234  AliCodeTimerStart(Form("%s::Raw2Digits(AliRawReader*,AliMUONVDigitStore*,AliMUONVTriggerStore*)",
235  fDigitMaker->ClassName()))
236  fDigitMaker->Raw2Digits(rawReader,digitStore,triggerStore);
237  AliCodeTimerStop(Form("%s::Raw2Digits(AliRawReader*,AliMUONVDigitStore*,AliMUONVTriggerStore*)",
238  fDigitMaker->ClassName()))
239  Calibrate(*digitStore);
240 }
241 
242 //_____________________________________________________________________________
243 void
244 AliMUONReconstructor::ConvertDigits(AliRawReader* rawReader, TTree* digitsTree) const
245 {
247  AliCodeTimerAuto("",0)
248 
249  Bool_t alone = ( TriggerStore() == 0 );
250 
251  Bool_t ok = DigitStore()->Connect(*digitsTree,alone);
252  if ( TriggerStore() )
253  {
254  ok = ok && TriggerStore()->Connect(*digitsTree,kFALSE);
255  }
256 
257  if (!ok)
258  {
259  AliError("Could not make branches on TreeD");
260  }
261  else
262  {
263  ConvertDigits(rawReader,DigitStore(),TriggerStore());
264  AliCodeTimerStart("Fill digits")
265  digitsTree->Fill();
266  AliCodeTimerStop("Fill digits")
267  DigitStore()->Clear();
268  }
269 }
270 
271 //_____________________________________________________________________________
272 void
273 AliMUONReconstructor::CreateDigitMaker() const
274 {
276  if (fDigitMaker) return;
277 
278  AliCodeTimerAuto("",0)
279 
280  TString option = GetOption();
281 
282  Bool_t enableErrorLogging = kFALSE;
283 
284  if (option.Contains("ENABLEERRORLOGGING"))
285  {
286  enableErrorLogging = kTRUE;
287  }
288 
289  fDigitMaker = new AliMUONDigitMaker(enableErrorLogging);
290  option.ToUpper();
291 
292  // Always make trigger digits
293  // (needed when calculating trigger chamber efficiency)
294  fDigitMaker->SetMakeTriggerDigits(kTRUE);
295 
296  if ( GetRecoParam()->TryRecover() )
297  {
298  fDigitMaker->SetTryRecover(kTRUE);
299  }
300  else
301  {
302  fDigitMaker->SetTryRecover(kFALSE);
303  }
304 }
305 
306 //_____________________________________________________________________________
307 void
308 AliMUONReconstructor::CreateTriggerCircuit() const
309 {
311  if (fTriggerCircuit) return;
312 
313  AliCodeTimerAuto("",0)
314 
315  fTriggerCircuit = new AliMUONTriggerCircuit(fTransformer);
316 
317 }
318 
319 //_____________________________________________________________________________
320 void
321 AliMUONReconstructor::CreateTriggerUtilities() const
322 {
324  if ( fTriggerUtilities ) return;
325 
326  AliCodeTimerAuto("",0)
327 
328  if ( ! fCalibrationData ) CreateCalibrationData();
329 
330  fTriggerUtilities = new AliMUONTriggerUtilities(fCalibrationData);
331 }
332 
333 //_____________________________________________________________________________
334 AliTracker*
335 AliMUONReconstructor::CreateTracker() const
336 {
338 
339  CreateTriggerCircuit();
340  CreateTriggerUtilities();
341 
342  const AliMUONRecoParam* rp = GetRecoParam();
343 
344  Int_t es = rp->GetEventSpecie();
345 
346  AliTracker* tracker = 0X0;
347 
348  if ( es <= fTrackers.GetLast() )
349  {
350  tracker = static_cast<AliTracker*>(fTrackers.At(es));
351  }
352 
353  if (!tracker )
354  {
355  if ( ! rp->CombineClusterTrackReco() )
356  {
357  tracker = new AliMUONTracker(rp,
358  0x0,
359  *DigitStore(),
360  fTransformer,
361  fTriggerCircuit,
362  fTriggerUtilities);
363 
364  AliInfo(Form("Created tracker %p for recoparam of type %s es=%d",
365  tracker,
366  AliRecoParam::GetEventSpecieName(AliRecoParam::Convert(rp->GetEventSpecie())),es));
367  }
368  else
369  {
370 
371  tracker = new AliMUONTracker(rp,
372  CreateClusterServer(*rp),
373  *DigitStore(),
374  fTransformer,
375  fTriggerCircuit,
376  fTriggerUtilities);
377 
378  AliInfo(Form("Created (combined) tracker %p for recoparam of type %s es=%d",
379  tracker,
380  AliRecoParam::GetEventSpecieName(AliRecoParam::Convert(rp->GetEventSpecie())),es));
381  }
382 
383  fTrackers.AddAtAndExpand(tracker,es);
384  }
385 
386 
387  return tracker;
388 }
389 
390 //_____________________________________________________________________________
392 AliMUONReconstructor::CreateClusterFinder(const char* clusterFinderType)
393 {
395 
396  AliCodeTimerAutoGeneral("",0)
397 
399 
400  TString opt(clusterFinderType);
401  opt.ToUpper();
402 
403  if ( strstr(opt,"PRECLUSTERV2") )
404  {
406  }
407  else if ( strstr(opt,"PRECLUSTERV3") )
408  {
410  }
411  else if ( strstr(opt,"PRECLUSTER") )
412  {
414  }
415  else if ( strstr(opt,"PEAKCOG") )
416  {
418  }
419  else if ( strstr(opt,"PEAKFIT") )
420  {
422  }
423  else if ( strstr(opt,"COG") )
424  {
426  }
427  else if ( strstr(opt,"SIMPLEFITV3") )
428  {
430  }
431  else if ( strstr(opt,"SIMPLEFIT") )
432  {
434  }
435  else if ( strstr(opt,"MLEM:DRAW") )
436  {
438  }
439  else if ( strstr(opt,"MLEMV3") )
440  {
442  }
443  else if ( strstr(opt,"MLEMV2") )
444  {
446  }
447  else if ( strstr(opt,"MLEM") )
448  {
450  }
451  else
452  {
453  AliErrorClass(Form("clustering mode \"%s\" does not exist",opt.Data()));
454  return 0x0;
455  }
456 
458 }
459 
460 //_____________________________________________________________________________
462 AliMUONReconstructor::CreateClusterServer(const AliMUONRecoParam& rp) const
463 {
465 
466  AliCodeTimerAuto("",0);
467 
468  AliMUONVClusterServer* clusterServer = 0x0;
469 
470  if (rp.GetEventSpecie() <= fClusterServers.GetLast() )
471  {
472  clusterServer = static_cast<AliMUONVClusterServer*>(fClusterServers.At(rp.GetEventSpecie()));
473  }
474 
475  if (!clusterServer )
476  {
477  AliMUONVClusterFinder* clusterFinder = CreateClusterFinder(rp.GetClusteringMode());
478 
479  if ( !clusterFinder ) return 0x0;
480 
481  clusterServer = new AliMUONSimpleClusterServer(clusterFinder,*fTransformer);
482 
483  AliInfo(Form("Created AliMUONSimpleClusterServer (%p) for specie %d with clustering = %s (following requesting clustering mode %s)",
484  clusterServer,rp.GetEventSpecie(),clusterFinder->ClassName(),rp.GetClusteringMode()));
485 
486  fClusterServers.AddAtAndExpand(clusterServer,rp.GetEventSpecie());
487  }
488 
489  return clusterServer;
490 }
491 
492 //_____________________________________________________________________________
493 void
494 AliMUONReconstructor::CreateCalibrationData() const
495 {
497 
498  AliCodeTimerAuto("",0);
499 
500  Int_t runNumber = AliCDBManager::Instance()->GetRun();
501 
502  fCalibrationData = new AliMUONCalibrationData(runNumber);
503  if ( !fCalibrationData->IsValid() )
504  {
505  AliError("Could not retrieve calibrations !");
506  delete fCalibrationData;
507  fCalibrationData = 0x0;
508  return;
509  }
510 
511  // It is now time to check whether we have everything to proceed.
512  // What we need depends on whether both tracker and trigger
513  // are in the readout chain, and what specific "bad channel policy"
514  // we use
515 
516  Bool_t kTracker(kFALSE);
517  Bool_t kTrigger(kFALSE);
518 
519  const AliRunInfo* runInfo = GetRunInfo();
520  if (!runInfo)
521  {
522  AliError("Could not get runinfo ?");
523  }
524  else
525  {
526  TString detectors(runInfo->GetActiveDetectors());
527  if (detectors.Contains("MUONTRK")) kTracker=kTRUE;
528  if (detectors.Contains("MUONTRG")) kTrigger=kTRUE;
529  }
530 
531  AliInfo(Form("Run with MUON TRIGGER : %s and MUON TRACKER : %s",
532  kTrigger ? "YES":"NO" ,
533  kTracker ? "YES":"NO"));
534 
535  if ( kTracker )
536  {
537  // Check that we get all the calibrations we'll need
538  if ( !fCalibrationData->Pedestals() )
539  {
540  AliFatal(Form("Could not access all required calibration data (PED %p)",
541  fCalibrationData->Pedestals()));
542  }
543 
544  if ( !fCalibrationData->HV() )
545  {
546  // Special treatment of HV. We only break if the values
547  // are not there *AND* we cut on them.
548  UInt_t mask = GetRecoParam()->PadGoodnessMask();
549  TString smask(AliMUONPadStatusMaker::AsCondition(mask));
550  if ( smask.Contains("HV") )
551  {
552  AliFatal("Could not access all required calibration data (HV)");
553  }
554  }
555  }
556 }
557 
558 //_____________________________________________________________________________
559 void
560 AliMUONReconstructor::CreateCalibrator() const
561 {
563 
564  AliCodeTimerAuto("",0);
565 
566  if ( ! fCalibrationData )
567  CreateCalibrationData();
568 
569  AliInfo("Calibration will occur.");
570 
571  TString opt(GetOption());
572  opt.ToUpper();
573 
574  if ( strstr(opt,"NOSTATUSMAP") )
575  {
576  AliWarning("NOSTATUSMAP is obsolete");
577  }
578 
579  Bool_t kTracker(kFALSE);
580 
581  const AliRunInfo* runInfo = GetRunInfo();
582  if (!runInfo)
583  {
584  AliError("Could not get runinfo ?");
585  }
586  else
587  {
588  TString detectors(runInfo->GetActiveDetectors());
589  if (detectors.Contains("MUONTRK")) kTracker=kTRUE;
590  }
591 
592  if ( kTracker )
593  {
594  fDigitCalibrator = new AliMUONDigitCalibrator(*fCalibrationData,GetRecoParam());
595  }
596  else
597  {
598  AliWarning("Apparently running without MCH so will not instantiante the DigitCalibrator nor read MCH OCDB objects...");
599  fShouldCalibrate=kFALSE;
600  }
601 }
602 
603 //_____________________________________________________________________________
604 void
605 AliMUONReconstructor::ResponseRemovingChambers(AliMUONVTriggerStore* triggerStore) const
606 {
609  AliCodeTimerAuto("",0);
610 
611  if ( ! fCalibrationData )
612  CreateCalibrationData();
613 
614  if ( ! fTriggerProcessor )
615  fTriggerProcessor = new AliMUONTriggerElectronics(fCalibrationData);
616 
617  fTriggerProcessor->ResponseRemovingChambers(*triggerStore);
618 }
619 
620 //_____________________________________________________________________________
621 AliMUONVDigitStore*
622 AliMUONReconstructor::DigitStore() const
623 {
625  if (!fDigitStore)
626  {
627  TString sopt(GetOption());
628  sopt.ToUpper();
629 
630  AliInfo(Form("Options=%s",sopt.Data()));
631 
632  if ( sopt.Contains("DIGITSTOREV1") )
633  {
634  fDigitStore = AliMUONVDigitStore::Create("AliMUONDigitStoreV1");
635  }
636  else if ( sopt.Contains("DIGITSTOREV2R") )
637  {
638  fDigitStore = AliMUONVDigitStore::Create("AliMUONDigitStoreV2R");
639  }
640  else if ( sopt.Contains("DIGITSTOREV2S") )
641  {
642  fDigitStore = AliMUONVDigitStore::Create("AliMUONDigitStoreV2S");
643  }
644 
645  if (!fDigitStore) fDigitStore = AliMUONVDigitStore::Create("AliMUONDigitStoreV2R");
646 
647  AliInfo(Form("Will use %s to store digits during reconstruction",fDigitStore->ClassName()));
648  }
649  return fDigitStore;
650 }
651 
652 //_____________________________________________________________________________
653 void
654 AliMUONReconstructor::FillTreeR(AliMUONVTriggerStore* triggerStore,
655  TTree& clustersTree) const
656 {
658 
659  AliCodeTimerAuto("",0)
660 
661  Bool_t ok(kFALSE);
662  Bool_t alone(kTRUE); // is trigger the only info in TreeR ?
663 
664  const AliMUONRecoParam* rp = GetRecoParam();
665 
666  if ( ! rp->CombineClusterTrackReco() )
667  {
668  alone = kFALSE; // we'll get both tracker and trigger information in TreeR
669  }
670 
671  if ( triggerStore )
672  {
673  ResponseRemovingChambers(triggerStore);
674  ok = triggerStore->Connect(clustersTree,alone);
675  if (!ok)
676  {
677  AliError("Could not create triggerStore branches in TreeR");
678  }
679  }
680 
681  if ( !alone )
682  {
683  if (!fClusterStore)
684  {
685  fClusterStore = new AliMUONClusterStoreV2;
686  }
687 
688  AliMUONVClusterServer* clusterServer = CreateClusterServer(*rp);
689 
690  TIter next(DigitStore()->CreateIterator());
691  clusterServer->UseDigits(next,DigitStore());
692 
693  AliMpArea area;
694 
695  AliDebug(1,Form("Doing full clusterization in local reconstruction using %s ",clusterServer->ClassName()));
696 
697  for ( Int_t i = 0; i < AliMpConstants::NofTrackingChambers(); ++i )
698  {
699  if (rp->UseChamber(i))
700  {
701  if ( ( i == 6 || i == 7 ) && rp->BypassSt4() ) continue;
702  if ( ( i == 8 || i == 9 ) && rp->BypassSt5() ) continue;
703 
704  clusterServer->Clusterize(i,*fClusterStore,area,rp);
705  }
706  }
707 
708  Bool_t cok = fClusterStore->Connect(clustersTree,alone);
709 
710  if (!cok) AliError("Could not connect clusterStore to clusterTree");
711 
712  AliDebug(1,Form("Number of clusters found = %d",fClusterStore->GetSize()));
713 
714  StdoutToAliDebug(1,fClusterStore->Print());
715  }
716 
717  if (ok) // at least one type of branches created successfully
718  {
719  clustersTree.Fill();
720  }
721 
722  if (fClusterStore) fClusterStore->Clear();
723 }
724 
725 //_____________________________________________________________________________
726 const AliMUONRecoParam* AliMUONReconstructor::GetRecoParam()
727 {
729  return dynamic_cast<const AliMUONRecoParam*>(AliReconstructor::GetRecoParam(AliReconstruction::GetDetIndex("MUON")));
730 }
731 
732 
733 //_____________________________________________________________________________
734 Bool_t
735 AliMUONReconstructor::HasDigitConversion() const
736 {
739 
740  TString opt(GetOption());
741  opt.ToUpper();
742  if ( opt.Contains("SAVEDIGITS" ) && !opt.Contains("NOLOCALRECONSTRUCTION") )
743  {
744  return kTRUE;
745  }
746  else
747  {
748  return kFALSE;
749  }
750 }
751 
752 //_____________________________________________________________________________
753 void
754 AliMUONReconstructor::Reconstruct(AliRawReader* rawReader, TTree* clustersTree) const
755 {
758 
759  if ( !clustersTree )
760  {
761  AliError("clustersTree is 0x0 !");
762  return;
763  }
764 
765  ConvertDigits(rawReader,DigitStore(),TriggerStore());
766 
767  FillTreeR(TriggerStore(),*clustersTree);
768 }
769 
770 //_____________________________________________________________________________
771 void
772 AliMUONReconstructor::Reconstruct(TTree* digitsTree, TTree* clustersTree) const
773 {
776 
777  AliCodeTimerAuto("",0)
778 
779  AliDebug(1,"");
780 
781  if (!digitsTree || !clustersTree)
782  {
783  AliError(Form("Tree is null : digitsTree=%p clustersTree=%p",
784  digitsTree,clustersTree));
785  return;
786  }
787 
788  if (!fDigitStore)
789  {
790  fDigitStore = AliMUONVDigitStore::Create(*digitsTree);
791  if (!fDigitStore)
792  {
793  AliError(Form("Could not get DigitStore from %s",digitsTree->GetName()));
794  }
795  else
796  {
797  AliInfo(Form("Created %s from %s",fDigitStore->ClassName(),digitsTree->GetName()));
798  }
799  }
800  if (!fTriggerStore)
801  {
802  fTriggerStore = AliMUONVTriggerStore::Create(*digitsTree);
803  if (!fTriggerStore)
804  {
805  AliError(Form("Could not get TriggerStore from %s",digitsTree->GetName()));
806  }
807  else
808  {
809  AliInfo(Form("Created %s from %s",fTriggerStore->ClassName(),digitsTree->GetName()));
810  }
811  }
812 
813  if (!fTriggerStore && !fDigitStore)
814  {
815  AliError("No store at all. Nothing to do.");
816  return;
817  }
818 
819  // insure we start with empty stores
820  if ( fDigitStore )
821  {
822  fDigitStore->Clear();
823  Bool_t alone = ( fTriggerStore ? kFALSE : kTRUE );
824  Bool_t ok = fDigitStore->Connect(*digitsTree,alone);
825  if (!ok)
826  {
827  AliError("Could not connect digitStore to digitsTree");
828  return;
829  }
830  }
831  if ( fTriggerStore )
832  {
833  fTriggerStore->Clear();
834  Bool_t alone = ( fDigitStore ? kFALSE : kTRUE );
835  Bool_t ok = fTriggerStore->Connect(*digitsTree,alone);
836  if (!ok)
837  {
838  AliError("Could not connect triggerStore to digitsTree");
839  return;
840  }
841  }
842 
843  digitsTree->GetEvent(0);
844 
845  if ( fDigitStore )
846  {
847  // Insure we got calibrated digits (if we reconstruct from pure simulated,
848  // i.e. w/o going through raw data, this will be the case)
849  TIter next(fDigitStore->CreateIterator());
850  AliMUONVDigit* digit = static_cast<AliMUONVDigit*>(next());
851  if (digit && !digit->IsCalibrated())
852  {
853  Calibrate(*fDigitStore);
854  }
855  }
856 
857  FillTreeR(fTriggerStore,*clustersTree);
858 }
859 
860 //_____________________________________________________________________________
861 AliMUONVTriggerStore*
862 AliMUONReconstructor::TriggerStore() const
863 {
865  TString sopt(GetOption());
866  sopt.ToUpper();
867 
868  if (sopt.Contains("TRIGGERDISABLE"))
869  {
870  delete fTriggerStore;
871  fTriggerStore = 0x0;
872  }
873  else
874  {
875  if (!fTriggerStore)
876  {
877  fTriggerStore = new AliMUONTriggerStoreV1;
878  }
879  }
880  return fTriggerStore;
881 }
Reading Raw data class for trigger and tracker chambers.
Interface of a cluster finder.
Bool_t BypassSt4() const
return kTRUE if we should replace clusters in St 4 by generated clusters from trigger tracks ...
virtual Int_t Clusterize(Int_t chamberId, AliMUONVClusterStore &clusterStore, const AliMpArea &area, const AliMUONRecoParam *recoParam=0x0)=0
Find and add clusters from a given region of a given chamber to the store.
Interface for a digit container.
Implementation of AliMUONVTriggerStore.
static AliMpSegmentation * Instance(Bool_t warn=true)
Top container class for geometry transformations.
Interface of a cluster finder for combined tracking.
void CombineClusterTrackReco(Bool_t flag)
switch on/off the combined cluster/track reconstruction
static Bool_t LoadDDLStore(Bool_t warn=false)
Definition: AliMpCDB.cxx:149
A rectangle area positioned in plane..
Definition: AliMpArea.h:20
Option_t * GetClusteringMode() const
get the clustering (pre-clustering) mode
Class with MUON reconstruction parameters.
MUON base Tracker.
Utilities for trigger (check if pad is masked)
ClassImp(AliFMDObjIndex) Int_t AliFMDObjIndex if(!a)
Implementation of VClusterStore.
Base class of a trigger information store.
ClassImp(TPCGenInfo)
Definition: AliTPCCmpNG.C:254
void Reconstruct(bool raw=false)
Definition: Reconstruct.C:26
Manager class for muon trigger electronics.
static AliMpDDLStore * Instance(Bool_t warn=true)
A basic pre-cluster finder.
return clusterFinder
MUON Trigger circuit.
virtual AliMUONVDigitStore * Create() const =0
Create an (empty) object of the same concrete class as *this.
virtual AliMUONVStore * Create() const =0
Create an empty copy of this.
Implementation of AliMUONVClusterServer interface.
Class to calibrate the digits.
A very basic (and mostly useless, probably) cluster finder.
static TString AsCondition(Int_t status)
Bool_t BypassSt5() const
return kTRUE if we should replace clusters in St 5 by generated clusters from trigger tracks ...
A basic pre-cluster finder.
Single entry point to access MUON calibration data.
Implementation of AliReconstructor for MUON (both tracker and trigger)
ABC of a MUON digit.
Definition: AliMUONVDigit.h:18
static Int_t runNumber
Definition: pdc06_config.C:126
virtual void UseDigits(TIter &next, AliMUONVDigitStore *digitStore=0x0)=0
Specify an iterator to loop over the digits needed to perform our job.
A basic pre-cluster finder.
Cluster finder in MUON arm of ALICE.
virtual Bool_t Connect(TTree &tree, Bool_t alone=kTRUE) const
Connect us to a TTree (only valid if CanConnect()==kTRUE)
static Int_t NofTrackingChambers()
Return number of tracking chambers.
void UseChamber(Int_t iCh, Bool_t flag)
switch on/off a chamber in the reconstruction
Cluster finder in MUON arm of ALICE.
Cluster finder in MUON arm of ALICE.
return kTRUE
Definition: AliFMDv1.cxx:97