ATLAS Offline Software
Loading...
Searching...
No Matches
TagNProbe.h
Go to the documentation of this file.
1
10
11
12#ifndef TIDAUTILS_TAGNPROBE_H
13#define TIDAUTILS_TAGNPROBE_H
14
15#include <vector>
16
21
24
25#include "TLorentzVector.h"
26
27
28class TagNProbe {
29
30public:
31
32 TagNProbe( const std::string& refName, double massMin, double massMax, bool unique_flag=true );
33
34 TagNProbe( const std::string& refName0, const std::string& refName1, double massMin, double massMax, bool unique_flag=true );
35
36 virtual ~TagNProbe() { }
37
38 // constructir common
39
40 void construct();
41
43
45 void tag( const std::string& chainName ) { m_tagChainName = chainName; }
46 void probe( const std::string& chainName ) { m_probeChainName = chainName; }
47
48 const std::string& tag() const { return m_tagChainName; }
49 const std::string& probe() const { return m_probeChainName; }
50
51 const std::string& type0() const { return m_particleType0; };
52 const std::string& type1() const { return m_particleType1; };
53
54 double mass0() const { return m_mass0; };
55 double mass1() const { return m_mass1; };
56
57public:
58
59 template<typename T>
60 std::vector<TIDA::Roi*> GetRois( std::vector<TIDA::Chain>& chains,
61 const TrackSelector* selector,
62 TrackFilter* filter,
63 T* hmass,
64 T* hmass_obj,
65 TrigObjectMatcher* tom=0 ) const {
66 return GetRois( chains, selector, filter, selector, filter, hmass, hmass_obj, tom, tom );
67 }
68
69 template<typename T>
70 std::vector<TIDA::Roi*> GetRois( std::vector<TIDA::Chain>& chains,
71 const TrackSelector* selector_tag,
72 TrackFilter* filter_tag,
73 const TrackSelector* selector_probe,
74 TrackFilter* filter_probe,
75 T* hmass,
76 T* hmass_obj,
77 TrigObjectMatcher* tom_tag=0,
78 TrigObjectMatcher* tom_probe=0 ) const {
79
80 std::vector<TIDA::Roi*> probes;
81
82 TIDA::Chain* chain_tag = findChain( tag(), chains );
83 TIDA::Chain* chain_probe = findChain( probe(), chains );
84
85 if ( chain_tag==0 || chain_probe==0 ) return probes;
86
87 // loop for possible probes
88 for ( size_t ip=0 ; ip<chain_probe->size() ; ip++ ) {
89
90 TIDA::Roi& proi = chain_probe->rois()[ip];
91
92 TIDARoiDescriptor roi_probe( proi.roi() );
93
94 bool found_tnp = false;
95
96 // loop for possible tags
97 for ( size_t it=0 ; it<chain_tag->size() ; it++ ) {
98
99 TIDA::Roi& troi = chain_tag->rois()[it];
100 TIDARoiDescriptor roi_tag( troi.roi() );
101
103 if ( roi_probe == roi_tag ) continue;
104
105 if ( selection( troi, proi, selector_tag, filter_tag, selector_probe, filter_probe,
106 hmass, hmass_obj, tom_tag, tom_probe ) ) {
107
108 found_tnp = true;
109 if ( m_unique ) break;
110 }
111
112 } // end loop on tags
113
114 if ( found_tnp ) probes.push_back( &proi );
115
116 } // end loop on probes
117
118 return probes;
119
120 }
121
122protected:
123
124 double pt( const TIDA::Track* t ) const { return t->pT(); }
125 double pt( const TrackTrigObject* t ) const { return t->pt(); }
126
127 template<typename T1, typename T2>
128 double mass( const T1* t1, const T2* t2 ) const {
129 TLorentzVector v1;
130 v1.SetPtEtaPhiM( pt(t1)*0.001, t1->eta(), t1->phi(), m_mass0 );
131 TLorentzVector v2;
132 v2.SetPtEtaPhiM( pt(t2)*0.001, t2->eta(), t2->phi(), m_mass1 );
133 return (v1+v2).M();
134 }
135
136
137 template<typename T>
138 bool selection( const TIDA::Roi& troi, const TIDA::Roi& proi,
139 const TrackSelector* selector,
140 TrackFilter* filter,
141 T* hmass,
142 T* hmass_obj,
143 TrigObjectMatcher* tom=0) const {
144 return selection( troi, proi, selector, filter, selector, filter, hmass, hmass_obj, tom, tom );
145 }
146
147 template<typename T>
148 bool selection( const TIDA::Roi& troi, const TIDA::Roi& proi,
149 const TrackSelector* selector_tag,
150 TrackFilter* filter_tag,
151 const TrackSelector* selector_probe,
152 TrackFilter* filter_probe,
153 T* hmass,
154 T* hmass_obj,
155 TrigObjectMatcher* tom_tag=0,
156 TrigObjectMatcher* tom_probe=0) const {
157
159 TIDARoiDescriptor roi_tag( troi.roi() );
160
161 dynamic_cast<Filter_Combined*>(filter_tag)->setRoi( &roi_tag );
162
163 std::vector<TIDA::Track*> refp_tag = selector_tag->tracks( filter_tag );
164
166
167 TIDARoiDescriptor roi_probe( proi.roi() );
168
169 dynamic_cast<Filter_Combined* >( filter_probe )->setRoi( &roi_probe );
170
171 std::vector<TIDA::Track*> refp_probe = selector_probe->tracks( filter_probe );
172
174 bool found = false;
175
176 for ( size_t it=0; it<refp_tag.size() ; it++ ) {
177
179 for ( size_t ip=0; ip<refp_probe.size() ; ip++ ) {
180
182 double invmass = mass( refp_tag[it], refp_probe[ip] );
183 double invmass_obj = mass_obj( refp_tag[it], refp_probe[ip], tom_tag, tom_probe );
184 double deltaz0 = std::fabs(refp_tag[it]->z0() - refp_probe[ip]->z0() );
185
186 if ( invmass_obj>m_massMin && invmass_obj<m_massMax && deltaz0<5 ) {
187 hmass->Fill( invmass );
188 hmass_obj->Fill( invmass_obj );
189 found = true;
190 }
191 }
192 }
193
194 return found;
195
196 }
197
198
199 double mass_obj( const TIDA::Track* t1, const TIDA::Track* t2, TrigObjectMatcher* tom=0 ) const;
200 double mass_obj( const TIDA::Track* t1, const TIDA::Track* t2, TrigObjectMatcher* tom_tag, TrigObjectMatcher* tom_probe ) const;
201
202 TIDA::Chain* findChain( const std::string& chainname, std::vector<TIDA::Chain>& chains ) const;
203
204
205private:
206
207 std::string m_particleType0;
208 std::string m_particleType1;
209
210 double m_mass0;
211 double m_mass1;
212
213 double m_massMin;
214 double m_massMax;
215
217
218 std::string m_probeChainName ;
219 std::string m_tagChainName ;
220
221};
222
223
224inline std::ostream& operator<<( std::ostream& s, const TagNProbe& t ) {
225 s << "[ TagNProbe: chains tag: " << t.tag() << "\tprobe: " << t.probe() << "\n";
226 s << " type: " << t.type0() << "\t " << t.type1() << "\n";
227 s << " mass: " << t.mass0() << "\t " << t.mass1() << " ]";
228 return s;
229}
230
231
232#endif
233
234
chain container, contains rois
std::ostream & operator<<(std::ostream &s, const TagNProbe &t)
Definition TagNProbe.h:224
Describes the Region of Ineterest geometry It has basically 8 parameters.
const std::vector< TIDA::Roi > & rois() const
get back roi vector
Definition TIDAChain.h:50
unsigned size() const
number of rois
Definition TIDAChain.h:54
const TIDARoiDescriptor & roi() const
access the roi information
Definition TIDARoi.h:42
const std::string & probe() const
Definition TagNProbe.h:49
bool selection(const TIDA::Roi &troi, const TIDA::Roi &proi, const TrackSelector *selector, TrackFilter *filter, T *hmass, T *hmass_obj, TrigObjectMatcher *tom=0) const
Definition TagNProbe.h:138
double pt(const TIDA::Track *t) const
Definition TagNProbe.h:124
void probe(const std::string &chainName)
Definition TagNProbe.h:46
TIDA::Chain * findChain(const std::string &chainname, std::vector< TIDA::Chain > &chains) const
const std::string & tag() const
Definition TagNProbe.h:48
std::vector< TIDA::Roi * > GetRois(std::vector< TIDA::Chain > &chains, const TrackSelector *selector, TrackFilter *filter, T *hmass, T *hmass_obj, TrigObjectMatcher *tom=0) const
Definition TagNProbe.h:60
double m_mass1
Definition TagNProbe.h:211
bool m_unique
Definition TagNProbe.h:216
std::string m_particleType1
Definition TagNProbe.h:208
void tag(const std::string &chainName)
getters and setters
Definition TagNProbe.h:45
double m_massMin
Definition TagNProbe.h:213
const std::string & type0() const
Definition TagNProbe.h:51
double pt(const TrackTrigObject *t) const
Definition TagNProbe.h:125
virtual ~TagNProbe()
Definition TagNProbe.h:36
double m_massMax
Definition TagNProbe.h:214
double m_mass0
Definition TagNProbe.h:210
double mass1() const
Definition TagNProbe.h:55
bool selection(const TIDA::Roi &troi, const TIDA::Roi &proi, const TrackSelector *selector_tag, TrackFilter *filter_tag, const TrackSelector *selector_probe, TrackFilter *filter_probe, T *hmass, T *hmass_obj, TrigObjectMatcher *tom_tag=0, TrigObjectMatcher *tom_probe=0) const
Definition TagNProbe.h:148
double mass_obj(const TIDA::Track *t1, const TIDA::Track *t2, TrigObjectMatcher *tom=0) const
Definition TagNProbe.cxx:72
void construct()
Definition TagNProbe.cxx:48
double mass(const T1 *t1, const T2 *t2) const
Definition TagNProbe.h:128
const std::string & type1() const
Definition TagNProbe.h:52
std::string m_tagChainName
Definition TagNProbe.h:219
std::string m_particleType0
Definition TagNProbe.h:207
std::vector< TIDA::Roi * > GetRois(std::vector< TIDA::Chain > &chains, const TrackSelector *selector_tag, TrackFilter *filter_tag, const TrackSelector *selector_probe, TrackFilter *filter_probe, T *hmass, T *hmass_obj, TrigObjectMatcher *tom_tag=0, TrigObjectMatcher *tom_probe=0) const
Definition TagNProbe.h:70
double mass0() const
Definition TagNProbe.h:54
std::string m_probeChainName
Definition TagNProbe.h:218
TagNProbe(const std::string &refName, double massMin, double massMax, bool unique_flag=true)
Definition TagNProbe.cxx:34
const std::string selection