CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
MeasurementDiffEntry.cc
Go to the documentation of this file.
1 // COCOA class implementation file
2 // Id: Measurement.C
3 // CAT: Model
4 // ---------------------------------------------------------------------------
5 // History: v1.0
6 // Authors:
7 // Pedro Arce
8 
14 #include <iostream>
15 #include <iomanip>
16 #include <cstdlib>
17 #ifdef COCOA_VIS
18 #include "Alignment/CocoaVisMgr/interface/ALIVRMLMgr.h"
19 #include "Alignment/IgCocoaFileWriter/interface/IgCocoaFileMgr.h"
20 #include "Alignment/IgCocoaFileWriter/interface/ALIVisLightPath.h"
21 #endif
22 
23 
24 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
25 void MeasurementDiffEntry::buildOptONamesList( const std::vector<ALIstring>& wl )
26 {
27 
28  int NPairs = (wl.size()+1)/2; // Number of OptO names ( pair of name and '&' )
29 
30  //--------- Fill list with names
31  for ( int ii=0; ii<NPairs; ii++ ) {
32  //--- take out Entry names from object names
33  int isl = wl[ii*2].rfind("/");
34  AddOptONameListItem( wl[ii*2].substr(0,isl) );
35  // Check for separating '&'
36  if (ii != NPairs-1 && wl[2*ii+1] != ALIstring("&") ) {
38  std::cerr << "!!! Measured Optical Objects should be separated by '&', not by"
39  << wl[2*ii+1] << std::endl;
40  exit(2);
41  }
42  //---- Fill entry names
43  if( ii == 0 ){
44  theEntryNameFirst = wl[ii*2].substr(isl+1,999);
45  }else if( ii == 1 ){
46  theEntryNameSecond = wl[ii*2].substr(isl+1,999);
47  }
48 
49  }
50 
51 }
52 
53 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
54 //@@ calculate the simulated value propagating the light ray through the OptO that take part in the Measurement
55 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
57 {
58 
59  if( ALIUtils::debug >= 2) printStartCalculateSimulatedValue( this ); // important for Examples/FakeMeas
60 
61  //---------- Loop list of OptO that take part in measurement
62  std::vector<OpticalObject*>::const_iterator vocite = OptOList().begin();
63  if( ALIUtils::debug >= 5) std::cout << "OptOList size" <<OptOList().size() << std::endl;
64 
65  //----- Check that there are only two objects
66  if( OptOList().size() == !2 ) {
67  std::cerr << "!!! ERROR in MeasurementDiffEntry: " << name() << " There should only be two objects " << std::endl;
68  std::cerr << " 1st " << (*vocite)->name() << " 2nd " << (*vocite+1)->name() << std::endl;
71  }
72 
73 #ifdef COCOA_VIS
74  ALIVisLightPath* vispath = 0;
75  if( ALIUtils::getFirstTime() ) {
77  if(gomgr->GlobalOptions()["VisWriteIguana"] > 1) {
78  vispath = IgCocoaFileMgr::getInstance().newLightPath( name() );
79  }
80  }
81 #endif
82 
83  //--- This is a special 'measurement': it represents the fact that you have measured two entries one relative to the other (e.g. relative angle of two objects)
84  Entry* entry1 = Model::getEntryByName( (*(OptOList().begin()))->longName(), theEntryNameFirst );
85  Entry* entry2 = Model::getEntryByName( (*(OptOList().begin()+1))->longName(), theEntryNameSecond );
86  if( ALIUtils::debug >= 5) std::cout << " entry1 " << (*(OptOList().begin()))->longName() << "/" << entry1->name() << " ->valueDisplaced() " << entry1->valueDisplaced() << " entry2 " << (*(OptOList().begin()+1))->longName() << "/" << entry2->name() << " ->valueDisplaced() " << entry2->valueDisplaced() << std::endl;
87  setValueSimulated( 0, entry1->valueDisplaced() - entry2->valueDisplaced() );
88 
89  if (ALIUtils::debug >= 2) {
90  ALIdouble detD = 1000*valueSimulated(0); if(fabs(detD) <= 1.e-9 ) detD = 0.;
91  std::cout << "REAL value: " <<"D: " << 1000.*value()[0] << " (mm) " << (this)->name()
92  << " DIFF= " << detD-1000*value()[0] << std::endl;
93  std::cout << "SIMU value: " << "D: " << detD << " (mm) " << (this)->name() << std::endl;
94  }
95 
96  if(ALIUtils::debug >= 5) std::cout << "end calculateSimulatedValue" <<std::endl;
97 
98 }
99 
long double ALIdouble
Definition: CocoaGlobals.h:11
static ALIFileIn & getInstance(const ALIstring &name)
Definition: ALIFileIn.cc:23
Definition: Entry.h:18
virtual void buildOptONamesList(const std::vector< ALIstring > &wl)
std::vector< OpticalObject * > & OptOList()
Definition: Measurement.h:109
static ALIint debug
Definition: ALIUtils.h:35
static ALIstring & SDFName()
the name of the System Description File
Definition: Model.h:86
static GlobalOptionMgr * getInstance()
static Entry * getEntryByName(const ALIstring &opto_name, const ALIstring &entry_name)
--— Search an Entry name in the Entry* list and return a pointer to it
Definition: Model.cc:633
void AddOptONameListItem(ALIstring optos)
Definition: Measurement.h:184
void DumpBadOrderOptOs()
Definition: Measurement.cc:487
bool ALIbool
Definition: CocoaGlobals.h:19
bool firstTime
Definition: QTestHandle.cc:18
void setValueSimulated(ALIint coor, ALIdouble value)
Definition: Measurement.h:196
const ALIstring & name() const
Definition: Entry.h:52
void ErrorInLine()
Definition: ALIFileIn.cc:211
static ALIbool getFirstTime()
Definition: ALIUtils.h:100
const ALIdouble * value() const
Definition: Measurement.h:125
#define begin
Definition: vmac.h:31
std::string ALIstring
Definition: CocoaGlobals.h:9
void printStartCalculateSimulatedValue(const Measurement *meas)
Definition: Measurement.cc:444
const ALIstring & name() const
Definition: Measurement.h:90
const ALIdouble valueSimulated(ALIuint ii) const
Definition: Measurement.h:117
tuple cout
Definition: gather_cfg.py:121
virtual void calculateSimulatedValue(ALIbool firstTime)
virtual ALIdouble valueDisplaced() const
Definition: Entry.cc:342
std::map< ALIstring, ALIdouble, std::less< ALIstring > > & GlobalOptions()
tuple size
Write out results.