/* $Id$ */
-// -----------------------
-// Class AliMUONRecoCheck
-// -----------------------
-// Utility class to check the muon reconstruction. Reconstructed tracks are compared
-// to reference tracks. The reference tracks are built from AliTrackReference for the
-// hit in chamber (0..9) and from kinematics for the vertex parameters.
+/// \class AliMUONRecoCheck
+/// \brief Utility class to check reconstruction
+/// Reconstructed tracks are compared to reference tracks.
+/// The reference tracks are built from AliTrackReference for the
+/// hit in chamber (0..9) and from kinematics for the vertex parameters.
#include "AliMUON.h"
#include "AliMUONRecoCheck.h"
#include <TParticle.h>
+/// \cond CLASSIMP
ClassImp(AliMUONRecoCheck)
+/// \endcond
//_____________________________________________________________________________
-AliMUONRecoCheck::AliMUONRecoCheck(Char_t *chLoader)
+ AliMUONRecoCheck::AliMUONRecoCheck(AliRunLoader *runloader, AliMUONData *muondata)
+ : TObject(),
+ fRunLoader(0x0),
+ fMUONData(0x0),
+ fMuonTrackRef(0x0),
+ fTrackReco(0x0),
+ fReconstructibleTracks(0),
+ fRecoTracks(0)
{
/// Constructor
+
fMuonTrackRef = new TClonesArray("AliMUONTrack", 10);
- // open the run loader
- fRunLoader = AliRunLoader::Open(chLoader);
+ // run loader
+ fRunLoader = runloader;
if (!fRunLoader) {
- AliError(Form("no run loader found in file %s","galice.root" ));
+ AliError(Form("no run loader found " ));
return;
}
- // initialize loader's
- AliLoader *loader = fRunLoader->GetLoader("MUONLoader");
-
- // initialize container
- fMUONData = new AliMUONData(loader,"MUON","MUON");
- // Loading AliRun master
- if (fRunLoader->GetAliRun() == 0x0) fRunLoader->LoadgAlice();
-
- fRunLoader->LoadKinematics("READ");
- fRunLoader->LoadTrackRefs("READ");
- loader->LoadTracks("READ");
+ // container
+ fMUONData = muondata;
+ if (!fMUONData) {
+ AliError(Form("no MUONData found " ));
+ return;
+ }
- fReconstructibleTracks = 0;
- fRecoTracks = 0;
}
-//____________________________________________________________________
-AliMUONRecoCheck::AliMUONRecoCheck(const AliMUONRecoCheck& rhs)
- : TObject(rhs)
-{
-/// Protected copy constructor
-
- AliFatal("Not implemented.");
-}
//_____________________________________________________________________________
AliMUONRecoCheck::~AliMUONRecoCheck()
{
/// Destructor
- fRunLoader->UnloadKinematics();
- fRunLoader->UnloadTrackRefs();
- fRunLoader->UnloadTracks();
fMuonTrackRef->Delete();
delete fMuonTrackRef;
- delete fMUONData;
-}
-
-//________________________________________________________________________
-AliMUONRecoCheck& AliMUONRecoCheck::operator = (const AliMUONRecoCheck& rhs)
-{
-/// Protected assignement operator
-
- if (this == &rhs) return *this;
-
- AliFatal("Not implemented.");
-
- return *this;
}
//_____________________________________________________________________________
track = trackSave = -999;
Bool_t isNewTrack;
- Int_t iHitMin, iChamber;
+ Int_t iHitMin, iChamber, detElemId;
trackParam = new AliMUONTrackParam();
hitForRec = new AliMUONHitForRec();
hitForRec->SetNonBendingCoor(x);
hitForRec->SetZ(z);
hitForRec->SetBendingReso2(0.0);
- hitForRec->SetNonBendingReso2(0.0);
- iChamber = AliMUONConstants::ChamberNumber(z);
+ hitForRec->SetNonBendingReso2(0.0);
+ detElemId = hitForRec->GetDetElemId();
+ if (detElemId) iChamber = detElemId / 100 - 1;
+ else iChamber = AliMUONConstants::ChamberNumber(z);
hitForRec->SetChamberNumber(iChamber);
- muonTrack->AddTrackParamAtHit(trackParam);
+ muonTrack->AddTrackParamAtHit(trackParam,hitForRec);
muonTrack->AddHitForRecAtHit(hitForRec);
muonTrack->SetTrackID(track);
{
/// Return TClonesArray of reconstructed tracks
- GetMUONData()->ResetRecTracks();
- GetMUONData()->SetTreeAddress("RT");
- fTrackReco = GetMUONData()->RecTracks();
- GetMUONData()->GetRecTracks();
+ fMUONData->ResetRecTracks();
+ fMUONData->SetTreeAddress("RT");
+ fTrackReco = fMUONData->RecTracks();
+ fMUONData->GetRecTracks();
fRecoTracks = fTrackReco->GetEntriesFast();
return fTrackReco;
}
Float_t bendingSlope2,nonBendingSlope2,bendingMomentum2;
TClonesArray *newMuonTrackRef = new TClonesArray("AliMUONTrack", 10);
Int_t iHit1;
- Int_t iChamber = 0;
+ Int_t iChamber = 0, detElemId = 0;
Int_t nRec = 0;
Int_t nTrackHits = 0;
hitForRec->SetNonBendingCoor(xRec);
hitForRec->SetBendingCoor(yRec);
hitForRec->SetZ(zRec);
- iChamber = AliMUONConstants::ChamberNumber(zRec);
+ detElemId = hitForRec->GetDetElemId();
+ if (detElemId) iChamber = detElemId / 100 - 1;
+ else iChamber = AliMUONConstants::ChamberNumber(zRec);
hitForRec->SetChamberNumber(iChamber);
hitForRec->SetBendingReso2(0.0);
hitForRec->SetNonBendingReso2(0.0);
trackParam->SetInverseBendingMomentum(1./bendingMomentum);
trackNew->AddHitForRecAtHit(hitForRec);
- trackNew->AddTrackParamAtHit(trackParam);
+ trackNew->AddTrackParamAtHit(trackParam,hitForRec);
iHit1++;
} // end iHit1