/* $Id$ */
/// \class AliMUONRecoCheck
-/// \brief Utility class to check reconstruction
+/// 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 "AliMUONTrack.h"
-#include "AliMUONData.h"
+#include "AliMUONRecData.h"
#include "AliMUONConstants.h"
-#include "AliRun.h" // for gAlice
#include "AliLoader.h"
#include "AliRunLoader.h"
#include "AliHeader.h"
#include "AliLog.h"
#include <TParticle.h>
+#include <TParticlePDG.h>
/// \cond CLASSIMP
ClassImp(AliMUONRecoCheck)
/// \endcond
//_____________________________________________________________________________
- AliMUONRecoCheck::AliMUONRecoCheck(Char_t *chLoader)
+ AliMUONRecoCheck::AliMUONRecoCheck(Char_t *chLoader, Char_t *chLoaderSim)
: TObject(),
fRunLoader(0x0),
fMUONData(0x0),
+ fRunLoaderSim(0x0),
+ fMUONDataSim(0x0),
fMuonTrackRef(0x0),
fTrackReco(0x0),
fReconstructibleTracks(0),
- fRecoTracks(0)
+ fRecoTracks(0),
+ fIsLoadConstructor(kTRUE)
{
-/// Constructor
+/// Constructor using "galice.root",
+/// takes care of loading/unloading Kinematics, TrackRefs and Tracks
fMuonTrackRef = new TClonesArray("AliMUONTrack", 10);
- // open the run loader
- fRunLoader = AliRunLoader::Open(chLoader);
+ // run loader
+ fRunLoader = AliRunLoader::Open(chLoader,"MUONFolder","READ");
if (!fRunLoader) {
- AliError(Form("no run loader found in file %s","galice.root" ));
+ AliError(Form("no run loader found " ));
return;
}
- // initialize loader's
+
+ // initialize loader
AliLoader *loader = fRunLoader->GetLoader("MUONLoader");
- // initialize container
- fMUONData = new AliMUONData(loader,"MUON","MUON");
+ // container
+ fMUONData = new AliMUONRecData(loader,"MUON","MUON");
+ if (!fMUONData) {
+ AliError(Form("no MUONData found " ));
+ return;
+ }
+
+ // run loader
+ fRunLoaderSim = AliRunLoader::Open(chLoaderSim,"MUONFolderSim","READ");
+ if (!fRunLoaderSim) {
+ AliError(Form("no run sim loader found " ));
+ return;
+ }
+
+ // initialize loader
+ AliLoader *loaderSim = fRunLoaderSim->GetLoader("MUONLoader");
- // Loading AliRun master
- if (fRunLoader->GetAliRun() == 0x0) fRunLoader->LoadgAlice();
+ // container
+ fMUONDataSim = new AliMUONSimData(loaderSim,"MUON","MUON");
+ if (!fMUONDataSim) {
+ AliError(Form("no MUONDataSim found " ));
+ return;
+ }
- fRunLoader->LoadKinematics("READ");
- fRunLoader->LoadTrackRefs("READ");
+ fRunLoaderSim->LoadKinematics("READ");
+ fRunLoader->LoadTrackRefs("READ");
loader->LoadTracks("READ");
}
+//_____________________________________________________________________________
+ AliMUONRecoCheck::AliMUONRecoCheck(AliRunLoader *runloader, AliMUONRecData *muondata,
+ AliRunLoader *runloaderSim, AliMUONSimData *muondataSim)
+ : TObject(),
+ fRunLoader(0x0),
+ fMUONData(0x0),
+ fRunLoaderSim(0x0),
+ fMUONDataSim(0x0),
+ fMuonTrackRef(0x0),
+ fTrackReco(0x0),
+ fReconstructibleTracks(0),
+ fRecoTracks(0),
+ fIsLoadConstructor(kFALSE)
+{
+/// Constructor from AliRunLoader and AliMUONData,
+/// does not load/unload Kinematics, TrackRefs and Tracks internally
+/// it should be done in the execution program (e.g. see MUONRecoCheck.C)
+
+ fMuonTrackRef = new TClonesArray("AliMUONTrack", 10);
+
+ // run loader
+ fRunLoader = runloader;
+ if (!fRunLoader) {
+ AliError(Form("no run loader found " ));
+ return;
+ }
+
+ // container
+ fMUONData = muondata;
+ if (!fMUONData) {
+ AliError(Form("no MUONData found " ));
+ return;
+ }
+
+ // run loader
+ fRunLoaderSim = runloaderSim;
+ if (!fRunLoaderSim) {
+ AliError(Form("no run sim loader found " ));
+ return;
+ }
+
+ // container
+ fMUONDataSim = muondataSim;
+ if (!fMUONDataSim) {
+ AliError(Form("no MUONDataSim found " ));
+ return;
+ }
+
+}
+
+
//_____________________________________________________________________________
AliMUONRecoCheck::~AliMUONRecoCheck()
{
/// Destructor
-
- fRunLoader->UnloadKinematics();
- fRunLoader->UnloadTrackRefs();
- fRunLoader->UnloadTracks();
- fMuonTrackRef->Delete();
delete fMuonTrackRef;
- delete fMUONData;
+ if(fIsLoadConstructor){
+ fRunLoaderSim->UnloadKinematics();
+ fRunLoader->UnloadTrackRefs();
+ fRunLoader->UnloadTracks();
+ delete fMUONData;
+ delete fRunLoader;
+ delete fMUONDataSim;
+ delete fRunLoaderSim;
+ }
}
//_____________________________________________________________________________
trackParam = new AliMUONTrackParam();
hitForRec = new AliMUONHitForRec();
- muonTrack = new AliMUONTrack();
- Int_t max = fRunLoader->GetHeader()->Stack()->GetNtrack();
+ Int_t charge;
+ TParticlePDG *ppdg;
+
+ Int_t max = fRunLoaderSim->GetHeader()->Stack()->GetNtrack();
for (Int_t iTrackRef = 0; iTrackRef < nTrackRef; iTrackRef++) {
branch->GetEntry(iTrackRef);
if (!trackRefs->GetEntries()) continue;
while (isNewTrack) {
+
+ muonTrack = new AliMUONTrack();
+
for (Int_t iHit = iHitMin; iHit < trackRefs->GetEntries(); iHit++) {
trackReference = (AliTrackReference*)trackRefs->At(iHit);
else iChamber = AliMUONConstants::ChamberNumber(z);
hitForRec->SetChamberNumber(iChamber);
- muonTrack->AddTrackParamAtHit(trackParam);
+ muonTrack->AddTrackParamAtHit(trackParam,0);
muonTrack->AddHitForRecAtHit(hitForRec);
muonTrack->SetTrackID(track);
}
// track parameters at vertex
- particle = fRunLoader->GetHeader()->Stack()->Particle(muonTrack->GetTrackID());
+ particle = fRunLoaderSim->GetHeader()->Stack()->Particle(muonTrack->GetTrackID());
if (particle) {
bendingSlope = pY/pZ;
nonBendingSlope = pX/pZ;
}
+
pYZ = TMath::Sqrt(pY*pY+pZ*pZ);
if (pYZ >0) inverseBendingMomentum = 1/pYZ;
+
+ ppdg = particle->GetPDG(1);
+ charge = (Int_t)(ppdg->Charge()/3.0);
+ inverseBendingMomentum *= charge;
+
trackParam->SetBendingSlope(bendingSlope);
trackParam->SetNonBendingSlope(nonBendingSlope);
trackParam->SetInverseBendingMomentum(inverseBendingMomentum);
}
AddMuonTrackReference(muonTrack);
- muonTrack->ResetTrackParamAtHit();
- muonTrack->ResetHitForRecAtHit();
+ delete muonTrack;
+ muonTrack = NULL;
} // end while isNewTrack
}
-
+ delete trackRefs;
CleanMuonTrackRef();
ReconstructibleTracks();
- delete muonTrack;
delete trackParam;
delete hitForRec;
{
/// 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;
}
{
/// Reset tracks
- if (fMuonTrackRef) fMuonTrackRef->Clear();
+ if (fMuonTrackRef) fMuonTrackRef->Delete();
}
//_____________________________________________________________________________
void AliMUONRecoCheck::CleanMuonTrackRef()
hitForRec = new AliMUONHitForRec();
trackParam = new AliMUONTrackParam();
- trackNew = new AliMUONTrack();
Int_t nTrackRef = fMuonTrackRef->GetEntriesFast();
for (Int_t index = 0; index < nTrackRef; index++) {
trackParamAtHit = track->GetTrackParamAtHit();
trackParamAtVertex = track->GetTrackParamAtVertex();
nTrackHits = hitForRecAtHit->GetEntriesFast();
+ trackNew = new AliMUONTrack();
iHit1 = 0;
while (iHit1 < nTrackHits) {
hitForRec1 = (AliMUONHitForRec*) hitForRecAtHit->At(iHit1);
trackParam->SetInverseBendingMomentum(1./bendingMomentum);
trackNew->AddHitForRecAtHit(hitForRec);
- trackNew->AddTrackParamAtHit(trackParam);
+ trackNew->AddTrackParamAtHit(trackParam,0);
iHit1++;
} // end iHit1
trackNew->SetTrackID(track->GetTrackID());
trackNew->SetTrackParamAtVertex(trackParamAtVertex);
- {new ((*newMuonTrackRef)[newMuonTrackRef->GetEntriesFast()]) AliMUONTrack(*trackNew);}
- trackNew->ResetHitForRecAtHit();
- trackNew->ResetTrackParamAtHit();
+ {new ((*newMuonTrackRef)[newMuonTrackRef->GetEntriesFast()]) AliMUONTrack(*trackNew);}
+ delete trackNew;
+ trackNew = NULL;
} // end trackRef
- fMuonTrackRef->Clear();
+ fMuonTrackRef->Delete();
nTrackRef = newMuonTrackRef->GetEntriesFast();
for (Int_t index = 0; index < nTrackRef; index++) {
track = (AliMUONTrack*)newMuonTrackRef->At(index);
AddMuonTrackReference(track);
}
-
- delete trackNew;
delete hitForRec;
delete trackParam;
newMuonTrackRef->Delete();