CMS 3D CMS Logo

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

#include <CSCSegtoRPC.h>

Public Member Functions

 CSCSegtoRPC (edm::Handle< CSCSegmentCollection > allCSCSegments, const edm::EventSetup &iSetup, const edm::Event &iEvent, bool debug, double eyr)
 
RPCRecHitCollectionthePoints ()
 
 ~CSCSegtoRPC ()
 

Private Attributes

RPCRecHitCollection_ThePoints
 
bool inclcsc
 
double MaxD
 
edm::OwnVector< RPCRecHitRPCPointVector
 

Detailed Description

Definition at line 10 of file CSCSegtoRPC.h.

Constructor & Destructor Documentation

CSCSegtoRPC::CSCSegtoRPC ( edm::Handle< CSCSegmentCollection allCSCSegments,
const edm::EventSetup iSetup,
const edm::Event iEvent,
bool  debug,
double  eyr 
)
explicit

Definition at line 59 of file CSCSegtoRPC.cc.

References _ThePoints, PV3DBase< T, PVType, FrameType >::barePhi(), edm::OwnVector< T, P >::begin(), CSCDetId::chamber(), edm::OwnVector< T, P >::clear(), gather_cfg::cout, edm::OwnVector< T, P >::end(), CSCDetId::endcap(), edm::EventSetup::get(), ObjectMapCSC::GetInstance(), ObjectMapCSC::GetRolls(), RPCRoll::id(), CSCChamber::id(), TrapezoidalStripTopology::localPosition(), MaxD, RPCRoll::nstrips(), PV3DBase< T, PVType, FrameType >::perp(), TrapezoidalStripTopology::pitch(), edm::OwnVector< T, P >::push_back(), RPCDetId::ring(), CSCDetId::ring(), RPCPointVector, RPCGeomServ::segment(), mathSSE::sqrt(), CSCDetId::station(), RPCDetId::station(), TrapezoidalStripTopology::stripLength(), GeomDet::surface(), GeomDet::toGlobal(), Surface::toGlobal(), GeomDet::toLocal(), GloballyPositioned< T >::toLocal(), RPCRoll::topology(), X, PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), Gflash::Z, and PV3DBase< T, PVType, FrameType >::z().

59  {
60 
63 
64  iSetup.get<MuonGeometryRecord>().get(rpcGeo);
65  iSetup.get<MuonGeometryRecord>().get(cscGeo);
66 
67  MaxD=80.;
68 
69  if(debug) std::cout<<"CSC \t Number of CSC Segments in this event = "<<allCSCSegments->size()<<std::endl;
70 
72 
73  if(allCSCSegments->size()==0){
74  if(debug) std::cout<<"CSC 0 segments skiping event"<<std::endl;
75  }else {
76  std::map<CSCDetId,int> CSCSegmentsCounter;
78 
79  int segmentsInThisEventInTheEndcap=0;
80 
81  for (segment = allCSCSegments->begin();segment!=allCSCSegments->end(); ++segment){
82  CSCSegmentsCounter[segment->cscDetId()]++;
83  segmentsInThisEventInTheEndcap++;
84  }
85 
86  if(debug) std::cout<<"CSC \t loop over all the CSCSegments "<<std::endl;
87  for (segment = allCSCSegments->begin();segment!=allCSCSegments->end(); ++segment){
88  CSCDetId CSCId = segment->cscDetId();
89 
90  if(debug) std::cout<<"CSC \t \t This Segment is in Chamber id: "<<CSCId<<std::endl;
91  if(debug) std::cout<<"CSC \t \t Number of segments in this CSC = "<<CSCSegmentsCounter[CSCId]<<std::endl;
92  if(debug) std::cout<<"CSC \t \t Is the only one in this CSC? is not ind the ring 1 or station 4? Are there more than 2 segments in the event?"<<std::endl;
93 
94  if(CSCSegmentsCounter[CSCId]==1 && CSCId.station()!=4 && CSCId.ring()!=1 && allCSCSegments->size()>=2){
95  if(debug) std::cout<<"CSC \t \t yes"<<std::endl;
96  int cscEndCap = CSCId.endcap();
97  int cscStation = CSCId.station();
98  int cscRing = CSCId.ring();
99  int rpcRegion = 1; if(cscEndCap==2) rpcRegion= -1;//Relacion entre las endcaps
100  int rpcRing = cscRing;
101  if(cscRing==4)rpcRing =1;
102  int rpcStation = cscStation;
103  int rpcSegment = CSCId.chamber();
104 
105  LocalPoint segmentPosition= segment->localPosition();
106  LocalVector segmentDirection=segment->localDirection();
107  float dz=segmentDirection.z();
108 
109  if(debug) std::cout<<"CSC \t \t \t Information about the segment"
110  <<"RecHits ="<<segment->nRecHits()
111  <<"Angle ="<<acos(dz)*180/3.1415926<<std::endl;
112 
113  if(debug) std::cout<<"CSC \t \t Is a good Segment? dim = 4, 4 <= nRecHits <= 10 Incident angle int range 45 < "<<acos(dz)*180/3.1415926<<" < 135? "<<std::endl;
114 
115  if((segment->dimension()==4) && (segment->nRecHits()<=10 && segment->nRecHits()>=4)){
116  //&& acos(dz)*180/3.1415926 > 45. && acos(dz)*180/3.1415926 < 135.){
117  //&& segment->chi2()< ??)Add 3 segmentes in the endcaps???
118 
119 
120  if(debug) std::cout<<"CSC \t \t yes"<<std::endl;
121  if(debug) std::cout<<"CSC \t \t CSC Segment Dimension "<<segment->dimension()<<std::endl;
122 
123  float Xo=segmentPosition.x();
124  float Yo=segmentPosition.y();
125  float Zo=segmentPosition.z();
126  float dx=segmentDirection.x();
127  float dy=segmentDirection.y();
128  float dz=segmentDirection.z();
129 
130  if(debug) std::cout<<"Calling to Object Map class"<<std::endl;
131  ObjectMapCSC* TheObjectCSC = ObjectMapCSC::GetInstance(iSetup);
132  if(debug) std::cout<<"Creating the CSCIndex"<<std::endl;
133  CSCStationIndex theindex(rpcRegion,rpcStation,rpcRing,rpcSegment);
134  if(debug) std::cout<<"Getting the Rolls for the given index"<<std::endl;
135 
136  std::set<RPCDetId> rollsForThisCSC = TheObjectCSC->GetInstance(iSetup)->GetRolls(theindex);
137 
138 
139  if(debug) std::cout<<"CSC \t \t Getting chamber from Geometry"<<std::endl;
140  const CSCChamber* TheChamber=cscGeo->chamber(CSCId);
141  if(debug) std::cout<<"CSC \t \t Getting ID from Chamber"<<std::endl;
142  const CSCDetId TheId=TheChamber->id();
143 
144  if(debug) std::cout<<"CSC \t \t Number of rolls for this CSC = "<<rollsForThisCSC.size()<<std::endl;
145 
146  if(debug) std::cout<<"CSC \t \t Printing The Id"<<TheId<<std::endl;
147 
148  if(rpcRing!=1&&rpcStation!=4){//They don't exist!
149 
150  assert(rollsForThisCSC.size()>=1);
151 
152  if(debug) std::cout<<"CSC \t \t Loop over all the rolls asociated to this CSC"<<std::endl;
153  for (std::set<RPCDetId>::iterator iteraRoll = rollsForThisCSC.begin();iteraRoll != rollsForThisCSC.end(); iteraRoll++){
154  const RPCRoll* rollasociated = rpcGeo->roll(*iteraRoll);
155  RPCDetId rpcId = rollasociated->id();
156 
157  if(debug) std::cout<<"CSC \t \t \t We are in the roll getting the surface"<<rpcId<<std::endl;
158  const BoundPlane & RPCSurface = rollasociated->surface();
159 
160  if(debug) std::cout<<"CSC \t \t \t RollID: "<<rpcId<<std::endl;
161 
162  if(debug) std::cout<<"CSC \t \t \t Doing the extrapolation to this roll"<<std::endl;
163  if(debug) std::cout<<"CSC \t \t \t CSC Segment Direction in CSCLocal "<<segmentDirection<<std::endl;
164  if(debug) std::cout<<"CSC \t \t \t CSC Segment Point in CSCLocal "<<segmentPosition<<std::endl;
165 
166  GlobalPoint CenterPointRollGlobal = RPCSurface.toGlobal(LocalPoint(0,0,0));
167  if(debug) std::cout<<"CSC \t \t \t Center (0,0,0) of the Roll in Global"<<CenterPointRollGlobal<<std::endl;
168  GlobalPoint CenterPointCSCGlobal = TheChamber->toGlobal(LocalPoint(0,0,0));
169  if(debug) std::cout<<"CSC \t \t \t Center (0,0,0) of the CSC in Global"<<CenterPointCSCGlobal<<std::endl;
170  GlobalPoint segmentPositionInGlobal=TheChamber->toGlobal(segmentPosition); //new way to convert to global
171  if(debug) std::cout<<"CSC \t \t \t Segment Position in Global"<<segmentPositionInGlobal<<std::endl;
172  LocalPoint CenterRollinCSCFrame = TheChamber->toLocal(CenterPointRollGlobal);
173 
174  if(debug){//to check CSC RPC phi relation!
175  float rpcphi=0;
176  float cscphi=0;
177 
178  (CenterPointRollGlobal.barePhi()<0)?
179  rpcphi = 2*3.141592+CenterPointRollGlobal.barePhi():rpcphi=CenterPointRollGlobal.barePhi();
180 
181  (CenterPointCSCGlobal.barePhi()<0)?
182  cscphi = 2*3.1415926536+CenterPointCSCGlobal.barePhi():cscphi=CenterPointCSCGlobal.barePhi();
183 
184  float df=fabs(cscphi-rpcphi);
185  float dr=fabs(CenterPointRollGlobal.perp()-CenterPointCSCGlobal.perp());
186  float diffz=CenterPointRollGlobal.z()-CenterPointCSCGlobal.z();
187  float dfg=df*180./3.14159265;
188 
189  if(debug) std::cout<<"CSC \t \t \t z of RPC="<<CenterPointRollGlobal.z()<<"z of CSC"<<CenterPointCSCGlobal.z()<<" dfg="<<dfg<<std::endl;
190 
191  RPCGeomServ rpcsrv(rpcId);
192 
193  if(dr>200.||fabs(dz)>55.||dfg>1.){
194  //if(rpcRegion==1&&dfg>1.&&dr>100.){
195  if (debug) std::cout
196  <<"\t \t \t CSC Station= "<<CSCId.station()
197  <<" Ring= "<<CSCId.ring()
198  <<" Chamber= "<<CSCId.chamber()
199  <<" cscphi="<<cscphi*180/3.14159265
200  <<"\t RPC Station= "<<rpcId.station()
201  <<" ring= "<<rpcId.ring()
202  <<" segment =-> "<<rpcsrv.segment()
203  <<" rollphi="<<rpcphi*180/3.14159265
204  <<"\t dfg="<<dfg
205  <<" dz="<<diffz
206  <<" dr="<<dr
207  <<std::endl;
208 
209  }
210  }
211 
212  float D=CenterRollinCSCFrame.z();
213 
214  float X=Xo+dx*D/dz;
215  float Y=Yo+dy*D/dz;
216  float Z=D;
217 
218  const TrapezoidalStripTopology* top_=dynamic_cast<const TrapezoidalStripTopology*>(&(rollasociated->topology()));
219  LocalPoint xmin = top_->localPosition(0.);
220  if(debug) std::cout<<"CSC \t \t \t xmin of this Roll "<<xmin<<"cm"<<std::endl;
221  LocalPoint xmax = top_->localPosition((float)rollasociated->nstrips());
222  if(debug) std::cout<<"CSC \t \t \t xmax of this Roll "<<xmax<<"cm"<<std::endl;
223  float rsize = fabs( xmax.x()-xmin.x() );
224  if(debug) std::cout<<"CSC \t \t \t Roll Size "<<rsize<<"cm"<<std::endl;
225  float stripl = top_->stripLength();
226  float stripw = top_->pitch();
227 
228  if(debug) std::cout<<"CSC \t \t \t Strip Lenght "<<stripl<<"cm"<<std::endl;
229  if(debug) std::cout<<"CSC \t \t \t Strip Width "<<stripw<<"cm"<<std::endl;
230 
231  if(debug) std::cout<<"CSC \t \t \t X Predicted in CSCLocal= "<<X<<"cm"<<std::endl;
232  if(debug) std::cout<<"CSC \t \t \t Y Predicted in CSCLocal= "<<Y<<"cm"<<std::endl;
233  if(debug) std::cout<<"CSC \t \t \t Z Predicted in CSCLocal= "<<Z<<"cm"<<std::endl;
234 
235  float extrapolatedDistance = sqrt((X-Xo)*(X-Xo)+(Y-Yo)*(Y-Yo)+(Z-Zo)*(Z-Zo));
236 
237  if(debug) std::cout<<"CSC \t \t \t Is the distance of extrapolation less than MaxD? ="<<extrapolatedDistance<<"cm"<<" MaxD="<<MaxD<<"cm"<<std::endl;
238 
239  if(extrapolatedDistance<=MaxD){
240 
241  if(debug) std::cout<<"CSC \t \t \t yes"<<std::endl;
242 
243  GlobalPoint GlobalPointExtrapolated=TheChamber->toGlobal(LocalPoint(X,Y,Z));
244  if(debug) std::cout<<"CSC \t \t \t Point ExtraPolated in Global"<<GlobalPointExtrapolated<< std::endl;
245 
246 
247  LocalPoint PointExtrapolatedRPCFrame = RPCSurface.toLocal(GlobalPointExtrapolated);
248 
249  if(debug) std::cout<<"CSC \t \t \t Point Extrapolated in RPCLocal"<<PointExtrapolatedRPCFrame<< std::endl;
250  if(debug) std::cout<<"CSC \t \t \t Corner of the Roll = ("<<rsize*eyr<<","<<stripl*eyr<<")"<<std::endl;
251  if(debug) std::cout<<"CSC \t \t \t Info About the Point Extrapolated in X Abs ("<<fabs(PointExtrapolatedRPCFrame.x())<<","
252  <<fabs(PointExtrapolatedRPCFrame.y())<<","<<fabs(PointExtrapolatedRPCFrame.z())<<")"<<std::endl;
253  if(debug) std::cout<<"CSC \t \t \t dz="
254  <<fabs(PointExtrapolatedRPCFrame.z())<<" dx="
255  <<fabs(PointExtrapolatedRPCFrame.x())<<" dy="
256  <<fabs(PointExtrapolatedRPCFrame.y())<<std::endl;
257 
258  if(debug) std::cout<<"CSC \t \t \t Does the extrapolation go inside this roll????"<<std::endl;
259 
260  if(fabs(PointExtrapolatedRPCFrame.z()) < 1. &&
261  fabs(PointExtrapolatedRPCFrame.x()) < rsize*eyr &&
262  fabs(PointExtrapolatedRPCFrame.y()) < stripl*eyr){
263  if(debug) std::cout<<"CSC \t \t \t \t yes"<<std::endl;
264  if(debug) std::cout<<"CSC \t \t \t \t Creating the RecHit"<<std::endl;
265  RPCRecHit RPCPoint(rpcId,0,PointExtrapolatedRPCFrame);
266  if(debug) std::cout<<"CSC \t \t \t \t Clearing the vector"<<std::endl;
268  if(debug) std::cout<<"CSC \t \t \t \t Pushing back"<<std::endl;
269  RPCPointVector.push_back(RPCPoint);
270  if(debug) std::cout<<"CSC \t \t \t \t Putting the vector"<<std::endl;
272  }
273  }
274  }
275  }
276  }
277  }
278  }
279  }
280 }
const double Z[kNumberCalorimeter]
int chamber() const
Definition: CSCDetId.h:70
GlobalPoint toGlobal(const Point2DBase< Scalar, LocalTag > lp) const
Definition: Surface.h:78
const Topology & topology() const
Definition: RPCRoll.cc:30
T perp() const
Definition: PV3DBase.h:66
CSCDetId id() const
Get the (concrete) DetId.
Definition: CSCChamber.h:37
GlobalPoint toGlobal(const Local2DPoint &lp) const
Conversion to the global R.F. from the R.F. of the GeomDet.
Definition: GeomDet.h:49
int nstrips() const
Definition: RPCRoll.cc:46
T y() const
Definition: PV3DBase.h:57
#define X(str)
Definition: MuonsGrabber.cc:49
LocalPoint toLocal(const GlobalPoint &gp) const
Conversion to the R.F. of the GeomDet.
Definition: GeomDet.h:64
double MaxD
Definition: CSCSegtoRPC.h:20
iterator begin()
Definition: OwnVector.h:234
int endcap() const
Definition: CSCDetId.h:95
T barePhi() const
Definition: PV3DBase.h:62
C::const_iterator const_iterator
constant access iterator type
Definition: RangeMap.h:45
void push_back(D *&d)
Definition: OwnVector.h:288
RPCDetId id() const
Definition: RPCRoll.cc:24
int ring() const
Definition: RPCDetId.h:74
T sqrt(T t)
Definition: SSEVec.h:28
LocalPoint toLocal(const GlobalPoint &gp) const
T z() const
Definition: PV3DBase.h:58
void clear()
Definition: OwnVector.h:397
static ObjectMapCSC * GetInstance(const edm::EventSetup &iSetup)
Definition: CSCSegtoRPC.cc:16
int ring() const
Definition: CSCDetId.h:77
iterator end()
Definition: OwnVector.h:241
RPCRecHitCollection * _ThePoints
Definition: CSCSegtoRPC.h:17
edm::RangeMap< RPCDetId, edm::OwnVector< RPCRecHit, edm::ClonePolicy< RPCRecHit > >, edm::ClonePolicy< RPCRecHit > > RPCRecHitCollection
const T & get() const
Definition: EventSetup.h:55
edm::OwnVector< RPCRecHit > RPCPointVector
Definition: CSCSegtoRPC.h:18
virtual LocalPoint localPosition(float strip) const
Local3DPoint LocalPoint
Definition: LocalPoint.h:11
int station() const
Definition: CSCDetId.h:88
tuple cout
Definition: gather_cfg.py:41
#define debug
Definition: MEtoEDMFormat.h:34
T x() const
Definition: PV3DBase.h:56
virtual float stripLength() const
det heigth (strip length in the middle)
std::set< RPCDetId > GetRolls(CSCStationIndex cscstationindex)
Definition: CSCSegtoRPC.h:58
DecomposeProduct< arg, typename Div::arg > D
Definition: Factorize.h:150
virtual const BoundPlane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:37
int station() const
Definition: RPCDetId.h:98
CSCSegtoRPC::~CSCSegtoRPC ( )

Definition at line 282 of file CSCSegtoRPC.cc.

282  {
283 
284 }

Member Function Documentation

RPCRecHitCollection* CSCSegtoRPC::thePoints ( )
inline

Definition at line 14 of file CSCSegtoRPC.h.

References _ThePoints.

Referenced by RPCPointProducer::produce().

14 {return _ThePoints;}
RPCRecHitCollection * _ThePoints
Definition: CSCSegtoRPC.h:17

Member Data Documentation

RPCRecHitCollection* CSCSegtoRPC::_ThePoints
private

Definition at line 17 of file CSCSegtoRPC.h.

Referenced by CSCSegtoRPC(), and thePoints().

bool CSCSegtoRPC::inclcsc
private

Definition at line 19 of file CSCSegtoRPC.h.

double CSCSegtoRPC::MaxD
private

Definition at line 20 of file CSCSegtoRPC.h.

Referenced by CSCSegtoRPC().

edm::OwnVector<RPCRecHit> CSCSegtoRPC::RPCPointVector
private

Definition at line 18 of file CSCSegtoRPC.h.

Referenced by CSCSegtoRPC().