CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
OptOUserDefined.cc
Go to the documentation of this file.
1 // COCOA class implementation file
2 //Id: OptOUserDefined.cc
3 //CAT: Model
4 //
5 // History: v1.0
6 // Pedro Arce
7 
12 #include <iostream>
13 #include <iomanip>
14 #include <cstdlib>
15 #ifdef COCOA_VIS
16 #include "Alignment/CocoaVisMgr/interface/ALIVRMLMgr.h"
17 #include "Alignment/IgCocoaFileWriter/interface/IgCocoaFileMgr.h"
18 #include "Alignment/IgCocoaFileWriter/interface/ALIVisLightPath.h"
19 #endif
20 
21 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
22 //@@ Default behaviour: make measurement
23 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
25 {
26 #ifdef COCOA_VIS
27  ALIVisLightPath* vispath = 0;
28  if( ALIUtils::getFirstTime() ) {
30  if(gomgr->GlobalOptions()["VisWriteIguana"] > 1) {
31  vispath = IgCocoaFileMgr::getInstance().newLightPath( name() );
32  }
33  }
34 #endif
35 
36  if(ALIUtils::debug >= 5)ALIUtils::dump3v( centreGlob(), " user Defined centre " );
37  //---- Object is not a basic one
38  if(ExtraEntryList().size() == 0) {
39  std::cerr << "OpticalObject: !!! EXITING at Measurement: " << meas.name() << " in OptO: " << name() << " behaviour ':" << behav << "' is not adequate " << std::endl;
40  std::cerr << "an OptO has to indicate if detailed simulation traverses (:T) or deviates (:D) or Fast Simulation traverses (:FT) or deviates (:FD) or default behaviour () "<< std::endl;
41  exit(4);
42  } else {
43  ALIint behavSize = behav.size();
44  // if( !(nSet[0]).isNumber() ) nSet = "";
45  ALIstring nSet;
46  if( behavSize != 2 || behav[0] != 'D' ){ //|| !behav[1]).isNumber() )
47  std::cerr << "OpticalObject: !!! EXITING at Measurement: " << meas.name() << " in OptO: " << name() << " behaviour ':" << behav << "' is not adequate " << std::endl;
48  std::cerr << "an OptO has to indicate detailed simulation by (:Dn) where n is an integer number " << std::endl;
49  exit(4);
50  } else {
51  nSet = behav.substr( behavSize-1, behavSize);
52  }
53  //- std::cout << behavSize << " nSet " << nSet << std::endl;
54  ALIdouble shiftZ = findExtraEntryValue("shiftZ"+nSet);
55  ALIdouble shiftX = findExtraEntryValue("shiftX"+nSet);
56  ALIdouble shiftY = findExtraEntryValue("shiftY"+nSet);
57  ALIdouble deviX = findExtraEntryValue("deviX"+nSet);
58  ALIdouble deviY = findExtraEntryValue("deviY"+nSet);
59  ALIdouble deviZ = findExtraEntryValue("deviZ"+nSet);
60  CLHEP::Hep3Vector shift3D( shiftX, shiftY, shiftZ );
61  CLHEP::HepRotation rmt = rmGlob();
62  shift3D = rmt*shift3D;
63  if(ALIUtils::debug >= 5) {
64  lightray.dumpData("OptOUserDefined: lightray incoming");
65  ALIUtils::dump3v( shift3D, " shift 3D " );
66  //-std::cout << " shift " << shiftX << " shiftY " << shiftY << " shiftZ " << shiftZ
67  //- << " deviX " << deviX << " deviY " << deviY << std::endl;
68  }
69 
70  ALIPlane plate = getPlate(0, 0);
71  lightray.intersect( plate );
72 
73 #ifdef COCOA_VIS
74  //--- draw a point at intersection
76  if( ALIUtils::getFirstTime() ) {
77  if(gomgr->GlobalOptions()["VisWriteVRML"] > 1) {
78  ALIVRMLMgr::getInstance().addLightPoint( lightray.point() );
79  if(ALIUtils::debug>=5)std::cout << "ALIVRMLMgr addLightPoint " << lightray.point() << name() << std::endl;
80  }
81  if(gomgr->GlobalOptions()["VisWriteIguana"] > 1) {
82  vispath->addLightPoint( lightray.point(), this );
83  }
84  }
85 #endif
86 
87  lightray.setPoint( lightray.point() + shift3D );
88  if(ALIUtils::debug >= 5) {
89  lightray.dumpData("OptOUserDefined: lightray after shift");
90  }
91  CLHEP::Hep3Vector direc = lightray.direction();
92  CLHEP::Hep3Vector XAxis(1.,0.,0.);
93  XAxis = rmt*XAxis;
94  direc.rotate(deviX, XAxis);
95  if(ALIUtils::debug >= 5) {
96  std::cout << "Direction after deviX " << direc << std::endl;
97  std::cout << " deviX " << deviX << std::endl;
98  }
99  CLHEP::Hep3Vector YAxis(0.,1.,0.);
100  YAxis = rmt*YAxis;
101  direc.rotate(deviY, YAxis);
102  lightray.setDirection( direc );
103  if(ALIUtils::debug >= 5) {
104  std::cout << "Direction after deviY " << direc << std::endl;
105  std::cout << " deviY " << deviY << std::endl;
106  }
107  CLHEP::Hep3Vector ZAxis(0.,0.,1.);
108  ZAxis = rmt*ZAxis;
109  direc.rotate(deviZ, ZAxis);
110  lightray.setDirection( direc );
111  if(ALIUtils::debug >= 5) {
112  std::cout << "Direction after deviZ " << direc << std::endl;
113  std::cout << " deviZ " << deviZ << std::endl;
114  }
115  if(ALIUtils::debug >= 4) {
116  lightray.dumpData("OptOUserDefined: lightray at exiting");
117  }
118  }
119 
120 #ifdef COCOA_VIS
121  //--- draw a point at exiting
122  if( ALIUtils::getFirstTime() ) {
124  if(gomgr->GlobalOptions()["VisWriteVRML"] > 1) {
125  ALIVRMLMgr::getInstance().addLightPoint( lightray.point() );
126  if(ALIUtils::debug>=5)std::cout << "ALIVRMLMg addLightPoint " << lightray.point() << name() << std::endl;
127  }
128  if(gomgr->GlobalOptions()["VisWriteIguana"] > 1) {
129  vispath->addLightPoint( lightray.point(), this );
130  }
131  }
132 #endif
133 
134 }
135 
136 #ifdef COCOA_VIS
137 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
139 {
140  /* ALIVRMLMgr& vrmlmgr = ALIVRMLMgr::getInstance();
141  ALIColour* col = new ALIColour( 1., 0.7, 0.8, 0. );
142  vrmlmgr.AddBox( *this, 100, 100, 0.1, col);
143  vrmlmgr.SendReferenceFrame( *this, 0.1);
144  vrmlmgr.SendName( *this, 0.01 );
145  */
146 }
147 
148 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
150 {
151  ALIColour* col = new ALIColour( 0., 0., 0., 0. );
152  std::vector<ALIdouble> spar;
153  spar.push_back(1.);
154  spar.push_back(1.);
155  spar.push_back(1.);
156  IgCocoaFileMgr::getInstance().addSolid( *this, "BOX", spar, col);
157 }
158 #endif
159 
long double ALIdouble
Definition: CocoaGlobals.h:11
virtual void userDefinedBehaviour(LightRay &lightray, Measurement &meas, ALIstring &behav)
const std::vector< Entry * > & ExtraEntryList() const
Definition: OpticalObject.h:69
virtual void fillVRML()
Definition: OpticalObject.h:55
int ALIint
Definition: CocoaGlobals.h:15
static ALIint debug
Definition: ALIUtils.h:35
static GlobalOptionMgr * getInstance()
const CLHEP::HepRotation & rmGlob() const
void setDirection(const CLHEP::Hep3Vector &direc)
Definition: LightRay.h:61
void setPoint(const CLHEP::Hep3Vector &point)
Definition: LightRay.h:64
const CLHEP::Hep3Vector & point() const
Definition: LightRay.h:52
const ALIdouble findExtraEntryValue(const ALIstring &eename) const
static void dump3v(const CLHEP::Hep3Vector &vec, const std::string &msg)
Definition: ALIUtils.cc:61
void intersect(const ALIPlane &plane)
Definition: LightRay.cc:100
static ALIbool getFirstTime()
Definition: ALIUtils.h:100
virtual void fillIguana()
Definition: OpticalObject.h:56
const CLHEP::Hep3Vector & centreGlob() const
Definition: OpticalObject.h:85
ALIPlane getPlate(const ALIbool forwardPlate, const ALIbool applyWedge)
std::string ALIstring
Definition: CocoaGlobals.h:9
void dumpData(const ALIstring &str) const
Definition: LightRay.cc:381
const ALIstring & name() const
Definition: Measurement.h:90
tuple cout
Definition: gather_cfg.py:145
const ALIstring & name() const
Definition: OpticalObject.h:60
int col
Definition: cuy.py:1008
std::map< ALIstring, ALIdouble, std::less< ALIstring > > & GlobalOptions()
const CLHEP::Hep3Vector & direction() const
Definition: LightRay.h:55
tuple size
Write out results.