59 {
61 std::cout << "emptyTrackTest failed." << std::endl;
62 return 1;
63 }
64
65
66
67
69 TVectorD stateFinal;
70 TMatrixDSym covFinal;
72
73 TFile* fOut =
new TFile(
FILENAME,
"RECREATE");
74 fOut->cd();
75 TTree* tResults = new TTree("tResults", "results from track fit");
76 tResults->Branch("gfTrack", "genfit::Track", &fitTrack, 32000, -1);
77 tResults->Branch("stateFinal", &stateFinal);
78 tResults->Branch("covFinal", &covFinal, 32000, -1);
79 tResults->Branch("planeFinal", &planeFinal, 32000, -1);
80
81
82
83
84
85 gRandom->SetSeed(14);
86
87
89
90
91
92 new TGeoManager("Geometry", "Geane geometry");
93 TGeoManager::Import("genfitGeom.root");
96
97
98
100
101
103
104
105 TVector3
pos(0, 0, 0);
106 TVector3
mom(1.,0,0);
107 mom.SetPhi(gRandom->Uniform(0.,2*TMath::Pi()));
108 mom.SetTheta(gRandom->Uniform(0.4*TMath::Pi(),0.6*TMath::Pi()));
109 mom.SetMag(gRandom->Uniform(0.2, 1.));
110
111
112
114 const double charge = TDatabasePDG::Instance()->GetParticle(pdg)->Charge()/(3.);
117
118
119 unsigned int nMeasurements = gRandom->Uniform(5, 15);
120
121
122
123 const bool smearPosMom = true;
124 const double posSmear = 0.1;
125 const double momSmear = 3. /180.*TMath::Pi();
126 const double momMagSmear = 0.1;
127
128 TVector3 posM(pos);
129 TVector3 momM(mom);
130 if (smearPosMom) {
131 posM.SetX(gRandom->Gaus(posM.X(),posSmear));
132 posM.SetY(gRandom->Gaus(posM.Y(),posSmear));
133 posM.SetZ(gRandom->Gaus(posM.Z(),posSmear));
134
135 momM.SetPhi(gRandom->Gaus(
mom.Phi(),momSmear));
136 momM.SetTheta(gRandom->Gaus(
mom.Theta(),momSmear));
137 momM.SetMag(gRandom->Gaus(
mom.Mag(), momMagSmear*
mom.Mag()));
138 }
139
140 TMatrixDSym covM(6);
141 double resolution = 0.01;
142 for (
int i = 0;
i < 3; ++
i)
143 covM(i,i) = resolution*resolution;
144 for (
int i = 3;
i < 6; ++
i)
145 covM(i,i) = pow(resolution / nMeasurements / sqrt(3), 2);
146
147
148
150
151
154
155
156
157 TVectorD seedState(6);
158 TMatrixDSym seedCov(6);
161
162
163
164 std::vector<genfit::eMeasurementType> measurementTypes;
165 for (
unsigned int i = 0;
i < nMeasurements; ++
i)
167
168
169
170 try{
171 for (
unsigned int i=0;
i<measurementTypes.size(); ++
i){
172 std::vector<genfit::AbsMeasurement*> measurements = measurementCreator.
create(measurementTypes[i], i*5.);
174
177 tp->setScatterer(sc);
178
180 }
181 }
183 std::cerr<<"Exception, next track"<<std::endl;
184 std::cerr << e.
what();
187 continue;
188 }
189
190
191 assert(
fitTrack->checkConsistency());
192
193
194 fitter->processTrack(fitTrack);
195
196
197 assert(
fitTrack->checkConsistency());
198
199
200 stateFinal.ResizeTo(
fitTrack->getFittedState().getState());
201 stateFinal =
fitTrack->getFittedState().getState();
202 covFinal.ResizeTo(
fitTrack->getFittedState().getCov());
203 covFinal =
fitTrack->getFittedState().getCov();
204 planeFinal = *(
fitTrack->getFittedState().getPlane());
205
206 tResults->Fill();
207
208
209
212
213 }
214
216
217
218
219
220 fOut->Write();
221 delete fOut;
222
223 fOut = TFile::Open(
FILENAME,
"READ");
224 fOut->GetObject("tResults", tResults);
225 TVectorD* pState = 0;
226 tResults->SetBranchAddress("stateFinal", &pState);
227 TMatrixDSym* pMatrix = 0;
228 tResults->SetBranchAddress("covFinal", &pMatrix);
230 tResults->SetBranchAddress("planeFinal", &plane);
231 tResults->SetBranchAddress("gfTrack", &fitTrack);
232
233 for (Long_t nEntry = 0; nEntry < tResults->GetEntries(); ++nEntry) {
234 tResults->GetEntry(nEntry);
235
236 if (!
fitTrack->checkConsistency()) {
237 std::cout << "stored track inconsistent" << std::endl;
238 return 1;
239 }
240
241 if (*pState ==
fitTrack->getFittedState().getState() &&
242 *pMatrix ==
fitTrack->getFittedState().getCov() &&
243 *plane == *(
fitTrack->getFittedState().getPlane())) {
244
245 }
246 else {
247 std::cout << "stored track not equal" << std::endl;
249 fitTrack->getFittedState().getState().Print();
250 pMatrix->Print();
251 fitTrack->getFittedState().getCov().Print();
253 fitTrack->getFittedState().getPlane()->Print();
254
255 return 1;
256 }
257 }
258 std::cout << "stored tracks are identical to fitted tracks, as far as tested." << std::endl;
260 std::cout << "deleteing didn't segfault" << std::endl;
261
262 return 0;
263}
Abstract base class for Kalman fitter and derived fitting algorithms.
Abstract base class for a track representation.
virtual void setPosMomCov(MeasuredStateOnPlane &state, const TVector3 &pos, const TVector3 &mom, const TMatrixDSym &cov6x6) const =0
Set position, momentum and covariance of state.
virtual void get6DStateCov(const MeasuredStateOnPlane &state, TVectorD &stateVec, TMatrixDSym &cov) const
Translates MeasuredStateOnPlane into 6D state vector (x, y, z, p_x, p_y, p_z) and 6x6 covariance.
void Print(const Option_t *="") const
Exception class for error handling in GENFIT (provides storage for diagnostic information)
virtual const char * what() const
Standard error message handling for exceptions. use like "std::cerr << e.what();".
void init(AbsBField *b)
set the magnetic field here. Magnetic field classes must be derived from AbsBField.
static FieldManager * getInstance()
Get singleton instance.
Helix track model for testing purposes.
Kalman filter implementation with linearization around a reference track.
static MaterialEffects * getInstance()
void init(AbsMaterialInterface *matIfc)
set the material interface here. Material interface classes must be derived from AbsMaterialInterface...
Material properties needed e.g. for material effects calculation.
StateOnPlane with additional covariance matrix.
Create different measurement types along a HelixTrackModel for testing purposes.
std::vector< genfit::AbsMeasurement * > create(eMeasurementType, double tracklength, bool &outlier, int &lr)
void setTrackModel(const HelixTrackModel *model)
Takes ownership!
AbsTrackRep with 5D track parameterization in plane coordinates: (q/p, u', v', u, v)
AbsMaterialInterface implementation for use with ROOT's TGeoManager.
Object containing AbsMeasurement and AbsFitterInfo objects.
fitTrack(hitlist, Pstart=3.)
boost::shared_ptr< genfit::DetPlane > SharedPlanePtr
Shared Pointer to a DetPlane.