AliRoot Core  3dc7879 (3dc7879)
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 
125 ClassImp(AliMUONReconstructor)
127 
128 //_____________________________________________________________________________
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,
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,
381  }
382 
383  fTrackers.AddAtAndExpand(tracker,es);
384  }
385 
386 
387  return tracker;
388 }
389 
390 //_____________________________________________________________________________
392 AliMUONReconstructor::CreateClusterFinder(const char* clusterFinderType)
393 {
395 
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 
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  if ( !fCalibrationData->LV() )
557  {
558  // Like for LV, we only break if the values
559  // are not there *AND* we cut on them.
560  UInt_t mask = GetRecoParam()->PadGoodnessMask();
561  TString smask(AliMUONPadStatusMaker::AsCondition(mask));
562  if ( smask.Contains("LV") )
563  {
564  AliFatal("Could not access all required calibration data (LV)");
565  }
566  }
567  }
568 }
569 
570 //_____________________________________________________________________________
571 void
572 AliMUONReconstructor::CreateCalibrator() const
573 {
575 
576  AliCodeTimerAuto("",0);
577 
578  if ( ! fCalibrationData )
579  CreateCalibrationData();
580 
581  AliInfo("Calibration will occur.");
582 
583  TString opt(GetOption());
584  opt.ToUpper();
585 
586  if ( strstr(opt,"NOSTATUSMAP") )
587  {
588  AliWarning("NOSTATUSMAP is obsolete");
589  }
590 
591  Bool_t kTracker(kFALSE);
592 
593  const AliRunInfo* runInfo = GetRunInfo();
594  if (!runInfo)
595  {
596  AliError("Could not get runinfo ?");
597  }
598  else
599  {
600  TString detectors(runInfo->GetActiveDetectors());
601  if (detectors.Contains("MUONTRK")) kTracker=kTRUE;
602  }
603 
604  if ( kTracker )
605  {
606  fDigitCalibrator = new AliMUONDigitCalibrator(*fCalibrationData,GetRecoParam());
607  }
608  else
609  {
610  AliWarning("Apparently running without MCH so will not instantiante the DigitCalibrator nor read MCH OCDB objects...");
611  fShouldCalibrate=kFALSE;
612  }
613 }
614 
615 //_____________________________________________________________________________
616 void
617 AliMUONReconstructor::ResponseRemovingChambers(AliMUONVTriggerStore* triggerStore) const
618 {
621  AliCodeTimerAuto("",0);
622 
623  if ( ! fCalibrationData )
624  CreateCalibrationData();
625 
626  if ( ! fTriggerProcessor )
627  fTriggerProcessor = new AliMUONTriggerElectronics(fCalibrationData);
628 
629  fTriggerProcessor->ResponseRemovingChambers(*triggerStore);
630 }
631 
632 //_____________________________________________________________________________
633 AliMUONVDigitStore*
634 AliMUONReconstructor::DigitStore() const
635 {
637  if (!fDigitStore)
638  {
639  TString sopt(GetOption());
640  sopt.ToUpper();
641 
642  AliInfo(Form("Options=%s",sopt.Data()));
643 
644  if ( sopt.Contains("DIGITSTOREV1") )
645  {
646  fDigitStore = AliMUONVDigitStore::Create("AliMUONDigitStoreV1");
647  }
648  else if ( sopt.Contains("DIGITSTOREV2R") )
649  {
650  fDigitStore = AliMUONVDigitStore::Create("AliMUONDigitStoreV2R");
651  }
652  else if ( sopt.Contains("DIGITSTOREV2S") )
653  {
654  fDigitStore = AliMUONVDigitStore::Create("AliMUONDigitStoreV2S");
655  }
656 
657  if (!fDigitStore) fDigitStore = AliMUONVDigitStore::Create("AliMUONDigitStoreV2R");
658 
659  AliInfo(Form("Will use %s to store digits during reconstruction",fDigitStore->ClassName()));
660  }
661  return fDigitStore;
662 }
663 
664 //_____________________________________________________________________________
665 void
666 AliMUONReconstructor::FillTreeR(AliMUONVTriggerStore* triggerStore,
667  TTree& clustersTree) const
668 {
670 
671  AliCodeTimerAuto("",0)
672 
673  Bool_t ok(kFALSE);
674  Bool_t alone(kTRUE); // is trigger the only info in TreeR ?
675 
676  const AliMUONRecoParam* rp = GetRecoParam();
677 
678  if ( ! rp->CombineClusterTrackReco() )
679  {
680  alone = kFALSE; // we'll get both tracker and trigger information in TreeR
681  }
682 
683  if ( triggerStore )
684  {
685  ResponseRemovingChambers(triggerStore);
686  ok = triggerStore->Connect(clustersTree,alone);
687  if (!ok)
688  {
689  AliError("Could not create triggerStore branches in TreeR");
690  }
691  }
692 
693  if ( !alone )
694  {
695  if (!fClusterStore)
696  {
697  fClusterStore = new AliMUONClusterStoreV2;
698  }
699 
700  AliMUONVClusterServer* clusterServer = CreateClusterServer(*rp);
701 
702  TIter next(DigitStore()->CreateIterator());
703  clusterServer->UseDigits(next,DigitStore());
704 
705  AliMpArea area;
706 
707  AliDebug(1,Form("Doing full clusterization in local reconstruction using %s ",clusterServer->ClassName()));
708 
709  for ( Int_t i = 0; i < AliMpConstants::NofTrackingChambers(); ++i )
710  {
711  if (rp->UseChamber(i))
712  {
713  if ( ( i == 6 || i == 7 ) && rp->BypassSt4() ) continue;
714  if ( ( i == 8 || i == 9 ) && rp->BypassSt5() ) continue;
715 
716  clusterServer->Clusterize(i,*fClusterStore,area,rp);
717  }
718  }
719 
720  Bool_t cok = fClusterStore->Connect(clustersTree,alone);
721 
722  if (!cok) AliError("Could not connect clusterStore to clusterTree");
723 
724  AliDebug(1,Form("Number of clusters found = %d",fClusterStore->GetSize()));
725 
726  StdoutToAliDebug(1,fClusterStore->Print());
727  }
728 
729  if (ok) // at least one type of branches created successfully
730  {
731  clustersTree.Fill();
732  }
733 
734  if (fClusterStore) fClusterStore->Clear();
735 }
736 
737 //_____________________________________________________________________________
738 const AliMUONRecoParam* AliMUONReconstructor::GetRecoParam()
739 {
742 }
743 
744 
745 //_____________________________________________________________________________
746 Bool_t
747 AliMUONReconstructor::HasDigitConversion() const
748 {
751 
752  TString opt(GetOption());
753  opt.ToUpper();
754  if ( opt.Contains("SAVEDIGITS" ) && !opt.Contains("NOLOCALRECONSTRUCTION") )
755  {
756  return kTRUE;
757  }
758  else
759  {
760  return kFALSE;
761  }
762 }
763 
764 //_____________________________________________________________________________
765 void
766 AliMUONReconstructor::Reconstruct(AliRawReader* rawReader, TTree* clustersTree) const
767 {
770 
771  if ( !clustersTree )
772  {
773  AliError("clustersTree is 0x0 !");
774  return;
775  }
776 
777  ConvertDigits(rawReader,DigitStore(),TriggerStore());
778 
779  FillTreeR(TriggerStore(),*clustersTree);
780 }
781 
782 //_____________________________________________________________________________
783 void
784 AliMUONReconstructor::Reconstruct(TTree* digitsTree, TTree* clustersTree) const
785 {
788 
789  AliCodeTimerAuto("",0)
790 
791  AliDebug(1,"");
792 
793  if (!digitsTree || !clustersTree)
794  {
795  AliError(Form("Tree is null : digitsTree=%p clustersTree=%p",
796  digitsTree,clustersTree));
797  return;
798  }
799 
800  if (!fDigitStore)
801  {
802  fDigitStore = AliMUONVDigitStore::Create(*digitsTree);
803  if (!fDigitStore)
804  {
805  AliError(Form("Could not get DigitStore from %s",digitsTree->GetName()));
806  }
807  else
808  {
809  AliInfo(Form("Created %s from %s",fDigitStore->ClassName(),digitsTree->GetName()));
810  }
811  }
812  if (!fTriggerStore)
813  {
814  fTriggerStore = AliMUONVTriggerStore::Create(*digitsTree);
815  if (!fTriggerStore)
816  {
817  AliError(Form("Could not get TriggerStore from %s",digitsTree->GetName()));
818  }
819  else
820  {
821  AliInfo(Form("Created %s from %s",fTriggerStore->ClassName(),digitsTree->GetName()));
822  }
823  }
824 
825  if (!fTriggerStore && !fDigitStore)
826  {
827  AliError("No store at all. Nothing to do.");
828  return;
829  }
830 
831  // insure we start with empty stores
832  if ( fDigitStore )
833  {
834  fDigitStore->Clear();
835  Bool_t alone = ( fTriggerStore ? kFALSE : kTRUE );
836  Bool_t ok = fDigitStore->Connect(*digitsTree,alone);
837  if (!ok)
838  {
839  AliError("Could not connect digitStore to digitsTree");
840  return;
841  }
842  }
843  if ( fTriggerStore )
844  {
845  fTriggerStore->Clear();
846  Bool_t alone = ( fDigitStore ? kFALSE : kTRUE );
847  Bool_t ok = fTriggerStore->Connect(*digitsTree,alone);
848  if (!ok)
849  {
850  AliError("Could not connect triggerStore to digitsTree");
851  return;
852  }
853  }
854 
855  digitsTree->GetEvent(0);
856 
857  if ( fDigitStore )
858  {
859  // Insure we got calibrated digits (if we reconstruct from pure simulated,
860  // i.e. w/o going through raw data, this will be the case)
861  TIter next(fDigitStore->CreateIterator());
862  AliMUONVDigit* digit = static_cast<AliMUONVDigit*>(next());
863  if (digit && !digit->IsCalibrated())
864  {
865  Calibrate(*fDigitStore);
866  }
867  }
868 
869  FillTreeR(fTriggerStore,*clustersTree);
870 }
871 
872 //_____________________________________________________________________________
873 AliMUONVTriggerStore*
874 AliMUONReconstructor::TriggerStore() const
875 {
877  TString sopt(GetOption());
878  sopt.ToUpper();
879 
880  if (sopt.Contains("TRIGGERDISABLE"))
881  {
882  delete fTriggerStore;
883  fTriggerStore = 0x0;
884  }
885  else
886  {
887  if (!fTriggerStore)
888  {
889  fTriggerStore = new AliMUONTriggerStoreV1;
890  }
891  }
892  return fTriggerStore;
893 }
static const char * GetEventSpecieName(EventSpecie_t es)
#define AliCodeTimerAutoGeneral(message, counter)
Definition: AliCodeTimer.h:141
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 ...
#define StdoutToAliDebug(level, whatever)
Definition: AliLog.h:377
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.
Int_t GetRun() const
Interface for a digit container.
Implementation of AliMUONVTriggerStore.
static AliMpSegmentation * Instance(Bool_t warn=true)
static const AliDetectorRecoParam * GetRecoParam(Int_t iDet)
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)
Implementation of VClusterStore.
Base class of a trigger information store.
#define AliWarning(message)
Definition: AliLog.h:541
void Reconstruct(bool raw=false)
Definition: Reconstruct.C:26
Manager class for muon trigger electronics.
#define AliErrorClass(message)
Definition: AliLog.h:596
static AliMpDDLStore * Instance(Bool_t warn=true)
A basic pre-cluster finder.
return clusterFinder
void Clear()
Add comment.
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.
#define AliInfo(message)
Definition: AliLog.h:484
Class to calibrate the digits.
static Int_t GetDetIndex(const char *detector)
#define AliCodeTimerStart(message)
Definition: AliCodeTimer.h:135
#define AliCodeTimerAuto(message, counter)
Definition: AliCodeTimer.h:137
A very basic (and mostly useless, probably) cluster finder.
if(!cinput1) cinput1
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.
#define AliFatal(message)
Definition: AliLog.h:640
void UnloadFromCache(const char *path)
#define AliDebug(logLevel, message)
Definition: AliLog.h:300
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
const char * GetActiveDetectors() const
Definition: AliRunInfo.h:42
static EventSpecie_t Convert(Int_t ies)
#define AliError(message)
Definition: AliLog.h:591
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.
static AliCDBManager * Instance(TMap *entryCache=NULL, Int_t run=-1)
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.
#define AliCodeTimerStop(message)
Definition: AliCodeTimer.h:136
Int_t GetEventSpecie() const