]> git.uio.no Git - u/mrichter/AliRoot.git/blame - MUON/MUONRecoCheck.C
Adding links to README pages
[u/mrichter/AliRoot.git] / MUON / MUONRecoCheck.C
CommitLineData
b8dc484b 1/**************************************************************************
48217459 2* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3* *
4* Author: The ALICE Off-line Project. *
5* Contributors are mentioned in the code where appropriate. *
6* *
7* Permission to use, copy, modify and distribute this software and its *
8* documentation strictly for non-commercial purposes is hereby granted *
9* without fee, provided that the above copyright notice appears in all *
10* copies and that both the copyright notice and this permission notice *
11* appear in the supporting documentation. The authors make no claims *
12* about the suitability of this software for any purpose. It is *
13* provided "as is" without express or implied warranty. *
14**************************************************************************/
b8dc484b 15
16// ROOT includes
17#include "TClonesArray.h"
18#include "TH1.h"
b8dc484b 19#include "TFile.h"
a0bfad0e 20#include <TGeoManager.h>
b8dc484b 21
22// STEER includes
23#include "AliRun.h"
24#include "AliHeader.h"
25#include "AliMC.h"
26#include "AliStack.h"
45a05f07 27#include "AliMagFMaps.h"
6b092dfc 28#include "AliTracker.h"
b8dc484b 29
30// MUON includes
b8dc484b 31#include "AliMUONConstants.h"
32#include "AliMUONTrack.h"
33#include "AliMUONRecoCheck.h"
34#include "AliMUONTrackParam.h"
8cde4af5 35#include "AliMUONTrackExtrap.h"
48217459 36
37#include "AliMUONVTrackStore.h"
b8dc484b 38
39Int_t TrackCheck( Bool_t *compTrack);
40
6b092dfc 41void MUONRecoCheck (Int_t nEvent = 1, char* geoFilename = "geometry.root",
42 char * filenameSim="galice_sim.root", char * filename="galice.root"){
48217459 43
b8dc484b 44 // Utility macro to check the muon reconstruction. Reconstructed tracks are compared
45 // to reference tracks. The reference tracks are built from AliTrackReference for the
46 // hit in chamber (0..9) and from kinematics (TreeK) for the vertex parameters.
47
b8dc484b 48 Bool_t *compTrack;
49 Bool_t compTrackOK[10];
50 Int_t nHitOK = 0;
51 Int_t testTrack = 0;
52 Int_t iTrack = 0;
48217459 53 AliMUONTrack* trackOK(0x0);
b8dc484b 54 Int_t trackID = 0;
55 Double_t sigma2Cut = 16; // 4 sigmas cut, sigma2Cut = 4*4
56 AliMUONTrackParam *trackParam;
57 TClonesArray *trackParamAtHit;
58 Double_t x1,y1,z1,pX1,pY1,pZ1,p1;
59 Double_t x2,y2,z2,pX2,pY2,pZ2,p2;
48217459 60
b8dc484b 61 // File for histograms and histogram booking
62 TFile *histoFile = new TFile("MUONRecoCheck.root", "RECREATE");
48217459 63
b8dc484b 64 TH1F *hReconstructible = new TH1F("hReconstructible"," Nb of reconstructible tracks ",15,-0.5,14.5);
65 TH1F *hReco = new TH1F("hReco"," Nb of reconstructed tracks / evt",15,-0.5,14.5);
66 TH1F *hNHitComp = new TH1F("hNHitComp"," Nb of compatible hits / track ",15,-0.5,14.5);
67 TH1F *hTestTrack = new TH1F("hTestTrack"," Reconstruction requirement / track",15,-0.5,14.5);
68 TH1F *hTrackRefID = new TH1F("hTrackRefID"," track reference ID ",100,-0.5,99.5);
69
70 TH1F *hResMomVertex = new TH1F("hMomVertex"," delta P vertex (GeV/c)",100,-10.,10);
71 TH1F *hResMomFirstHit = new TH1F("hMomFirstHit"," delta P first hit (GeV/c)",100,-10.,10);
48217459 72
a0bfad0e 73 // Import TGeo geometry (needed by AliMUONTrackExtrap::ExtrapToVertex)
74 if (!gGeoManager) {
75 TGeoManager::Import(geoFilename);
76 if (!gGeoManager) {
77 Error("MUONmass_ESD", "getting geometry from file %s failed", geoFilename);
78 return;
79 }
80 }
81
45a05f07 82 // set mag field
83 // waiting for mag field in CDB
84 printf("Loading field map...\n");
b97b210c 85 AliMagFMaps* field = new AliMagFMaps("Maps","Maps", 1, 1., 10., AliMagFMaps::k5kG);
45a05f07 86 AliTracker::SetFieldMap(field, kFALSE);
a0bfad0e 87 // set the magnetic field for track extrapolations
88 AliMUONTrackExtrap::SetField(AliTracker::GetFieldMap());
b8dc484b 89
48217459 90 AliMUONRecoCheck rc(filename,filenameSim);
91
92 Int_t nevents = rc.NumberOfEvents();
b8dc484b 93
94 if (nevents < nEvent) nEvent = nevents;
95
96 Int_t ievent;
97 Int_t nReconstructibleTracks = 0;
98 Int_t nReconstructedTracks = 0;
99 Int_t nReconstructibleTracksCheck = 0;
48217459 100
101 for (ievent=0; ievent<nEvent; ievent++)
102 {
b8dc484b 103 if (!(ievent%10)) printf(" **** event # %d \n",ievent);
b8dc484b 104
48217459 105 AliMUONVTrackStore* trackStore = rc.ReconstructedTracks(ievent);
106 AliMUONVTrackStore* trackRefStore = rc.ReconstructibleTracks(ievent);
b8dc484b 107
48217459 108 hReconstructible->Fill(trackRefStore->GetSize());
109 hReco->Fill(trackStore->GetSize());
110
111 nReconstructibleTracks += trackRefStore->GetSize();
112 nReconstructedTracks += trackStore->GetSize();
113
114 TIter next(trackRefStore->CreateIterator());
115 AliMUONTrack* trackRef;
116
117 while ( ( trackRef = static_cast<AliMUONTrack*>(next()) ) )
118 {
b8dc484b 119 testTrack = 0;
48217459 120 trackOK = 0x0;
b8dc484b 121 for (Int_t ch = 0; ch < AliMUONConstants::NTrackingCh(); ch++)
48217459 122 {
123 compTrackOK[ch] = kFALSE;
b8dc484b 124 }
48217459 125
126 TIter next2(trackStore->CreateIterator());
127 AliMUONTrack* trackReco;
128
129 while ( ( trackReco = static_cast<AliMUONTrack*>(next2()) ) )
130 {
131 // check if trackRef is compatible with trackReco
132 compTrack = trackRef->CompatibleTrack(trackReco,sigma2Cut);
133
134 iTrack = TrackCheck(compTrack);
135
136 if (iTrack > testTrack)
137 {
138 nHitOK = 0;
139 for (Int_t ch = 0; ch < AliMUONConstants::NTrackingCh(); ch++)
140 {
141 if (compTrack[ch]) nHitOK++;
142 compTrackOK[ch] = compTrack[ch];
143 }
144 testTrack = iTrack;
145 trackOK = trackReco;
146 }
147 }
148
b8dc484b 149 hTestTrack->Fill(testTrack);
150 trackID = trackRef->GetTrackID();
151 hTrackRefID->Fill(trackID);
48217459 152
b8dc484b 153 if (testTrack == 4) { // tracking requirements verified, track is found
48217459 154 nReconstructibleTracksCheck++;
155 hNHitComp->Fill(nHitOK);
156 trackParam = trackRef->GetTrackParamAtVertex();
157 x1 = trackParam->GetNonBendingCoor();
158 y1 = trackParam->GetBendingCoor();
159 z1 = trackParam->GetZ();
160 pX1 = trackParam->Px();
161 pY1 = trackParam->Py();
162 pZ1 = trackParam->Pz();
163 p1 = trackParam->P();
164
165 // 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);
166 trackReco = trackOK;
167 trackParam = new AliMUONTrackParam(*((AliMUONTrackParam*)(trackReco->GetTrackParamAtHit()->First())));
168 AliMUONTrackExtrap::ExtrapToVertex(trackParam,x1,y1,z1);
169 x2 = trackParam->GetNonBendingCoor();
170 y2 = trackParam->GetBendingCoor();
171 z2 = trackParam->GetZ();
172 pX2 = trackParam->Px();
173 pY2 = trackParam->Py();
174 pZ2 = trackParam->Pz();
175 p2 = trackParam->P();
176 delete trackParam;
177 // 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);
178
179 hResMomVertex->Fill(p2-p1);
180
181 trackParamAtHit = trackRef->GetTrackParamAtHit();
182 trackParam = (AliMUONTrackParam*) trackParamAtHit->First();
183 x1 = trackParam->GetNonBendingCoor();
184 y1 = trackParam->GetBendingCoor();
185 z1 = trackParam->GetZ();
186 pX1 = trackParam->Px();
187 pY1 = trackParam->Py();
188 pZ1 = trackParam->Pz();
189 p1 = trackParam->P();
190 // printf(" Ref. track at 1st hit: x,y,z: %f %f %f px,py,pz: %f %f %f \n",x1,y1,z1,pX1,pY1,pZ1);
191 trackParamAtHit = trackOK->GetTrackParamAtHit();
192 trackParam = (AliMUONTrackParam*) trackParamAtHit->First();
193 x2 = trackParam->GetNonBendingCoor();
194 y2 = trackParam->GetBendingCoor();
195 z2 = trackParam->GetZ();
196 pX2 = trackParam->Px();
197 pY2 = trackParam->Py();
198 pZ2 = trackParam->Pz();
199 p2 = trackParam->P();
200 // printf(" Reconst. track at 1st hit: x,y,z: %f %f %f px,py,pz: %f %f %f \n",x2,y2,z2,pX2,pY2,pZ2);
201
202 hResMomFirstHit->Fill(p2-p1);
b8dc484b 203
204 }
205 } // end loop track ref.
b8dc484b 206
48217459 207 } // end loop on event
208
a0bfad0e 209 delete field;
48217459 210
b8dc484b 211 printf(" nb of reconstructible tracks: %d \n", nReconstructibleTracks);
212 printf(" nb of reconstructed tracks: %d \n", nReconstructedTracks);
213 printf(" nb of reconstructible tracks which are reconstructed: %d \n", nReconstructibleTracksCheck);
214
215 histoFile->Write();
216 histoFile->Close();
217}
218
219
220Int_t TrackCheck( Bool_t *compTrack)
221{
222 // Apply reconstruction requirements
223 // Return number of validated conditions
224 // If all the tests are verified then TrackCheck = 4 (good track)
225 Int_t iTrack = 0;
226 Int_t hitsInLastStations = 0;
227
228 // apply reconstruction requirements
229 if (compTrack[0] || compTrack[1]) iTrack++; // at least one hit in st. 0
230 if (compTrack[2] || compTrack[3]) iTrack++; // at least one hit in st. 1
231 if (compTrack[4] || compTrack[5]) iTrack++; // at least one hit in st. 2
232 for (Int_t ch = 6; ch < AliMUONConstants::NTrackingCh(); ch++) {
233 if (compTrack[ch]) hitsInLastStations++;
234 }
235 if (hitsInLastStations > 2) iTrack++; // at least 3 hits in st. 3 & 4
236
237 return iTrack;
48217459 238
b8dc484b 239}
240
241
242
243
244
245
246