CMS 3D CMS Logo

/data/git/CMSSW_5_3_11_patch5/src/Alignment/CocoaModel/src/OptOTiltmeter.cc

Go to the documentation of this file.
00001 //   COCOA class implementation file
00002 //Id:  OptOTiltmeter.cc
00003 //CAT: Model
00004 //
00005 //   History: v1.0 
00006 //   Pedro Arce
00007 
00008 #include "Alignment/CocoaModel/interface/OptOTiltmeter.h"
00009 #include "Alignment/CocoaModel/interface/Measurement.h"
00010 #include <iostream>
00011 #include <iomanip>
00012 #ifdef COCOA_VIS
00013 #include "Alignment/CocoaVisMgr/interface/ALIVRMLMgr.h"
00014 #include "Alignment/IgCocoaFileWriter/interface/IgCocoaFileMgr.h"
00015 #endif
00016 #include "Alignment/CocoaDDLObjects/interface/CocoaSolidShapeBox.h"
00017 #include "Alignment/CocoaUtilities/interface/GlobalOptionMgr.h"
00018 
00019 using namespace CLHEP;
00020 
00021 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
00022 //@@  Default behaviour: make measurement
00023 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
00024 void OptOTiltmeter::defaultBehaviour( LightRay& lightray, Measurement& meas ) 
00025 {
00026   makeMeasurement( lightray, meas);
00027 
00028 }
00029 
00030 
00031 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
00032 //@@  Make measurement as angle with the horizontal plane = angle between local  Z axis and its projection on the global XZ plane 
00033 //-Make measurement as rotations around X axis: difference between current Z axis and Z axis (0,0,1)
00034 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
00035 void OptOTiltmeter::makeMeasurement( LightRay& lightray, Measurement& meas )
00036 {
00037 
00038   //---------- Get local Z axix
00039   CLHEP::HepRotation rmt = rmGlob();
00040   CLHEP::Hep3Vector ZAxisl(0.,0.,1.);
00041   ZAxisl *= rmt;
00042 
00043   //--------- Get projection in a global XZ plane
00044   /*-plane parallel to global Y (gravity) and to tiltmeter Z
00045   CLHEP::Hep3Vector plane_point(0.,0.,0.);
00046   CLHEP::Hep3Vector plane_normal = ZAxisl.cross( CLHEP::Hep3Vector(0.,1.,0.) );
00047   CLHEP::Hep3Vector ZAxis_proj = (ALIPlane( plane_point, plane_normal)).project( ZAxisl );
00048   */
00049   CLHEP::Hep3Vector XAxisg(1.,0.,0.);
00050   CLHEP::Hep3Vector ZAxisg(0.,0.,1.);
00051   CLHEP::Hep3Vector ZAxis_proj = (ZAxisl*XAxisg) * XAxisg + (ZAxisl*ZAxisg) * ZAxisg;
00052   ZAxis_proj *= (1. / ZAxis_proj.mag() );
00053 
00054   //--------- Get measurement
00055   ALIdouble measvalue = acos(ZAxisl*ZAxis_proj / ZAxisl.mag() / ZAxis_proj.mag());
00056   //----- get sign of angle as sign of y component of ZAxis
00057   if( ZAxisl.y() != 0 ) measvalue *= (ZAxisl.y() / fabs(ZAxisl.y()) );
00058   meas.setValueSimulated(0 , measvalue ); 
00059   
00060   if (ALIUtils::debug >= 3) {
00061     ALIUtils::dump3v(ZAxisl," OptOTiltmeter: Local Z axis ");
00062     ALIUtils::dumprm(rmt," tiltmeter rotation matrix");
00063     ALIUtils::dump3v(ZAxis_proj," Projection of Local Z axis on global XZ plane ");
00064     std::cout << "SIMU value: TA: " << std::setprecision(8) << 1000*meas.valueSimulated(0)
00065          << " (mrad)  " << (this)->name() << std::endl;
00066     std::cout << "REAL value: TA: " << std::setprecision(8) << 1000*meas.value()[0] 
00067          << " (mrad)  " << (this)->name() << std::endl;
00068 
00069   }
00070  
00071   
00072    /*-  //---------- Get simulated value:
00073   CLHEP::HepRotation rmtori = rmGlobOriginal();
00074   CLHEP::Hep3Vector ZAxism(0.,0.,1.);
00075   CLHEP::Hep3Vector ZAxism_ori = ZAxism;
00076   ZAxism_ori *= rmtori;
00077       
00078   //---------- Measure rotation with respect to original position, around the X axis defined by the original position, in the original YZ plane
00079   CLHEP::Hep3Vector ZAxism_rot = ZAxism;
00080   CLHEP::HepRotation rmt = rmGlob();
00081   ZAxism_rot *= rmt;
00082   //----- Project on original YZ plane
00083   CLHEP::Hep3Vector YAxism_ori(0.,1.,0.);
00084   YAxism_ori *= rmtori;
00085   //--- create original YZ plane
00086   CLHEP::Hep3Vector YZplanePoint = centreGlob();
00087   CLHEP::Hep3Vector YZplaneNormal = YAxism_ori.cross( ZAxism_ori );
00088   ALIPlane yzorig( YZplanePoint, YZplaneNormal );
00089   CLHEP::Hep3Vector ZAxism_proj = yzorig.project( ZAxism_rot);
00090   //- ALIUtils::dump3v( YAxism_ori, "YAxism_ori");
00091   //- ALIUtils::dump3v( ZAxism_ori, "ZAxism_ori");
00092   //- ALIUtils::dump3v( ZAxism_rot, "ZAxism_rot");
00093   //- ALIUtils::dump3v( ZAxism_proj, "ZAxism_proj");
00094   ALIdouble measValue =  acos( ZAxism.dot(ZAxism_proj)/ZAxism_proj.mag() );
00095   if( ZAxism_proj.x() < 0) measValue *= -1.;
00096   meas.setValueSimulated(0 , measValue );
00097   
00098   if (ALIUtils::debug >= 3) {
00099     std::cout << " OptOTiltmeter: Original Z axis " << ZAxism_ori << std::endl;
00100     ALIUtils::dumprm(rmt," tiltmeter original rotation matrix");
00101     std::cout << " OptOTiltmeter: current Z axis " << ZAxism_rot << std::endl;
00102     ALIUtils::dumprm(rmt," tiltmeter current rotation matrix");
00103     std::cout << "SIMU value; TA: " << std::setprecision(8) << meas.valueSimulated(0)
00104          << " (rad)  " << (this)->name() << std::endl;
00105     std::cout << "REAL value: TA: " << std::setprecision(8) << meas.value()[0] 
00106          << " (rad)  " << (this)->name() << std::endl;
00107 
00108   }
00109   */
00110   
00111 }
00112 
00113 #ifdef COCOA_VIS
00114 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
00115 void OptOTiltmeter::fillVRML()
00116 {
00117   //-  std::cout << " filling optosensor " << std::endl;
00118   ALIVRMLMgr& vrmlmgr = ALIVRMLMgr::getInstance();
00119   ALIColour* col = new ALIColour( 1., 1., 0., 0. );
00120   vrmlmgr.AddBox( *this, .2, .2, 1., col);
00121   vrmlmgr.SendReferenceFrame( *this, 0.6); 
00122   vrmlmgr.SendName( *this, 0.01 );
00123 }
00124 
00125 
00126 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
00127 void OptOTiltmeter::fillIguana()
00128 {
00129   ALIColour* col = new ALIColour( 1., 0., 0.9, 0. );
00130   std::vector<ALIdouble> spar;
00131   spar.push_back(1.);
00132   spar.push_back(1.);
00133   spar.push_back(4.);
00134   IgCocoaFileMgr::getInstance().addSolid( *this, "BOX", spar, col);
00135 }
00136 #endif
00137 
00138 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
00139 void OptOTiltmeter::constructSolidShape()
00140 {
00141   ALIdouble go;
00142   GlobalOptionMgr* gomgr = GlobalOptionMgr::getInstance();
00143   gomgr->getGlobalOptionValue("VisScale", go );
00144 
00145   theSolidShape = new CocoaSolidShapeBox( "Box", go*2.*cm/m, go*2.*cm/m, go*5.*cm/m ); //COCOA internal units are meters
00146 }
00147