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 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
24 void OptODistancemeter::defaultBehaviour(LightRay& lightray, Measurement& meas) { makeMeasurement(lightray, meas); }
25 
26 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
27 //@@ Make measurement as distance to previous object 'screen'
28 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
30  const OpticalObject* opto_prev = meas.getPreviousOptO(this);
31  CLHEP::Hep3Vector dm_centre = centreGlob();
32  CLHEP::Hep3Vector ZAxis(0., 0., 1.);
33  CLHEP::HepRotation rmt = rmGlob();
34  ZAxis = rmt * ZAxis;
35 
36  //----- intersect z of distancemeter with distance target
37  ALILine dm_line(centreGlob(), ZAxis);
38 
39  CLHEP::Hep3Vector ZAxisdt(0., 0., 1.);
40  const CLHEP::HepRotation& rmtdt = opto_prev->rmGlob();
41  ZAxisdt = rmtdt * ZAxisdt;
42  ALIPlane dt_plane(opto_prev->centreGlob(), ZAxisdt);
43 
44  if (ALIUtils::debug >= 3) {
45  ALIUtils::dump3v(dm_centre, "distancemeter centre");
46  ALIUtils::dump3v(ZAxis, "distancemeter direc");
47  ALIUtils::dump3v(opto_prev->centreGlob(), "distance_target centre");
48  ALIUtils::dump3v(ZAxisdt, "distance_target direc");
49  }
50 
51  CLHEP::Hep3Vector inters = dm_line.intersect(dt_plane);
52 
53  dm_centre = inters - dm_centre;
54  if (ALIUtils::debug >= 4) {
55  std::cout << "OptO dm" << name() << dm_line << std::endl;
56  // ALIUtils::dump3v( centreGlob(), " centre Glob ");
57  std::cout << "OptO dt" << opto_prev->name() << std::endl;
58  ALIUtils::dump3v(opto_prev->centreGlob(), " previous OptO centre Glob ");
59  ALIUtils::dump3v(inters, " intersection with target ");
60  ALIUtils::dump3v(dm_centre, " distance std::vector");
61  }
62  ALIdouble proj = dm_centre * ZAxis;
63 
64  //- ALIUtils::dump3v( ZAxis, " zaxis ");
65  //- std::cout << " proj " << proj << std::endl;
66 
67  meas.setValueSimulated(0, proj);
68  if (ALIUtils::debug >= 1) {
69  std::cout << "SIMU value: D: " << meas.valueSimulated(0) * 1000. << " (mm) " << (this)->name() << std::endl;
70  std::cout << "REAL value: D: " << meas.value()[0] * 1000. << " (mm) " << (this)->name() << std::endl;
71  }
72 }
73 
74 #ifdef COCOA_VIS
76  //- std::cout << " filling optosensor " << std::endl;
77  ALIVRMLMgr& vrmlmgr = ALIVRMLMgr::getInstance();
78  ALIColour* col = new ALIColour(1., 0., 1., 0.);
79  vrmlmgr.AddBox(*this, .2, .2, 1., col);
80  vrmlmgr.SendReferenceFrame(*this, 1.2);
81  vrmlmgr.SendName(*this, 0.1);
82 }
83 
84 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
86  ALIColour* col = new ALIColour(1., 0., 0.5, 0.);
87  std::vector<ALIdouble> spar;
88  spar.push_back(1.);
89  spar.push_back(3.);
90  CLHEP::HepRotation rm;
91  rm.rotateX(90. * deg);
92  IgCocoaFileMgr::getInstance().addSolid(*this, "CYLINDER", spar, col, CLHEP::Hep3Vector(), rm);
93 }
94 #endif
95 
96 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
98  ALIdouble go;
100  gomgr->getGlobalOptionValue("VisScale", go);
101 
103  "Tubs", go * 0. * cm / m, go * 2. * cm / m, go * 5. * cm / m); //COCOA internal units are meters
104 }
long double ALIdouble
Definition: CocoaGlobals.h:11
CocoaSolidShape * theSolidShape
virtual void fillVRML()
Definition: OpticalObject.h:54
CLHEP::Hep3Vector intersect(const ALILine &l2, bool notParallel=false)
Definition: ALILine.cc:27
static ALIint debug
Definition: ALIUtils.h:34
void constructSolidShape() override
static GlobalOptionMgr * getInstance()
const CLHEP::HepRotation & rmGlob() const
Definition: OpticalObject.h:83
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:146
void makeMeasurement(LightRay &lightray, Measurement &meas) override
static void dump3v(const CLHEP::Hep3Vector &vec, const std::string &msg)
Definition: ALIUtils.cc:58
const OpticalObject * getPreviousOptO(const OpticalObject *Popto) const
Definition: Measurement.cc:584
void defaultBehaviour(LightRay &lightray, Measurement &meas) override
virtual void fillIguana()
Definition: OpticalObject.h:55
Measurement * meas()
const CLHEP::Hep3Vector & centreGlob() const
Definition: OpticalObject.h:75
const ALIdouble * value() const
Definition: Measurement.h:109
col
Definition: cuy.py:1010
const ALIdouble valueSimulated(ALIuint ii) const
Definition: Measurement.h:105
const ALIstring & name() const
Definition: OpticalObject.h:58
rm
Definition: submit.py:77