+//_____________________________________________________________________________
+void
+AliMUONReconstructor::Reconstruct(AliRunLoader* runLoader) const
+{
+ /// Reconstruct simulated data
+
+ AliCodeTimerAuto("Reconstruct(AliRunLoader*)")
+
+ AliLoader* loader = runLoader->GetDetectorLoader("MUON");
+ if (!loader)
+ {
+ AliError("Could not get MUON loader");
+ return;
+ }
+
+ Int_t nEvents = runLoader->GetNumberOfEvents();
+
+ for ( Int_t i = 0; i < nEvents; ++i )
+ {
+ runLoader->GetEvent(i);
+
+ loader->LoadRecPoints("update");
+ loader->CleanRecPoints();
+ loader->MakeRecPointsContainer();
+ TTree* clustersTree = loader->TreeR();
+
+ loader->LoadDigits("read");
+ TTree* digitsTree = loader->TreeD();
+
+ Reconstruct(digitsTree,clustersTree);
+
+ loader->UnloadDigits();
+ loader->WriteRecPoints("OVERWRITE");
+ loader->UnloadRecPoints();
+ }
+}
+
+//_____________________________________________________________________________
+void
+AliMUONReconstructor::Reconstruct(AliRunLoader* runLoader, AliRawReader* rawReader) const
+{
+ /// This method is called by AliReconstruction if HasLocalReconstruction()==kFALSE
+
+ AliCodeTimerAuto("AliMUONReconstructor::Reconstruct(AliRunLoader*, AliRawReader*)")
+
+ AliLoader* loader = runLoader->GetDetectorLoader("MUON");
+ if (!loader)
+ {
+ AliError("Could not get MUON loader");
+ return;
+ }
+
+ Int_t i(0);
+
+ while (rawReader->NextEvent())
+ {
+ runLoader->GetEvent(i++);
+
+ loader->LoadRecPoints("update");
+ loader->CleanRecPoints();
+ loader->MakeRecPointsContainer();
+ TTree* clustersTree = loader->TreeR();
+
+ loader->LoadDigits("update");
+ loader->CleanDigits();
+ loader->MakeDigitsContainer();
+ TTree* digitsTree = loader->TreeD();
+ ConvertDigits(rawReader, digitsTree);
+ loader->WriteDigits("OVERWRITE");
+
+ Reconstruct(digitsTree,clustersTree);
+
+ loader->UnloadDigits();
+ loader->WriteRecPoints("OVERWRITE");
+ loader->UnloadRecPoints();
+ }
+}
+
+//_____________________________________________________________________________
+void
+AliMUONReconstructor::Reconstruct(TTree* digitsTree, TTree* clustersTree) const
+{
+ /// This method is called by AliReconstruction if HasLocalReconstruction()==kTRUE
+ /// AND HasDigitConversion()==kTRUE
+
+// AliCodeTimerAuto("(TTree*,TTree*)")
+
+ AliDebug(1,"");
+
+ if (!digitsTree || !clustersTree)
+ {
+ AliError(Form("Tree is null : digitsTree=%p clustersTree=%p",
+ digitsTree,clustersTree));
+ return;
+ }
+
+ if (!fDigitStore)
+ {
+ fDigitStore = AliMUONVDigitStore::Create(*digitsTree);
+ if (!fDigitStore)
+ {
+ AliError(Form("Could not get DigitStore from %s",digitsTree->GetName()));
+ }
+ else
+ {
+ AliInfo(Form("Created %s from %s",fDigitStore->ClassName(),digitsTree->GetName()));
+ }
+ }
+ if (!fTriggerStore)
+ {
+ fTriggerStore = AliMUONVTriggerStore::Create(*digitsTree);
+ if (!fTriggerStore)
+ {
+ AliError(Form("Could not get TriggerStore from %s",digitsTree->GetName()));
+ }
+ else
+ {
+ AliInfo(Form("Created %s from %s",fTriggerStore->ClassName(),digitsTree->GetName()));
+ }
+ }
+
+ if (!fTriggerStore && !fDigitStore)
+ {
+ AliError("No store at all. Nothing to do.");
+ return;
+ }
+
+ // insure we start with empty stores
+ if ( fDigitStore )
+ {
+ fDigitStore->Clear();
+ Bool_t alone = ( fTriggerStore ? kFALSE : kTRUE );
+ Bool_t ok = fDigitStore->Connect(*digitsTree,alone);
+ if (!ok)
+ {
+ AliError("Could not connect digitStore to digitsTree");
+ return;
+ }
+ }
+ if ( fTriggerStore )
+ {
+ fTriggerStore->Clear();
+ Bool_t alone = ( fDigitStore ? kFALSE : kTRUE );
+ Bool_t ok = fTriggerStore->Connect(*digitsTree,alone);
+ if (!ok)
+ {
+ AliError("Could not connect triggerStore to digitsTree");
+ return;
+ }
+ }
+
+ digitsTree->GetEvent(0);
+
+ if ( fDigitStore )
+ {
+ // Insure we got calibrated digits (if we reconstruct from pure simulated,
+ // i.e. w/o going through raw data, this will be the case)
+ TIter next(fDigitStore->CreateIterator());
+ AliMUONVDigit* digit = static_cast<AliMUONVDigit*>(next());
+ if (!digit->IsCalibrated())
+ {
+ Calibrate(*fDigitStore);
+ }
+ Clusterize(*fDigitStore,*(ClusterStore()));
+ }
+
+ FillTreeR(fTriggerStore,ClusterStore(),*clustersTree);