SND@LHC Software
Loading...
Searching...
No Matches
main.cc File Reference
#include <ConstField.h>
#include <Exception.h>
#include <FieldManager.h>
#include <KalmanFitterRefTrack.h>
#include <StateOnPlane.h>
#include <Track.h>
#include <TrackPoint.h>
#include <MaterialEffects.h>
#include <RKTrackRep.h>
#include <TGeoMaterialInterface.h>
#include <EventDisplay.h>
#include <HelixTrackModel.h>
#include <MeasurementCreator.h>
#include <TDatabasePDG.h>
#include <TEveManager.h>
#include <TGeoManager.h>
#include <TRandom.h>
#include <TVector3.h>
#include <vector>
#include <TMath.h>
#include <TFile.h>
#include <TTree.h>
Include dependency graph for main.cc:

Go to the source code of this file.

Macros

#define FILENAME   "/tmp/streamerTest.root"
 

Functions

bool emptyTrackTest ()
 
int main ()
 

Macro Definition Documentation

◆ FILENAME

#define FILENAME   "/tmp/streamerTest.root"

Definition at line 35 of file main.cc.

Function Documentation

◆ emptyTrackTest()

bool emptyTrackTest ( )

Definition at line 38 of file main.cc.

39{
40 TFile *f = TFile::Open(FILENAME, "RECREATE");
41 f->cd();
43 if (!t->checkConsistency())
44 return false;
45 t->Write("direct");
46 f->Close();
47 delete t;
48 delete f;
49
50 f = TFile::Open(FILENAME, "READ");
51 t = (genfit::Track*)f->Get("direct");
52 bool result = t->checkConsistency();
53 delete t;
54 delete f;
55 return result;
56}
Collection of TrackPoint objects, AbsTrackRep objects and FitStatus objects.
Definition Track.h:71
#define FILENAME
Definition main.cc:35

◆ main()

int main ( )

Definition at line 59 of file main.cc.

59 {
60 if (!emptyTrackTest()) {
61 std::cout << "emptyTrackTest failed." << std::endl;
62 return 1;
63 }
64
65
66 // prepare output tree for Tracks
67 // std::unique_ptr<genfit::Track> fitTrack(new genfit::Track());
69 TVectorD stateFinal;
70 TMatrixDSym covFinal;
71 genfit::DetPlane planeFinal;
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 // init MeasurementCreator
88 genfit::MeasurementCreator measurementCreator;
89
90
91 // init geometry and mag. field
92 new TGeoManager("Geometry", "Geane geometry");
93 TGeoManager::Import("genfitGeom.root");
94 genfit::FieldManager::getInstance()->init(new genfit::ConstField(0.,0., 15.)); // 15 kGauss
96
97
98 // init fitter
100
101 // main loop
102 for (unsigned int iEvent=0; iEvent<100; ++iEvent){
103
104 // true start values
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 // helix track model
113 const int pdg = 13; // particle pdg code
114 const double charge = TDatabasePDG::Instance()->GetParticle(pdg)->Charge()/(3.);
115 genfit::HelixTrackModel* helix = new genfit::HelixTrackModel(pos, mom, charge);
116 measurementCreator.setTrackModel(helix);
117
118
119 unsigned int nMeasurements = gRandom->Uniform(5, 15);
120
121
122 // smeared start values
123 const bool smearPosMom = true; // init the Reps with smeared pos and mom
124 const double posSmear = 0.1; // cm
125 const double momSmear = 3. /180.*TMath::Pi(); // rad
126 const double momMagSmear = 0.1; // relative
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 // approximate covariance
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 // trackrep
150
151 // smeared start state
152 genfit::MeasuredStateOnPlane stateSmeared(rep);
153 rep->setPosMomCov(stateSmeared, posM, momM, covM);
154
155
156 // create track
157 TVectorD seedState(6);
158 TMatrixDSym seedCov(6);
159 rep->get6DStateCov(stateSmeared, seedState, seedCov);
160 fitTrack = new genfit::Track(rep, seedState, seedCov);
161
162
163 // create random measurement types
164 std::vector<genfit::eMeasurementType> measurementTypes;
165 for (unsigned int i = 0; i < nMeasurements; ++i)
166 measurementTypes.push_back(genfit::eMeasurementType(gRandom->Uniform(8)));
167
168
169 // create smeared measurements and add to track
170 try{
171 for (unsigned int i=0; i<measurementTypes.size(); ++i){
172 std::vector<genfit::AbsMeasurement*> measurements = measurementCreator.create(measurementTypes[i], i*5.);
173 genfit::TrackPoint* tp = new genfit::TrackPoint(measurements, fitTrack);
174 // test scatterers
175 genfit::ThinScatterer* sc = new genfit::ThinScatterer(genfit::SharedPlanePtr(new genfit::DetPlane(TVector3(1,1,1), TVector3(1,1,1))),
176 genfit::MaterialProperties(1,2,3,4,5));
177 tp->setScatterer(sc);
178
179 fitTrack->insertPoint(tp);
180 }
181 }
182 catch(genfit::Exception& e){
183 std::cerr<<"Exception, next track"<<std::endl;
184 std::cerr << e.what();
185 delete fitTrack;
186 fitTrack = 0;
187 continue;
188 }
189
190 //check
191 assert(fitTrack->checkConsistency());
192
193 // do the fit
194 fitter->processTrack(fitTrack);
195
196 //check
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 //fitTrack->Print();
209
210 delete fitTrack;
211 fitTrack = 0;
212
213 }// end loop over events
214
215 delete fitter;
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);
229 genfit::DetPlane* plane = 0;
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 //fitTrack->Print();
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 // track ok
245 }
246 else {
247 std::cout << "stored track not equal" << std::endl;
248 pState->Print();
249 fitTrack->getFittedState().getState().Print();
250 pMatrix->Print();
251 fitTrack->getFittedState().getCov().Print();
252 plane->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;
259 delete fitTrack;
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.
Definition AbsTrackRep.h:66
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.
Constant Magnetic field.
Definition ConstField.h:37
Detector plane.
Definition DetPlane.h:61
void Print(const Option_t *="") const
Definition DetPlane.cc:220
Exception class for error handling in GENFIT (provides storage for diagnostic information)
Definition Exception.h:48
virtual const char * what() const
Standard error message handling for exceptions. use like "std::cerr << e.what();".
Definition Exception.cc:51
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)
Definition RKTrackRep.h:70
AbsMaterialInterface implementation for use with ROOT's TGeoManager.
Thin or thick scatterer.
Object containing AbsMeasurement and AbsFitterInfo objects.
Definition TrackPoint.h:50
int i
Definition ShipAna.py:86
boost::shared_ptr< genfit::DetPlane > SharedPlanePtr
Shared Pointer to a DetPlane.
bool emptyTrackTest()
Definition main.cc:38