#include "AliMUONClusterReconstructor.h"
#include "AliMUONClusterFinderVS.h"
#include "AliMUONClusterFinderAZ.h"
+#include "AliMUONEventRecoCombi.h"
#include "AliMUONTrack.h"
#include "AliMUONTrackParam.h"
#include "AliMUONTriggerTrack.h"
#include "AliESDMuonTrack.h"
-#include "AliMUONRawData.h"
+#include "AliMUONRawReader.h"
#include "AliRawReader.h"
AliLoader* loader = runLoader->GetLoader("MUONLoader");
Int_t nEvents = runLoader->GetNumberOfEvents();
-// used local container for each method
-// passing fLoader as argument, could be avoided ???
- AliMUONTrackReconstructor* recoEvent = new AliMUONTrackReconstructor(loader);
- AliMUONData* dataEvent = recoEvent->GetMUONData();
- recoEvent->SetTrackMethod(1); // 1 - original, 2 - Kalman
+ AliMUONData* data = new AliMUONData(loader,"MUON","MUON");
- AliMUONClusterReconstructor* recoCluster = new AliMUONClusterReconstructor(loader);
- AliMUONData* dataCluster = recoCluster->GetMUONData();
+// passing loader as argument.
+ AliMUONTrackReconstructor* recoEvent = new AliMUONTrackReconstructor(loader, data);
+
+ if (strstr(GetOption(),"Original"))
+ recoEvent->SetTrackMethod(1); // Original tracking
+ else if (strstr(GetOption(),"Combi"))
+ recoEvent->SetTrackMethod(3); // Combined cluster / track
+ else
+ recoEvent->SetTrackMethod(2); // Kalman
+
+ AliMUONClusterReconstructor* recoCluster = new AliMUONClusterReconstructor(loader, data);
+
AliMUONClusterFinderVS *recModel = recoCluster->GetRecoModel();
- //AZ If "AZ" clustering method is to be used the following 2 lines
- // should be uncommented
- //recModel = (AliMUONClusterFinderVS*) new AliMUONClusterFinderAZ(0,1);
- //recoCluster->SetRecoModel(recModel);
+
+ if (!strstr(GetOption(),"VS")) {
+ recModel = (AliMUONClusterFinderVS*) new AliMUONClusterFinderAZ();
+ recoCluster->SetRecoModel(recModel);
+ }
recModel->SetGhostChi2Cut(10);
loader->LoadDigits("READ");
loader->LoadRecPoints("RECREATE");
loader->LoadTracks("RECREATE");
+ Int_t chBeg = recoEvent->GetTrackMethod() == 3 ? 6 : 0;
// Loop over events
for(Int_t ievent = 0; ievent < nEvents; ievent++) {
printf("Event %d\n",ievent);
if (!loader->TreeR()) loader->MakeRecPointsContainer();
// tracking branch
- dataCluster->MakeBranch("RC");
- dataCluster->SetTreeAddress("D,RC");
- recoCluster->Digits2Clusters();
- dataCluster->Fill("RC");
+ if (recoEvent->GetTrackMethod() != 3) {
+ data->MakeBranch("RC");
+ data->SetTreeAddress("D,RC");
+ } else {
+ data->SetTreeAddress("D");
+ data->SetTreeAddress("RCC");
+ }
+ // Important for avoiding a memory leak when reading digits ( to be investigated more in detail)
+ // In any case the reading of GLT is needed for the Trigger2Tigger method below
+ data->SetTreeAddress("GLT");
+
+ data->GetDigits();
+ recoCluster->Digits2Clusters(chBeg);
+ if (recoEvent->GetTrackMethod() == 3) {
+ // Combined cluster / track finder
+ AliMUONEventRecoCombi::Instance()->FillEvent(data, (AliMUONClusterFinderAZ*)recModel);
+ ((AliMUONClusterFinderAZ*) recModel)->SetReco(2);
+ }
+ else data->Fill("RC");
// trigger branch
- dataCluster->MakeBranch("TC");
- dataCluster->SetTreeAddress("TC");
+ data->MakeBranch("TC");
+ data->SetTreeAddress("TC");
recoCluster->Trigger2Trigger();
- dataCluster->Fill("TC");
+ data->Fill("TC");
- loader->WriteRecPoints("OVERWRITE");
+ //AZ loader->WriteRecPoints("OVERWRITE");
//---------------------------- Track & TriggerTrack ---------------------
if (!loader->TreeT()) loader->MakeTracksContainer();
// trigger branch
- dataEvent->MakeBranch("RL"); //trigger track
- dataEvent->SetTreeAddress("RL");
+ data->MakeBranch("RL"); //trigger track
+ data->SetTreeAddress("RL");
recoEvent->EventReconstructTrigger();
- dataEvent->Fill("RL");
+ data->Fill("RL");
// tracking branch
- dataEvent->MakeBranch("RT"); //track
- dataEvent->SetTreeAddress("RT");
+ data->MakeBranch("RT"); //track
+ data->SetTreeAddress("RT");
recoEvent->EventReconstruct();
- dataEvent->Fill("RT");
+ data->Fill("RT");
loader->WriteTracks("OVERWRITE");
+ if (recoEvent->GetTrackMethod() == 3) {
+ // Combined cluster / track
+ ((AliMUONClusterFinderAZ*) recModel)->SetReco(1);
+ data->MakeBranch("RC");
+ data->SetTreeAddress("RC");
+ AliMUONEventRecoCombi::Instance()->FillRecP(data, recoEvent);
+ data->Fill("RC");
+ }
+ loader->WriteRecPoints("OVERWRITE");
+
//--------------------------- Resetting branches -----------------------
- dataCluster->ResetDigits();
- dataCluster->ResetRawClusters();
- dataCluster->ResetTrigger();
+ data->ResetDigits();
+ data->ResetRawClusters();
+ data->ResetTrigger();
- dataEvent->ResetRawClusters();
- dataEvent->ResetTrigger();
- dataEvent->ResetRecTracks();
- dataEvent->ResetRecTriggerTracks();
+ data->ResetRawClusters();
+ data->ResetTrigger();
+ data->ResetRecTracks();
+ data->ResetRecTriggerTracks();
}
loader->UnloadDigits();
delete recoCluster;
delete recoEvent;
+ delete data;
}
//_____________________________________________________________________________
{
// AliLoader
AliLoader* loader = runLoader->GetLoader("MUONLoader");
+ AliMUONData* data = new AliMUONData(loader,"MUON","MUON");
-// used local container for each method
-// passing fLoader as argument, could be avoided ???
- AliMUONTrackReconstructor* recoEvent = new AliMUONTrackReconstructor(loader);
- AliMUONData* dataEvent = recoEvent->GetMUONData();
+// passing loader as argument.
+ AliMUONTrackReconstructor* recoEvent = new AliMUONTrackReconstructor(loader, data);
- AliMUONRawData* rawData = new AliMUONRawData(loader);
- AliMUONData* dataCluster = rawData->GetMUONData();
+ AliMUONRawReader* rawData = new AliMUONRawReader(loader, data);
- AliMUONClusterReconstructor* recoCluster = new AliMUONClusterReconstructor(loader, dataCluster);
+ AliMUONClusterReconstructor* recoCluster = new AliMUONClusterReconstructor(loader, data);
AliMUONClusterFinderVS *recModel = recoCluster->GetRecoModel();
recModel->SetGhostChi2Cut(10);
if (!loader->TreeD()) loader->MakeDigitsContainer();
// tracking branch
- dataCluster->MakeBranch("D");
- dataCluster->SetTreeAddress("D");
+ data->MakeBranch("D");
+ data->SetTreeAddress("D");
rawData->ReadTrackerDDL(rawReader);
- dataCluster->Fill("D");
+ data->Fill("D");
// trigger branch
- dataCluster->MakeBranch("GLT");
- dataCluster->SetTreeAddress("GLT");
+ data->MakeBranch("GLT");
+ data->SetTreeAddress("GLT");
rawData->ReadTriggerDDL(rawReader);
- dataCluster->Fill("GLT");
+ data->Fill("GLT");
loader->WriteDigits("OVERWRITE");
if (!loader->TreeR()) loader->MakeRecPointsContainer();
// tracking branch
- dataCluster->MakeBranch("RC");
- dataCluster->SetTreeAddress("RC");
+ data->MakeBranch("RC");
+ data->SetTreeAddress("RC");
recoCluster->Digits2Clusters();
- dataCluster->Fill("RC");
+ data->Fill("RC");
// trigger branch
- dataCluster->MakeBranch("TC");
- dataCluster->SetTreeAddress("TC");
+ data->MakeBranch("TC");
+ data->SetTreeAddress("TC");
recoCluster->Trigger2Trigger();
- dataCluster->Fill("TC");
+ data->Fill("TC");
loader->WriteRecPoints("OVERWRITE");
if (!loader->TreeT()) loader->MakeTracksContainer();
// trigger branch
- dataEvent->MakeBranch("RL"); //trigger track
- dataEvent->SetTreeAddress("RL");
+ data->MakeBranch("RL"); //trigger track
+ data->SetTreeAddress("RL");
recoEvent->EventReconstructTrigger();
- dataEvent->Fill("RL");
+ data->Fill("RL");
// tracking branch
- dataEvent->MakeBranch("RT"); //track
- dataEvent->SetTreeAddress("RT");
+ data->MakeBranch("RT"); //track
+ data->SetTreeAddress("RT");
recoEvent->EventReconstruct();
- dataEvent->Fill("RT");
+ data->Fill("RT");
loader->WriteTracks("OVERWRITE");
//--------------------------- Resetting branches -----------------------
- dataCluster->ResetDigits();
- dataCluster->ResetRawClusters();
- dataCluster->ResetTrigger();
-
- dataEvent->ResetRawClusters();
- dataEvent->ResetTrigger();
- dataEvent->ResetRecTracks();
- dataEvent->ResetRecTriggerTracks();
+ data->ResetDigits();
+ data->ResetRawClusters();
+ data->ResetTrigger();
+
+ data->ResetRawClusters();
+ data->ResetTrigger();
+ data->ResetRecTracks();
+ data->ResetRecTriggerTracks();
}
loader->UnloadRecPoints();
delete recoCluster;
delete recoEvent;
+ delete data;
}
//_____________________________________________________________________________