CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
List of all members | Public Member Functions | Private Types | Private Member Functions | Private Attributes
RPCSeedrecHitFinder Class Reference

#include <RPCSeedrecHitFinder.h>

Public Member Functions

void configure (const edm::ParameterSet &iConfig)
 
void fillrecHits ()
 
 RPCSeedrecHitFinder ()
 
void setInput (MuonRecHitContainer(&recHits)[12])
 
void setLayers (const std::vector< unsigned int > &Layers)
 
void setOutput (RPCSeedFinder *Seed)
 
void unsetInput ()
 
 ~RPCSeedrecHitFinder ()
 

Private Types

typedef
MuonTransientTrackingRecHit::ConstMuonRecHitContainer 
ConstMuonRecHitContainer
 
typedef
MuonTransientTrackingRecHit::ConstMuonRecHitPointer 
ConstMuonRecHitPointer
 
typedef
MuonTransientTrackingRecHit::MuonRecHitContainer 
MuonRecHitContainer
 
typedef
MuonTransientTrackingRecHit::MuonRecHitPointer 
MuonRecHitPointer
 

Private Member Functions

void checkandfill ()
 
void complete (unsigned int LayerIndex)
 
double getdeltaPhifromrecHits ()
 

Private Attributes

unsigned int BxRange
 
std::vector< int > ClusterSet
 
bool isConfigured
 
bool isInputset
 
bool isLayerset
 
bool isOutputset
 
std::vector< unsigned int > LayersinRPC
 
double MaxDeltaPhi
 
MuonRecHitContainerrecHitsRPC [12]
 
ConstMuonRecHitContainer therecHits
 
RPCSeedFindertheSeed
 

Detailed Description

Definition at line 27 of file RPCSeedrecHitFinder.h.

Member Typedef Documentation

Definition at line 31 of file RPCSeedrecHitFinder.h.

Definition at line 29 of file RPCSeedrecHitFinder.h.

Definition at line 30 of file RPCSeedrecHitFinder.h.

Definition at line 28 of file RPCSeedrecHitFinder.h.

Constructor & Destructor Documentation

RPCSeedrecHitFinder::RPCSeedrecHitFinder ( )

Definition at line 21 of file RPCSeedrecHitFinder.cc.

References RPCSeedFinder::isConfigured, and RPCSeedFinder::isOutputset.

21  {
22  // Initiate the member
23  isLayerset = false;
24  isConfigured = false;
25  isInputset = false;
26  isOutputset = false;
27  BxRange = 0;
28  MaxDeltaPhi = 0;
29  ClusterSet.clear();
30  LayersinRPC.clear();
31  therecHits.clear();
32 }
std::vector< unsigned int > LayersinRPC
std::vector< int > ClusterSet
ConstMuonRecHitContainer therecHits
RPCSeedrecHitFinder::~RPCSeedrecHitFinder ( )

Definition at line 34 of file RPCSeedrecHitFinder.cc.

34 {}

Member Function Documentation

void RPCSeedrecHitFinder::checkandfill ( )
private

Definition at line 220 of file RPCSeedrecHitFinder.cc.

References gather_cfg::cout.

220  {
221  if (therecHits.size() >= 3) {
223  theSeed->seed();
224  } else
225  cout << "Layer less than 3, could not fill a RPCSeedFinder" << endl;
226 }
void setrecHits(ConstMuonRecHitContainer &recHits)
RPCSeedFinder * theSeed
tuple cout
Definition: gather_cfg.py:144
ConstMuonRecHitContainer therecHits
void RPCSeedrecHitFinder::complete ( unsigned int  LayerIndex)
private

Definition at line 82 of file RPCSeedrecHitFinder.cc.

References funct::abs(), SplitLinear::begin, RPCRecHit::BunchX(), L1TStage2uGTEmulatorClient_cff::BX, TrackingRecHit::clone(), RPCRecHit::clusterSize(), PixelTestBeamValidation_cfi::ClusterSize, gather_cfg::cout, srCondWrite_cfg::deltaPhi, TrackingRecHit::hit(), colinearityKinematic::Phi, PV3DBase< T, PVType, FrameType >::phi(), PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

82  {
83  for (MuonRecHitContainer::const_iterator it = recHitsRPC[LayersinRPC[LayerIndex]]->begin();
84  it != recHitsRPC[LayersinRPC[LayerIndex]]->end();
85  it++) {
86  cout << "Completing layer[" << LayersinRPC[LayerIndex] << "]." << endl;
87 
88  // Check validation
89  if (!(*it)->isValid())
90  continue;
91 
92  // Check BX range, be sure there is only RPCRecHit in the MuonRecHitContainer when use the dynamic_cast
93  TrackingRecHit* thisTrackingRecHit = (*it)->hit()->clone();
94  // Should also delete the RPCRecHit object cast by dynamic_cast<> ?
95  RPCRecHit* thisRPCRecHit = dynamic_cast<RPCRecHit*>(thisTrackingRecHit);
96  int BX = thisRPCRecHit->BunchX();
97  int ClusterSize = thisRPCRecHit->clusterSize();
98  delete thisTrackingRecHit;
99  // Check BX
100  if ((unsigned int)abs(BX) > BxRange)
101  continue;
102  // Check cluster size
103  bool Clustercheck = false;
104  if (ClusterSet.empty())
105  Clustercheck = true;
106  for (std::vector<int>::const_iterator CluIter = ClusterSet.begin(); CluIter != ClusterSet.end(); CluIter++)
107  if (ClusterSize == (*CluIter))
108  Clustercheck = true;
109  if (Clustercheck != true)
110  continue;
111  // Check the recHits Phi range
112  GlobalPoint pos = (*it)->globalPosition();
113  double Phi = pos.phi();
114  cout << "Phi: " << Phi << endl;
115  // The recHits should locate in some phi range
116  therecHits.push_back(*it);
117  double deltaPhi = getdeltaPhifromrecHits();
118  cout << "Delta phi: " << deltaPhi << endl;
119  therecHits.pop_back();
120  if (deltaPhi > MaxDeltaPhi)
121  continue;
122 
123  // If pass all, add to the seed
124  therecHits.push_back(*it);
125  cout << "RecHit's global position: " << pos.x() << ", " << pos.y() << ", " << pos.z() << endl;
126 
127  // Check if this recHit is the last one in the seed
128  // If it is the last one, calculate the seed
129  if (LayerIndex == (LayersinRPC.size() - 1)) {
130  cout << "Check and fill one seed." << endl;
131  checkandfill();
132  }
133  // If it is not the last one, continue to fill the seed from other layers
134  else
135  complete(LayerIndex + 1);
136 
137  // Remember to pop the recHit before add another one from the same layer!
138  therecHits.pop_back();
139  }
140 }
std::vector< unsigned int > LayersinRPC
Geom::Phi< T > phi() const
Definition: PV3DBase.h:66
T y() const
Definition: PV3DBase.h:60
int clusterSize() const
Definition: RPCRecHit.h:77
void complete(unsigned int LayerIndex)
T z() const
Definition: PV3DBase.h:61
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
std::vector< int > ClusterSet
virtual TrackingRecHit * clone() const =0
MuonRecHitContainer * recHitsRPC[12]
virtual TrackingRecHit const * hit() const
int BunchX() const
Definition: RPCRecHit.h:73
tuple cout
Definition: gather_cfg.py:144
ConstMuonRecHitContainer therecHits
T x() const
Definition: PV3DBase.h:59
void RPCSeedrecHitFinder::configure ( const edm::ParameterSet iConfig)

Definition at line 36 of file RPCSeedrecHitFinder.cc.

References edm::ParameterSet::getParameter(), and RPCSeedFinder::isConfigured.

36  {
37  // Set the configuration
38  BxRange = iConfig.getParameter<unsigned int>("BxRange");
39  MaxDeltaPhi = iConfig.getParameter<double>("MaxDeltaPhi");
40  ClusterSet = iConfig.getParameter<std::vector<int> >("ClusterSet");
41 
42  // Set the signal open
43  isConfigured = true;
44 }
std::vector< int > ClusterSet
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
void RPCSeedrecHitFinder::fillrecHits ( )

Definition at line 63 of file RPCSeedrecHitFinder.cc.

References gather_cfg::cout, RPCSeedFinder::isConfigured, RPCSeedFinder::isOutputset, and isotrackApplyRegressor::k.

63  {
64  if (isLayerset == false || isConfigured == false || isOutputset == false || isInputset == false) {
65  cout << "Not set the IO or not configured yet" << endl;
66  return;
67  }
68  cout << "Now fill recHits from Layers: ";
69  for (unsigned int k = 0; k < LayersinRPC.size(); k++)
70  cout << LayersinRPC[k] << " ";
71  cout << endl;
72  unsigned int LayerIndex = 0;
73  therecHits.clear();
74  complete(LayerIndex);
75 
76  // Unset the signal
77  LayersinRPC.clear();
78  therecHits.clear();
79  isLayerset = false;
80 }
std::vector< unsigned int > LayersinRPC
void complete(unsigned int LayerIndex)
tuple cout
Definition: gather_cfg.py:144
ConstMuonRecHitContainer therecHits
double RPCSeedrecHitFinder::getdeltaPhifromrecHits ( )
private

Definition at line 142 of file RPCSeedrecHitFinder.cc.

References gather_cfg::cout, srCondWrite_cfg::deltaPhi, lessPhi(), M_PI, and dqmiodumpmetadata::n.

142  {
143  ConstMuonRecHitContainer sortRecHits = therecHits;
144  sort(sortRecHits.begin(), sortRecHits.end(), lessPhi);
145  cout << "Sorted recHit's Phi: ";
146  for (ConstMuonRecHitContainer::const_iterator iter = sortRecHits.begin(); iter != sortRecHits.end(); iter++)
147  cout << (*iter)->globalPosition().phi() << ", ";
148  cout << endl;
149  // Calculate the deltaPhi, take care Geom::Phi always in range [-pi,pi)
150  // In case of some deltaPhi larger then Pi, use value() in Geom::Phi to get the true value in radians of Phi, then do the calculation
151  double deltaPhi = 0;
152  if (sortRecHits.size() <= 1)
153  return deltaPhi;
154  if (sortRecHits.size() == 2) {
155  ConstMuonRecHitContainer::const_iterator iter1 = sortRecHits.begin();
156  ConstMuonRecHitContainer::const_iterator iter2 = sortRecHits.begin();
157  iter2++;
158  deltaPhi = (((*iter2)->globalPosition().phi().value() - (*iter1)->globalPosition().phi().value()) > M_PI)
159  ? (2 * M_PI - ((*iter2)->globalPosition().phi().value() - (*iter1)->globalPosition().phi().value()))
160  : ((*iter2)->globalPosition().phi().value() - (*iter1)->globalPosition().phi().value());
161  return deltaPhi;
162  } else {
163  deltaPhi = 2 * M_PI;
164  int n = 0;
165  for (ConstMuonRecHitContainer::const_iterator iter = sortRecHits.begin(); iter != sortRecHits.end(); iter++) {
166  cout << "Before this loop deltaPhi is " << deltaPhi << endl;
167  n++;
168  double deltaPhi_more = 0;
169  double deltaPhi_less = 0;
170  if (iter == sortRecHits.begin()) {
171  cout << "Calculateing frist loop..." << endl;
172  ConstMuonRecHitContainer::const_iterator iter_more = ++iter;
173  --iter;
174  ConstMuonRecHitContainer::const_iterator iter_less = sortRecHits.end();
175  --iter_less;
176  cout << "more_Phi: " << (*iter_more)->globalPosition().phi()
177  << ", less_Phi: " << (*iter_less)->globalPosition().phi()
178  << ", iter_Phi: " << (*iter)->globalPosition().phi() << endl;
179  deltaPhi_more =
180  (2 * M_PI) - ((*iter_more)->globalPosition().phi().value() - (*iter)->globalPosition().phi().value());
181  deltaPhi_less = (*iter_less)->globalPosition().phi().value() - (*iter)->globalPosition().phi().value();
182  } else if (iter == (--sortRecHits.end())) {
183  cout << "Calculateing last loop..." << endl;
184  ConstMuonRecHitContainer::const_iterator iter_less = --iter;
185  ++iter;
186  ConstMuonRecHitContainer::const_iterator iter_more = sortRecHits.begin();
187  cout << "more_Phi: " << (*iter_more)->globalPosition().phi()
188  << ", less_Phi: " << (*iter_less)->globalPosition().phi()
189  << ", iter_Phi: " << (*iter)->globalPosition().phi() << endl;
190  deltaPhi_less =
191  (2 * M_PI) - ((*iter)->globalPosition().phi().value() - (*iter_less)->globalPosition().phi().value());
192  deltaPhi_more = (*iter)->globalPosition().phi().value() - (*iter_more)->globalPosition().phi().value();
193  } else {
194  cout << "Calculateing " << n << "st loop..." << endl;
195  ConstMuonRecHitContainer::const_iterator iter_less = --iter;
196  ++iter;
197  ConstMuonRecHitContainer::const_iterator iter_more = ++iter;
198  --iter;
199  cout << "more_Phi: " << (*iter_more)->globalPosition().phi()
200  << ", less_Phi: " << (*iter_less)->globalPosition().phi()
201  << ", iter_Phi: " << (*iter)->globalPosition().phi() << endl;
202  deltaPhi_less =
203  (2 * M_PI) - ((*iter)->globalPosition().phi().value() - (*iter_less)->globalPosition().phi().value());
204  deltaPhi_more =
205  (2 * M_PI) - ((*iter_more)->globalPosition().phi().value() - (*iter)->globalPosition().phi().value());
206  }
207  if (deltaPhi > deltaPhi_more)
208  deltaPhi = deltaPhi_more;
209  if (deltaPhi > deltaPhi_less)
210  deltaPhi = deltaPhi_less;
211 
212  cout << "For this loop deltaPhi_more is " << deltaPhi_more << endl;
213  cout << "For this loop deltaPhi_less is " << deltaPhi_less << endl;
214  cout << "For this loop deltaPhi is " << deltaPhi << endl;
215  }
216  return deltaPhi;
217  }
218 }
bool lessPhi(const MuonTransientTrackingRecHit::ConstMuonRecHitPointer &it1, const MuonTransientTrackingRecHit::ConstMuonRecHitPointer &it2)
MuonTransientTrackingRecHit::ConstMuonRecHitContainer ConstMuonRecHitContainer
#define M_PI
tuple cout
Definition: gather_cfg.py:144
ConstMuonRecHitContainer therecHits
void RPCSeedrecHitFinder::setInput ( MuonRecHitContainer(&)  recHits[12])

Definition at line 46 of file RPCSeedrecHitFinder.cc.

References mps_fire::i, HLT_FULL_cff::recHits, and RPCLayerNumber.

46  {
47  for (unsigned int i = 0; i < RPCLayerNumber; i++)
48  recHitsRPC[i] = &recHits[i];
49  isInputset = true;
50 }
#define RPCLayerNumber
MuonRecHitContainer * recHitsRPC[12]
void RPCSeedrecHitFinder::setLayers ( const std::vector< unsigned int > &  Layers)

Definition at line 58 of file RPCSeedrecHitFinder.cc.

58  {
59  LayersinRPC = Layers;
60  isLayerset = true;
61 }
std::vector< unsigned int > LayersinRPC
void RPCSeedrecHitFinder::setOutput ( RPCSeedFinder Seed)

Definition at line 53 of file RPCSeedrecHitFinder.cc.

References RPCSeedFinder::isOutputset.

53  {
54  theSeed = Seed;
55  isOutputset = true;
56 }
RPCSeedFinder * theSeed
void RPCSeedrecHitFinder::unsetInput ( )

Definition at line 52 of file RPCSeedrecHitFinder.cc.

52 { isInputset = false; }

Member Data Documentation

unsigned int RPCSeedrecHitFinder::BxRange
private

Definition at line 51 of file RPCSeedrecHitFinder.h.

std::vector<int> RPCSeedrecHitFinder::ClusterSet
private

Definition at line 53 of file RPCSeedrecHitFinder.h.

bool RPCSeedrecHitFinder::isConfigured
private

Definition at line 56 of file RPCSeedrecHitFinder.h.

bool RPCSeedrecHitFinder::isInputset
private

Definition at line 57 of file RPCSeedrecHitFinder.h.

bool RPCSeedrecHitFinder::isLayerset
private

Definition at line 55 of file RPCSeedrecHitFinder.h.

bool RPCSeedrecHitFinder::isOutputset
private

Definition at line 58 of file RPCSeedrecHitFinder.h.

std::vector<unsigned int> RPCSeedrecHitFinder::LayersinRPC
private

Definition at line 60 of file RPCSeedrecHitFinder.h.

double RPCSeedrecHitFinder::MaxDeltaPhi
private

Definition at line 52 of file RPCSeedrecHitFinder.h.

MuonRecHitContainer* RPCSeedrecHitFinder::recHitsRPC[12]
private

Definition at line 61 of file RPCSeedrecHitFinder.h.

ConstMuonRecHitContainer RPCSeedrecHitFinder::therecHits
private

Definition at line 62 of file RPCSeedrecHitFinder.h.

RPCSeedFinder* RPCSeedrecHitFinder::theSeed
private

Definition at line 63 of file RPCSeedrecHitFinder.h.