37 {
38
39 gRandom->SetSeed(14);
40
41
43
44
45
46 new TGeoManager("Geometry", "Geane geometry");
47 TGeoManager::Import("genfitGeom.root");
50
51
52
54
55
56
58
59
61 vertexFactory.setMethod("kalman-smoothing:1");
62
63
64
65
66 TFile* trackFile = new TFile("tracks.root", "RECREATE");
67 trackFile->cd();
68 TTree*
tree =
new TTree(
"tree",
"fitted tracks");
69 TClonesArray trackArray("genfit::Track");
70 tree->Branch(
"trackBranch", &trackArray, 32000, -1);
71
72 TClonesArray vertexArray("genfit::GFRaveVertex");
73 tree->Branch(
"vertexBranch", &vertexArray, 32000, -1);
74
75 std::vector<genfit::Track*> tracks;
76 std::vector<genfit::GFRaveVertex*> vertices;
77
78
80
81
82 trackArray.Delete();
83 vertexArray.Delete();
84 tracks.clear();
85 vertices.clear();
86
87
88 unsigned int nTracks = gRandom->Uniform(2, 10);
89
90 for (unsigned int iTrack=0; iTrack<nTracks; ++iTrack){
91
92
93 TVector3
pos(0, 0, 0);
95 mom.SetPhi(gRandom->Uniform(0.,2*TMath::Pi()));
96 mom.SetTheta(gRandom->Uniform(0.4*TMath::Pi(),0.6*TMath::Pi()));
97 mom.SetMag(gRandom->Uniform(0.2, 1.));
98
99
100
102 const double charge = TDatabasePDG::Instance()->GetParticle(pdg)->Charge()/(3.);
105
106
107 unsigned int nMeasurements = gRandom->Uniform(5, 15);
108
109
110
111 const bool smearPosMom = true;
112 const double posSmear = 0.1;
113 const double momSmear = 3. /180.*TMath::Pi();
114 const double momMagSmear = 0.1;
115
116 TVector3 posM(pos);
117 TVector3 momM(mom);
118 if (smearPosMom) {
119 posM.SetX(gRandom->Gaus(posM.X(),posSmear));
120 posM.SetY(gRandom->Gaus(posM.Y(),posSmear));
121 posM.SetZ(gRandom->Gaus(posM.Z(),posSmear));
122
123 momM.SetPhi(gRandom->Gaus(
mom.Phi(),momSmear));
124 momM.SetTheta(gRandom->Gaus(
mom.Theta(),momSmear));
125 momM.SetMag(gRandom->Gaus(
mom.Mag(), momMagSmear*
mom.Mag()));
126 }
127
128 TMatrixDSym covM(6);
129 double resolution = 0.01;
130 for (
int i = 0;
i < 3; ++
i)
131 covM(i,i) = resolution*resolution;
132 for (
int i = 3;
i < 6; ++
i)
133 covM(i,i) = pow(resolution / nMeasurements / sqrt(3), 2);
134
135
136
138
139
142
143
144
145 TVectorD seedState(6);
146 TMatrixDSym seedCov(6);
148
149 new(trackArray[iTrack])
genfit::Track(rep, seedState, seedCov);
151 tracks.push_back(trackPtr);
152
153
154 std::vector<genfit::eMeasurementType> measurementTypes;
155 for (
unsigned int i = 0;
i < nMeasurements; ++
i)
157
158
159
160 try{
161 for (
unsigned int i=1;
i<measurementTypes.size(); ++
i){
162 std::vector<genfit::AbsMeasurement*> measurements = measurementCreator.
create(measurementTypes[i], i*5.);
164 }
165 }
167 std::cerr<<"Exception, next track"<<std::endl;
168 std::cerr << e.
what();
169 continue;
170 }
171
172
173 assert(trackPtr->checkConsistency());
174
175
176 try{
177 fitter->processTrack(trackPtr);
178 }
180 std::cerr << e.
what();
181 std::cerr << "Exception, next track" << std::endl;
182 continue;
183 }
184
185
186 assert(trackPtr->checkConsistency());
187
188 }
189
190
191
192
193 vertexFactory.findVertices(&vertices, tracks);
194
195 for (
unsigned int i=0;
i<vertices.size(); ++
i) {
197
201 }
202 }
203
204
205 for (
unsigned int i=0;
i<tracks.size(); ++
i) {
207 std::cout << "track uniqueID: " << trk->GetUniqueID() << "\n";
208 }
209
210
211
212 std::cout << "trackArray nr of entries: " << trackArray.GetEntries() << "\n";
214
215
216 if (iEvent < 1000) {
217
219 }
220
221 }
222
224
225
226 trackFile->Write();
227 trackFile->Close();
228
229
230
231
232
233
234}
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.
Event display designed to run with Genfit.
void addEvent(std::vector< genfit::Track * > &tracks)
Add new event.
static EventDisplay * getInstance()
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.
UInt_t GetUniqueID() const
Vertex factory for producing GFRaveVertex objects from Track objects.
unsigned int getNTracks() const
Number of tracks the vertex is made of.
GFRaveTrackParameters * getParameters(unsigned int i) const
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...
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.
Collection of TrackPoint objects, AbsTrackRep objects and FitStatus objects.