@@ -168,8 +168,7 @@ DisplacedVertexProducer::DisplacedVertexProducer(const edm::ParameterSet& iConfi
168168 iConfig.getParameter<edm::InputTag>(" l1TracksInputTag" ))),
169169 trackGTTToken_(consumes<std::vector<TTTrack<Ref_Phase2TrackerDigi_>>>(
170170 iConfig.getParameter<edm::InputTag>(" l1TracksGTTInputTag" ))),
171- outputTrackCollectionName_(iConfig.getParameter<std::string>(" l1TrackVertexCollectionName" )),
172- outputTrackEmulationCollectionName_(iConfig.getParameter<std::string>(" l1TrackEmulationVertexCollectionName" )),
171+ outputVertexCollectionName_(iConfig.getParameter<std::string>(" l1TrackVertexCollectionName" )),
173172 model_(iConfig.getParameter<std::string>(" model" )),
174173 runEmulation_(iConfig.getParameter<bool >(" runEmulation" )),
175174 cutSet_(iConfig.getParameter<edm::ParameterSet>(" cutSet" )),
@@ -188,8 +187,7 @@ DisplacedVertexProducer::DisplacedVertexProducer(const edm::ParameterSet& iConfi
188187 RTMin_(cutSet_.getParameter<double >(" RTMin" )),
189188 RTMax_(cutSet_.getParameter<double >(" RTMax" )) {
190189 // --- Define EDM output to be written to file (if required)
191- produces<l1t::DisplacedTrackVertexCollection>(outputTrackCollectionName_);
192- if (runEmulation_) produces<l1t::DisplacedTrackVertexCollection>(outputTrackEmulationCollectionName_);
190+ produces<l1t::DisplacedTrackVertexCollection>(outputVertexCollectionName_);
193191}
194192
195193void DisplacedVertexProducer::produce (edm::StreamID, edm::Event& iEvent, const edm::EventSetup& iSetup) const {
@@ -202,85 +200,47 @@ void DisplacedVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const e
202200 std::vector<TTTrack<Ref_Phase2TrackerDigi_>>::const_iterator iterL1Track;
203201 int this_l1track = 0 ;
204202 std::vector<std::pair<Track_Parameters, edm::Ptr<TrackingParticle>>> selectedTracksWithTruth;
205- std::vector<std::pair<Track_Parameters, edm::Ptr<TrackingParticle>>> selectedTracksEmulationWithTruth;
206203
207- // Simulation track selection loop
204+ // track selection loop
208205 for (iterL1Track = TTTrackHandle->begin (); iterL1Track != TTTrackHandle->end (); iterL1Track++) {
209206 edm::Ptr<TTTrack<Ref_Phase2TrackerDigi_>> l1track_ptr (TTTrackHandle, this_l1track);
207+ edm::Ptr<TTTrack<Ref_Phase2TrackerDigi_>> gtttrack_ptr (TTTrackGTTHandle, this_l1track);
210208 this_l1track++;
211209
212- float pt = l1track_ptr->momentum ().perp ();
213- float eta = l1track_ptr->momentum ().eta ();
214- float phi = l1track_ptr->momentum ().phi ();
215- float z0 = l1track_ptr->z0 (); // cm
216- float x0 = l1track_ptr->POCA ().x ();
217- float y0 = l1track_ptr->POCA ().y ();
218- float d0 = -x0 * sin (phi) + y0 * cos (phi);
219- float rinv = l1track_ptr->rInv ();
220- float chi2rphi = l1track_ptr->chi2XYRed ();
221- float chi2rz = l1track_ptr->chi2ZRed ();
222- float bendchi2 = l1track_ptr->stubPtConsistency ();
223- float MVA1 = l1track_ptr->trkMVA1 ();
224-
225- std::vector<edm::Ref<edmNew::DetSetVector<TTStub<Ref_Phase2TrackerDigi_>>, TTStub<Ref_Phase2TrackerDigi_>>>
210+ float pt, eta, phi, z0, d0, rho, chi2rphi, chi2rz, bendchi2, MVA1;
211+ int nstub;
212+
213+ if (runEmulation_){
214+ pt = FloatPtFromBits (*gtttrack_ptr);
215+ eta = FloatEtaFromBits (*gtttrack_ptr);
216+ phi = FloatPhiFromBits (*gtttrack_ptr);
217+ z0 = gtttrack_ptr->getZ0 (); // cm
218+ d0 = gtttrack_ptr->getD0 ();
219+ int charge = ChargeFromBits (*gtttrack_ptr);
220+ rho = charge*convertPtToR (pt);
221+ chi2rphi = gtttrack_ptr->getChi2RPhi ();
222+ chi2rz = gtttrack_ptr->getChi2RZ ();
223+ bendchi2 = gtttrack_ptr->getBendChi2 ();
224+ MVA1 = gtttrack_ptr->getMVAQuality ();
225+ nstub = gtttrack_ptr->getNStubs ();
226+ }
227+ else {
228+ pt = l1track_ptr->momentum ().perp ();
229+ eta = l1track_ptr->momentum ().eta ();
230+ phi = l1track_ptr->momentum ().phi ();
231+ z0 = l1track_ptr->z0 (); // cm
232+ float x0 = l1track_ptr->POCA ().x ();
233+ float y0 = l1track_ptr->POCA ().y ();
234+ d0 = -x0 * sin (phi) + y0 * cos (phi);
235+ rho = 1 /l1track_ptr->rInv ();
236+ chi2rphi = l1track_ptr->chi2XYRed ();
237+ chi2rz = l1track_ptr->chi2ZRed ();
238+ bendchi2 = l1track_ptr->stubPtConsistency ();
239+ MVA1 = l1track_ptr->trkMVA1 ();
240+ std::vector<edm::Ref<edmNew::DetSetVector<TTStub<Ref_Phase2TrackerDigi_>>, TTStub<Ref_Phase2TrackerDigi_>>>
226241 stubRefs = l1track_ptr->getStubRefs ();
227- int nstub = (int )stubRefs.size ();
228-
229- if (chi2rz < chi2rzMax_ && MVA1 > promptMVAMin_ && pt > ptMin_ && fabs (eta) < etaMax_) {
230- if (fabs (d0) > dispD0Min_) {
231- if (MVA1 <= promptMVADispTrackMin_)
232- continue ;
233- }
234- if (fabs (eta) > overlapEtaMin_ && fabs (eta) < overlapEtaMax_) {
235- if (nstub <= overlapNStubsMin_)
236- continue ;
237- }
238- if (fabs (eta) > diskEtaMin_) {
239- if (fabs (d0) <= diskD0Min_)
240- continue ;
241- }
242- if (fabs (eta) <= diskEtaMin_) {
243- if (fabs (d0) <= barrelD0Min_)
244- continue ;
245- }
246-
247- Track_Parameters track = Track_Parameters (pt,
248- -d0,
249- z0,
250- eta,
251- phi,
252- (1 /rinv),
253- (this_l1track - 1 ),
254- nstub,
255- chi2rphi,
256- chi2rz,
257- bendchi2,
258- MVA1);
259-
260- edm::Ptr<TrackingParticle> my_tp = MCTruthTTTrackHandle->findTrackingParticlePtr (l1track_ptr);
261- selectedTracksWithTruth.push_back (std::make_pair (track, my_tp));
242+ nstub = (int )stubRefs.size ();
262243 }
263- }
264-
265- // Emulation track selection loop
266- this_l1track = 0 ;
267- for (iterL1Track = TTTrackHandle->begin (); iterL1Track != TTTrackHandle->end (); iterL1Track++) {
268- edm::Ptr<TTTrack<Ref_Phase2TrackerDigi_>> l1track_ptr (TTTrackGTTHandle, this_l1track);
269- edm::Ptr<TTTrack<Ref_Phase2TrackerDigi_>> l1track_ref (TTTrackHandle, this_l1track);
270- this_l1track++;
271-
272- float pt = FloatPtFromBits (*l1track_ptr);
273- float eta = FloatEtaFromBits (*l1track_ptr);
274- float phi = FloatPhiFromBits (*l1track_ptr);
275- float z0 = l1track_ptr->getZ0 (); // cm
276- float d0 = l1track_ptr->getD0 ();
277- int charge = ChargeFromBits (*l1track_ptr);
278- float rho = charge*convertPtToR (pt);
279- float chi2rphi = l1track_ptr->getChi2RPhi ();
280- float chi2rz = l1track_ptr->getChi2RZ ();
281- float bendchi2 = l1track_ptr->getBendChi2 ();
282- float MVA1 = l1track_ptr->getMVAQuality ();
283- int nstub = l1track_ptr->getNStubs ();
284244
285245 if (chi2rz < chi2rzMax_ && MVA1 > promptMVAMin_ && pt > ptMin_ && fabs (eta) < etaMax_) {
286246 if (fabs (d0) > dispD0Min_) {
@@ -313,12 +273,12 @@ void DisplacedVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const e
313273 bendchi2,
314274 MVA1);
315275
316- edm::Ptr<TrackingParticle> my_tp = MCTruthTTTrackHandle->findTrackingParticlePtr (l1track_ref );
317- selectedTracksEmulationWithTruth .push_back (std::make_pair (track, my_tp));
276+ edm::Ptr<TrackingParticle> my_tp = MCTruthTTTrackHandle->findTrackingParticlePtr (l1track_ptr );
277+ selectedTracksWithTruth .push_back (std::make_pair (track, my_tp));
318278 }
319279 }
320280
321- // Simulation vertex loop
281+ // vertex loop
322282 std::unique_ptr<l1t::DisplacedTrackVertexCollection> product (new std::vector<l1t::DisplacedTrackVertex>());
323283 for (int i = 0 ; i < int (selectedTracksWithTruth.size () - 1 ); i++) {
324284 for (int j = i + 1 ; j < int (selectedTracksWithTruth.size ()); j++) {
@@ -366,116 +326,66 @@ void DisplacedVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const e
366326 vertex.openingAngle ,
367327 vertex.p_mag ,
368328 isReal);
329+
330+ if (runEmulation_){
331+ std::vector<ap_fixed<13 ,8 ,AP_RND_CONV, AP_SAT>> Transformed_features = {selectedTracksWithTruth[i].first .pt *0.25 ,
332+ selectedTracksWithTruth[j].first .pt *0.25 ,
333+ selectedTracksWithTruth[i].first .eta ,
334+ selectedTracksWithTruth[j].first .eta ,
335+ selectedTracksWithTruth[i].first .phi ,
336+ selectedTracksWithTruth[j].first .phi ,
337+ selectedTracksWithTruth[i].first .d0 ,
338+ selectedTracksWithTruth[j].first .d0 ,
339+ selectedTracksWithTruth[i].first .z0 ,
340+ selectedTracksWithTruth[j].first .z0 ,
341+ selectedTracksWithTruth[i].first .chi2rz +0.07 ,
342+ selectedTracksWithTruth[j].first .chi2rz +0.07 ,
343+ selectedTracksWithTruth[i].first .bendchi2 +0.07 ,
344+ selectedTracksWithTruth[j].first .bendchi2 +0.07 ,
345+ selectedTracksWithTruth[i].first .MVA1 +0.07 ,
346+ selectedTracksWithTruth[j].first .MVA1 +0.07 ,
347+ vertex.d_T ,
348+ vertex.R_T ,
349+ vertex.cos_T ,
350+ vertex.delta_z *0.125 };
351+ conifer::BDT<ap_fixed<13 ,8 ,AP_RND_CONV, AP_SAT>, ap_fixed<13 ,8 ,AP_RND_CONV, AP_SAT>> bdt (this ->model_ );
352+ std::vector<ap_fixed<13 ,8 ,AP_RND_CONV, AP_SAT>> output = bdt.decision_function (Transformed_features);
353+ outputVertex.setScore (output.at (0 ).to_float ());
354+ }
355+ else {
356+ std::vector<float > Transformed_features = {float (selectedTracksWithTruth[i].first .pt *0.25 ),
357+ float (selectedTracksWithTruth[j].first .pt *0.25 ),
358+ selectedTracksWithTruth[i].first .eta ,
359+ selectedTracksWithTruth[j].first .eta ,
360+ selectedTracksWithTruth[i].first .phi ,
361+ selectedTracksWithTruth[j].first .phi ,
362+ selectedTracksWithTruth[i].first .d0 ,
363+ selectedTracksWithTruth[j].first .d0 ,
364+ selectedTracksWithTruth[i].first .z0 ,
365+ selectedTracksWithTruth[j].first .z0 ,
366+ float (selectedTracksWithTruth[i].first .chi2rz +0.07 ),
367+ float (selectedTracksWithTruth[j].first .chi2rz +0.07 ),
368+ float (selectedTracksWithTruth[i].first .bendchi2 +0.07 ),
369+ float (selectedTracksWithTruth[j].first .bendchi2 +0.07 ),
370+ float (selectedTracksWithTruth[i].first .MVA1 +0.07 ),
371+ float (selectedTracksWithTruth[j].first .MVA1 +0.07 ),
372+ vertex.d_T ,
373+ vertex.R_T ,
374+ vertex.cos_T ,
375+ float (vertex.delta_z *0.125 )};
376+ conifer::BDT<float ,float > bdt (this ->model_ );
377+ std::vector<float > output = bdt.decision_function (Transformed_features);
378+ outputVertex.setScore (output.at (0 ));
379+ }
380+
369381
370- std::vector<float > Transformed_features = {float (selectedTracksWithTruth[i].first .pt *0.25 ),
371- float (selectedTracksWithTruth[j].first .pt *0.25 ),
372- selectedTracksWithTruth[i].first .eta ,
373- selectedTracksWithTruth[j].first .eta ,
374- selectedTracksWithTruth[i].first .phi ,
375- selectedTracksWithTruth[j].first .phi ,
376- selectedTracksWithTruth[i].first .d0 ,
377- selectedTracksWithTruth[j].first .d0 ,
378- selectedTracksWithTruth[i].first .z0 ,
379- selectedTracksWithTruth[j].first .z0 ,
380- float (selectedTracksWithTruth[i].first .chi2rz +0.07 ),
381- float (selectedTracksWithTruth[j].first .chi2rz +0.07 ),
382- float (selectedTracksWithTruth[i].first .bendchi2 +0.07 ),
383- float (selectedTracksWithTruth[j].first .bendchi2 +0.07 ),
384- float (selectedTracksWithTruth[i].first .MVA1 +0.07 ),
385- float (selectedTracksWithTruth[j].first .MVA1 +0.07 ),
386- vertex.d_T ,
387- vertex.R_T ,
388- vertex.cos_T ,
389- float (vertex.delta_z *0.125 )};
390-
391- conifer::BDT<float ,float > bdt (this ->model_ );
392- std::vector<float > output = bdt.decision_function (Transformed_features);
393- outputVertex.setScore (output.at (0 ));
394382 product->emplace_back (outputVertex);
395383 }
396384 }
397385
398386 // //=== Store output
399- iEvent.put (std::move (product), outputTrackCollectionName_);
400- if (!runEmulation_) return ;
401-
402- // Emulation vertex loop
403- std::unique_ptr<l1t::DisplacedTrackVertexCollection> productEmulation (new std::vector<l1t::DisplacedTrackVertex>());
404- for (int i = 0 ; i < int (selectedTracksEmulationWithTruth.size () - 1 ); i++) {
405- for (int j = i + 1 ; j < int (selectedTracksEmulationWithTruth.size ()); j++) {
406- if (dist_TPs (selectedTracksEmulationWithTruth[i].first , selectedTracksEmulationWithTruth[j].first ) != 0 )
407- continue ;
408- Double_t x_dv_trk = -9999.0 ;
409- Double_t y_dv_trk = -9999.0 ;
410- Double_t z_dv_trk = -9999.0 ;
411- edm::Ptr<TrackingParticle> tp_i = selectedTracksEmulationWithTruth[i].second ;
412- edm::Ptr<TrackingParticle> tp_j = selectedTracksEmulationWithTruth[j].second ;
413- bool isReal = false ;
414- if (!tp_i.isNull () && !tp_j.isNull ()) {
415- bool isHard_i = false ;
416- bool isHard_j = false ;
417- if (!tp_i->genParticles ().empty () && !tp_j->genParticles ().empty ()) {
418- isHard_i = tp_i->genParticles ()[0 ]->isHardProcess () || tp_i->genParticles ()[0 ]->fromHardProcessFinalState ();
419- isHard_j = tp_j->genParticles ()[0 ]->isHardProcess () || tp_j->genParticles ()[0 ]->fromHardProcessFinalState ();
420- }
421-
422- if (tp_i->eventId ().event () == 0 && tp_j->eventId ().event () == 0 && fabs (tp_i->vx () - tp_j->vx ()) < 0.0001 &&
423- fabs (tp_i->vy () - tp_j->vy ()) < 0.0001 && fabs (tp_i->vz () - tp_j->vz ()) < 0.0001 && isHard_i && isHard_j &&
424- ((tp_i->charge () + tp_j->charge ()) == 0 )) {
425- isReal = true ;
426- }
427- }
428-
429- int inTraj =
430- calcVertex (selectedTracksEmulationWithTruth[i].first , selectedTracksEmulationWithTruth[j].first , x_dv_trk, y_dv_trk, z_dv_trk);
431- Vertex_Parameters vertex = Vertex_Parameters (
432- x_dv_trk, y_dv_trk, z_dv_trk, selectedTracksEmulationWithTruth[i].first , selectedTracksEmulationWithTruth[j].first );
433-
434- if (vertex.R_T >RTMax_) continue ;
435- if (vertex.R_T <RTMin_) continue ;
436-
437- l1t::DisplacedTrackVertex outputVertex = l1t::DisplacedTrackVertex (selectedTracksEmulationWithTruth[i].first .index ,
438- selectedTracksEmulationWithTruth[j].first .index ,
439- inTraj,
440- vertex.d_T ,
441- vertex.R_T ,
442- vertex.cos_T ,
443- vertex.delta_z ,
444- vertex.x_dv ,
445- vertex.y_dv ,
446- vertex.z_dv ,
447- vertex.openingAngle ,
448- vertex.p_mag ,
449- isReal);
450-
451- std::vector<ap_fixed<13 ,8 ,AP_RND_CONV, AP_SAT>> Transformed_features = {selectedTracksEmulationWithTruth[i].first .pt *0.25 ,
452- selectedTracksEmulationWithTruth[j].first .pt *0.25 ,
453- selectedTracksEmulationWithTruth[i].first .eta ,
454- selectedTracksEmulationWithTruth[j].first .eta ,
455- selectedTracksEmulationWithTruth[i].first .phi ,
456- selectedTracksEmulationWithTruth[j].first .phi ,
457- selectedTracksEmulationWithTruth[i].first .d0 ,
458- selectedTracksEmulationWithTruth[j].first .d0 ,
459- selectedTracksEmulationWithTruth[i].first .z0 ,
460- selectedTracksEmulationWithTruth[j].first .z0 ,
461- selectedTracksEmulationWithTruth[i].first .chi2rz +0.07 ,
462- selectedTracksEmulationWithTruth[j].first .chi2rz +0.07 ,
463- selectedTracksEmulationWithTruth[i].first .bendchi2 +0.07 ,
464- selectedTracksEmulationWithTruth[j].first .bendchi2 +0.07 ,
465- selectedTracksEmulationWithTruth[i].first .MVA1 +0.07 ,
466- selectedTracksEmulationWithTruth[j].first .MVA1 +0.07 ,
467- vertex.d_T ,
468- vertex.R_T ,
469- vertex.cos_T ,
470- vertex.delta_z *0.125 };
471-
472- conifer::BDT<ap_fixed<13 ,8 ,AP_RND_CONV, AP_SAT>, ap_fixed<13 ,8 ,AP_RND_CONV, AP_SAT>> bdt (this ->model_ );
473- std::vector<ap_fixed<13 ,8 ,AP_RND_CONV, AP_SAT>> output = bdt.decision_function (Transformed_features);
474- outputVertex.setScore (output.at (0 ).to_float ());
475- productEmulation->emplace_back (outputVertex);
476- }
477- }
478- iEvent.put (std::move (productEmulation), outputTrackEmulationCollectionName_);
387+ iEvent.put (std::move (product), outputVertexCollectionName_);
388+
479389}
480390
481391DEFINE_FWK_MODULE (DisplacedVertexProducer);
0 commit comments