ATLAS Offline Software
Loading...
Searching...
No Matches
ZRObject.h
Go to the documentation of this file.
1// emacs: this is -*- c++ -*-
2
3/*
4 Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
5*/
6
7/**************************************************************************
8 **
9 ** File: ZRObject.h
10 **
11 ** Description: Object with rmin, rmax, zmin, zmax coordinates
12 ** with access methods and a test to see whether an
13 ** RoI lies within it, completely or partially.
14 **
15 ** Author: M.Sutton
16 **
17 ** Created: Wed Apr 4 17:43:46 BST 2007
18 ** Modified:
19 **
20 **
21 **
22 **************************************************************************/
23
24
25#ifndef REGSELLUT_ZROBJECT_H
26#define REGSELLUT_ZROBJECT_H
27
28#include "RegSelLUT/RegSelRoI.h"
29
30#include <iostream>
31
32
33inline double calceta(double r, double z) {
34 if ( z==0 ) return 0;
35 double theta = std::atan(r/z);
36 if ( theta<0 ) theta += M_PI;
37 return -std::log( std::tan(theta*0.5) );
38}
39
40
41class ZRObject {
42
43public:
44
45 ZRObject() : m_rMin(0), m_rMax(0),
46 m_zMin(0), m_zMax(0),
47 m_z2Min(0), m_z2Max(0), m_enabled(false)
48 { }
49
50 ZRObject(double rmin, double rmax, double zmin, double zmax) :
51 m_rMin(rmin<rmax?rmin:rmax), m_rMax(rmax>rmin?rmax:rmin),
52 m_zMin(zmin<zmax?zmin:zmax), m_zMax(zmax>zmin?zmax:zmin),
53 m_z2Min(zmin<zmax?zmin:zmax), m_z2Max(zmax>zmin?zmax:zmin),
54 m_enabled(true)
55 { }
56
57 ZRObject(double rmin, double rmax,
58 double zmin, double zmax,
59 double z2min, double z2max) :
60 m_rMin(rmin<rmax?rmin:rmax), m_rMax(rmax>rmin?rmax:rmin),
61 m_zMin(zmin<zmax?zmin:zmax), m_zMax(zmax>zmin?zmax:zmin),
62 m_z2Min(z2min<z2max?z2min:z2max), m_z2Max(z2max>z2min?z2max:z2min),
63 m_enabled(true)
64 { }
65
66 virtual ~ZRObject() = default;
67
68 // check to see if the RoI and the object overlap
69 // ok really check if the object is completely outside,
70 // otherwise it must overlap
71 virtual bool inRoI(const RegSelRoI& roi) const {
72 if ( !enabled() ) return false;
73 if ( (roi.getzMax(rMin())<zMin() && roi.getzMax(rMax())<z2Min()) ||
74 (roi.getzMin(rMin())>zMax() && roi.getzMin(rMax())>z2Max()) ) {
75 return false;
76 }
77 return true;
78 }
79
80 double rMin() const { return m_rMin; }
81 double rMax() const { return m_rMax; }
82
83 double zMin() const { return m_zMin; }
84 double zMax() const { return m_zMax; }
85
86 double z2Min() const { return m_z2Min; }
87 double z2Max() const { return m_z2Max; }
88
89 double rMin(double rmin) { m_rMin = rmin; return m_rMin; }
90 double rMax(double rmax) { m_rMax = rmax; return m_rMax; }
91
92 double zMin(double zmin) { m_zMin = zmin; return m_zMin; }
93 double zMax(double zmax) { m_zMax = zmax; return m_zMax; }
94
95 double z2Min(double zmin) { m_z2Min = zmin; return m_z2Min; }
96 double z2Max(double zmax) { m_z2Max = zmax; return m_z2Max; }
97
98 bool enabled() const { return m_enabled; }
99 bool enable() { return m_enabled=true; }
100 bool disable() { return m_enabled=false; }
101
102 double _etaMin(double z=0) const {
103 double eta1 = calceta( rMin(), zMin()-z);
104 double eta2 = calceta( rMax(), z2Min()-z);
105 if ( eta1<eta2 ) return eta1;
106 else return eta2;
107 }
108
109 double _etaMax(double z=0) const {
110 double eta1 = calceta( rMin(), zMax()-z);
111 double eta2 = calceta( rMax(), z2Max()-z);
112 if ( eta1>eta2 ) return eta1;
113 else return eta2;
114 }
115
116protected:
117
118 double m_rMin, m_rMax;
119 double m_zMin, m_zMax;
121
123
124};
125
126
127inline std::ostream& operator<<(std::ostream& s, const ZRObject& zr) {
128 s << "[ r=" << zr.rMin() << " - " << zr.rMax()
129 << " z=" << zr.zMin() << " - " << zr.zMax();
130 if ( zr.zMin()!=zr.z2Min() || zr.zMax()!=zr.z2Max() ) s << " z2=" << zr.z2Min() << " - " << zr.z2Max();
131 s << " ]";
132 return s;
133}
134
135
136
137#endif /* REGSELLUT_ZROBJECT_H */
#define M_PI
Scalar theta() const
theta method
#define z
std::ostream & operator<<(std::ostream &s, const ZRObject &zr)
Definition ZRObject.h:127
double calceta(double r, double z)
Definition ZRObject.h:33
double getzMin() const
Definition RegSelRoI.h:44
double getzMax() const
Definition RegSelRoI.h:45
double zMin(double zmin)
Definition ZRObject.h:92
double _etaMin(double z=0) const
Definition ZRObject.h:102
double m_rMin
Definition ZRObject.h:118
ZRObject(double rmin, double rmax, double zmin, double zmax, double z2min, double z2max)
Definition ZRObject.h:57
double rMax() const
Definition ZRObject.h:81
bool enabled() const
Definition ZRObject.h:98
ZRObject()
Definition ZRObject.h:45
double z2Min() const
Definition ZRObject.h:86
double rMin() const
Definition ZRObject.h:80
virtual ~ZRObject()=default
double m_zMin
Definition ZRObject.h:119
double m_z2Min
Definition ZRObject.h:120
bool enable()
Definition ZRObject.h:99
double z2Max(double zmax)
Definition ZRObject.h:96
double rMin(double rmin)
Definition ZRObject.h:89
double zMax(double zmax)
Definition ZRObject.h:93
double rMax(double rmax)
Definition ZRObject.h:90
double _etaMax(double z=0) const
Definition ZRObject.h:109
double zMin() const
Definition ZRObject.h:83
ZRObject(double rmin, double rmax, double zmin, double zmax)
Definition ZRObject.h:50
double zMax() const
Definition ZRObject.h:84
bool disable()
Definition ZRObject.h:100
double z2Max() const
Definition ZRObject.h:87
virtual bool inRoI(const RegSelRoI &roi) const
Definition ZRObject.h:71
double m_zMax
Definition ZRObject.h:119
double m_rMax
Definition ZRObject.h:118
double m_z2Max
Definition ZRObject.h:120
bool m_enabled
Definition ZRObject.h:122
double z2Min(double zmin)
Definition ZRObject.h:95
int r
Definition globals.cxx:22