CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Classes | Public Types | Public Member Functions | Private Member Functions | Private Attributes
MuonGeometryArrange Class Reference

#include <MuonGeometryArrange.h>

Inheritance diagram for MuonGeometryArrange:
edm::EDAnalyzer edm::EDConsumerBase

Classes

struct  MGACollection
 

Public Types

typedef std::vector< Alignable * > Alignables
 
typedef AlignTransform SurveyValue
 
typedef Alignments SurveyValues
 
- Public Types inherited from edm::EDAnalyzer
typedef EDAnalyzer ModuleType
 
typedef WorkerT< EDAnalyzerWorkerType
 

Public Member Functions

virtual void analyze (const edm::Event &, const edm::EventSetup &)
 
virtual void beginJob ()
 Read from DB and print survey info. More...
 
 MuonGeometryArrange (const edm::ParameterSet &)
 Do nothing. Required by framework. More...
 
- Public Member Functions inherited from edm::EDAnalyzer
 EDAnalyzer ()
 
std::string workerType () const
 
virtual ~EDAnalyzer ()
 
- Public Member Functions inherited from edm::EDConsumerBase
 EDConsumerBase ()
 
ProductHolderIndex indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductHolderIndex > &) const
 
void itemsToGet (BranchType, std::vector< ProductHolderIndex > &) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void updateLookup (BranchType iBranchType, ProductHolderIndexHelper const &)
 
virtual ~EDConsumerBase ()
 

Private Member Functions

bool checkChosen (Alignable *ali)
 
void compare (Alignable *refAli, Alignable *curAli, Alignable *curAliCopy2)
 
void compareGeometries (Alignable *refAli, Alignable *curAli, Alignable *curAliCopy2)
 
void createROOTGeometry (const edm::EventSetup &iSetup)
 
void endHist ()
 
void fillTree (Alignable *refAli, AlgebraicVector diff)
 
bool isMother (Alignable *ali)
 
void makeGraph (int sizeI, float smi, float sma, float minV, float maxV, TH2F *dxh, TGraph *grx, const char *name, const char *title, const char *titleg, const char *axis, float *xp, float *yp, int numEntries)
 
bool passChosen (Alignable *ali)
 
bool passIdCut (uint32_t)
 

Private Attributes

TTree * _alignTree
 
float _alphaVal
 
float _betaVal
 
align::StructureType _commonMuonLevel
 
float _dalphaVal
 
float _dbetaVal
 
int _detDim
 
bool _detIdFlag
 
std::string _detIdFlagFile
 
std::vector< uint32_t > _detIdFlagVector
 
float _dgammaVal
 
float _dphiVal
 
float _drotxVal
 
float _drotyVal
 
float _drotzVal
 
float _drVal
 
float _dxVal
 
float _dyVal
 
float _dzVal
 
int _endcap
 
float _etaVal
 
std::string _filename
 
float _gammaVal
 
int _id
 
std::string _inputFilename1
 
std::string _inputFilename2
 
TFile * _inputRootFile1
 
TFile * _inputRootFile2
 
TTree * _inputTree1
 
TTree * _inputTree2
 
std::string _inputTreename
 
std::string _inputXMLCurrent
 
std::string _inputXMLReference
 
float _ldphiVal
 
float _ldrVal
 
float _ldxVal
 
float _ldyVal
 
float _ldzVal
 
int _level
 
std::vector< MGACollection_mgacollection
 
int _mid
 
int _mlevel
 
align::PositionType _MuonCommonCM
 
align::EulerAngles _MuonCommonR
 
align::GlobalVector _MuonCommonT
 
float _phiVal
 
int _ring
 
float _rotxVal
 
float _rotyVal
 
float _rotzVal
 
float _rVal
 
std::string _setCommonMuonSystem
 
int _station
 
int _sublevel
 
float _surLength
 
double _surRot [9]
 
float _surWidth
 
TFile * _theFile
 
int _useDetId
 
std::string _weightBy
 
bool _weightById
 
std::string _weightByIdFile
 
std::vector< unsigned int > _weightByIdVector
 
bool _writeToDB
 
float _xVal
 
float _yVal
 
float _zVal
 
AlignableMuoncurrentMuon
 
AlignableMuondummyMuon
 
bool firstEvent_
 
MuonAlignmentinputAlign1
 
MuonAlignmentinputAlign2
 
MuonAlignmentinputAlign2a
 
AlignableinputGeometry1
 
AlignableinputGeometry2
 
edm::ParameterSet m_params
 
AlignableMuonreferenceMuon
 
std::vector< align::StructureTypetheLevels
 
const SurveyErrorstheSurveyErrors
 
unsigned int theSurveyIndex
 
const AlignmentstheSurveyValues
 

Additional Inherited Members

- Static Public Member Functions inherited from edm::EDAnalyzer
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &)
 
- Protected Member Functions inherited from edm::EDAnalyzer
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
CurrentProcessingContext const * currentContext () const
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 

Detailed Description

Module that reads survey info from DB and prints them out.

Usage: module comparator = MuonGeometryArrange {

lots of stuff

} path p = { comparator }

Date:
2010/01/04 17:04:08
Revision:
1.3
Author
Nhan Tran

Definition at line 38 of file MuonGeometryArrange.h.

Member Typedef Documentation

Definition at line 44 of file MuonGeometryArrange.h.

Definition at line 42 of file MuonGeometryArrange.h.

Definition at line 43 of file MuonGeometryArrange.h.

Constructor & Destructor Documentation

MuonGeometryArrange::MuonGeometryArrange ( const edm::ParameterSet cfg)

Do nothing. Required by framework.

Definition at line 43 of file MuonGeometryArrange.cc.

References _alignTree, _alphaVal, _betaVal, _dalphaVal, _dbetaVal, _detDim, _detIdFlag, _detIdFlagFile, _detIdFlagVector, _dgammaVal, _dphiVal, _drotxVal, _drotyVal, _drotzVal, _drVal, _dxVal, _dyVal, _dzVal, _endcap, _etaVal, _filename, _gammaVal, _id, _inputFilename1, _inputFilename2, _inputTreename, _inputXMLCurrent, _inputXMLReference, _ldphiVal, _ldrVal, _ldxVal, _ldyVal, _ldzVal, _level, _mgacollection, _mid, _mlevel, _phiVal, _ring, _rotxVal, _rotyVal, _rotzVal, _rVal, _station, _sublevel, _surLength, _surRot, _surWidth, _theFile, _useDetId, _weightBy, _weightById, _weightByIdFile, _weightByIdVector, _xVal, _yVal, _zVal, currentMuon, groupFilesInBlocks::fin, edm::ParameterSet::getUntrackedParameter(), prof2calltree::l, referenceMuon, AlCaHLTBitMon_QueryRunRegistry::string, AlignableObjectId::stringToId(), and theLevels.

43  :
45 {
46  referenceMuon=0x0;
47  currentMuon=0x0;
48  // Input is XML
49  _inputXMLCurrent = cfg.getUntrackedParameter<std::string> ("inputXMLCurrent");
50  _inputXMLReference = cfg.getUntrackedParameter<std::string> ("inputXMLReference");
51 
52  //input is ROOT
54  ("inputROOTFile1");
56  ("inputROOTFile2");
57  _inputTreename = cfg.getUntrackedParameter< std::string > ("treeName");
58 
59  //output file
60  _filename = cfg.getUntrackedParameter< std::string > ("outputFile");
61 
62 
63  const std::vector<std::string>& levels =
64  cfg.getUntrackedParameter< std::vector<std::string> > ("levels");
65 
66  _weightBy = cfg.getUntrackedParameter< std::string > ("weightBy");
67  _detIdFlag = cfg.getUntrackedParameter< bool > ("detIdFlag");
69  ("detIdFlagFile");
70  _weightById = cfg.getUntrackedParameter< bool > ("weightById");
72  ("weightByIdFile");
73  _endcap = cfg.getUntrackedParameter<int> ("endcapNumber");
74  _station = cfg.getUntrackedParameter<int> ("stationNumber");
75  _ring = cfg.getUntrackedParameter<int> ("ringNumber");
76 
77  //setting the levels being used in the geometry comparator
78  edm::LogInfo("MuonGeometryArrange") << "levels: " << levels.size();
79  for (unsigned int l = 0; l < levels.size(); ++l){
80  theLevels.push_back( AlignableObjectId::stringToId(levels[l]));
81  edm::LogInfo("MuonGeometryArrange") << "level: " << levels[l];
82  }
83 
84 
85  // if want to use, make id cut list
86  if (_detIdFlag){
87  ifstream fin;
88  fin.open( _detIdFlagFile.c_str() );
89 
90  while (!fin.eof() && fin.good() ){
91 
92  uint32_t id;
93  fin >> id;
94  _detIdFlagVector.push_back(id);
95  }
96  fin.close();
97  }
98 
99  // turn weightByIdFile into weightByIdVector
100  unsigned int lastID=999999999;
101  if (_weightById){
102  std::ifstream inFile;
103  inFile.open( _weightByIdFile.c_str() );
104  int ctr = 0;
105  while ( !inFile.eof() ){
106  ctr++;
107  unsigned int listId;
108  inFile >> listId;
109  inFile.ignore(256, '\n');
110  if(listId!=lastID){
111  _weightByIdVector.push_back( listId );
112  }
113  lastID=listId;
114  }
115  inFile.close();
116  }
117 
118 
119 
120  //root configuration
121  _theFile = new TFile(_filename.c_str(),"RECREATE");
122  _alignTree = new TTree("alignTree","alignTree");
123  _alignTree->Branch("id", &_id, "id/I");
124  _alignTree->Branch("level", &_level, "level/I");
125  _alignTree->Branch("mid", &_mid, "mid/I");
126  _alignTree->Branch("mlevel", &_mlevel, "mlevel/I");
127  _alignTree->Branch("sublevel", &_sublevel, "sublevel/I");
128  _alignTree->Branch("x", &_xVal, "x/F");
129  _alignTree->Branch("y", &_yVal, "y/F");
130  _alignTree->Branch("z", &_zVal, "z/F");
131  _alignTree->Branch("r", &_rVal, "r/F");
132  _alignTree->Branch("phi", &_phiVal, "phi/F");
133  _alignTree->Branch("eta", &_etaVal, "eta/F");
134  _alignTree->Branch("alpha", &_alphaVal, "alpha/F");
135  _alignTree->Branch("beta", &_betaVal, "beta/F");
136  _alignTree->Branch("gamma", &_gammaVal, "gamma/F");
137  _alignTree->Branch("dx", &_dxVal, "dx/F");
138  _alignTree->Branch("dy", &_dyVal, "dy/F");
139  _alignTree->Branch("dz", &_dzVal, "dz/F");
140  _alignTree->Branch("dr", &_drVal, "dr/F");
141  _alignTree->Branch("dphi", &_dphiVal, "dphi/F");
142  _alignTree->Branch("dalpha", &_dalphaVal, "dalpha/F");
143  _alignTree->Branch("dbeta", &_dbetaVal, "dbeta/F");
144  _alignTree->Branch("dgamma", &_dgammaVal, "dgamma/F");
145  _alignTree->Branch("ldx", &_ldxVal, "ldx/F");
146  _alignTree->Branch("ldy", &_ldyVal, "ldy/F");
147  _alignTree->Branch("ldz", &_ldzVal, "ldz/F");
148  _alignTree->Branch("ldr", &_ldrVal, "ldr/F");
149  _alignTree->Branch("ldphi", &_ldphiVal, "ldphi/F");
150  _alignTree->Branch("useDetId", &_useDetId, "useDetId/I");
151  _alignTree->Branch("detDim", &_detDim, "detDim/I");
152  _alignTree->Branch("rotx",&_rotxVal, "rotx/F");
153  _alignTree->Branch("roty",&_rotyVal, "roty/F");
154  _alignTree->Branch("rotz",&_rotzVal, "rotz/F");
155  _alignTree->Branch("drotx",&_drotxVal, "drotx/F");
156  _alignTree->Branch("droty",&_drotyVal, "droty/F");
157  _alignTree->Branch("drotz",&_drotzVal, "drotz/F");
158  _alignTree->Branch("surW", &_surWidth, "surW/F");
159  _alignTree->Branch("surL", &_surLength, "surL/F");
160  _alignTree->Branch("surRot", &_surRot, "surRot[9]/D");
161 
162  _mgacollection.clear();
163 }
T getUntrackedParameter(std::string const &, T const &) const
std::vector< align::StructureType > theLevels
std::vector< unsigned int > _weightByIdVector
static align::StructureType stringToId(const char *)
align::StructureType _commonMuonLevel
std::vector< uint32_t > _detIdFlagVector
AlignableMuon * referenceMuon
AlignableMuon * currentMuon
std::vector< MGACollection > _mgacollection

Member Function Documentation

void MuonGeometryArrange::analyze ( const edm::Event ,
const edm::EventSetup iSetup 
)
virtual

Implements edm::EDAnalyzer.

Definition at line 456 of file MuonGeometryArrange.cc.

References _alignTree, _inputXMLCurrent, _inputXMLReference, _theFile, compare(), endHist(), MuonAlignment::fillGapsInSurvey(), firstEvent_, MuonAlignment::getAlignableMuon(), inputAlign1, inputAlign2, inputAlign2a, inputGeometry1, and inputGeometry2.

457  {
458  if (firstEvent_) {
459 
460  // My stuff
462  inputAlign1 = new MuonAlignment(iSetup, inputMethod1);
465  inputAlign2 = new MuonAlignment(iSetup, inputMethod2);
468  inputAlign2a = new MuonAlignment(iSetup, inputMethod3);
470 
473  Alignable* inputGeometry2Copy2 =
474  static_cast<Alignable*> (inputAlign2a->getAlignableMuon());
475 
476  //compare the goemetries
477  compare(inputGeometry1, inputGeometry2, inputGeometry2Copy2);
478 
479  //write out ntuple
480  //might be better to do within output module
481  _theFile->cd();
482  _alignTree->Write();
483  endHist();
484  // _theFile->Close();
485 
486  firstEvent_ = false;
487  }
488 }
MuonAlignment * inputAlign2a
MuonAlignment * inputAlign2
AlignableMuon * getAlignableMuon()
Definition: MuonAlignment.h:30
void compare(Alignable *refAli, Alignable *curAli, Alignable *curAliCopy2)
MuonAlignment * inputAlign1
void fillGapsInSurvey(double shiftErr, double angleErr)
void MuonGeometryArrange::beginJob ( void  )
virtual

Read from DB and print survey info.

Reimplemented from edm::EDAnalyzer.

Definition at line 449 of file MuonGeometryArrange.cc.

References firstEvent_.

449  {
450  firstEvent_ = true;
451 }
bool MuonGeometryArrange::checkChosen ( Alignable ali)
private

Definition at line 895 of file MuonGeometryArrange.cc.

References _endcap, _ring, _station, gather_cfg::cout, MuonSubdetId::CSC, DetId::det(), Alignable::geomDetId(), Alignable::id(), DetId::Muon, and DetId::subdetId().

Referenced by isMother(), and passChosen().

895  {
896  // Check whether the item passed satisfies the criteria given.
897  if(ali==0x0) return false; // elementary sanity
898  // Is this in the CSC section? If not, bail. Later may extend.
899  if(ali->geomDetId().det()!=DetId::Muon ||
900  ali->geomDetId().subdetId()!=MuonSubdetId::CSC) return false;
901  // If it is a CSC alignable, then check that the station, etc are
902  // those requested.
903  // One might think of aligning more than a single ring at a time,
904  // by using a vector of ring numbers. I don't see the sense in
905  // trying to align more than one station at a time for comparison.
906  CSCDetId cscId(ali->geomDetId());
907 #ifdef jnbdebug
908 std::cout<<"JNB "<<ali->id()<<" "<<cscId.endcap()<<" "
909 <<cscId.station()<<" "<<cscId.ring()<<" "<<cscId.chamber()<<" "
910 <<_endcap<<" "<<_station<<" "<<_ring
911 <<"\n"<<std::flush;
912 #endif
913  if(cscId.endcap()==_endcap && cscId.station()==_station &&
914  cscId.ring()==_ring) {
915  return true;
916  }
917  return false;
918 }
align::ID id() const
Return the ID of Alignable, i.e. DetId of &#39;first&#39; component GeomDet(Unit).
Definition: Alignable.h:180
static const int CSC
Definition: MuonSubdetId.h:15
int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:39
tuple cout
Definition: gather_cfg.py:121
Detector det() const
get the detector field from this detid
Definition: DetId.h:37
const DetId & geomDetId() const
Definition: Alignable.h:177
void MuonGeometryArrange::compare ( Alignable refAli,
Alignable curAli,
Alignable curAliCopy2 
)
private

Definition at line 491 of file MuonGeometryArrange.cc.

References compareGeometries(), Alignable::components(), and i.

Referenced by analyze().

492  {
493 
494  // First sanity
495  if(refAli==0x0){return;}
496  if(curAli==0x0){return;}
497 
498  const std::vector<Alignable*>& refComp = refAli->components();
499  const std::vector<Alignable*>& curComp = curAli->components();
500  const std::vector<Alignable*>& curComp2 = curAliCopy2->components();
501  compareGeometries(refAli, curAli, curAliCopy2);
502 
503  int nComp=refComp.size();
504  for(int i=0; i<nComp; i++){
505  compare(refComp[i], curComp[i], curComp2[i]);
506  }
507  return;
508 }
int i
Definition: DBlmapReader.cc:9
void compareGeometries(Alignable *refAli, Alignable *curAli, Alignable *curAliCopy2)
virtual Alignables components() const =0
Return vector of all direct components.
void compare(Alignable *refAli, Alignable *curAli, Alignable *curAliCopy2)
void MuonGeometryArrange::compareGeometries ( Alignable refAli,
Alignable curAli,
Alignable curAliCopy2 
)
private

Definition at line 511 of file MuonGeometryArrange.cc.

References _weightBy, _weightById, _weightByIdVector, align::centerOfMass(), CastorDataFrameFilter_impl::check(), Alignable::components(), align::createPoints(), cond::rpcobgas::detid, diffTreeTool::diff, align::diffAlignables(), align::diffRot(), PFRecoTauDiscriminationAgainstElectronDeadECAL_cfi::dR, alignCSCRings::e, fillTree(), i, isMother(), PV3DBase< T, PVType, FrameType >::mag(), Alignable::mother(), align::moveAlignable(), align::readModuleList(), makeMuonMisalignmentScenario::rot, align::toAngles(), PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

Referenced by compare().

512  {
513  // First sanity
514  if(refAli==0x0){return;}
515  if(curAli==0x0){return;}
516  // Is this the Ring we want to align? If so it will contain the
517  // chambers specified in the configuration file
518  if(!isMother(refAli)) return; // Not the desired alignable object
519  // But... There are granddaughters involved--and I don't want to monkey with
520  // the layers of the chambers. So, if the mother of this is also an approved
521  // mother, bail.
522  if(isMother(refAli->mother() )) return;
523  const std::vector<Alignable*>& refComp = refAli->components();
524  const std::vector<Alignable*>& curComp = curCopy->components();
525  if(refComp.size()!=curComp.size()){
526  return;
527  }
528  // GlobalVectors is a vector of GlobalVector which is a 3D vector
529  align::GlobalVectors originalVectors;
530  align::GlobalVectors currentVectors;
531  align::GlobalVectors originalRelativeVectors;
532  align::GlobalVectors currentRelativeVectors;
533 
534 
535  int nComp = refComp.size();
536  int nUsed = 0;
537  // Use the total displacements here:
538  CLHEP::Hep3Vector TotalX, TotalL;
539  TotalX.set(0.,0.,0.); TotalL.set(0., 0., 0.);
540 // CLHEP::Hep3Vector* Rsubtotal, Wsubtotal, DRsubtotal, DWsubtotal;
541  std::vector<CLHEP::Hep3Vector> Positions;
542  std::vector<CLHEP::Hep3Vector> DelPositions;
543 
544  double xrcenter=0.;
545  double yrcenter=0.;
546  double zrcenter=0.;
547  double xccenter=0.;
548  double yccenter=0.;
549  double zccenter=0.;
550 
551  bool useIt;
552  // Create the "center" for the reference alignment chambers, and
553  // load a vector of their centers
554  for(int ich=0; ich<nComp; ich++){
555  useIt=true;
556  if(_weightById){
557  if(!align::readModuleList(curComp[ich]->id(), curComp[ich]->id(), _weightByIdVector))
558  useIt=false;
559  }
560  if(!useIt) continue;
561  align::GlobalVectors curVs;
562  align::createPoints(&curVs, refComp[ich],
564  align::GlobalVector pointsCM = align::centerOfMass(curVs);
565  originalVectors.push_back(pointsCM);
566  nUsed++;
567  xrcenter+= pointsCM.x();
568  yrcenter+= pointsCM.y();
569  zrcenter+= pointsCM.z();
570  }
571  xrcenter=xrcenter/nUsed;
572  yrcenter=yrcenter/nUsed;
573  zrcenter=zrcenter/nUsed;
574 
575  // Create the "center" for the current alignment chambers, and
576  // load a vector of their centers
577  for(int ich=0; ich<nComp; ich++){
578  useIt=true;
579  if(_weightById){
580  if(!align::readModuleList(curComp[ich]->id(), curComp[ich]->id(), _weightByIdVector))
581  useIt=false;
582  }
583  if(!useIt)continue;
584  align::GlobalVectors curVs;
585  align::createPoints(&curVs, curComp[ich],
587  align::GlobalVector pointsCM = align::centerOfMass(curVs);
588  currentVectors.push_back(pointsCM);
589 
590  xccenter+= pointsCM.x();
591  yccenter+= pointsCM.y();
592  zccenter+= pointsCM.z();
593  }
594  xccenter=xccenter/nUsed;
595  yccenter=yccenter/nUsed;
596  zccenter=zccenter/nUsed;
597 
598 
599  // OK, now load the <very approximate> vectors from the ring "centers"
600  align::GlobalVector CCur(xccenter, yccenter, zccenter);
601  align::GlobalVector CRef(xrcenter, yrcenter, zrcenter);
602  int nCompR = currentVectors.size();
603  for(int ich=0; ich<nCompR; ich++){
604  originalRelativeVectors.push_back(originalVectors[ich]-CRef);
605  currentRelativeVectors.push_back(currentVectors[ich]-CCur);
606  }
607 
608  // All right. Now let the hacking begin.
609  // First out of the gate let's try using the raw values and see what
610  // diffRot does for us.
611 
612 
613  align::RotationType rtype3=align::diffRot(currentRelativeVectors,
614  originalRelativeVectors);
615 
616 
617  align::EulerAngles angles(3);
618  angles = align::toAngles(rtype3);
619 
620  for(int ich=0; ich<nComp; ich++){
621  if(_weightById){
622  if(!align::readModuleList(curComp[ich]->id(), curComp[ich]->id(), _weightByIdVector))
623  continue;
624  }
625  CLHEP::Hep3Vector Rtotal, Wtotal;
626  Rtotal.set(0.,0.,0.); Wtotal.set(0.,0.,0.);
627  for (int i = 0; i < 100; i++){
628  AlgebraicVector diff = align::diffAlignables(refComp[ich],curComp[ich],
630  CLHEP::Hep3Vector dR(diff[0],diff[1],diff[2]);
631  Rtotal+=dR;
632  CLHEP::Hep3Vector dW(diff[3],diff[4],diff[5]);
633  CLHEP::HepRotation rot(Wtotal.unit(),Wtotal.mag());
634  CLHEP::HepRotation drot(dW.unit(),dW.mag());
635  rot*=drot;
636  Wtotal.set(rot.axis().x()*rot.delta(),
637  rot.axis().y()*rot.delta(), rot.axis().z()*rot.delta());
638  align::moveAlignable(curComp[ich], diff);
639  float tolerance = 1e-7;
640  AlgebraicVector check = align::diffAlignables(refComp[ich],curComp[ich],
642  align::GlobalVector checkR(check[0],check[1],check[2]);
643  align::GlobalVector checkW(check[3],check[4],check[5]);
644  DetId detid(refComp[ich]->id());
645  if ((checkR.mag() > tolerance)||(checkW.mag() > tolerance)){
646 // edm::LogInfo("CompareGeoms") << "Tolerance Exceeded!(alObjId: "
647 // << refAli->alignableObjectId()
648 // << ", rawId: " << refComp[ich]->geomDetId().rawId()
649 // << ", subdetId: "<< detid.subdetId() << "): " << diff;
650  }
651  else{
652  TotalX+=Rtotal;
653  break;
654  } // end of else
655  } // end of for on int i
656  } // end of for on ich
657 
658  // At this point we should have a total displacement and total L
659  TotalX=TotalX/nUsed;
660 
661  // Now start again!
662  AlgebraicVector change(6);
663  change(1)=TotalX.x();
664  change(2)=TotalX.y();
665  change(3)=TotalX.z();
666 
667  change(4)=angles[0];
668  change(5)=angles[1];
669  change(6)=angles[2];
670  align::moveAlignable(curAli, change); // move as a chunk
671 
672  // Now get the components again. They should be in new locations
673  const std::vector<Alignable*>& curComp2 = curAli->components();
674 
675  for(int ich=0; ich<nComp; ich++){
676  CLHEP::Hep3Vector Rtotal, Wtotal;
677  Rtotal.set(0.,0.,0.); Wtotal.set(0.,0.,0.);
678  if(_weightById){
679  if(!align::readModuleList(curComp[ich]->id(), curComp[ich]->id(), _weightByIdVector))
680  continue;
681  }
682 
683  for (int i = 0; i < 100; i++){
684  AlgebraicVector diff = align::diffAlignables(refComp[ich],curComp2[ich],
686  CLHEP::Hep3Vector dR(diff[0],diff[1],diff[2]);
687  Rtotal+=dR;
688  CLHEP::Hep3Vector dW(diff[3],diff[4],diff[5]);
689  CLHEP::HepRotation rot(Wtotal.unit(),Wtotal.mag());
690  CLHEP::HepRotation drot(dW.unit(),dW.mag());
691  rot*=drot;
692  Wtotal.set(rot.axis().x()*rot.delta(), rot.axis().y()*rot.delta(),
693  rot.axis().z()*rot.delta());
694  align::moveAlignable(curComp2[ich], diff);
695  float tolerance = 1e-7;
696  AlgebraicVector check = align::diffAlignables(refComp[ich],curComp2[ich],
698  align::GlobalVector checkR(check[0],check[1],check[2]);
699  align::GlobalVector checkW(check[3],check[4],check[5]);
700  if ((checkR.mag() > tolerance)||(checkW.mag() > tolerance)){}
701  else{break;}
702  } // end of for on int i
703  AlgebraicVector TRtot(6);
704  TRtot(1) = Rtotal.x(); TRtot(2) = Rtotal.y(); TRtot(3) = Rtotal.z();
705  TRtot(4) = Wtotal.x(); TRtot(5) = Wtotal.y(); TRtot(6) = Wtotal.z();
706  fillTree(refComp[ich], TRtot);
707  } // end of for on ich
708 
709 
710 
711 }
int i
Definition: DBlmapReader.cc:9
bool isMother(Alignable *ali)
T y() const
Definition: PV3DBase.h:63
std::vector< unsigned int > _weightByIdVector
AlgebraicVector diffAlignables(Alignable *refAli, Alignable *curAli, const std::string &weightBy, bool weightById, const std::vector< unsigned int > &weightByIdVector)
Definition: AlignTools.cc:10
void createPoints(GlobalVectors *Vs, Alignable *ali, const std::string &weightBy, bool weightById, const std::vector< unsigned int > &weightByIdVector)
Definition: AlignTools.cc:92
virtual Alignables components() const =0
Return vector of all direct components.
RotationType diffRot(const GlobalVectors &current, const GlobalVectors &nominal)
Definition: Utilities.cc:71
bool check(const DataFrame &df, bool capcheck, bool dvercheck)
T z() const
Definition: PV3DBase.h:64
bool readModuleList(unsigned int, unsigned int, const std::vector< unsigned int > &)
Definition: AlignTools.cc:142
EulerAngles toAngles(const RotationType &)
Convert rotation matrix to angles about x-, y-, z-axes (frame rotation).
Definition: Utilities.cc:7
GlobalVector centerOfMass(const GlobalVectors &theVs)
Find the CM of a set of points.
Definition: Utilities.cc:185
Definition: DetId.h:20
CLHEP::HepVector AlgebraicVector
AlgebraicVector EulerAngles
Definition: Definitions.h:36
std::vector< GlobalVector > GlobalVectors
Definition: Utilities.h:24
void fillTree(Alignable *refAli, AlgebraicVector diff)
T x() const
Definition: PV3DBase.h:62
void moveAlignable(Alignable *ali, AlgebraicVector diff)
Moves the alignable by the AlgebraicVector.
Definition: AlignTools.cc:81
Alignable * mother() const
Return pointer to container alignable (if any)
Definition: Alignable.h:85
void MuonGeometryArrange::createROOTGeometry ( const edm::EventSetup iSetup)
private

Definition at line 454 of file MuonGeometryArrange.cc.

454 {}
void MuonGeometryArrange::endHist ( )
private

Definition at line 165 of file MuonGeometryArrange.cc.

References _mgacollection, _theFile, i, makeGraph(), findQualityFiles::maxI, findQualityFiles::minI, run_regression::ret, pileupReCalc_HLTpaths::scale, findQualityFiles::size, mathSSE::sqrt(), x, and detailsBasic3DVector::y.

Referenced by analyze().

165  {
166  // Unpack the list and create ntuples here.
167 
168  int size=_mgacollection.size();
169  if(size<=0) return; // nothing to do here.
170  float* xp = new float[size+1];
171  float* yp = new float[size+1];
172  int i;
173  float minV, maxV;
174  int minI, maxI;
175 
176  minV=99999999.; maxV=-minV; minI=9999999; maxI=-minI;
177  TGraph* grx=0x0;
178  TH2F* dxh=0x0;
179 
180 // for position plots:
181  for(i=0; i<size; i++){
182  if(_mgacollection[i].phipos<minI) minI=_mgacollection[i].phipos;
183  if(_mgacollection[i].phipos>maxI) maxI=_mgacollection[i].phipos;
184  xp[i]=_mgacollection[i].phipos;
185  }
186  if(minI>=maxI) return; // can't do anything?
187  xp[size]=xp[size-1]+1; // wraparound point
188 
189  if(1<minI) minI=1;
190  if(size>maxI) maxI=size;
191  maxI++; // allow for wraparound to show neighbors
192  int sizeI=maxI+1-minI;
193  float smi=minI-1;
194  float sma=maxI+1;
195 
196 
197 // Dx plot
198 
199  for(i=0; i<size; i++){
200  if(_mgacollection[i].ldx<minV) minV=_mgacollection[i].ldx;
201  if(_mgacollection[i].ldx>maxV) maxV=_mgacollection[i].ldx;
202  yp[i]=_mgacollection[i].ldx;
203  }
204  yp[size]=yp[0]; // wraparound point
205 
206  makeGraph(sizeI, smi, sma, minV, maxV,
207  dxh, grx, "delX_vs_position", "Local #delta X vs position",
208  "GdelX_vs_position","#delta x in cm", xp, yp, size);
209 // Dy plot
210  minV=99999999.; maxV=-minV;
211  for(i=0; i<size; i++){
212  if(_mgacollection[i].ldy<minV) minV=_mgacollection[i].ldy;
213  if(_mgacollection[i].ldy>maxV) maxV=_mgacollection[i].ldy;
214  yp[i]=_mgacollection[i].ldy;
215  }
216  yp[size]=yp[0]; // wraparound point
217 
218  makeGraph(sizeI, smi, sma, minV, maxV,
219  dxh, grx, "delY_vs_position", "Local #delta Y vs position",
220  "GdelY_vs_position","#delta y in cm", xp, yp, size);
221 
222 // Dz plot
223  minV=99999999.; maxV=-minV;
224  for(i=0; i<size; i++){
225  if(_mgacollection[i].dz<minV) minV=_mgacollection[i].dz;
226  if(_mgacollection[i].dz>maxV) maxV=_mgacollection[i].dz;
227  yp[i]=_mgacollection[i].dz;
228  }
229  yp[size]=yp[0]; // wraparound point
230 
231  makeGraph(sizeI, smi, sma, minV, maxV,
232  dxh, grx, "delZ_vs_position", "Local #delta Z vs position",
233  "GdelZ_vs_position","#delta z in cm", xp, yp, size);
234 
235 // Dphi plot
236  minV=99999999.; maxV=-minV;
237  for(i=0; i<size; i++){
238  if(_mgacollection[i].dphi<minV) minV=_mgacollection[i].dphi;
239  if(_mgacollection[i].dphi>maxV) maxV=_mgacollection[i].dphi;
240  yp[i]=_mgacollection[i].dphi;
241  }
242  yp[size]=yp[0]; // wraparound point
243 
244  makeGraph(sizeI, smi, sma, minV, maxV,
245  dxh, grx, "delphi_vs_position", "#delta #phi vs position",
246  "Gdelphi_vs_position","#delta #phi in radians", xp, yp, size);
247 
248 // Dr plot
249  minV=99999999.; maxV=-minV;
250  for(i=0; i<size; i++){
251  if(_mgacollection[i].dr<minV) minV=_mgacollection[i].dr;
252  if(_mgacollection[i].dr>maxV) maxV=_mgacollection[i].dr;
253  yp[i]=_mgacollection[i].dr;
254  }
255  yp[size]=yp[0]; // wraparound point
256 
257  makeGraph(sizeI, smi, sma, minV, maxV,
258  dxh, grx, "delR_vs_position", "#delta R vs position",
259  "GdelR_vs_position","#delta R in cm", xp, yp, size);
260 
261 // Drphi plot
262  minV=99999999.; maxV=-minV;
263  for(i=0; i<size; i++){
264  float ttemp=_mgacollection[i].r*_mgacollection[i].dphi;
265  if(ttemp<minV) minV=ttemp;
266  if(ttemp>maxV) maxV=ttemp;
267  yp[i]=ttemp;
268  }
269  yp[size]=yp[0]; // wraparound point
270 
271  makeGraph(sizeI, smi, sma, minV, maxV,
272  dxh, grx, "delRphi_vs_position", "R #delta #phi vs position",
273  "GdelRphi_vs_position","R #delta #phi in cm", xp, yp, size);
274 
275 // Dalpha plot
276  minV=99999999.; maxV=-minV;
277  for(i=0; i<size; i++){
278  if(_mgacollection[i].dalpha<minV) minV=_mgacollection[i].dalpha;
279  if(_mgacollection[i].dalpha>maxV) maxV=_mgacollection[i].dalpha;
280  yp[i]=_mgacollection[i].dalpha;
281  }
282  yp[size]=yp[0]; // wraparound point
283 
284  makeGraph(sizeI, smi, sma, minV, maxV,
285  dxh, grx, "delalpha_vs_position", "#delta #alpha vs position",
286  "Gdelalpha_vs_position","#delta #alpha in rad", xp, yp, size);
287 
288 // Dbeta plot
289  minV=99999999.; maxV=-minV;
290  for(i=0; i<size; i++){
291  if(_mgacollection[i].dbeta<minV) minV=_mgacollection[i].dbeta;
292  if(_mgacollection[i].dbeta>maxV) maxV=_mgacollection[i].dbeta;
293  yp[i]=_mgacollection[i].dbeta;
294  }
295  yp[size]=yp[0]; // wraparound point
296 
297  makeGraph(sizeI, smi, sma, minV, maxV,
298  dxh, grx, "delbeta_vs_position", "#delta #beta vs position",
299  "Gdelbeta_vs_position","#delta #beta in rad", xp, yp, size);
300 
301 // Dgamma plot
302  minV=99999999.; maxV=-minV;
303  for(i=0; i<size; i++){
304  if(_mgacollection[i].dgamma<minV) minV=_mgacollection[i].dgamma;
305  if(_mgacollection[i].dgamma>maxV) maxV=_mgacollection[i].dgamma;
306  yp[i]=_mgacollection[i].dgamma;
307  }
308  yp[size]=yp[0]; // wraparound point
309 
310  makeGraph(sizeI, smi, sma, minV, maxV,
311  dxh, grx, "delgamma_vs_position", "#delta #gamma vs position",
312  "Gdelgamma_vs_position","#delta #gamma in rad", xp, yp, size);
313 
314 // Drotx plot
315  minV=99999999.; maxV=-minV;
316  for(i=0; i<size; i++){
317  if(_mgacollection[i].drotx<minV) minV=_mgacollection[i].drotx;
318  if(_mgacollection[i].drotx>maxV) maxV=_mgacollection[i].drotx;
319  yp[i]=_mgacollection[i].drotx;
320  }
321  yp[size]=yp[0]; // wraparound point
322 
323  makeGraph(sizeI, smi, sma, minV, maxV,
324  dxh, grx, "delrotX_vs_position", "#delta rotX vs position",
325  "GdelrotX_vs_position","#delta rotX in rad", xp, yp, size);
326 
327 // Droty plot
328  minV=99999999.; maxV=-minV;
329  for(i=0; i<size; i++){
330  if(_mgacollection[i].droty<minV) minV=_mgacollection[i].droty;
331  if(_mgacollection[i].droty>maxV) maxV=_mgacollection[i].droty;
332  yp[i]=_mgacollection[i].droty;
333  }
334  yp[size]=yp[0]; // wraparound point
335 
336  makeGraph(sizeI, smi, sma, minV, maxV,
337  dxh, grx, "delrotY_vs_position", "#delta rotY vs position",
338  "GdelrotY_vs_position","#delta rotY in rad", xp, yp, size);
339 
340 // Drotz plot
341  minV=99999999.; maxV=-minV;
342  for(i=0; i<size; i++){
343  if(_mgacollection[i].drotz<minV) minV=_mgacollection[i].drotz;
344  if(_mgacollection[i].drotz>maxV) maxV=_mgacollection[i].drotz;
345  yp[i]=_mgacollection[i].drotz;
346  }
347  yp[size]=yp[0]; // wraparound point
348 
349  makeGraph(sizeI, smi, sma, minV, maxV,
350  dxh, grx, "delrotZ_vs_position", "#delta rotZ vs position",
351  "GdelrotZ_vs_position","#delta rotZ in rad", xp, yp, size);
352 
353 
354 
355 // Vector plots
356 // First find the maximum length of sqrt(dx*dx+dy*dy): we'll have to
357 // scale these for visibility
358  maxV=-99999999.;
359  float ttemp, rtemp;
360  float maxR=-9999999.;
361  for(i=0; i<size; i++){
362  ttemp= sqrt(_mgacollection[i].dx*_mgacollection[i].dx+
363  _mgacollection[i].dy*_mgacollection[i].dy);
364  rtemp= sqrt(_mgacollection[i].x*_mgacollection[i].x+
366  if(ttemp>maxV) maxV=ttemp;
367  if(rtemp>maxR) maxR=rtemp;
368  }
369 
370  // Don't try to scale rediculously small values
371  float smallestVcm=.001; // 10 microns
372  if(maxV<smallestVcm) maxV=smallestVcm;
373  float scale=0.;
374  float lside=1.1*maxR;
375  if(lside<=0) lside=100.;
376  if(maxV>0){scale=.09*lside/maxV;} // units of pad length!
377  char scalename[50];
378  int ret=snprintf(scalename,50,"#delta #bar{x} length =%f cm",maxV);
379  // If ret<=0 we don't want to print the scale!
380 
381  if(ret>0){
382  dxh=new TH2F("vecdrplot",scalename,80,-lside,lside,80,-lside,lside);
383  }
384  else{
385  dxh=new TH2F("vecdrplot","delta #bar{x} Bad scale",80,-lside,lside,80,-lside,lside);
386  }
387  dxh->GetXaxis()->SetTitle("x in cm");
388  dxh->GetYaxis()->SetTitle("y in cm");
389  dxh->SetStats(kFALSE);
390  dxh->Draw();
391  TArrow* arrow;
392  for(i=0; i<size; i++){
393  ttemp= sqrt(_mgacollection[i].dx*_mgacollection[i].dx+
394  _mgacollection[i].dy*_mgacollection[i].dy);
395 // ttemp=ttemp*scale;
396  float nx=_mgacollection[i].x+scale*_mgacollection[i].dx;
397  float ny=_mgacollection[i].y+scale*_mgacollection[i].dy;
398  arrow = new TArrow(_mgacollection[i].x,
399  _mgacollection[i].y, nx, ny);// ttemp*.3*.05, "->");
400  arrow->SetLineWidth(2); arrow->SetArrowSize(ttemp*.2*.05/maxV);
401  arrow->SetLineColor(1); arrow->SetLineStyle(1);
402  arrow->Paint();
403  dxh->GetListOfFunctions()->Add(static_cast<TObject*>(arrow));
404 // arrow->Draw();
405 // arrow->Write();
406  }
407  dxh->Write();
408 
409  _theFile->Write();
410  _theFile->Close();
411 
412  delete [] yp; delete [] xp;
413 
414 }
int i
Definition: DBlmapReader.cc:9
void makeGraph(int sizeI, float smi, float sma, float minV, float maxV, TH2F *dxh, TGraph *grx, const char *name, const char *title, const char *titleg, const char *axis, float *xp, float *yp, int numEntries)
T sqrt(T t)
Definition: SSEVec.h:48
Definition: DDAxes.h:10
tuple size
Write out results.
std::vector< MGACollection > _mgacollection
void MuonGeometryArrange::fillTree ( Alignable refAli,
AlgebraicVector  diff 
)
private

Definition at line 715 of file MuonGeometryArrange.cc.

References _alignTree, _alphaVal, _betaVal, _dalphaVal, _dbetaVal, _detDim, _detIdFlag, _dgammaVal, _dphiVal, _drotxVal, _drotyVal, _drotzVal, _drVal, _dxVal, _dyVal, _dzVal, _etaVal, _gammaVal, _id, _ldphiVal, _ldrVal, _ldxVal, _ldyVal, _ldzVal, _level, _mgacollection, _mid, _mlevel, _phiVal, _rotxVal, _rotyVal, _rotzVal, _rVal, _sublevel, _surLength, _surRot, _surWidth, _useDetId, _xVal, _yVal, _zVal, align::AlignableDet, align::AlignableDetUnit, Alignable::alignableObjectId(), MuonGeometryArrange::MGACollection::alpha, MuonGeometryArrange::MGACollection::beta, CSCDetId::chamber(), MuonSubdetId::CSC, MuonGeometryArrange::MGACollection::dalpha, MuonGeometryArrange::MGACollection::dbeta, DetId::det(), MuonGeometryArrange::MGACollection::detDim, cond::rpcobgas::detid, MuonGeometryArrange::MGACollection::dgamma, MuonGeometryArrange::MGACollection::dphi, MuonGeometryArrange::MGACollection::dr, MuonGeometryArrange::MGACollection::drotx, MuonGeometryArrange::MGACollection::droty, MuonGeometryArrange::MGACollection::drotz, MuonGeometryArrange::MGACollection::dx, MuonGeometryArrange::MGACollection::dy, MuonGeometryArrange::MGACollection::dz, PV3DBase< T, PVType, FrameType >::eta(), MuonGeometryArrange::MGACollection::eta, MuonGeometryArrange::MGACollection::gamma, Alignable::geomDetId(), Alignable::globalPosition(), Alignable::globalRotation(), i, MuonGeometryArrange::MGACollection::id, Alignable::id(), ixx, iyy, MuonGeometryArrange::MGACollection::ldphi, MuonGeometryArrange::MGACollection::ldr, MuonGeometryArrange::MGACollection::ldx, MuonGeometryArrange::MGACollection::ldy, MuonGeometryArrange::MGACollection::ldz, AlignableSurface::length(), MuonGeometryArrange::MGACollection::level, MuonGeometryArrange::MGACollection::mid, MuonGeometryArrange::MGACollection::mlevel, Alignable::mother(), DetId::Muon, passIdCut(), PV3DBase< T, PVType, FrameType >::perp(), PV3DBase< T, PVType, FrameType >::phi(), MuonGeometryArrange::MGACollection::phi, MuonGeometryArrange::MGACollection::phipos, MuonGeometryArrange::MGACollection::r, DetId::rawId(), makeMuonMisalignmentScenario::rot, MuonGeometryArrange::MGACollection::rotx, MuonGeometryArrange::MGACollection::roty, MuonGeometryArrange::MGACollection::rotz, DetId::subdetId(), MuonGeometryArrange::MGACollection::sublevel, Alignable::surface(), MuonGeometryArrange::MGACollection::surL, MuonGeometryArrange::MGACollection::surRot, MuonGeometryArrange::MGACollection::surW, align::toAngles(), AlignableSurface::toLocal(), align::toMatrix(), MuonGeometryArrange::MGACollection::useDetId, AlignableSurface::width(), PV3DBase< T, PVType, FrameType >::x(), MuonGeometryArrange::MGACollection::x, TkRotation< T >::xx(), TkRotation< T >::xy(), create_public_lumi_plots::xy, TkRotation< T >::xz(), PV3DBase< T, PVType, FrameType >::y(), MuonGeometryArrange::MGACollection::y, TkRotation< T >::yx(), TkRotation< T >::yy(), TkRotation< T >::yz(), PV3DBase< T, PVType, FrameType >::z(), MuonGeometryArrange::MGACollection::z, TkRotation< T >::zx(), TkRotation< T >::zy(), and TkRotation< T >::zz().

Referenced by compareGeometries().

715  {
716 
717 
718  _id = refAli->id();
719  _level = refAli->alignableObjectId();
720  //need if ali has no mother
721  if (refAli->mother()){
722  _mid = refAli->mother()->geomDetId().rawId();
723  _mlevel = refAli->mother()->alignableObjectId();
724  }
725  else{
726  _mid = -1;
727  _mlevel = -1;
728  }
729  DetId detid(_id);
730  _sublevel = detid.subdetId();
731  int ringPhiPos=-99;
732  if(detid.det()==DetId::Muon && detid.subdetId()== MuonSubdetId::CSC){
733  CSCDetId cscId(refAli->geomDetId());
734  ringPhiPos = cscId.chamber();
735  }
736  _xVal = refAli->globalPosition().x();
737  _yVal = refAli->globalPosition().y();
738  _zVal = refAli->globalPosition().z();
740  _rVal = vec.perp();
741  _phiVal = vec.phi();
742  _etaVal = vec.eta();
744  align::EulerAngles eulerAngles = align::toAngles(rot);
745  _rotxVal = atan2(rot.yz(), rot.zz());
746  float ttt=-rot.xz();
747  if(ttt>1.) ttt=1.;
748  if(ttt<-1.) ttt=-1.;
749  _rotyVal = asin(ttt);
750  _rotzVal = atan2(rot.xy(), rot.xx());
751  _alphaVal = eulerAngles[0];
752  _betaVal = eulerAngles[1];
753  _gammaVal = eulerAngles[2];
754  _dxVal = diff[0];
755  _dyVal = diff[1];
756  _dzVal = diff[2];
757  //getting dR and dPhi
760  _drVal = vCur.perp() - vRef.perp();
761  _dphiVal = vCur.phi() - vRef.phi();
762 
763  _dalphaVal = diff[3];
764  _dbetaVal = diff[4];
765  _dgammaVal = diff[5];
766  _drotxVal=-999.; _drotyVal=-999.; _drotzVal=-999.;
767 
768  align::EulerAngles deuler(3);
769  deuler(1)=_dalphaVal;
770  deuler(2)= _dbetaVal;
771  deuler(3)= _dgammaVal;
772  align::RotationType drot = align::toMatrix(deuler);
773  double xx=rot.xx();
774  double xy=rot.xy();
775  double xz=rot.xz();
776  double yx=rot.yx();
777  double yy=rot.yy();
778  double yz=rot.yz();
779  double zx=rot.zx();
780  double zy=rot.zy();
781  double zz=rot.zz();
782  double detrot=(zz*yy - zy*yz)*xx + (-zz*yx + zx*yz)*xy + (zy*yx - zx*yy)*xz;
783  detrot=1/detrot;
784  double ixx=(zz*yy - zy*yz)*detrot;
785  double ixy=(-zz*xy + zy*xz)*detrot;
786  double ixz=(yz*xy - yy*xz)*detrot;
787  double iyx=(-zz*yx + zx*yz)*detrot;
788  double iyy=(zz*xx - zx*xz)*detrot;
789  double iyz=(-yz*xx + yx*xz)*detrot;
790  double izx=(zy*yx - zx*yy)*detrot;
791  double izy=(-zy*xx + zx*xy)*detrot;
792  double izz=(yy*xx - yx*xy)*detrot;
793  align::RotationType invrot(ixx,ixy,ixz, iyx,iyy,iyz, izx,izy,izz);
794  align::RotationType prot = rot*drot*invrot;
795 // align::RotationType prot = rot*drot;
796  float protx; //, proty, protz;
797  protx = atan2(prot.yz(), prot.zz());
798  _drotxVal = protx;//_rotxVal-protx; //atan2(drot.yz(), drot.zz());
799  ttt=-prot.xz();
800  if(ttt>1.) ttt=1.;
801  if(ttt<-1.) ttt=-1.;
802  _drotyVal = asin(ttt);// -_rotyVal;
803  _drotzVal = atan2(prot.xy(), prot.xx());// - _rotzVal;
804 // Above does not account for 2Pi wraparounds!
805 // Prior knowledge: these are supposed to be small rotations. Therefore:
806  if(_drotxVal>3.141592656) _drotxVal=-6.2831853072+_drotxVal;
807  if(_drotxVal<-3.141592656) _drotxVal=6.2831853072+_drotxVal;
808  if(_drotyVal>3.141592656) _drotyVal=-6.2831853072+_drotyVal;
809  if(_drotyVal<-3.141592656) _drotyVal=6.2831853072+_drotyVal;
810  if(_drotzVal>3.141592656) _drotzVal=-6.2831853072+_drotzVal;
811  if(_drotzVal<-3.141592656) _drotzVal=6.2831853072+_drotzVal;
812 
813  _ldxVal=-999.; _ldyVal=-999.; _ldxVal=-999.;
814  _ldrVal=-999.; _ldphiVal=-999; // set fake
815 
816 // if(refAli->alignableObjectId() == align::AlignableDetUnit){
818  align::LocalVector pointL = refAli->surface().toLocal(dV);
819  //align::LocalVector pointL = (refAli->mother())->surface().toLocal(dV);
820  _ldxVal=pointL.x(); _ldyVal=pointL.y(); _ldzVal=pointL.z();
821  _ldphiVal=pointL.phi(); _ldrVal=pointL.perp();
822 // }
823  //detIdFlag
824  if (refAli->alignableObjectId() == align::AlignableDetUnit){
825  if (_detIdFlag){
826  if ((passIdCut(refAli->id()))||(passIdCut(refAli->mother()->id()))){
827  _useDetId = 1;
828  }
829  else{
830  _useDetId = 0;
831  }
832  }
833  }
834  // det module dimension
835  if (refAli->alignableObjectId() == align::AlignableDetUnit){
836  if (refAli->mother()->alignableObjectId() != align::AlignableDet){
837  _detDim = 1;}
838  else if (refAli->mother()->alignableObjectId() ==
840  }
841  else _detDim = 0;
842 
843 
844 
845  _surWidth = refAli->surface().width();
846  _surLength = refAli->surface().length();
847  align::RotationType rt = refAli->globalRotation();
848  _surRot[0] = rt.xx(); _surRot[1] = rt.xy(); _surRot[2] = rt.xz();
849  _surRot[3] = rt.yx(); _surRot[4] = rt.yy(); _surRot[5] = rt.yz();
850  _surRot[6] = rt.zx(); _surRot[7] = rt.zy(); _surRot[8] = rt.zz();
851 
852  MGACollection holdit;
853  holdit.id=_id; holdit.level=_level; holdit.mid=_mid;
854  holdit.mlevel=_mlevel;
855  holdit.sublevel=_sublevel;
856  holdit.x=_xVal; holdit.y=_yVal; holdit.z=_zVal;
857  holdit.r=_rVal; holdit.phi=_phiVal; holdit.eta=_etaVal;
858  holdit.alpha=_alphaVal; holdit.beta=_betaVal; holdit.gamma=_gammaVal;
859  holdit.dx=_dxVal; holdit.dy=_dyVal; holdit.dz=_dzVal;
860  holdit.dr=_drVal; holdit.dphi=_dphiVal;
861  holdit.dalpha=_dalphaVal; holdit.dbeta=_dbetaVal;
862  holdit.dgamma=_dgammaVal;
863  holdit.useDetId=_useDetId; holdit.detDim=_detDim;
864  holdit.surW=_surWidth; holdit.surL=_surLength;
865  holdit.ldx=_ldxVal; holdit.ldy=_ldyVal; holdit.ldz=_ldzVal;
866  holdit.ldr=_ldrVal; holdit.ldphi=_ldphiVal;
867  holdit.rotx=_rotxVal; holdit.roty=_rotyVal; holdit.rotz=_rotzVal;
868  holdit.drotx=_drotxVal; holdit.droty=_drotyVal; holdit.drotz=_drotzVal;
869  for(int i=0; i<9; i++){holdit.surRot[i]=_surRot[i];}
870  holdit.phipos=ringPhiPos;
871  _mgacollection.push_back(holdit);
872 
873 
874  //Fill
875  _alignTree->Fill();
876 
877 }
T xx() const
align::Scalar width() const
int chamber() const
Definition: CSCDetId.h:70
align::ID id() const
Return the ID of Alignable, i.e. DetId of &#39;first&#39; component GeomDet(Unit).
Definition: Alignable.h:180
int i
Definition: DBlmapReader.cc:9
T perp() const
Definition: PV3DBase.h:72
int iyy[18][41][3]
Geom::Phi< T > phi() const
Definition: PV3DBase.h:69
T y() const
Definition: PV3DBase.h:63
T yx() const
const RotationType & globalRotation() const
Return the global orientation of the object.
Definition: Alignable.h:132
int ixx[18][41][3]
uint32_t rawId() const
get the raw id
Definition: DetId.h:45
T zx() const
T xy() const
T zz() const
static const int CSC
Definition: MuonSubdetId.h:15
align::RotationType toLocal(const align::RotationType &) const
Return in local frame a rotation given in global frame.
T z() const
Definition: PV3DBase.h:64
virtual StructureType alignableObjectId() const =0
Return the alignable type identifier.
T zy() const
EulerAngles toAngles(const RotationType &)
Convert rotation matrix to angles about x-, y-, z-axes (frame rotation).
Definition: Utilities.cc:7
T yy() const
const AlignableSurface & surface() const
Return the Surface (global position and orientation) of the object.
Definition: Alignable.h:126
Definition: DetId.h:20
AlgebraicVector EulerAngles
Definition: Definitions.h:36
align::Scalar length() const
T xz() const
RotationType toMatrix(const EulerAngles &)
Convert rotation angles about x-, y-, z-axes to matrix.
Definition: Utilities.cc:40
const PositionType & globalPosition() const
Return the global position of the object.
Definition: Alignable.h:129
T x() const
Definition: PV3DBase.h:62
Alignable * mother() const
Return pointer to container alignable (if any)
Definition: Alignable.h:85
T yz() const
const DetId & geomDetId() const
Definition: Alignable.h:177
std::vector< MGACollection > _mgacollection
bool MuonGeometryArrange::isMother ( Alignable ali)
private

Definition at line 880 of file MuonGeometryArrange.cc.

References checkChosen(), Alignable::components(), i, and findQualityFiles::size.

Referenced by compareGeometries().

880  {
881  // Is this the mother ring?
882  if(ali==0x0) return false; // elementary sanity
883  const std::vector<Alignable*>& aliComp = ali->components();
884 
885  int size=aliComp.size();
886  if(size<=0) return false; // no subcomponents
887 
888  for(int i=0; i<size; i++){
889  if(checkChosen(aliComp[i])) return true; // A ring has CSC chambers
890  } // as subcomponents
891  return false; // 1'st layer of subcomponents weren't CSC chambers
892 }
int i
Definition: DBlmapReader.cc:9
bool checkChosen(Alignable *ali)
virtual Alignables components() const =0
Return vector of all direct components.
tuple size
Write out results.
void MuonGeometryArrange::makeGraph ( int  sizeI,
float  smi,
float  sma,
float  minV,
float  maxV,
TH2F *  dxh,
TGraph *  grx,
const char *  name,
const char *  title,
const char *  titleg,
const char *  axis,
float *  xp,
float *  yp,
int  numEntries 
)
private

Definition at line 416 of file MuonGeometryArrange.cc.

References diffTreeTool::diff.

Referenced by endHist().

420  {
421 
422  if(minV>=maxV || smi>=sma || sizeI<=1 || xp==0x0 || yp==0x0) return;
423  // out of bounds, bail
424  float diff=maxV-minV;
425  float over=.05*diff;
426  double ylo=minV-over;
427  double yhi=maxV+over;
428  double dsmi, dsma;
429  dsmi=smi; dsma=sma;
430  dxh= new TH2F(name, title,
431  sizeI+2, dsmi, dsma, 50, ylo, yhi);
432  dxh->GetXaxis()->SetTitle("Position around ring");
433  dxh->GetYaxis()->SetTitle(axis);
434  dxh->SetStats(kFALSE);
435  dxh->Draw();
436  grx = new TGraph(size, xp, yp);
437  grx->SetName(titleg);
438  grx->SetTitle(title);
439  grx->SetMarkerColor(2); grx->SetMarkerStyle(3);
440  grx->GetXaxis()->SetLimits(dsmi, dsma);
441  grx->GetXaxis()->SetTitle("position number");
442  grx->GetYaxis()->SetLimits(ylo,yhi);
443  grx->GetYaxis()->SetTitle(axis);
444  grx->Draw("A*");
445  grx->Write();
446  return;
447 }
tuple size
Write out results.
bool MuonGeometryArrange::passChosen ( Alignable ali)
private

Definition at line 921 of file MuonGeometryArrange.cc.

References checkChosen(), Alignable::components(), i, and findQualityFiles::size.

921  {
922 
923  // Check to see if this contains CSC components of the appropriate ring
924  // Ring will contain N Alignables which represent chambers, each of which
925  // in turn contains M planes. For our purposes we don't care about the
926  // planes.
927  // Hmm. Interesting question: Do I want to try to fit the chamber as
928  // such, or use the geometry?
929  // I want to fit the chamber, so I'll try to use its presence as the marker.
930  // What specifically identifies a chamber as a chamber, and not as a layer?
931  // The fact that it has layers as sub components, or the fact that it is
932  // the first item with a non-zero ID breakdown? Pick the latter.
933  //
934  if(ali==0x0) return false;
935  if(checkChosen(ali)) return true; // If this is one of the desired
936  // CSC chambers, accept it
937  const std::vector<Alignable*>& aliComp = ali->components();
938 
939  int size=aliComp.size();
940  if(size<=0) return false; // no subcomponents
941 
942  for(int i=0; i<size; i++){
943  if(checkChosen(aliComp[i])) return true; // A ring has CSC chambers
944  } // as subcomponents
945  return false; // 1'st layer of subcomponents weren't CSC chambers
946 }
int i
Definition: DBlmapReader.cc:9
bool checkChosen(Alignable *ali)
virtual Alignables components() const =0
Return vector of all direct components.
tuple size
Write out results.
bool MuonGeometryArrange::passIdCut ( uint32_t  id)
private

Definition at line 948 of file MuonGeometryArrange.cc.

References _detIdFlagVector, cond::rpcobgas::detid, and i.

Referenced by fillTree().

948  {
949 
950  bool pass = false;
951  DetId detid(id);
952 // if(detid.det()==DetId::Muon && detid.subdetId()== MuonSubdetId::CSC){
953 // CSCDetId cscId(refAli->geomDetId());
954 // if(cscId.layer()!=1) return false; // ONLY FIRST LAYER!
955 // }
956  int nEntries = _detIdFlagVector.size();
957 
958  for (int i = 0; i < nEntries; i++){
959  if (_detIdFlagVector[i] == id) pass = true;
960  }
961 
962  return pass;
963 
964 }
int i
Definition: DBlmapReader.cc:9
std::vector< uint32_t > _detIdFlagVector
Definition: DetId.h:20

Member Data Documentation

TTree* MuonGeometryArrange::_alignTree
private

Definition at line 155 of file MuonGeometryArrange.h.

Referenced by analyze(), fillTree(), and MuonGeometryArrange().

float MuonGeometryArrange::_alphaVal
private

Definition at line 162 of file MuonGeometryArrange.h.

Referenced by fillTree(), and MuonGeometryArrange().

float MuonGeometryArrange::_betaVal
private

Definition at line 162 of file MuonGeometryArrange.h.

Referenced by fillTree(), and MuonGeometryArrange().

align::StructureType MuonGeometryArrange::_commonMuonLevel
private

Definition at line 116 of file MuonGeometryArrange.h.

float MuonGeometryArrange::_dalphaVal
private

Definition at line 163 of file MuonGeometryArrange.h.

Referenced by fillTree(), and MuonGeometryArrange().

float MuonGeometryArrange::_dbetaVal
private

Definition at line 164 of file MuonGeometryArrange.h.

Referenced by fillTree(), and MuonGeometryArrange().

int MuonGeometryArrange::_detDim
private

Definition at line 161 of file MuonGeometryArrange.h.

Referenced by fillTree(), and MuonGeometryArrange().

bool MuonGeometryArrange::_detIdFlag
private

Definition at line 106 of file MuonGeometryArrange.h.

Referenced by fillTree(), and MuonGeometryArrange().

std::string MuonGeometryArrange::_detIdFlagFile
private

Definition at line 107 of file MuonGeometryArrange.h.

Referenced by MuonGeometryArrange().

std::vector< uint32_t > MuonGeometryArrange::_detIdFlagVector
private

Definition at line 115 of file MuonGeometryArrange.h.

Referenced by MuonGeometryArrange(), and passIdCut().

float MuonGeometryArrange::_dgammaVal
private

Definition at line 164 of file MuonGeometryArrange.h.

Referenced by fillTree(), and MuonGeometryArrange().

float MuonGeometryArrange::_dphiVal
private

Definition at line 163 of file MuonGeometryArrange.h.

Referenced by fillTree(), and MuonGeometryArrange().

float MuonGeometryArrange::_drotxVal
private

Definition at line 167 of file MuonGeometryArrange.h.

Referenced by fillTree(), and MuonGeometryArrange().

float MuonGeometryArrange::_drotyVal
private

Definition at line 167 of file MuonGeometryArrange.h.

Referenced by fillTree(), and MuonGeometryArrange().

float MuonGeometryArrange::_drotzVal
private

Definition at line 167 of file MuonGeometryArrange.h.

Referenced by fillTree(), and MuonGeometryArrange().

float MuonGeometryArrange::_drVal
private

Definition at line 163 of file MuonGeometryArrange.h.

Referenced by fillTree(), and MuonGeometryArrange().

float MuonGeometryArrange::_dxVal
private

Definition at line 163 of file MuonGeometryArrange.h.

Referenced by fillTree(), and MuonGeometryArrange().

float MuonGeometryArrange::_dyVal
private

Definition at line 163 of file MuonGeometryArrange.h.

Referenced by fillTree(), and MuonGeometryArrange().

float MuonGeometryArrange::_dzVal
private

Definition at line 163 of file MuonGeometryArrange.h.

Referenced by fillTree(), and MuonGeometryArrange().

int MuonGeometryArrange::_endcap
private

Definition at line 111 of file MuonGeometryArrange.h.

Referenced by checkChosen(), and MuonGeometryArrange().

float MuonGeometryArrange::_etaVal
private

Definition at line 162 of file MuonGeometryArrange.h.

Referenced by fillTree(), and MuonGeometryArrange().

std::string MuonGeometryArrange::_filename
private
float MuonGeometryArrange::_gammaVal
private

Definition at line 162 of file MuonGeometryArrange.h.

Referenced by fillTree(), and MuonGeometryArrange().

int MuonGeometryArrange::_id
private

Definition at line 161 of file MuonGeometryArrange.h.

Referenced by fillTree(), and MuonGeometryArrange().

std::string MuonGeometryArrange::_inputFilename1
private

Definition at line 100 of file MuonGeometryArrange.h.

Referenced by MuonGeometryArrange().

std::string MuonGeometryArrange::_inputFilename2
private

Definition at line 101 of file MuonGeometryArrange.h.

Referenced by MuonGeometryArrange().

TFile* MuonGeometryArrange::_inputRootFile1
private

Definition at line 156 of file MuonGeometryArrange.h.

TFile* MuonGeometryArrange::_inputRootFile2
private

Definition at line 157 of file MuonGeometryArrange.h.

TTree* MuonGeometryArrange::_inputTree1
private

Definition at line 158 of file MuonGeometryArrange.h.

TTree* MuonGeometryArrange::_inputTree2
private

Definition at line 159 of file MuonGeometryArrange.h.

std::string MuonGeometryArrange::_inputTreename
private

Definition at line 102 of file MuonGeometryArrange.h.

Referenced by MuonGeometryArrange().

std::string MuonGeometryArrange::_inputXMLCurrent
private

Definition at line 148 of file MuonGeometryArrange.h.

Referenced by analyze(), and MuonGeometryArrange().

std::string MuonGeometryArrange::_inputXMLReference
private

Definition at line 149 of file MuonGeometryArrange.h.

Referenced by analyze(), and MuonGeometryArrange().

float MuonGeometryArrange::_ldphiVal
private

Definition at line 165 of file MuonGeometryArrange.h.

Referenced by fillTree(), and MuonGeometryArrange().

float MuonGeometryArrange::_ldrVal
private

Definition at line 165 of file MuonGeometryArrange.h.

Referenced by fillTree(), and MuonGeometryArrange().

float MuonGeometryArrange::_ldxVal
private

Definition at line 164 of file MuonGeometryArrange.h.

Referenced by fillTree(), and MuonGeometryArrange().

float MuonGeometryArrange::_ldyVal
private

Definition at line 164 of file MuonGeometryArrange.h.

Referenced by fillTree(), and MuonGeometryArrange().

float MuonGeometryArrange::_ldzVal
private

Definition at line 164 of file MuonGeometryArrange.h.

Referenced by fillTree(), and MuonGeometryArrange().

int MuonGeometryArrange::_level
private
std::vector<MGACollection> MuonGeometryArrange::_mgacollection
private

Definition at line 146 of file MuonGeometryArrange.h.

Referenced by endHist(), fillTree(), and MuonGeometryArrange().

int MuonGeometryArrange::_mid
private

Definition at line 161 of file MuonGeometryArrange.h.

Referenced by fillTree(), and MuonGeometryArrange().

int MuonGeometryArrange::_mlevel
private

Definition at line 161 of file MuonGeometryArrange.h.

Referenced by fillTree(), and MuonGeometryArrange().

align::PositionType MuonGeometryArrange::_MuonCommonCM
private

Definition at line 119 of file MuonGeometryArrange.h.

align::EulerAngles MuonGeometryArrange::_MuonCommonR
private

Definition at line 118 of file MuonGeometryArrange.h.

align::GlobalVector MuonGeometryArrange::_MuonCommonT
private

Definition at line 117 of file MuonGeometryArrange.h.

float MuonGeometryArrange::_phiVal
private

Definition at line 162 of file MuonGeometryArrange.h.

Referenced by fillTree(), and MuonGeometryArrange().

int MuonGeometryArrange::_ring
private

Definition at line 113 of file MuonGeometryArrange.h.

Referenced by checkChosen(), and MuonGeometryArrange().

float MuonGeometryArrange::_rotxVal
private

Definition at line 166 of file MuonGeometryArrange.h.

Referenced by fillTree(), and MuonGeometryArrange().

float MuonGeometryArrange::_rotyVal
private

Definition at line 166 of file MuonGeometryArrange.h.

Referenced by fillTree(), and MuonGeometryArrange().

float MuonGeometryArrange::_rotzVal
private

Definition at line 166 of file MuonGeometryArrange.h.

Referenced by fillTree(), and MuonGeometryArrange().

float MuonGeometryArrange::_rVal
private

Definition at line 162 of file MuonGeometryArrange.h.

Referenced by fillTree(), and MuonGeometryArrange().

std::string MuonGeometryArrange::_setCommonMuonSystem
private

Definition at line 105 of file MuonGeometryArrange.h.

int MuonGeometryArrange::_station
private

Definition at line 112 of file MuonGeometryArrange.h.

Referenced by checkChosen(), and MuonGeometryArrange().

int MuonGeometryArrange::_sublevel
private

Definition at line 161 of file MuonGeometryArrange.h.

Referenced by fillTree(), and MuonGeometryArrange().

float MuonGeometryArrange::_surLength
private

Definition at line 168 of file MuonGeometryArrange.h.

Referenced by fillTree(), and MuonGeometryArrange().

double MuonGeometryArrange::_surRot[9]
private

Definition at line 169 of file MuonGeometryArrange.h.

Referenced by fillTree(), and MuonGeometryArrange().

float MuonGeometryArrange::_surWidth
private

Definition at line 168 of file MuonGeometryArrange.h.

Referenced by fillTree(), and MuonGeometryArrange().

TFile* MuonGeometryArrange::_theFile
private

Definition at line 154 of file MuonGeometryArrange.h.

Referenced by analyze(), endHist(), and MuonGeometryArrange().

int MuonGeometryArrange::_useDetId
private

Definition at line 161 of file MuonGeometryArrange.h.

Referenced by fillTree(), and MuonGeometryArrange().

std::string MuonGeometryArrange::_weightBy
private

Definition at line 104 of file MuonGeometryArrange.h.

Referenced by compareGeometries(), and MuonGeometryArrange().

bool MuonGeometryArrange::_weightById
private

Definition at line 108 of file MuonGeometryArrange.h.

Referenced by compareGeometries(), and MuonGeometryArrange().

std::string MuonGeometryArrange::_weightByIdFile
private

Definition at line 109 of file MuonGeometryArrange.h.

Referenced by MuonGeometryArrange().

std::vector< unsigned int > MuonGeometryArrange::_weightByIdVector
private

Definition at line 110 of file MuonGeometryArrange.h.

Referenced by compareGeometries(), and MuonGeometryArrange().

bool MuonGeometryArrange::_writeToDB
private

Definition at line 103 of file MuonGeometryArrange.h.

float MuonGeometryArrange::_xVal
private

Definition at line 162 of file MuonGeometryArrange.h.

Referenced by fillTree(), and MuonGeometryArrange().

float MuonGeometryArrange::_yVal
private

Definition at line 162 of file MuonGeometryArrange.h.

Referenced by fillTree(), and MuonGeometryArrange().

float MuonGeometryArrange::_zVal
private

Definition at line 162 of file MuonGeometryArrange.h.

Referenced by fillTree(), and MuonGeometryArrange().

AlignableMuon* MuonGeometryArrange::currentMuon
private

Definition at line 91 of file MuonGeometryArrange.h.

Referenced by MuonGeometryArrange().

AlignableMuon* MuonGeometryArrange::dummyMuon
private

Definition at line 90 of file MuonGeometryArrange.h.

bool MuonGeometryArrange::firstEvent_
private

Definition at line 171 of file MuonGeometryArrange.h.

Referenced by analyze(), and beginJob().

MuonAlignment* MuonGeometryArrange::inputAlign1
private

Definition at line 150 of file MuonGeometryArrange.h.

Referenced by analyze().

MuonAlignment* MuonGeometryArrange::inputAlign2
private

Definition at line 151 of file MuonGeometryArrange.h.

Referenced by analyze().

MuonAlignment* MuonGeometryArrange::inputAlign2a
private

Definition at line 152 of file MuonGeometryArrange.h.

Referenced by analyze().

Alignable* MuonGeometryArrange::inputGeometry1
private

Definition at line 92 of file MuonGeometryArrange.h.

Referenced by analyze().

Alignable* MuonGeometryArrange::inputGeometry2
private

Definition at line 93 of file MuonGeometryArrange.h.

Referenced by analyze().

edm::ParameterSet MuonGeometryArrange::m_params
private

Definition at line 64 of file MuonGeometryArrange.h.

AlignableMuon* MuonGeometryArrange::referenceMuon
private

Definition at line 89 of file MuonGeometryArrange.h.

Referenced by MuonGeometryArrange().

std::vector<align::StructureType> MuonGeometryArrange::theLevels
private

Definition at line 65 of file MuonGeometryArrange.h.

Referenced by MuonGeometryArrange().

const SurveyErrors* MuonGeometryArrange::theSurveyErrors
private

Definition at line 97 of file MuonGeometryArrange.h.

unsigned int MuonGeometryArrange::theSurveyIndex
private

Definition at line 95 of file MuonGeometryArrange.h.

const Alignments* MuonGeometryArrange::theSurveyValues
private

Definition at line 96 of file MuonGeometryArrange.h.