Skip to content

Commit 7da9814

Browse files
authored
Merge pull request #74 from gianipez/trkTrig1
updates to the Trigger-related code
2 parents 4bd5088 + ff1429e commit 7da9814

27 files changed

+348
-207
lines changed

Mu2eUtilities/inc/HelixTool.hh

Lines changed: 11 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,14 @@
11
#ifndef Mu2eUtilities_HelixTool_hh
22
#define Mu2eUtilities_HelixTool_hh
33
//
4-
//
5-
// $Id: $
6-
// $Author: $
7-
// $Date: $
8-
//
94
// Original author G. Pezzullo
105
//
116

12-
// CLHEP includes
137
#include "RecoDataProducts/inc/HelixSeed.hh"
148
#include "RecoDataProducts/inc/ComboHit.hh"
159
#include "RecoDataProducts/inc/StrawHitFlagCollection.hh"
10+
#include "DataProducts/inc/StrawId.hh"
11+
#include "TrackerGeom/inc/Tracker.hh"
1612

1713
#include "Math/VectorUtil.h"
1814
using namespace ROOT::Math::VectorUtil;
@@ -22,49 +18,7 @@ namespace mu2e {
2218
class HelixTool{
2319

2420
public:
25-
HelixTool(const HelixSeed *Helix,
26-
int MinHitsSingleLoop=3):
27-
_hel(Helix), _nMinHitsLoop(MinHitsSingleLoop){
28-
29-
//initialize
30-
_meanHitRadialDist = 0.;
31-
_nLoops = 0;
32-
const ComboHit* hit(0);
33-
34-
float z_first_hit(0), z_last_hit(0), counter(0);
35-
bool isFirst(true);
36-
unsigned nhits = _hel->_hhits.size();
37-
38-
const mu2e::RobustHelix *robustHel = &Helix->helix();
39-
40-
int nstrawhits = 0;
41-
42-
for (unsigned f=0; f<nhits; ++f){
43-
hit = &_hel->_hhits[f];
44-
if (hit->_flag.hasAnyProperty(StrawHitFlag::outlier)) continue;
45-
nstrawhits += hit -> nStrawHits();
46-
47-
_meanHitRadialDist += sqrtf(hit->pos().x()*hit->pos().x() + hit->pos().y()*hit->pos().y());
48-
++counter;
49-
float z = hit->pos().z();
50-
if (isFirst){
51-
z_first_hit = z;
52-
z_last_hit = z;
53-
isFirst = false;
54-
}else {
55-
z_last_hit = z;
56-
}
57-
}//end loop over the hits
58-
59-
_nStrawHits = nstrawhits;
60-
61-
if (counter > 0) _meanHitRadialDist /= counter;
62-
63-
_nLoops = (z_last_hit - z_first_hit)/(fabs(Helix->helix().lambda())*2.*M_PI);
64-
65-
//here we evaluate once the impact parameter
66-
_d0 = robustHel->rcent () - robustHel->radius ();
67-
}
21+
HelixTool(const HelixSeed *Helix, const mu2e::Tracker*MyTracker=NULL);
6822

6923
// Accept compiler supplied d'tor, copy c'tor and assignment operator.
7024

@@ -75,6 +29,11 @@ namespace mu2e {
7529
float d0 () const { return _d0; }
7630
float nstrawhits () const { return _nStrawHits; }
7731

32+
//function that evaluates the ratio between the measured ComboHits and the
33+
//expected intesections of the helix with the tracker planes. This function
34+
//models the tracker as a perfect cylinder
35+
float hitRatio () const { return _hitRatio; }
36+
7837

7938
private:
8039
const HelixSeed* _hel;
@@ -84,6 +43,9 @@ namespace mu2e {
8443
int _nStrawHits;
8544
float _meanHitRadialDist;
8645
float _d0;
46+
float _hitRatio;
47+
float _trackerRIn, _trackerROut, _trackerLength;
48+
const mu2e::Tracker*_tracker;
8749
};
8850

8951
} // namespace mu2e

Mu2eUtilities/inc/TriggerResultsNavigator.hh

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,15 @@ namespace mu2e {
3232

3333
// Has ith path accepted the event?
3434
bool accepted(std::string const& name) const;
35+
36+
bool wasrun(std::string const& name) const;
37+
38+
//NOTE: the following three functions can be used only within the same job that runs the
39+
// trigger paths, otherwise they will fail
40+
std::vector<std::string> triggerModules (std::string const& name) const;
41+
unsigned indexLastModule(std::string const& name) const;
42+
std::string nameLastModule (std::string const& name) const;
43+
3544
art::hlt::HLTState state(std::string const& name) const;
3645
void print() const;
3746

Mu2eUtilities/src/HelixTool.cc

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
#include "Mu2eUtilities/inc/HelixTool.hh"
2+
3+
4+
namespace mu2e {
5+
6+
HelixTool::HelixTool(const HelixSeed *Helix, const mu2e::Tracker*MyTracker){
7+
_hel = Helix;
8+
_trackerRIn = 0;
9+
_trackerROut = 0;
10+
11+
if (MyTracker != NULL){
12+
_tracker = MyTracker;
13+
_trackerRIn = _tracker->getInnerTrackerEnvelopeParams().innerRadius();
14+
_trackerROut = _tracker->getInnerTrackerEnvelopeParams().outerRadius();
15+
}
16+
17+
//initialize
18+
_meanHitRadialDist = 0.;
19+
_nLoops = 0;
20+
const ComboHit* hit(0);
21+
22+
float z_first_hit(0), z_last_hit(0), counter(0);
23+
bool isFirst(true);
24+
unsigned nhits = _hel->_hhits.size();
25+
26+
const mu2e::RobustHelix *robustHel = &Helix->helix();
27+
28+
int nstrawhits = 0;
29+
30+
for (unsigned f=0; f<nhits; ++f){
31+
hit = &_hel->_hhits[f];
32+
if (hit->_flag.hasAnyProperty(StrawHitFlag::outlier)) continue;
33+
nstrawhits += hit -> nStrawHits();
34+
35+
_meanHitRadialDist += sqrtf(hit->pos().x()*hit->pos().x() + hit->pos().y()*hit->pos().y());
36+
++counter;
37+
float z = hit->pos().z();
38+
if (isFirst){
39+
z_first_hit = z;
40+
z_last_hit = z;
41+
isFirst = false;
42+
}else {
43+
z_last_hit = z;
44+
}
45+
}//end loop over the hits
46+
47+
_nStrawHits = nstrawhits;
48+
49+
if (counter > 0) _meanHitRadialDist /= counter;
50+
51+
_nLoops = (z_last_hit - z_first_hit)/(fabs(robustHel->lambda())*2.*M_PI);
52+
53+
//here we evaluate once the impact parameter
54+
_d0 = robustHel->rcent () - robustHel->radius ();
55+
56+
57+
// we now estiamte the ratio of the number of measured hits to the number of the expected ones
58+
// we make a few assumptions and appriximations:
59+
float expected_faces(1e-6);
60+
if (_tracker != NULL){
61+
for (int planeId=0; planeId<_tracker->nPlanes(); planeId++) {
62+
const Plane* pln = &_tracker->getPlane(planeId);
63+
int nPanels = pln->nPanels();
64+
if (nPanels == 0 ) continue;
65+
std::array<int,2> idPanels = {0, (nPanels-1)};
66+
67+
for (size_t ipn=0; ipn<idPanels.size(); ++ipn){
68+
const Panel* panel = &pln->getPanel(ipn);
69+
float z = (panel->getStraw(0).getMidPoint().z()+panel->getStraw(1).getMidPoint().z())/2.;
70+
// if (z < z_first_hit ) continue;
71+
// if (z > z_last_hit ) continue;
72+
73+
XYZVec pos;
74+
pos.SetZ(z);
75+
robustHel->position(pos);
76+
77+
//now check that we are in the active area of tracker
78+
float hitR = sqrtf(pos.x()*pos.x() + pos.y()*pos.y());
79+
if (hitR < _trackerRIn ) continue;
80+
if (hitR > _trackerROut) continue;
81+
82+
++expected_faces;
83+
}//end loop over the two panels
84+
}//end loop over the planes
85+
}
86+
87+
//each plane has two layers of panels. We are assuming 2 ComboHits per face
88+
_hitRatio = _nStrawHits/expected_faces;
89+
}
90+
91+
}

Mu2eUtilities/src/TriggerResultsNavigator.cc

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,49 @@ namespace mu2e {
4343
size_t index = findTrigPath(name);
4444
return _trigResults->accept(index);
4545
}
46-
46+
47+
bool
48+
TriggerResultsNavigator::wasrun(std::string const& name) const
49+
{
50+
size_t index = findTrigPath(name);
51+
return _trigResults->wasrun(index);
52+
}
53+
54+
std::vector<std::string>
55+
TriggerResultsNavigator::triggerModules(std::string const& name) const{
56+
std::vector<std::string> modules;
4757

58+
for ( auto const& i : fhicl::ParameterSetRegistry::get() ){
59+
auto const id = i.first;
60+
if (i.second.has_key(name)){
61+
auto const &pset = fhicl::ParameterSetRegistry::get(id);
62+
modules = pset.get<std::vector<std::string>>(name);
63+
break;
64+
}
65+
}
66+
return modules;
67+
}
68+
69+
unsigned
70+
TriggerResultsNavigator::indexLastModule(std::string const& name) const{
71+
size_t index = findTrigPath(name);
72+
return _trigResults->index(index);
73+
}
74+
75+
std::string
76+
TriggerResultsNavigator::nameLastModule (std::string const& name) const{
77+
unsigned indexLast = indexLastModule(name);
78+
std::vector<std::string> modulesVec = triggerModules(name);
79+
80+
if ( modulesVec.size() == 0) {
81+
std::string nn = "PATH "+name+" NOT FOUND";
82+
std::cout << "[TriggerResultsNavigator::nameLastModule] " << nn << std::endl;
83+
return nn;
84+
}else {
85+
return modulesVec[indexLast];
86+
}
87+
}
88+
4889
art::hlt::HLTState
4990
TriggerResultsNavigator::state(std::string const& name) const{
5091
size_t index = findTrigPath(name);

Trigger/data/cprCosmicSeedDeM/main_cprCosmicSeedDeMHSFilter.fcl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
1+
physics.filters.tprCosmicSeedDeMHSFilter.fitparticle : @local::Particle.eminus
2+
physics.filters.tprCosmicSeedDeMHSFilter.fitdirection : @local::FitDir.downstream
13
physics.filters.tprCosmicSeedDeMHSFilter.helicity : 1
24
physics.filters.tprCosmicSeedDeMHSFilter.minNStrawHits : 15.0
5+
physics.filters.tprCosmicSeedDeMHSFilter.minHitRatio : 0.4
36
physics.filters.tprCosmicSeedDeMHSFilter.minMomentum : 50.0
47
physics.filters.tprCosmicSeedDeMHSFilter.maxMomentum : 300.0
58
physics.filters.tprCosmicSeedDeMHSFilter.minPt : 0.0
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
physics.filters.cprCosmicSeedDeMEventPrescale.nPrescale : 1
2-
physics.filters.cprCosmicSeedDeMEventPrescale.triggerFlag : ["PrescaleRandom"]
1+
physics.filters.cprCosmicSeedDePEventPrescale.nPrescale : 1
2+
physics.filters.cprCosmicSeedDePEventPrescale.triggerFlag : ["PrescaleRandom"]
Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
1-
physics.filters.cprCosmicSeedDeMHSFilter.helicity : 1
2-
physics.filters.cprCosmicSeedDeMHSFilter.minNStrawHits : 15.0
3-
physics.filters.cprCosmicSeedDeMHSFilter.minMomentum : 50.0
4-
physics.filters.cprCosmicSeedDeMHSFilter.maxMomentum : 300.0
5-
physics.filters.cprCosmicSeedDeMHSFilter.minPt : 0.0
6-
physics.filters.cprCosmicSeedDeMHSFilter.maxChi2XY : 5.0
7-
physics.filters.cprCosmicSeedDeMHSFilter.maxChi2PhiZ : 5.0
8-
physics.filters.cprCosmicSeedDeMHSFilter.maxD0 : 800.0
9-
physics.filters.cprCosmicSeedDeMHSFilter.minD0 : -800.0
10-
physics.filters.cprCosmicSeedDeMHSFilter.minAbsLambda : 50.0
11-
physics.filters.cprCosmicSeedDeMHSFilter.maxAbsLambda : 500.0
12-
physics.filters.cprCosmicSeedDeMHSFilter.minNLoops : 0
13-
physics.filters.cprCosmicSeedDeMHSFilter.maxNLoops : 30
14-
physics.filters.cprCosmicSeedDeMHSFilter.prescaleUsingD0Phi : false
1+
physics.filters.cprCosmicSeedDePHSFilter.fitparticle : @local::Particle.eplus
2+
physics.filters.cprCosmicSeedDePHSFilter.fitdirection : @local::FitDir.downstream
3+
physics.filters.cprCosmicSeedDePHSFilter.helicity : 1
4+
physics.filters.cprCosmicSeedDePHSFilter.minNStrawHits : 15.0
5+
physics.filters.cprCosmicSeedDePHSFilter.minHitRatio : 0.4
6+
physics.filters.cprCosmicSeedDePHSFilter.minMomentum : 50.0
7+
physics.filters.cprCosmicSeedDePHSFilter.maxMomentum : 300.0
8+
physics.filters.cprCosmicSeedDePHSFilter.minPt : 0.0
9+
physics.filters.cprCosmicSeedDePHSFilter.maxChi2XY : 5.0
10+
physics.filters.cprCosmicSeedDePHSFilter.maxChi2PhiZ : 5.0
11+
physics.filters.cprCosmicSeedDePHSFilter.maxD0 : 800.0
12+
physics.filters.cprCosmicSeedDePHSFilter.minD0 : -800.0
13+
physics.filters.cprCosmicSeedDePHSFilter.minAbsLambda : 50.0
14+
physics.filters.cprCosmicSeedDePHSFilter.maxAbsLambda : 500.0
15+
physics.filters.cprCosmicSeedDePHSFilter.minNLoops : 0
16+
physics.filters.cprCosmicSeedDePHSFilter.maxNLoops : 30
17+
physics.filters.cprCosmicSeedDePHSFilter.prescaleUsingD0Phi : false
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
physics.filters.cprCosmicSeedDeMPrescale.nPrescale : 1
2-
physics.filters.cprCosmicSeedDeMPrescale.useFilteredEvents : true
3-
physics.filters.cprCosmicSeedDeMPrescale.triggerFlag : ["PrescaleGoodEvents"]
1+
physics.filters.cprCosmicSeedDePPrescale.nPrescale : 1
2+
physics.filters.cprCosmicSeedDePPrescale.useFilteredEvents : true
3+
physics.filters.cprCosmicSeedDePPrescale.triggerFlag : ["PrescaleGoodEvents"]
Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
physics.filters.cprCosmicSeedDeMSDCountFilter.caloDigiCollection : notUsed
2-
physics.filters.cprCosmicSeedDeMSDCountFilter.useStrawDigi : true
3-
physics.filters.cprCosmicSeedDeMSDCountFilter.useCaloDigi : false
4-
physics.filters.cprCosmicSeedDeMSDCountFilter.minNStrawDigi : 10
5-
physics.filters.cprCosmicSeedDeMSDCountFilter.maxNStrawDigi : 10000
6-
physics.filters.cprCosmicSeedDeMSDCountFilter.minNCaloDigi : -1
7-
physics.filters.cprCosmicSeedDeMSDCountFilter.maxNCaloDigi : -1
8-
physics.filters.cprCosmicSeedDeMSDCountFilter.maxCaloEnergy : -1
1+
physics.filters.cprCosmicSeedDePSDCountFilter.caloDigiCollection : notUsed
2+
physics.filters.cprCosmicSeedDePSDCountFilter.useStrawDigi : true
3+
physics.filters.cprCosmicSeedDePSDCountFilter.useCaloDigi : false
4+
physics.filters.cprCosmicSeedDePSDCountFilter.minNStrawDigi : 10
5+
physics.filters.cprCosmicSeedDePSDCountFilter.maxNStrawDigi : 10000
6+
physics.filters.cprCosmicSeedDePSDCountFilter.minNCaloDigi : -1
7+
physics.filters.cprCosmicSeedDePSDCountFilter.maxNCaloDigi : -1
8+
physics.filters.cprCosmicSeedDePSDCountFilter.maxCaloEnergy : -1
99

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
physics.filters.cprCosmicSeedDeMTCFilter.requireCaloCluster : false
2-
physics.filters.cprCosmicSeedDeMTCFilter.minNHits : 10.0
3-
physics.filters.cprCosmicSeedDeMTCFilter.minTime : 500.0
4-
physics.filters.cprCosmicSeedDeMTCFilter.maxTime : 1695.0
1+
physics.filters.cprCosmicSeedDePTCFilter.requireCaloCluster : false
2+
physics.filters.cprCosmicSeedDePTCFilter.minNHits : 10.0
3+
physics.filters.cprCosmicSeedDePTCFilter.minTime : 500.0
4+
physics.filters.cprCosmicSeedDePTCFilter.maxTime : 1695.0

0 commit comments

Comments
 (0)