ATLAS Offline Software
TagNProbe.h
Go to the documentation of this file.
1 
12 #ifndef TIDAUTILS_TAGNPROBE_H
13 #define TIDAUTILS_TAGNPROBE_H
14 
15 #include <vector>
16 
20 #include "TrigInDetAnalysis/Track.h"
21 
24 
25 #include "TLorentzVector.h"
26 
27 
28 class TagNProbe {
29 
30 public:
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 
57 public:
58 
59  template<typename T>
60  std::vector<TIDA::Roi*> GetRois( std::vector<TIDA::Chain>& chains,
61  const TrackSelector* selector,
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 
122 protected:
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,
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 
205 private:
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 
216  bool m_unique;
217 
218  std::string m_probeChainName ;
219  std::string m_tagChainName ;
220 
221 };
222 
223 
224 inline 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 
TIDA::Roi::roi
const TIDARoiDescriptor & roi() const
access the roi information
Definition: TIDARoi.h:42
TagNProbe::mass1
double mass1() const
Definition: TagNProbe.h:55
TagNProbe::selection
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
Track.h
python.SystemOfUnits.s
int s
Definition: SystemOfUnits.py:131
TagNProbe::mass0
double mass0() const
Definition: TagNProbe.h:54
TagNProbe::probe
const std::string & probe() const
Definition: TagNProbe.h:49
TagNProbe::tag
const std::string & tag() const
Definition: TagNProbe.h:48
TrackFilter
Definition: TrackFilter.h:26
TagNProbe::selection
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
Filters.h
ALFA_EventTPCnv_Dict::t1
std::vector< ALFA_RawDataCollection_p1 > t1
Definition: ALFA_EventTPCnvDict.h:43
skel.it
it
Definition: skel.GENtoEVGEN.py:423
TIDA::Chain::size
unsigned size() const
number of rois
Definition: TIDAChain.h:54
TagNProbe::m_particleType1
std::string m_particleType1
Definition: TagNProbe.h:208
TIDARoiDescriptor
Describes the Region of Ineterest geometry It has basically 8 parameters.
Definition: TIDARoiDescriptor.h:42
TIDARoiDescriptor.h
TIDA::Chain::rois
const std::vector< TIDA::Roi > & rois() const
get back roi vector
Definition: TIDAChain.h:50
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
TagNProbe::m_particleType0
std::string m_particleType0
Definition: TagNProbe.h:207
TagNProbe::pt
double pt(const TrackTrigObject *t) const
Definition: TagNProbe.h:125
TagNProbe::construct
void construct()
Definition: TagNProbe.cxx:42
TrackSelector
Definition: Trigger/TrigAnalysis/TrigInDetAnalysis/TrigInDetAnalysis/TrackSelector.h:24
TagNProbe::pt
double pt(const TIDA::Track *t) const
Definition: TagNProbe.h:124
covarianceTool.filter
filter
Definition: covarianceTool.py:514
TagNProbe::findChain
TIDA::Chain * findChain(const std::string &chainname, std::vector< TIDA::Chain > &chains) const
Definition: TagNProbe.cxx:92
TagNProbe
Definition: TagNProbe.h:28
TagNProbe::m_mass0
double m_mass0
Definition: TagNProbe.h:210
TagNProbe::m_unique
bool m_unique
Definition: TagNProbe.h:216
TrigObjectMatcher
Definition: TrigObjectMatcher.h:24
TagNProbe::type0
const std::string & type0() const
Definition: TagNProbe.h:51
TagNProbe::m_massMin
double m_massMin
Definition: TagNProbe.h:213
TagNProbe::tag
void tag(const std::string &chainName)
getters and setters
Definition: TagNProbe.h:45
TrackSelector.h
TagNProbe::m_probeChainName
std::string m_probeChainName
Definition: TagNProbe.h:218
find_tgc_unfilled_channelids.ip
ip
Definition: find_tgc_unfilled_channelids.py:3
TRT::Track::z0
@ z0
Definition: InnerDetector/InDetCalibEvent/TRT_CalibData/TRT_CalibData/TrackInfo.h:63
operator<<
std::ostream & operator<<(std::ostream &s, const TagNProbe &t)
Definition: TagNProbe.h:224
TagNProbe::type1
const std::string & type1() const
Definition: TagNProbe.h:52
TrackSelector::tracks
const std::vector< TIDA::Track * > & tracks() const
Definition: Trigger/TrigAnalysis/TrigInDetAnalysis/TrigInDetAnalysis/TrackSelector.h:53
Filter_Combined
Definition: Filters.h:225
TIDA::Chain
Definition: TIDAChain.h:28
TIDA::Roi
Definition: TIDARoi.h:31
TagNProbe::~TagNProbe
virtual ~TagNProbe()
Definition: TagNProbe.h:36
TrigObjectMatcher.h
python.copyTCTOutput.chains
chains
Definition: copyTCTOutput.py:81
ReadCellNoiseFromCoolCompare.v2
v2
Definition: ReadCellNoiseFromCoolCompare.py:364
ALFA_EventTPCnv_Dict::t2
std::vector< ALFA_RawDataContainer_p1 > t2
Definition: ALFA_EventTPCnvDict.h:44
TagNProbe::GetRois
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
TrackTrigObject
Definition: TrackTrigObject.h:21
python.selector.AtlRunQuerySelectorLhcOlc.selector
selector
Definition: AtlRunQuerySelectorLhcOlc.py:611
TagNProbe::TagNProbe
TagNProbe(const std::string &refName, double massMin, double massMax, bool unique_flag=true)
Definition: TagNProbe.cxx:28
CondAlgsOpts.found
int found
Definition: CondAlgsOpts.py:101
python.TriggerAPI.TriggerAPISession.chainName
chainName
Definition: TriggerAPISession.py:353
TIDA::Track
Definition: Trigger/TrigAnalysis/TrigInDetAnalysis/TrigInDetAnalysis/Track.h:26
TIDAChain.h
chain container, contains rois
TagNProbe::mass_obj
double mass_obj(const TIDA::Track *t1, const TIDA::Track *t2, TrigObjectMatcher *tom=0) const
Definition: TagNProbe.cxx:58
TagNProbe::m_mass1
double m_mass1
Definition: TagNProbe.h:211
TagNProbe::m_massMax
double m_massMax
Definition: TagNProbe.h:214
TagNProbe::mass
double mass(const T1 *t1, const T2 *t2) const
Definition: TagNProbe.h:128
TagNProbe::m_tagChainName
std::string m_tagChainName
Definition: TagNProbe.h:219
TagNProbe::GetRois
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
TSU::T
unsigned long long T
Definition: L1TopoDataTypes.h:35
TagNProbe::probe
void probe(const std::string &chainName)
Definition: TagNProbe.h:46