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
OptOSensor2D Class Reference

#include <OptOSensor2D.h>

Inheritance diagram for OptOSensor2D:
OpticalObject

Public Member Functions

void constructSolidShape ()
 
ALIdoubleconvertPointToLocalCoordinates (const CLHEP::Hep3Vector &point)
 
virtual void defaultBehaviour (LightRay &lightray, Measurement &meas)
 
virtual void detailedTraversesLightRay (LightRay &lightray)
 
virtual void fastTraversesLightRay (LightRay &lightray)
 
virtual void fillExtraEntry (std::vector< ALIstring > &wordlist)
 
virtual void makeMeasurement (LightRay &lightray, Measurement &meas)
 
 OptOSensor2D ()
 
 OptOSensor2D (OpticalObject *parent, const ALIstring &type, const ALIstring &name, const ALIbool copy_data)
 
 ~OptOSensor2D ()
 
- Public Member Functions inherited from OpticalObject
void addCoordinateEntryToList (Entry *entry)
 
void addExtraEntryToList (Entry *entry)
 
void addExtraEntryValueOriginalOriginalToList (ALIdouble entry_value)
 
void addExtraEntryValueOriginalToList (ALIdouble entry_value)
 
void addExtraEntryValueToList (ALIdouble entry_value)
 
double addPii (double val)
 
double approxTo0 (double val)
 
CLHEP::HepRotation buildRmFromEntryValuesOriginalOriginal ()
 
const CLHEP::Hep3Vector & centreGlob () const
 
const CLHEP::Hep3Vector & centreGlobal () const
 
const CLHEP::Hep3Vector & centreGlobOriginal () const
 
const CLHEP::Hep3Vector & centreGlobOriginalOriginal () const
 
const CLHEP::Hep3Vector centreLocal () const
 
int checkMatrixEquations (double angleX, double angleY, double angleZ, CLHEP::HepRotation *rot=0)
 
void construct ()
 
void constructFromOptAligInfo (const OpticalAlignInfo &oaInfo)
 
virtual void constructMaterial ()
 
const std::vector< Entry * > & CoordinateEntryList () const
 
void createComponentOptOsFromOptAlignInfo ()
 
virtual void detailedDeviatesLightRay (LightRay &lightray)
 
double diff2pi (double ang1, double ang2)
 
void displaceCentreGlob (const XYZcoor coor, const ALIdouble disp)
 
void displaceCentreGlob (const CLHEP::Hep3Vector &dispVec)
 
void displaceCentreGlobOriginal (const XYZcoor coor, const ALIdouble disp)
 
void displaceCentreGlobOriginal (const CLHEP::Hep3Vector &dispVec)
 
void displaceCentreGlobOriginalOriginal (const XYZcoor coor, const ALIdouble disp)
 
void displaceCentreGlobOriginalOriginal (const CLHEP::Hep3Vector &dispVec)
 
void displaceExtraEntry (const ALIuint entryNo, const ALIdouble disp)
 
void displaceExtraEntryOriginal (const ALIuint entryNo, const ALIdouble disp)
 
void displaceExtraEntryOriginalOriginal (const ALIuint entryNo, const ALIdouble disp)
 
void displaceRmGlobAroundGlobal (OpticalObject *opto1stRotated, const XYZcoor coor, const ALIdouble disp)
 
void displaceRmGlobAroundLocal (OpticalObject *opto1stRotated, const XYZcoor coor, const ALIdouble disp)
 
void displaceRmGlobOriginal (const OpticalObject *opto1stRotated, const XYZcoor coor, const ALIdouble disp)
 
void displaceRmGlobOriginalOriginal (const OpticalObject *opto1stRotated, const XYZcoor coor, const ALIdouble disp)
 
bool eq2ang (double ang1, double ang2)
 
const std::vector< Entry * > & ExtraEntryList () const
 
const ALIint extraEntryNo (const ALIstring &entry_name) const
 
std::vector< ALIdouble > & ExtraEntryValueList ()
 
const std::vector< ALIdouble > & ExtraEntryValueOriginalList ()
 
const std::vector< ALIdouble > & ExtraEntryValueOriginalOriginalList ()
 
virtual void fastDeviatesLightRay (LightRay &lightray)
 
virtual void fillIguana ()
 
virtual void fillVRML ()
 
const ALIdouble findExtraEntryValue (const ALIstring &eename) const
 
const ALIbool findExtraEntryValueIfExists (const ALIstring &eename, ALIdouble &value) const
 
const ALIdouble findExtraEntryValueMustExist (const ALIstring &eename) const
 
const ALIuint getCmsswID () const
 
std::vector< ALIstringgetCoordinateFromOptAlignParam (const OpticalAlignParam &oaParam)
 
CLHEP::Hep3Vector getDisplacementInLocalCoordinates (const XYZcoor coor, const ALIdouble disp)
 
const double getEntryCentre (const XYZcoor coor) const
 
const double getEntryCentre (const ALIstring &coor) const
 
const double getEntryRMangle (const XYZcoor coor) const
 
const double getEntryRMangle (const ALIstring &coor) const
 
std::vector< double > getLocalRotationAngles (std::vector< Entry * > entries) const
 
CocoaMaterialElementarygetMaterial () const
 
ALIPlane getPlate (const ALIbool forwardPlate, const ALIbool applyWedge)
 
std::vector< double > getRotationAnglesFromMatrix (CLHEP::HepRotation &rmLocal, std::vector< Entry * > entries) const
 
std::vector< double > getRotationAnglesInOptOFrame (const OpticalObject *optoAncestor, std::vector< Entry * > entries) const
 
CocoaSolidShapegetSolidShape () const
 
CLHEP::Hep3Vector getZAxis ()
 
const ALIuint ID () const
 
const ALIstring longName () const
 
Measurementmeas ()
 
const ALIstringname () const
 
 OpticalObject ()
 
 OpticalObject (OpticalObject *parent, const ALIstring &type, const ALIstring &name, const ALIbool copy_data)
 
const OpticalObjectparent () const
 
virtual void participateInMeasurement (LightRay &lightray, Measurement &meas, const ALIstring &behav)
 
void propagateGlobalRMOriginalOriginalChangeToChildren (const CLHEP::HepRotation &rmorioriold, const CLHEP::HepRotation &rmoriorinew)
 
void resetGlobalCoordinates ()
 
void resetOriginalOriginalCoordinates ()
 
const CLHEP::HepRotation & rmGlob () const
 
const CLHEP::HepRotation & rmGlobOriginal () const
 
const CLHEP::HepRotation & rmGlobOriginalOriginal () const
 
const CLHEP::HepRotation rmLocal () const
 
void setCmsswID (ALIuint id)
 
void setExtraEntryValue (const ALIuint entryNo, const ALIdouble disp)
 
void setGlobalCoordinates ()
 
void setGlobalRMOriginalOriginal (const CLHEP::HepRotation &rmoriori)
 
void setID (ALIuint id)
 
void setMeas (Measurement *meas)
 set current measurement More...
 
void setOriginalEntryValues ()
 
void setRmGlobal (const CLHEP::HepRotation &rm)
 
void setRmGlobalOriginal (const CLHEP::HepRotation &rm)
 
void setType (const ALIstring &type)
 
const ALIstring shortName () const
 
const ALIstringtype () const
 
virtual void userDefinedBehaviour (LightRay &lightray, Measurement &meas, const ALIstring &behav)
 
virtual ~OpticalObject ()
 

Private Attributes

DeviationsFromFileSensor2DdeviFromFile
 
ALIbool fdevi_from_file
 

Additional Inherited Members

- Protected Attributes inherited from OpticalObject
CocoaMaterialElementarytheMaterial
 
CocoaSolidShapetheSolidShape
 
ALIint verbose
 

Detailed Description

Definition at line 19 of file OptOSensor2D.h.

Constructor & Destructor Documentation

OptOSensor2D::OptOSensor2D ( )
inline

Definition at line 24 of file OptOSensor2D.h.

24 { };
OptOSensor2D::OptOSensor2D ( OpticalObject parent,
const ALIstring type,
const ALIstring name,
const ALIbool  copy_data 
)
inline

Definition at line 25 of file OptOSensor2D.h.

25  :
26  OpticalObject( parent, type, name, copy_data), fdevi_from_file(0){ };
type
Definition: HCALResponse.h:22
ALIbool fdevi_from_file
Definition: OptOSensor2D.h:53
const ALIstring & name() const
Definition: OpticalObject.h:60
OptOSensor2D::~OptOSensor2D ( )
inline

Definition at line 27 of file OptOSensor2D.h.

27 { };

Member Function Documentation

void OptOSensor2D::constructSolidShape ( )
virtual

Reimplemented from OpticalObject.

Definition at line 440 of file OptOSensor2D.cc.

References GlobalOptionMgr::getGlobalOptionValue(), GlobalOptionMgr::getInstance(), and m.

441 {
442  ALIdouble go;
444  gomgr->getGlobalOptionValue("VisScale", go );
445 
446  theSolidShape = new CocoaSolidShapeBox( "Box", go*4.*cm/m, go*4.*cm/m, go*1.*cm/m ); //COCOA internal units are meters
447 }
long double ALIdouble
Definition: CocoaGlobals.h:11
CocoaSolidShape * theSolidShape
static GlobalOptionMgr * getInstance()
int getGlobalOptionValue(const ALIstring &sstr, ALIdouble &val)
--— Search a string in theGlobalOptions and return 1 if found
ALIdouble * OptOSensor2D::convertPointToLocalCoordinates ( const CLHEP::Hep3Vector &  point)

Definition at line 385 of file OptOSensor2D.cc.

References gather_cfg::cout, ALIUtils::debug, ALIUtils::dump3v(), and ALIUtils::dumprm().

386 {
387  ALIdouble* interslc = new ALIdouble[2];
388 
389  //----- X value
390  CLHEP::HepRotation rmt = rmGlob();
391  CLHEP::Hep3Vector XAxism(1.,0.,0.);
392  XAxism*=rmt;
393  if( ALIUtils::debug >= 5) ALIUtils::dump3v( (this)->centreGlob(), "centre glob sensor2D" );
394  if( ALIUtils::debug >= 5) ALIUtils::dumprm( rmt, "rotation matrix sensor2D" );
395  //t ALIUtils::dump3v(point - (this)->centreGlob() , "inters - (this)->centreGlob()");
396  if( ALIUtils::debug >= 5) ALIUtils::dump3v(XAxism , "XAxism");
397  interslc[0] = (point - (this)->centreGlob() ) * XAxism;
398 
399  //----- Y value
400  CLHEP::Hep3Vector YAxism(0.,1.,0.);
401  YAxism*=rmt;
402  if( ALIUtils::debug >= 5)
403 ALIUtils::dump3v(YAxism , "YAxism");
404  interslc[1] = (point - (this)->centreGlob() ) * YAxism;
405 
406  if( ALIUtils::debug >= 5 ) {
407  std::cout << " intersection in local coordinates: X= " << interslc[0] << " Y= " << interslc[1] << std::endl;
408  ALIUtils::dump3v( point - (this)->centreGlob() , " inters - centre " );
409  }
410  return interslc;
411 }
long double ALIdouble
Definition: CocoaGlobals.h:11
static void dumprm(const CLHEP::HepRotation &rm, const std::string &msg, std::ostream &out=std::cout)
Definition: ALIUtils.cc:77
static ALIint debug
Definition: ALIUtils.h:35
const CLHEP::HepRotation & rmGlob() const
static void dump3v(const CLHEP::Hep3Vector &vec, const std::string &msg)
Definition: ALIUtils.cc:61
const CLHEP::Hep3Vector & centreGlob() const
Definition: OpticalObject.h:85
tuple cout
Definition: gather_cfg.py:121
*vegas h *****************************************************used in the default bin number in original ***version of VEGAS is ***a higher bin number might help to derive a more precise ***grade subtle point
Definition: invegas.h:5
void OptOSensor2D::defaultBehaviour ( LightRay lightray,
Measurement meas 
)
virtual

Reimplemented from OpticalObject.

Definition at line 33 of file OptOSensor2D.cc.

34 {
35  makeMeasurement( lightray, meas);
36 }
virtual void makeMeasurement(LightRay &lightray, Measurement &meas)
Definition: OptOSensor2D.cc:42
void OptOSensor2D::detailedTraversesLightRay ( LightRay lightray)
virtual

Reimplemented from OpticalObject.

Definition at line 238 of file OptOSensor2D.cc.

References DeviationsFromFileSensor2D::apply(), dtNoiseDBValidation_cfg::cerr, gather_cfg::cout, ALIUtils::debug, LightRay::dumpData(), LightRay::intersect(), mergeVDriftHistosByStation::name, LightRay::point(), LightRay::refract(), DeviationsFromFileSensor2D::setApply(), LightRay::setPoint(), and tablePrinter::width.

239 {
240  if (ALIUtils::debug >= 4) std::cout << "%%% LR: DETAILED TRAVERSES SENSOR2D " << name() << std::endl;
243  //- std::cout << "fdeviFromFile" << fdevi_from_file << std::endl;
244  if(ALIUtils::debug >= 0 )std::cerr << "!!WARNING: sensor " << name() << " has read deviation from file and it will not be taken into account. Please use FAST TRAVERSES" << deviFromFile << std::endl;
245  }
246 
247  //---------- If width is 0, just keep the intersection point
249  if( width == 0 ) {
250  //---------- Get intersection
251  CLHEP::Hep3Vector ZAxis(0.,0,1.);
252  CLHEP::HepRotation rmt = rmGlob();
253  ZAxis = rmt * ZAxis;
254  lightray.intersect( ALIPlane(centreGlob(), ZAxis) );
255  CLHEP::Hep3Vector inters = lightray.point();
256  lightray.setPoint( inters );
257  if (ALIUtils::debug >= 2) {
258  lightray.dumpData("LightRay Sensor2D traversed: ");
259  }
260  return;
261  }
262 
263  if (ALIUtils::debug >= 4) std::cout << std::endl << "$$$ LR: REFRACTION IN FORWARD PLATE " << std::endl;
264  //---------- Get forward plate
265  ALIPlane plate = getPlate(1, 1);
266  //---------- Refract while entering object
267  ALIdouble refra_ind1 = 1.;
268  ALIdouble refra_ind2 = findExtraEntryValueMustExist("refra_ind");
269  lightray.refract( plate, refra_ind1, refra_ind2 );
270 
271  if (ALIUtils::debug >= 4) std::cout << std::endl << "$$$ LR: REFRACTION IN BACKWARD PLATE " << std::endl;
272  //---------- Get backward plate
273  plate = getPlate(0, 1);
274  //---------- Refract while exiting splitter
275  lightray.refract( plate, refra_ind2, refra_ind1 );
276 
277  CLHEP::Hep3Vector inters = lightray.point();
278  lightray.setPoint( inters );
279 
280  if (ALIUtils::debug >= 4) {
281  lightray.dumpData("LightRay Sensor2D traversed: ");
282  }
283 
284 
285 }
long double ALIdouble
Definition: CocoaGlobals.h:11
const ALIdouble findExtraEntryValueMustExist(const ALIstring &eename) const
static ALIint debug
Definition: ALIUtils.h:35
const CLHEP::HepRotation & rmGlob() const
void setPoint(const CLHEP::Hep3Vector &point)
Definition: LightRay.h:64
DeviationsFromFileSensor2D * deviFromFile
Definition: OptOSensor2D.h:52
const CLHEP::Hep3Vector & point() const
Definition: LightRay.h:52
const ALIdouble findExtraEntryValue(const ALIstring &eename) const
void refract(const ALIPlane plate, const ALIdouble refra_ind1, const ALIdouble refra_ind2)
Definition: LightRay.cc:162
ALIbool fdevi_from_file
Definition: OptOSensor2D.h:53
static void setApply(ALIbool val)
void intersect(const ALIPlane &plane)
Definition: LightRay.cc:100
const CLHEP::Hep3Vector & centreGlob() const
Definition: OpticalObject.h:85
ALIPlane getPlate(const ALIbool forwardPlate, const ALIbool applyWedge)
void dumpData(const ALIstring &str) const
Definition: LightRay.cc:381
tuple cout
Definition: gather_cfg.py:121
const ALIstring & name() const
Definition: OpticalObject.h:60
void OptOSensor2D::fastTraversesLightRay ( LightRay lightray)
virtual

Reimplemented from OpticalObject.

Definition at line 119 of file OptOSensor2D.cc.

References DeviationsFromFileSensor2D::apply(), dtNoiseDBValidation_cfg::cerr, gather_cfg::cout, ALIUtils::debug, LightRay::dumpData(), LightRay::intersect(), ALIUtils::LengthValueDimensionFactor(), Model::MeasurementList(), Entry::name(), mergeVDriftHistosByStation::name, LightRay::point(), LightRay::setPoint(), Entry::setValue(), LightRay::shiftAndDeviateWhileTraversing(), Entry::value(), and Measurement::value().

120 {
122  if (ALIUtils::debug >= 2) std::cout << "LR: FAST TRAVERSES SENSOR2D " << name() << std::endl;
123 
124  //---------- Shift and Deviate
125 
126  //---------- Get intersection
127  CLHEP::Hep3Vector ZAxis(0.,0,1.);
128  CLHEP::HepRotation rmt = rmGlob();
129  ZAxis = rmt * ZAxis;
130  lightray.intersect( ALIPlane(centreGlob(), ZAxis) );
131  CLHEP::Hep3Vector inters = lightray.point();
132 
133  ALIdouble deviX, deviY, devi;
134  // if deviationsFromFile are applied and this sensors has them get the deviations that corresponds to the intersection point.
135  // Set this deviation as original one, as it will not be changed for derivatives
137  //- std::cout << " DeviationsFromFileSensor2D::apply() " << DeviationsFromFileSensor2D::apply() << std::endl;
138  if(ALIUtils::debug >= 4) {
139  std::cout << "fdeviFromFile" << fdevi_from_file << std::endl;
140  //- std::cout << "deviFromFile" << deviFromFile << std::endl;
141  }
142  //--------- get measurement value of the current sensor
143  std::vector< Measurement* >& measv = Model::MeasurementList();
144  unsigned int ii;
145  Measurement *omeas = 0;
146  for( ii = 0; ii < measv.size(); ii++ ) {
147  //- std::cout << " sensor2d finding meas " << measv[ii]->sensorName() << " " << name() << std::endl;
148  if( measv[ii]->sensorName() == name() ) {
149  omeas = measv[ii];
150  break;
151  }
152  }
153  if( omeas == 0 ) {
154  std::cerr << "!!!EXITING OptOSensor2D::fastTraversesLightRay: meas " << name() << " not found " << std::endl;
155  }
156 
157  ALIdouble interslcx = omeas->value( 0 );
158  ALIdouble interslcy = omeas->value( 1 );
159  if(ALIUtils::debug >= 5) std::cout << " interslcx " << interslcx << " interslcy " << interslcy << std::endl;
160  //----- transform in milimeters and positive
161  //mum interslcx = interslcx*1.E6 + 10000.;
162  //mum interslcy = interslcy*1.E6 + 10000.;
164  interslcx = interslcx/df + 0.010/df;
165  interslcy = interslcy/df + 0.010/df;
166  if(ALIUtils::debug >= 5) std::cout << " interslcx " << interslcx << " interslcy " << interslcy << std::endl;
167 
168  //---------- Get deviations from file (they are in microrads)
169  std::pair< ALIdouble, ALIdouble> devis = deviFromFile->getDevis( interslcx, interslcy );
170  deviX = devis.second;
171  deviY = -devis.first;
172  // deviX = devis.first;
173  // deviY = devis.second;
174 
175  //o deviX = *((deviFromFile->deviationsInX()).begin() + pointY*deviFromFile->nPoints() + pointX) * 1.E-6;;
176  //o deviY = *((deviFromFile->deviationsInY().begin()) + pointY*deviFromFile->nPoints() + pointX) * 1.E-6;
177 
178  //---------- Set this deviation value as original one, as it will not be changed for derivatives (change the entry and also the ExtraEntryValueOriginalList())
179  ALIuint entryNo = extraEntryNo( "deviX" );
180  if( verbose >= 3 ) std::cout << "entrynox" << entryNo << name() << verbose << std::endl;
181  Entry* entryDeviX = *(ExtraEntryList().begin()+entryNo);
182  entryDeviX->setValue( deviX );
183  //- std::vector< ALIdouble >::const_iterator eevolite = static_cast<std::vector< ALIdouble >::iterator>( ExtraEntryValueOriginalList().begin() );
184  std::vector< ALIdouble > eevil = ExtraEntryValueOriginalList();
185  //- std::vector< ALIdouble >::const_iterator eevolite = ( ExtraEntryValueOriginalList().begin() );
186  std::vector< ALIdouble >::iterator eevolite = eevil.begin();
187 
188  *(eevolite+entryNo) = deviX;
189  if( verbose >= 3 ) std::cout<< " entryDeviX name " << entryDeviX->name() << entryDeviX->value() << std::endl;
190  entryNo = extraEntryNo( "deviY" );
191  Entry* entryDeviY = *(ExtraEntryList().begin()+entryNo);
192  //- std::cout << "entrynoy" << entryNo << name() << std::endl;
193  entryDeviY->setValue( deviY );
194  *(eevolite+entryNo) = deviY;
195  //- std::cout<< entryDeviY << " entryDeviY name " << entryDeviY->name() << entryDeviY->value() << std::endl;
196 
197  } else {
198  deviX = findExtraEntryValue("deviX");
199  deviY = findExtraEntryValue("deviY");
200 
201  //??? why previous does not work??
202  if( fdevi_from_file ) {
203  if( ALIUtils::debug >= 5) std::cout << "fdeviFromFile" << fdevi_from_file << std::endl;
204  ALIuint entryNo = extraEntryNo( "deviX" );
205  Entry* entryDeviX = *(ExtraEntryList().begin()+entryNo);
206  if( verbose >= 3 ) std::cout<< entryDeviX << " entryDeviX name " << entryDeviX->name() << entryDeviX->value() << std::endl;
207  deviX = entryDeviX->value();
208  entryNo = extraEntryNo( "deviY" );
209  Entry* entryDeviY = *(ExtraEntryList().begin()+entryNo);
210  if( verbose >= 3 ) std::cout<< entryDeviY << " entryDeviY name " << entryDeviY->name() << entryDeviY->value() << std::endl;
211  deviY = entryDeviY->value();
212 
213  } else {
214  ALIbool bb = findExtraEntryValueIfExists("devi", devi);
215  if( bb ) {
216  deviX = devi;
217  deviY = devi;
218  }
219  }
220  }
221  if(ALIUtils::debug >= 4) {
222  std::cout << "devi " << devi << " devi x " << deviX << " devi y " << deviY << std::endl;
223  }
224 
225  lightray.setPoint( inters );
226 
227  lightray.shiftAndDeviateWhileTraversing( this, 'T' );
228  if (ALIUtils::debug >= 2) {
229  lightray.dumpData("Shifted and Deviated");
230  }
231 
232 }
const std::vector< ALIdouble > & ExtraEntryValueOriginalList()
Definition: OpticalObject.h:77
long double ALIdouble
Definition: CocoaGlobals.h:11
Definition: Entry.h:18
void shiftAndDeviateWhileTraversing(const OpticalObject *opto, char behav)
Definition: LightRay.cc:240
const std::vector< Entry * > & ExtraEntryList() const
Definition: OpticalObject.h:69
std::pair< ALIdouble, ALIdouble > getDevis(ALIdouble intersX, ALIdouble intersY)
ALIdouble value() const
Definition: Entry.h:55
const ALIbool findExtraEntryValueIfExists(const ALIstring &eename, ALIdouble &value) const
void setValue(ALIdouble val)
Definition: Entry.h:77
static ALIint debug
Definition: ALIUtils.h:35
const CLHEP::HepRotation & rmGlob() const
bool ALIbool
Definition: CocoaGlobals.h:19
void setPoint(const CLHEP::Hep3Vector &point)
Definition: LightRay.h:64
DeviationsFromFileSensor2D * deviFromFile
Definition: OptOSensor2D.h:52
const CLHEP::Hep3Vector & point() const
Definition: LightRay.h:52
const ALIdouble findExtraEntryValue(const ALIstring &eename) const
ALIbool fdevi_from_file
Definition: OptOSensor2D.h:53
const ALIstring & name() const
Definition: Entry.h:52
void intersect(const ALIPlane &plane)
Definition: LightRay.cc:100
const ALIint extraEntryNo(const ALIstring &entry_name) const
const CLHEP::Hep3Vector & centreGlob() const
Definition: OpticalObject.h:85
const ALIdouble * value() const
Definition: Measurement.h:125
void dumpData(const ALIstring &str) const
Definition: LightRay.cc:381
tuple cout
Definition: gather_cfg.py:121
const ALIstring & name() const
Definition: OpticalObject.h:60
static std::vector< Measurement * > & MeasurementList()
Definition: Model.h:79
static ALIdouble LengthValueDimensionFactor()
Definition: ALIUtils.h:71
unsigned int ALIuint
Definition: CocoaGlobals.h:17
void OptOSensor2D::fillExtraEntry ( std::vector< ALIstring > &  wordlist)
virtual

Reimplemented from OpticalObject.

Definition at line 291 of file OptOSensor2D.cc.

References gather_cfg::cout, ALIUtils::debug, OpticalObject::fillExtraEntry(), ALIUtils::getFloat(), ALIFileIn::getInstance(), and ALIFileIn::getWordsInLine().

292 {
293 
294  if(ALIUtils::debug >= 5) std::cout << "OptOSensor2D fillExtraEntry wordlist[1] " << wordlist[1] << std::endl;
295  //---------- check if it is deviation read from file
296  fdevi_from_file = 0;
297  //- std::cout << "WL " << wordlist[1]<< "WL " << wordlist[2]<< "WL " << wordlist[3] << std::endl;
298  if( wordlist[1] == ALIstring("devi") && wordlist[2] == ALIstring("from_file") ) {
299  //---------- Open file
300  ALIstring fnam;
301  if( wordlist.size() >= 4) {
302  fnam = wordlist[3];
303  } else {
304  //----- Build up file name if it does not exists
305  fnam = "dat/devi-";
306  fnam += shortName();
307  fnam += ".dat";
308  }
309 
310  ALIFileIn& ifdevi = ALIFileIn::getInstance( fnam );
311 
312  //----- Check that file exists
313  if(ALIUtils::debug >= 4) std::cout << "Opening deviation file: " << fnam << std::endl;
314  /*- if( !ifdevi ) {
315  std::cerr << " !!! Sensor2D Deviation file not found: " << fnam << " of object " << name() << std::endl;
316  exit(1);
317  }*/
318 
320  fdevi_from_file = 1;
321  if(ALIUtils::debug >= 5 ) std::cout << "deviFromFile " << deviFromFile << std::endl;
322  //----- Read header
323  ALIstring sensor1_name, sensor2_name;
324  ALIdouble sensor_dist;
325  ALIdouble prec_deviX,prec_deviY;
326 
327  std::vector<ALIstring> wl;
328  ifdevi.getWordsInLine( wl );
329  sensor1_name = wl[0];
330  sensor2_name = wl[1];
331  sensor_dist = atof( wl[2].c_str() );
332  // 'c' means that light is traversing the glass
333  if(sensor1_name[sensor1_name.size()-2] == 'c') {
334  sensor1_name = sensor1_name.substr(0,sensor1_name.size()-1);
335  }
336  if(sensor2_name[sensor2_name.size()-2] == 'c') {
337  sensor2_name = sensor2_name.substr(0,sensor2_name.size()-1);
338  }
339  if(ALIUtils::debug >= 5) std::cout << "sensor1_name " << sensor1_name << " sensor2_name " << sensor2_name << " sensor_dist " << sensor_dist << " unknown " << wl[3] << std::endl;
340 
341  ifdevi.getWordsInLine( wl );
342  prec_deviX = atof( wl[0].c_str() );
343  prec_deviY = atof( wl[1].c_str() );
344 
345  if(ALIUtils::debug >= 5) std::cout << "prec_deviX " << prec_deviX << " prec_deviY " << prec_deviY << std::endl;
346 
348  ALIdouble offsetX, offsetY;
349  if( wl.size() == 5 ) {
350  offsetX = ALIUtils::getFloat( wl[3] );
351  offsetY = ALIUtils::getFloat( wl[4] );
352  deviFromFile->setOffset( offsetX, offsetY );
353  }
354  deviFromFile->readFile( ifdevi );
355  fdevi_from_file = 1;
356  if(ALIUtils::debug >= 5 ) std::cout << "deviFromFile " << deviFromFile << std::endl;
357 
358 
359  //--- Fill extra entries 'deviX' & 'deviY' to compute derivatives
360  std::vector<ALIstring> wlo;
361  char chartmp[20];
362  wlo.push_back( wordlist[0] );
363  wlo.push_back("deviX");
364  wlo.push_back("0"); // value is set to 0 as it is on the file and the point of intersection is not computed yet
365  gcvt( prec_deviX, 10, chartmp );
366  wlo.push_back( ALIstring(chartmp) );
367  wlo.push_back("cal");
368  std::vector<ALIstring> wl2(wlo);
370 
371  wl2[1] = "deviY";
372  gcvt( prec_deviY, 10, chartmp );
373  wl2[3] = ALIstring( chartmp );
375 
376  } else {
377  OpticalObject::fillExtraEntry( wordlist );
378  }
379 }
long double ALIdouble
Definition: CocoaGlobals.h:11
static ALIFileIn & getInstance(const ALIstring &name)
Definition: ALIFileIn.cc:23
static ALIint debug
Definition: ALIUtils.h:35
static double getFloat(const ALIstring &str)
Convert a string to an float, checking that it is really a number.
Definition: ALIUtils.cc:404
DeviationsFromFileSensor2D * deviFromFile
Definition: OptOSensor2D.h:52
ALIbool fdevi_from_file
Definition: OptOSensor2D.h:53
virtual void fillExtraEntry(std::vector< ALIstring > &wordlist)
ALIint getWordsInLine(std::vector< ALIstring > &wl)
Definition: ALIFileIn.cc:90
const ALIstring shortName() const
std::string ALIstring
Definition: CocoaGlobals.h:9
tuple cout
Definition: gather_cfg.py:121
void setOffset(ALIdouble offX, ALIdouble offY)
void OptOSensor2D::makeMeasurement ( LightRay lightray,
Measurement meas 
)
virtual

Reimplemented from OpticalObject.

Definition at line 42 of file OptOSensor2D.cc.

References gather_cfg::cout, ALIUtils::debug, LightRay::direction(), ALIUtils::dump3v(), alignCSCRings::e, LightRay::intersect(), mergeVDriftHistosByStation::name, dbtoconf::parent, LightRay::point(), Measurement::setLightRayDirection(), Measurement::setLightRayPosition(), Measurement::setValueSimulated(), Measurement::value(), Measurement::valueSimulated(), and Measurement::valueType().

43 {
44  //---------- check is last and not the only one
45  /* if( vocite - OptOList().begin() == 0 ||
46  OptOList().end() - vocite != 1) {
47  std::cerr << " last and not only one Optical Object should be 'sensor2D' (unless you specify (:T)raverse) " <<
48  OptOList().end() - vocite << " size " <<OptOList().size() << std::endl;
49  DumpBadOrderOptOs();
50  }*/
51 
52  //---------- Get simulated value
53  //---------- Get intersection
54  CLHEP::Hep3Vector ZAxis(0.,0,1.);
55  CLHEP::HepRotation rmt = rmGlob();
56  ZAxis = rmt * ZAxis;
57  if( ALIUtils::debug >= 4 ) {
58  ALIUtils::dump3v( centreGlob(), " sensor2D centre Glob ");
59  ALIUtils::dump3v( ZAxis, " snsor2D normal ");
60  }
61  //- ALIUtils::dumprm( rmt, "rot global " );
62  lightray.intersect( ALIPlane(centreGlob(), ZAxis) );
63  CLHEP::Hep3Vector inters = lightray.point();
64 
65  ALIdouble* interslc;
66  interslc = convertPointToLocalCoordinates( inters );
67  ALIdouble interslcx = interslc[0];
68  ALIdouble interslcy = interslc[1];
69  meas.setValueSimulated( 0, interslcx );
70  meas.setValueSimulated( 1, interslcy );
71 
72  //----- Dump info
73  if (ALIUtils::debug >= 2) {
74  //--- Special for range studies
75  ALIstring chrg = "";
76  /*t if(Model::Ncmslinkrange >= 1 && Model::Ncmslinkrange <= 8 ) {
77  chrg = "RG";
78  } else {
79  chrg = "";
80  } t*/
81  CLHEP::Hep3Vector measvv( meas.value()[0], meas.value()[1], 0.);
82  measvv = rmt*measvv;
83  ALIUtils::dump3v( measvv, " $$$$$$MEAS IN LOCAL FRAME");
84  ALIUtils::dump3v( measvv+centreGlob(), " $$$$$$MEAS IN GLOBAL FRAME");
85 
86  ALIdouble detH = 1000*meas.valueSimulated(0); if(fabs(detH) <= 1.e-9 ) detH = 0.;
87  ALIdouble detV = 1000*meas.valueSimulated(1); if(fabs(detV) <= 1.e-9 ) detV = 0.;
88  std::cout << "REAL value: " << chrg << meas.valueType(0) << ": " << 1000*meas.value()[0] << chrg << " " << meas.valueType(1) << ": " << 1000*meas.value()[1] << " (mm) " << (this)->name()
89  << " DIFF= " << detH-1000*meas.value()[0] << " " << detV-1000*meas.value()[1] << std::endl;
90  std::cout << "SIMU value: " << chrg << " " << meas.valueType(0) << ": "
91  // << setprecision(3) << setw(4)
92  << detH
93  << chrg << " " << meas.valueType(1) << ": " << detV
94  << " (mm) " << (this)->name() << std::endl;
95  /*- std::cout << "SIMU value: " << chrg << " " << meas.valueType(0) << ": "
96  // << setprecision(3) << setw(4)
97  << detH / 0.3125
98  << chrg << " " << meas.valueType(1) << ": " << detV / 0.3125
99  << " STRIPS " << (this)->name() << std::endl; */
100  // << detH
101  // << chrg << " V: " << detV
102  // << " (mm) " << (this)->name() << std::endl;
103  ALIUtils::dump3v( 1000.*(inters - parent()->centreGlob()) , " $$$$$$SIMU inters - parent centre");
104  ALIUtils::dump3v( 1000.*(inters - centreGlob()) , " $$$$$$SIMU inters - centre");
105  }
106  //t delete &lightray;
107 
108  // store the lightray position and direction
109  meas.setLightRayPosition( lightray.point() );
110  meas.setLightRayDirection( lightray.direction() );
111 
112  delete[] interslc;
113 }
long double ALIdouble
Definition: CocoaGlobals.h:11
const ALIstring valueType(ALIuint ii) const
Definition: Measurement.h:140
static ALIint debug
Definition: ALIUtils.h:35
const CLHEP::HepRotation & rmGlob() const
const CLHEP::Hep3Vector & point() const
Definition: LightRay.h:52
void setLightRayPosition(const CLHEP::Hep3Vector &lightRayPosition)
Definition: Measurement.h:222
const OpticalObject * parent() const
Definition: OpticalObject.h:62
void setValueSimulated(ALIint coor, ALIdouble value)
Definition: Measurement.h:196
void setLightRayDirection(const CLHEP::Hep3Vector &lightRayDirection)
Definition: Measurement.h:224
static void dump3v(const CLHEP::Hep3Vector &vec, const std::string &msg)
Definition: ALIUtils.cc:61
void intersect(const ALIPlane &plane)
Definition: LightRay.cc:100
const CLHEP::Hep3Vector & centreGlob() const
Definition: OpticalObject.h:85
const ALIdouble * value() const
Definition: Measurement.h:125
std::string ALIstring
Definition: CocoaGlobals.h:9
const ALIdouble valueSimulated(ALIuint ii) const
Definition: Measurement.h:117
tuple cout
Definition: gather_cfg.py:121
const ALIstring & name() const
Definition: OpticalObject.h:60
ALIdouble * convertPointToLocalCoordinates(const CLHEP::Hep3Vector &point)
const CLHEP::Hep3Vector & direction() const
Definition: LightRay.h:55

Member Data Documentation

DeviationsFromFileSensor2D* OptOSensor2D::deviFromFile
private

Definition at line 52 of file OptOSensor2D.h.

ALIbool OptOSensor2D::fdevi_from_file
private

Definition at line 53 of file OptOSensor2D.h.