#include "TH1.h"
#include "TParticle.h"
#include "TFile.h"
+#include <TGeoManager.h>
// STEER includes
#include "AliRun.h"
#include "AliMC.h"
#include "AliStack.h"
#include "AliRunLoader.h"
+#include "AliMagFMaps.h"
+#include "AliTracker.h"
// MUON includes
-#include "AliMUON.h"
#include "AliMUONConstants.h"
#include "AliMUONTrack.h"
#include "AliMUONRecoCheck.h"
#include "AliMUONTrackParam.h"
+#include "AliMUONTrackExtrap.h"
+#include "AliMUONRecData.h"
+#include "AliMUONSimData.h"
Int_t TrackCheck( Bool_t *compTrack);
-void MUONRecoCheck (Int_t nEvent = 1, char * filename="galice.root"){
+void MUONRecoCheck (Int_t nEvent = 1, char* geoFilename = "geometry.root",
+ char * filenameSim="galice_sim.root", char * filename="galice.root"){
// Utility macro to check the muon reconstruction. Reconstructed tracks are compared
// to reference tracks. The reference tracks are built from AliTrackReference for the
TH1F *hResMomVertex = new TH1F("hMomVertex"," delta P vertex (GeV/c)",100,-10.,10);
TH1F *hResMomFirstHit = new TH1F("hMomFirstHit"," delta P first hit (GeV/c)",100,-10.,10);
-
+ // Import TGeo geometry (needed by AliMUONTrackExtrap::ExtrapToVertex)
+ if (!gGeoManager) {
+ TGeoManager::Import(geoFilename);
+ if (!gGeoManager) {
+ Error("MUONmass_ESD", "getting geometry from file %s failed", geoFilename);
+ return;
+ }
+ }
- AliMUONRecoCheck rc(filename);
- AliRunLoader *runLoader = rc.GetRunLoader();
-
+ // set mag field
+ // waiting for mag field in CDB
+ printf("Loading field map...\n");
+ AliMagFMaps* field = new AliMagFMaps("Maps","Maps", 1, 1., 10., AliMagFMaps::k5kG);
+ AliTracker::SetFieldMap(field, kFALSE);
+ // set the magnetic field for track extrapolations
+ AliMUONTrackExtrap::SetField(AliTracker::GetFieldMap());
+
+ AliRunLoader* runLoaderSim = AliRunLoader::Open(filenameSim, "MUONFolderSim", "read");
+ AliRunLoader* runLoader = AliRunLoader::Open(filename, "MUONFolder", "read");
+ AliLoader * MUONLoader = runLoader->GetLoader("MUONLoader");
+ AliLoader * MUONLoaderSim = runLoaderSim->GetLoader("MUONLoader");
+ AliMUONRecData * MUONData = new AliMUONRecData(MUONLoader,"MUON","MUON");
+ AliMUONSimData * MUONDataSim = new AliMUONSimData(MUONLoaderSim,"MUON","MUON");
+
+ runLoaderSim->LoadKinematics("READ");
+ runLoaderSim->LoadTrackRefs("READ");
+ MUONLoader->LoadTracks("READ");
+
+ AliMUONRecoCheck rc(runLoader, MUONData, runLoaderSim, MUONDataSim);
Int_t nevents = runLoader->GetNumberOfEvents();
for (ievent=0; ievent<nEvent; ievent++) {
if (!(ievent%10)) printf(" **** event # %d \n",ievent);
+ runLoaderSim->GetEvent(ievent);
runLoader->GetEvent(ievent);
+
rc.ResetTracks();
rc.MakeTrackRef(); // make reconstructible tracks
// rc.PrintEvent();
if (testTrack == 4) { // tracking requirements verified, track is found
nReconstructibleTracksCheck++;
hNHitComp->Fill(nHitOK);
- particle = runLoader->GetHeader()->Stack()->Particle(trackID);
+ particle = runLoaderSim->GetHeader()->Stack()->Particle(trackID);
// printf(" trackID: %d , PDG code: %d \n",trackID,particle->GetPdgCode());
trackParam = trackRef->GetTrackParamAtVertex();
x1 = trackParam->GetNonBendingCoor();
p1 = trackParam->P();
// printf(" Ref. track at vertex: x,y,z: %f %f %f px,py,pz,p: %f %f %f %f \n",x1,y1,z1,pX1,pY1,pZ1,p1);
-
- trackParam = ((AliMUONTrack *)trackRecoArray->At(indexOK))->GetTrackParamAtVertex();
+ trackReco = (AliMUONTrack *)trackRecoArray->At(indexOK);
+ trackParam = new AliMUONTrackParam(*((AliMUONTrackParam*)(trackReco->GetTrackParamAtHit()->First())));
+ AliMUONTrackExtrap::ExtrapToVertex(trackParam,x1,y1,z1);
x2 = trackParam->GetNonBendingCoor();
y2 = trackParam->GetBendingCoor();
z2 = trackParam->GetZ();
pY2 = trackParam->Py();
pZ2 = trackParam->Pz();
p2 = trackParam->P();
+ delete trackParam;
// printf(" Reconst. track at vertex: x,y,z: %f %f %f px,py,pz: %f %f %f %f \n",x2,y2,z2,pX2,pY2,pZ2,p2);
hResMomVertex->Fill(p2-p1);
}
} // end loop track ref.
-
+
} // end loop on event
+ MUONLoader->UnloadTracks();
+ runLoaderSim->UnloadKinematics();
+ runLoader->UnloadTrackRefs();
+ delete runLoader;
+ delete runLoaderSim;
+ delete field;
+ delete MUONData;
+ delete MUONDataSim;
+
printf(" nb of reconstructible tracks: %d \n", nReconstructibleTracks);
printf(" nb of reconstructed tracks: %d \n", nReconstructedTracks);
printf(" nb of reconstructible tracks which are reconstructed: %d \n", nReconstructibleTracksCheck);