ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/CMSSW/Alignment/CommonAlignmentAlgorithm/src/AlignmentParameterBuilder.cc
Revision: 1.15
Committed: Thu Jul 12 15:08:28 2007 UTC (17 years, 9 months ago) by flucke
Content type: text/plain
Branch: MAIN
CVS Tags: CMSSW_1_6_12, CMSSW_1_6_12_pre2, CMSSW_1_6_12_pre1, CMSSW_1_6_11, CMSSW_1_7_7, CMSSW_1_6_11_pre1, CMSSW_1_7_6, CMSSW_1_6_10, CMSSW_1_6_10_pre2, CMSSW_1_6_10_pre1, CMSSW_1_6_9, CMSSW_1_6_9_pre2, CMSSW_1_6_9_pre1, CMSSW_1_7_5, CMSSW_1_7_4, CMSSW_1_7_3, CMSSW_1_6_8, CMSSW_1_6_8_pre2, CMSSW_1_7_2, CMSSW_1_6_8_pre1, CMSSW_1_7_1, CMSSW_1_7_0, CMSSW_1_7_0_pre13, CMSSW_1_7_0_pre12, CMSSW_1_7_0_pre11, CMSSW_1_7_0_pre10, CMSSW_1_7_0_pre9, CMSSW_1_7_0_pre8, CMSSW_1_7_0_pre7, CMSSW_1_6_7, CMSSW_1_7_0_pre6, CMSSW_1_6_6, CMSSW_1_6_5, CMSSW_1_6_5_pre1, CMSSW_1_6_4, CMSSW_1_7_0_pre5, CMSSW_1_6_3, CMSSW_1_6_1, CMSSW_1_7_0_pre4, V01-04-00-08, CMSSW_1_7_0_pre3, CMSSW_1_7_0_pre2, CMSSW_1_6_0, CMSSW_1_6_0_pre14, CMSSW_1_7_0_pre1, CMSSW_1_6_0_DAQ3, CMSSW_1_6_0_pre13, CMSSW_1_6_0_pre12, CMSSW_1_6_0_pre11, CMSSW_1_6_0_pre10, CMSSW_1_6_0_pre9, CMSSW_1_6_0_pre8, CMSSW_1_6_0_pre7, CMSSW_1_6_0_pre6, CMSSW_1_6_0_DAQ1, CMSSW_1_6_0_pre5, V01-04-00-07, V01-09-00, V01-04-00-06
Changes since 1.14: +9 -15 lines
Log Message:
adjust to vanishing CompositeRigidBodyAlignmentParameters

File Contents

# User Rev Content
1 flucke 1.5 /** \file AlignableParameterBuilder.cc
2     *
3 flucke 1.15 * $Date: 2007/03/02 12:16:56 $
4     * $Revision: 1.14 $
5 fronga 1.13
6     */
7 flucke 1.5
8 fronga 1.1 #include "FWCore/MessageLogger/interface/MessageLogger.h"
9 flucke 1.8 #include "FWCore/ParameterSet/interface/ParameterSet.h"
10    
11 fronga 1.14 #include "DataFormats/CLHEP/interface/AlgebraicObjects.h"
12 fronga 1.1 #include "Alignment/CommonAlignment/interface/Alignable.h"
13     #include "Alignment/CommonAlignment/interface/AlignableDet.h"
14    
15     #include "Alignment/CommonAlignmentParametrization/interface/RigidBodyAlignmentParameters.h"
16    
17 flucke 1.9 #include "Alignment/CommonAlignmentAlgorithm/interface/AlignmentParameterSelector.h"
18 flucke 1.12 #include "Alignment/CommonAlignmentAlgorithm/interface/SelectionUserVariables.h"
19 flucke 1.8
20 fronga 1.1 // This class's header
21    
22     #include "Alignment/CommonAlignmentAlgorithm/interface/AlignmentParameterBuilder.h"
23    
24    
25     //__________________________________________________________________________________________________
26 flucke 1.8 AlignmentParameterBuilder::AlignmentParameterBuilder(AlignableTracker* alignableTracker) :
27 fronga 1.13 theAlignables(), theAlignableTracker(alignableTracker), theAlignableMuon(0)
28     {
29     }
30    
31     //__________________________________________________________________________________________________
32     AlignmentParameterBuilder::AlignmentParameterBuilder(AlignableTracker* alignableTracker,
33     AlignableMuon* alignableMuon) :
34     theAlignables(), theAlignableTracker(alignableTracker), theAlignableMuon(alignableMuon)
35     {
36     }
37    
38    
39     //__________________________________________________________________________________________________
40     AlignmentParameterBuilder::AlignmentParameterBuilder(AlignableTracker* alignableTracker,
41     const edm::ParameterSet &pSet) :
42     theAlignables(), theAlignableTracker(alignableTracker), theAlignableMuon(0)
43 fronga 1.1 {
44 fronga 1.13 this->addSelections(pSet.getParameter<edm::ParameterSet>("Selector"));
45 flucke 1.8 }
46 fronga 1.1
47 fronga 1.13
48 flucke 1.8 //__________________________________________________________________________________________________
49     AlignmentParameterBuilder::AlignmentParameterBuilder(AlignableTracker* alignableTracker,
50 fronga 1.13 AlignableMuon* alignableMuon,
51     const edm::ParameterSet &pSet) :
52     theAlignables(), theAlignableTracker(alignableTracker), theAlignableMuon(alignableMuon)
53 flucke 1.8 {
54 fronga 1.11 this->addSelections(pSet.getParameter<edm::ParameterSet>("Selector"));
55 fronga 1.1 }
56    
57 fronga 1.13
58 fronga 1.1 //__________________________________________________________________________________________________
59 flucke 1.8 unsigned int AlignmentParameterBuilder::addSelections(const edm::ParameterSet &pSet)
60     {
61    
62 fronga 1.13 AlignmentParameterSelector selector( theAlignableTracker, theAlignableMuon );
63     const unsigned int addedSets = selector.addSelections(pSet);
64 flucke 1.8
65 fronga 1.13 const std::vector<Alignable*> &alignables = selector.selectedAlignables();
66     const std::vector<std::vector<char> > &paramSels = selector.selectedParameters();
67    
68     std::vector<Alignable*>::const_iterator iAli = alignables.begin();
69     std::vector<std::vector<char> >::const_iterator iParamSel = paramSels.begin();
70     unsigned int nHigherLevel = 0;
71    
72     while (iAli != alignables.end() && iParamSel != paramSels.end()) {
73     std::vector<bool> boolParSel;
74     bool charSelIsGeneral = this->decodeParamSel(*iParamSel, boolParSel);
75     if (this->add(*iAli, boolParSel)) ++nHigherLevel;
76     if (charSelIsGeneral) this->addFullParamSel((*iAli)->alignmentParameters(), *iParamSel);
77    
78     ++iAli;
79     ++iParamSel;
80     }
81 flucke 1.5
82 fronga 1.13 edm::LogInfo("Alignment") << "@SUB=AlignmentParameterBuilder::addSelections"
83     << " Added " << addedSets << " set(s) of alignables with "
84     << theAlignables.size() << " alignables in total,"
85     << " of which " << nHigherLevel << " are higher level.";
86 flucke 1.9
87 fronga 1.13 return addedSets;
88 flucke 1.5 }
89    
90     //__________________________________________________________________________________________________
91 flucke 1.9 bool AlignmentParameterBuilder::add(Alignable *alignable, const std::vector<bool> &sel)
92     {
93 flucke 1.5
94 flucke 1.15 const AlgebraicVector par(RigidBodyAlignmentParameters::N_PARAM, 0);
95     const AlgebraicSymMatrix cov(RigidBodyAlignmentParameters::N_PARAM, 0);
96 flucke 1.5
97 flucke 1.15 // Which kind of AlignmentParameters must be selectable once we have other parametrisations:
98     AlignmentParameters *paras = new RigidBodyAlignmentParameters(alignable, par, cov, sel);
99 flucke 1.9 alignable->setAlignmentParameters(paras);
100     theAlignables.push_back(alignable);
101    
102 flucke 1.15 const int aliTypeId = alignable->alignableObjectId();
103     const bool isHigherLevel = (aliTypeId != AlignableObjectId::AlignableDet
104     && aliTypeId != AlignableObjectId::AlignableDetUnit);
105 flucke 1.9 return isHigherLevel;
106 flucke 1.5 }
107    
108    
109     //__________________________________________________________________________________________________
110 flucke 1.9 unsigned int AlignmentParameterBuilder::add(const std::vector<Alignable*> &alignables,
111     const std::vector<bool> &sel)
112 flucke 1.5 {
113    
114 flucke 1.9 unsigned int nHigherLevel = 0;
115 fronga 1.1
116 flucke 1.9 for (std::vector<Alignable*>::const_iterator iAli = alignables.begin();
117     iAli != alignables.end(); ++iAli) {
118     if (this->add(*iAli, sel)) ++nHigherLevel;
119 fronga 1.1 }
120    
121 flucke 1.9 return nHigherLevel;
122 fronga 1.1 }
123    
124    
125     //__________________________________________________________________________________________________
126     void AlignmentParameterBuilder::fixAlignables(int n)
127     {
128    
129 fpschill 1.3 if (n<1 || n>3) {
130 flucke 1.5 edm::LogError("BadArgument") << " n = " << n << " is not in [1,3]";
131 fronga 1.1 return;
132     }
133    
134     std::vector<Alignable*> theNewAlignables;
135     int i=0;
136     int imax = theAlignables.size();
137     for ( std::vector<Alignable*>::const_iterator ia=theAlignables.begin();
138     ia!=theAlignables.end(); ia++ )
139     {
140     i++;
141     if ( n==1 && i>1 )
142     theNewAlignables.push_back(*ia);
143     else if ( n==2 && i>1 && i<imax )
144     theNewAlignables.push_back(*ia);
145     else if ( n==3 && i>2 && i<imax)
146     theNewAlignables.push_back(*ia);
147     }
148    
149     theAlignables = theNewAlignables;
150    
151 flucke 1.10 edm::LogInfo("Alignment") << "@SUB=AlignmentParameterBuilder::fixAlignables"
152     << "removing " << n << " alignables, so that "
153     << theAlignables.size() << " alignables left";
154 fronga 1.1 }
155    
156 flucke 1.12 //__________________________________________________________________________________________________
157     bool AlignmentParameterBuilder::decodeParamSel(const std::vector<char> &paramSelChar,
158     std::vector<bool> &result) const
159     {
160     result.clear();
161     bool anyNon01 = false;
162    
163     for (unsigned int pos = 0; pos < paramSelChar.size(); ++pos) {
164    
165     switch (paramSelChar[pos]) {
166     default:
167     anyNon01 = true;
168     // no break;
169     case '1':
170     result.push_back(true);
171     break;
172     case '0':
173     result.push_back(false);
174     break;
175     }
176     }
177    
178     return anyNon01;
179     }
180    
181     //__________________________________________________________________________________________________
182     bool AlignmentParameterBuilder::addFullParamSel(AlignmentParameters *aliParams,
183     const std::vector<char> &fullSel) const
184     {
185     if (!aliParams) return false;
186    
187     aliParams->setUserVariables(new SelectionUserVariables(fullSel));
188    
189     return true;
190     }