CMS 3D CMS Logo

OptODistancemeter.cc
Go to the documentation of this file.
1 // COCOA class implementation file
2 //Id: OptODistancemeter.cc
3 //CAT: Model
4 //
5 // History: v1.0
6 // Pedro Arce
7 
11 #include <iostream>
12 #include <iomanip>
13 #ifdef COCOA_VIS
14 #include "Alignment/CocoaVisMgr/interface/ALIVRMLMgr.h"
15 #include "Alignment/IgCocoaFileWriter/interface/IgCocoaFileMgr.h"
16 #endif
17 #include "CLHEP/Units/GlobalSystemOfUnits.h"
20 
21 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
22 //@@ Default behaviour: make measurement
23 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
25 {
26  makeMeasurement( lightray, meas);
27 
28 }
29 
30 
31 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
32 //@@ Make measurement as distance to previous object 'screen'
33 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
35 {
36  const OpticalObject* opto_prev = meas.getPreviousOptO( this );
37  CLHEP::Hep3Vector dm_centre = centreGlob();
38  CLHEP::Hep3Vector ZAxis(0.,0.,1.);
39  CLHEP::HepRotation rmt = rmGlob();
40  ZAxis = rmt * ZAxis;
41 
42  //----- intersect z of distancemeter with distance target
43  ALILine dm_line( centreGlob(), ZAxis );
44 
45  CLHEP::Hep3Vector ZAxisdt(0.,0.,1.);
46  const CLHEP::HepRotation& rmtdt = opto_prev->rmGlob();
47  ZAxisdt = rmtdt * ZAxisdt;
48  ALIPlane dt_plane( opto_prev->centreGlob(), ZAxisdt );
49 
50  if(ALIUtils::debug >= 3) {
51  ALIUtils::dump3v( dm_centre, "distancemeter centre");
52  ALIUtils::dump3v( ZAxis, "distancemeter direc");
53  ALIUtils::dump3v( opto_prev->centreGlob(),"distance_target centre");
54  ALIUtils::dump3v( ZAxisdt,"distance_target direc");
55  }
56 
57  CLHEP::Hep3Vector inters = dm_line.intersect( dt_plane );
58 
59  dm_centre = inters - dm_centre;
60  if (ALIUtils::debug >= 4) {
61  std::cout << "OptO dm" << name() << dm_line << std::endl;
62  // ALIUtils::dump3v( centreGlob(), " centre Glob ");
63  std::cout << "OptO dt" << opto_prev->name() << std::endl;
64  ALIUtils::dump3v( opto_prev->centreGlob(), " previous OptO centre Glob ");
65  ALIUtils::dump3v( inters, " intersection with target ");
66  ALIUtils::dump3v( dm_centre, " distance std::vector");
67  }
68  ALIdouble proj = dm_centre*ZAxis;
69 
70  //- ALIUtils::dump3v( ZAxis, " zaxis ");
71  //- std::cout << " proj " << proj << std::endl;
72 
73  meas.setValueSimulated (0 , proj );
74  if (ALIUtils::debug >= 1) {
75  std::cout << "SIMU value: D: " << meas.valueSimulated(0)*1000.
76  << " (mm) " << (this)->name() << std::endl;
77  std::cout << "REAL value: D: " << meas.value()[0]*1000.
78  << " (mm) " << (this)->name() << std::endl;
79  }
80 }
81 
82 
83 #ifdef COCOA_VIS
85 {
86  //- std::cout << " filling optosensor " << std::endl;
87  ALIVRMLMgr& vrmlmgr = ALIVRMLMgr::getInstance();
88  ALIColour* col = new ALIColour( 1., 0., 1., 0. );
89  vrmlmgr.AddBox( *this, .2, .2, 1., col);
90  vrmlmgr.SendReferenceFrame( *this, 1.2);
91  vrmlmgr.SendName( *this, 0.1 );
92 }
93 
94 
95 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
97 {
98  ALIColour* col = new ALIColour( 1., 0., 0.5, 0. );
99  std::vector<ALIdouble> spar;
100  spar.push_back(1.);
101  spar.push_back(3.);
102  CLHEP::HepRotation rm;
103  rm.rotateX( 90.*deg);
104  IgCocoaFileMgr::getInstance().addSolid( *this, "CYLINDER", spar, col, CLHEP::Hep3Vector(), rm);
105 }
106 #endif
107 
108 
109 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
111 {
112  ALIdouble go;
114  gomgr->getGlobalOptionValue("VisScale", go );
115 
116  theSolidShape = new CocoaSolidShapeTubs( "Tubs", go*0.*cm/m, go*2.*cm/m, go*5.*cm/m ); //COCOA internal units are meters
117 }
long double ALIdouble
Definition: CocoaGlobals.h:11
CocoaSolidShape * theSolidShape
virtual void fillVRML()
Definition: OpticalObject.h:55
CLHEP::Hep3Vector intersect(const ALILine &l2, bool notParallel=false)
Definition: ALILine.cc:30
static ALIint debug
Definition: ALIUtils.h:36
void constructSolidShape() override
static GlobalOptionMgr * getInstance()
const CLHEP::HepRotation & rmGlob() const
int getGlobalOptionValue(const ALIstring &sstr, ALIdouble &val)
--— Search a string in theGlobalOptions and return 1 if found
void setValueSimulated(ALIint coor, ALIdouble value)
Definition: Measurement.h:196
void makeMeasurement(LightRay &lightray, Measurement &meas) override
static void dump3v(const CLHEP::Hep3Vector &vec, const std::string &msg)
Definition: ALIUtils.cc:61
const OpticalObject * getPreviousOptO(const OpticalObject *Popto) const
Definition: Measurement.cc:609
void defaultBehaviour(LightRay &lightray, Measurement &meas) override
virtual void fillIguana()
Definition: OpticalObject.h:56
Measurement * meas()
const CLHEP::Hep3Vector & centreGlob() const
Definition: OpticalObject.h:85
const ALIdouble * value() const
Definition: Measurement.h:125
col
Definition: cuy.py:1009
const ALIdouble valueSimulated(ALIuint ii) const
Definition: Measurement.h:117
const ALIstring & name() const
Definition: OpticalObject.h:60
rm
Definition: submit.py:76