ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/CMSSW/Alignment/CommonAlignmentAlgorithm/src/AlignmentParameterBuilder.cc
Revision: 1.3
Committed: Mon Aug 14 11:18:28 2006 UTC (18 years, 8 months ago) by fpschill
Content type: text/plain
Branch: MAIN
CVS Tags: CMSSW_1_1_2, CMSSW_1_2_0_pre7, CMSSW_1_1_1, CMSSW_1_0_6, CMSSW_1_2_0_pre2, CMSSW_1_0_5, CMSSW_1_1_0, CMSSW_1_2_0_pre1, CMSSW_1_0_4, CMSSW_1_1_0_pre4, CMSSW_1_0_3, CMSSW_1_0_0_g4_81, CMSSW_1_1_0_pre3, CMSSW_1_0_2, CMSSW_1_0_1, CMSSW_1_1_0_pre2, CMSSW_1_0_0, CMSSW_1_0_0_pre5, CMSSW_1_1_0_pre1, CMSSW_1_0_0_pre4, CMSSW_1_0_0_pre3, CMSSW_1_0_0_pre2, V00-02-00
Changes since 1.2: +16 -18 lines
Log Message:
move producer/track selector stuff to CommonAlignmentProducer

File Contents

# User Rev Content
1 fronga 1.1 #include "FWCore/MessageLogger/interface/MessageLogger.h"
2     #include "Geometry/CommonDetAlgo/interface/AlgebraicObjects.h"
3     #include "Alignment/CommonAlignment/interface/Alignable.h"
4     #include "Alignment/CommonAlignment/interface/AlignableDet.h"
5     #include "Alignment/CommonAlignment/interface/AlignableComposite.h"
6    
7     #include "Alignment/CommonAlignmentParametrization/interface/RigidBodyAlignmentParameters.h"
8     #include "Alignment/CommonAlignmentParametrization/interface/CompositeRigidBodyAlignmentParameters.h"
9    
10     // This class's header
11    
12     #include "Alignment/CommonAlignmentAlgorithm/interface/AlignmentParameterBuilder.h"
13    
14    
15     //__________________________________________________________________________________________________
16     AlignmentParameterBuilder::AlignmentParameterBuilder( AlignableTracker* alignableTracker )
17     {
18    
19     theAlignableTracker = alignableTracker;
20    
21     theTrackerAlignableId = new TrackerAlignableId();
22     theOnlyDS=false;
23     theOnlySS=false;
24     theSelLayers=false;
25     theMinLayer=-1;
26     theMaxLayer=999;
27    
28     }
29    
30     //__________________________________________________________________________________________________
31     void AlignmentParameterBuilder::addSelection( std::string name, std::vector<bool> sel )
32     {
33    
34 fpschill 1.3 edm::LogWarning("Alignment") << "[AlignmentParameterBuilder] Called for selection >" << name<<"<";
35 fronga 1.1
36     if (name == "AllDets") addAllDets(sel);
37     else if (name == "AllRods") addAllRods(sel);
38     else if (name == "AllLayers") addAllLayers(sel);
39     else if (name == "AllComponents") addAllComponents(sel);
40     else if (name == "AllAlignables") addAllAlignables(sel);
41    
42     // TIB+TOB
43     else if (name == "BarrelRods") add(theAlignableTracker->barrelRods(),sel);
44     else if (name == "BarrelDets") add(theAlignableTracker->barrelGeomDets(),sel);
45     else if (name == "BarrelLayers") add(theAlignableTracker->barrelLayers(),sel);
46    
47     else if (name == "BarrelDSRods")
48     {
49     theOnlyDS = true;
50     add( theAlignableTracker->barrelRods(), sel );
51     theOnlyDS = false;
52     }
53    
54     // PXBarrel
55     else if (name == "PixelHalfBarrelDets")
56     add(theAlignableTracker->pixelHalfBarrelGeomDets(),sel);
57     else if (name == "PixelHalfBarrelLadders")
58     add(theAlignableTracker->pixelHalfBarrelLadders(),sel);
59     else if (name == "PixelHalfBarrelLayers")
60     add(theAlignableTracker->pixelHalfBarrelLayers(),sel);
61    
62     else if (name == "PixelHalfBarrelLaddersLayers12") {
63     theSelLayers=true; theMinLayer=1; theMaxLayer=2;
64     add(theAlignableTracker->pixelHalfBarrelLadders(),sel);
65     }
66    
67    
68     // PXEndcap
69     else if (name == "PXECDets") add(theAlignableTracker->pixelEndcapGeomDets(),sel);
70     else if (name == "PXECPetals") add(theAlignableTracker->pixelEndcapPetals(),sel);
71     else if (name == "PXECLayers") add(theAlignableTracker->pixelEndcapLayers(),sel);
72    
73     // Pixel Barrel+endcap
74     else if (name == "PixelDets") {
75     add(theAlignableTracker->pixelHalfBarrelGeomDets(),sel);
76     add(theAlignableTracker->pixelEndcapGeomDets(),sel);
77     }
78     else if (name == "PixelRods") {
79     add(theAlignableTracker->pixelHalfBarrelLadders(),sel);
80     add(theAlignableTracker->pixelEndcapPetals(),sel);
81     }
82     else if (name == "PixelLayers") {
83     add(theAlignableTracker->pixelHalfBarrelLayers(),sel);
84     add(theAlignableTracker->pixelEndcapLayers(),sel);
85     }
86    
87     // TID
88     else if (name == "TIDLayers") add(theAlignableTracker->TIDLayers(),sel);
89     else if (name == "TIDRings") add(theAlignableTracker->TIDRings(),sel);
90     else if (name == "TIDDets") add(theAlignableTracker->TIDGeomDets(),sel);
91    
92     // TEC
93     else if (name == "TECDets") add(theAlignableTracker->endcapGeomDets(),sel);
94     else if (name == "TECPetals") add(theAlignableTracker->endcapPetals(),sel);
95     else if (name == "TECLayers") add(theAlignableTracker->endcapLayers(),sel);
96    
97     // StripEndcap (TID+TEC)
98     else if (name == "EndcapDets") {
99     add(theAlignableTracker->TIDGeomDets(),sel);
100     add(theAlignableTracker->endcapGeomDets(),sel);
101     }
102     else if (name == "EndcapPetals") {
103     add(theAlignableTracker->TIDRings(),sel);
104     add(theAlignableTracker->endcapPetals(),sel);
105     }
106     else if (name == "EndcapLayers") {
107     add(theAlignableTracker->TIDLayers(),sel);
108     add(theAlignableTracker->endcapLayers(),sel);
109     }
110    
111     // Strip Barrel+endcap
112     else if (name == "StripDets") {
113     add(theAlignableTracker->barrelGeomDets(),sel);
114     add(theAlignableTracker->TIDGeomDets(),sel);
115     add(theAlignableTracker->endcapGeomDets(),sel);
116     }
117     else if (name == "StripRods") {
118     add(theAlignableTracker->barrelRods(),sel);
119     add(theAlignableTracker->TIDRings(),sel);
120     add(theAlignableTracker->endcapPetals(),sel);
121     }
122     else if (name == "StripLayers") {
123     add(theAlignableTracker->barrelLayers(),sel);
124     add(theAlignableTracker->TIDLayers(),sel);
125     add(theAlignableTracker->endcapLayers(),sel);
126     }
127    
128    
129     // Custom scenarios
130    
131     else if (name == "ScenarioA") {
132     std::vector<bool> mysel(6,false);
133     // pixel barrel dets x,y,z
134     mysel[RigidBodyAlignmentParameters::dx]=true;
135     mysel[RigidBodyAlignmentParameters::dy]=true;
136     mysel[RigidBodyAlignmentParameters::dz]=true;
137     add(theAlignableTracker->pixelHalfBarrelGeomDets(),mysel);
138     // strip barrel double sided
139     theOnlyDS = true;
140     add(theAlignableTracker->barrelRods(),mysel);
141     theOnlyDS = false;
142     // strip barrel single sided
143     mysel[RigidBodyAlignmentParameters::dy]=false;
144     theOnlySS = true;
145     add(theAlignableTracker->barrelRods(),mysel);
146     theOnlySS = false;
147     }
148    
149     else if (name == "ScenarioB") {
150     std::vector<bool> mysel(6,false);
151     // pixel barrel ladders x,y,z
152     mysel[RigidBodyAlignmentParameters::dx]=true;
153     mysel[RigidBodyAlignmentParameters::dy]=true;
154     mysel[RigidBodyAlignmentParameters::dz]=true;
155     add(theAlignableTracker->pixelHalfBarrelLadders(),mysel);
156     // strip barrel layers double sided
157     theOnlyDS = true;
158     add(theAlignableTracker->barrelLayers(),mysel);
159     theOnlyDS = false;
160     // strip barrel layers single sided
161     mysel[RigidBodyAlignmentParameters::dy]=false;
162     theOnlySS = true;
163     add(theAlignableTracker->barrelLayers(),mysel);
164     theOnlySS = false;
165     }
166    
167    
168     else if (name == "CustomStripLayers") {
169     std::vector<bool> mysel(6,false);
170     mysel[RigidBodyAlignmentParameters::dx]=true;
171     mysel[RigidBodyAlignmentParameters::dy]=true;
172     mysel[RigidBodyAlignmentParameters::dz]=true;
173     // strip barrel layers double sided
174     theOnlyDS = true;
175     add(theAlignableTracker->barrelLayers(),mysel);
176     theOnlyDS = false;
177     // strip barrel layers single sided
178     mysel[RigidBodyAlignmentParameters::dz]=false;
179     theOnlySS = true;
180     add(theAlignableTracker->barrelLayers(),mysel);
181     theOnlySS = false;
182     // TID
183     mysel[RigidBodyAlignmentParameters::dz]=true;
184     add(theAlignableTracker->TIDLayers(),mysel);
185     // TEC
186     mysel[RigidBodyAlignmentParameters::dz]=false;
187     add(theAlignableTracker->endcapLayers(),mysel);
188     }
189    
190     else if (name == "CustomStripRods") {
191     std::vector<bool> mysel(6,false);
192     mysel[RigidBodyAlignmentParameters::dx]=true;
193     mysel[RigidBodyAlignmentParameters::dy]=true;
194     mysel[RigidBodyAlignmentParameters::dz]=true;
195     // strip barrel layers double sided
196     theOnlyDS = true;
197     add(theAlignableTracker->barrelRods(),mysel);
198     theOnlyDS = false;
199     // strip barrel layers single sided
200     mysel[RigidBodyAlignmentParameters::dy]=false;
201     theOnlySS = true;
202     add(theAlignableTracker->barrelRods(),mysel);
203     theOnlySS = false;
204     // TID
205     mysel[RigidBodyAlignmentParameters::dy]=true;
206     add(theAlignableTracker->TIDRings(),mysel);
207     // TEC
208     mysel[RigidBodyAlignmentParameters::dz]=false;
209     add(theAlignableTracker->endcapPetals(),mysel);
210     }
211    
212     else
213 fpschill 1.3 edm::LogError("BadConfig")<<"[AlignmentParameterBuilder] Selection invalid!";
214 fronga 1.1
215 fpschill 1.3 edm::LogInfo("Warning") << "[AlignmentParameterBuilder] Added "
216     << theAlignables.size()<< " alignables in total";
217 fronga 1.1
218     }
219    
220    
221     //__________________________________________________________________________________________________
222     void AlignmentParameterBuilder::addAllDets( std::vector<bool>sel )
223     {
224    
225     add(theAlignableTracker->barrelGeomDets(),sel); // TIB+TOB
226     add(theAlignableTracker->endcapGeomDets(),sel); // TEC
227     add(theAlignableTracker->TIDGeomDets(),sel); // TID
228     add(theAlignableTracker->pixelHalfBarrelGeomDets(),sel); // PixelBarrel
229     add(theAlignableTracker->pixelEndcapGeomDets(),sel); // PixelEndcap
230    
231 fpschill 1.3 edm::LogInfo("Alignment") << "Initialized for "
232 fronga 1.1 << theAlignables.size() << " dets";
233     }
234    
235    
236     //__________________________________________________________________________________________________
237     void AlignmentParameterBuilder::addAllRods(std::vector<bool>sel)
238     {
239     add(theAlignableTracker->barrelRods(),sel);
240     add(theAlignableTracker->pixelHalfBarrelLadders(),sel);
241     add(theAlignableTracker->endcapPetals(),sel);
242     add(theAlignableTracker->TIDRings(),sel);
243     add(theAlignableTracker->pixelEndcapPetals(),sel);
244    
245 fpschill 1.3 edm::LogInfo("Alignment") << "Initialized for "
246 fronga 1.1 << theAlignables.size() << " rods";
247     }
248    
249    
250     //__________________________________________________________________________________________________
251     void AlignmentParameterBuilder::addAllLayers(std::vector<bool>sel)
252     {
253     add(theAlignableTracker->barrelLayers(),sel);
254     add(theAlignableTracker->pixelHalfBarrelLayers(),sel);
255     add(theAlignableTracker->endcapLayers(),sel);
256     add(theAlignableTracker->TIDLayers(),sel);
257     add(theAlignableTracker->pixelEndcapLayers(),sel);
258    
259 fpschill 1.3 edm::LogInfo("Alignment") << "Initialized for "
260 fronga 1.1 << theAlignables.size() << " layers";
261    
262     }
263    
264    
265     //__________________________________________________________________________________________________
266     void AlignmentParameterBuilder::addAllComponents(std::vector<bool>sel)
267     {
268     add(theAlignableTracker->components(),sel);
269 fpschill 1.3 edm::LogInfo("Alignment") << "Initialized for "
270 fronga 1.1 << theAlignables.size()
271     << " Components (HalfBarrel/Endcap)";
272     }
273    
274    
275     //__________________________________________________________________________________________________
276     void AlignmentParameterBuilder::addAllAlignables(std::vector<bool>sel)
277     {
278    
279     add(theAlignableTracker->barrelGeomDets(),sel);
280     add(theAlignableTracker->endcapGeomDets(),sel);
281     add(theAlignableTracker->TIDGeomDets(),sel);
282     add(theAlignableTracker->pixelHalfBarrelGeomDets(),sel);
283     add(theAlignableTracker->pixelEndcapGeomDets(),sel);
284    
285     add(theAlignableTracker->barrelRods(),sel);
286     add(theAlignableTracker->pixelHalfBarrelLadders(),sel);
287     add(theAlignableTracker->endcapPetals(),sel);
288     add(theAlignableTracker->TIDRings(),sel);
289     add(theAlignableTracker->pixelEndcapPetals(),sel);
290    
291     add(theAlignableTracker->barrelLayers(),sel);
292     add(theAlignableTracker->pixelHalfBarrelLayers(),sel);
293     add(theAlignableTracker->endcapLayers(),sel);
294     add(theAlignableTracker->TIDLayers(),sel);
295     add(theAlignableTracker->pixelEndcapLayers(),sel);
296    
297     add(theAlignableTracker->components(),sel);
298    
299    
300 fpschill 1.3 edm::LogInfo("Alignment") << "Initialized for "
301 fronga 1.1 << theAlignables.size()
302     << " Components (HalfBarrel/Endcap)";
303    
304     }
305    
306    
307     //__________________________________________________________________________________________________
308     void AlignmentParameterBuilder::add( const std::vector<Alignable*>& alignables,
309     std::vector<bool> sel )
310     {
311    
312     int num_adu = 0;
313     int num_det = 0;
314     int num_hlo = 0;
315    
316     // loop on Alignable objects
317     for ( std::vector<Alignable*>::const_iterator ia=alignables.begin();
318     ia!=alignables.end(); ia++ ) {
319     Alignable* ali=(*ia);
320    
321     // select on single/double sided barrel layers
322     std::pair<int,int> tl=theTrackerAlignableId->typeAndLayerFromAlignable( ali );
323     int type = tl.first;
324     int layer = tl.second;
325    
326     bool keep=true;
327     if (theOnlySS) // only single sided
328     if ( (abs(type)==3 || abs(type)==5) && layer<2 )
329     keep=false;
330    
331     if (theOnlyDS) // only double sided
332     if ( (abs(type)==3 || abs(type)==5) && layer>1 )
333     keep=false;
334    
335     // reject layers
336     if ( theSelLayers && (layer<theMinLayer || layer>theMaxLayer) )
337     keep=false;
338    
339    
340     if (keep) {
341    
342     AlgebraicVector par(6,0);
343     AlgebraicSymMatrix cov(6,0);
344    
345     AlignableDet* alidet = dynamic_cast<AlignableDet*>(ali);
346     if (alidet !=0) { // alignable Det
347     RigidBodyAlignmentParameters* dap =
348     new RigidBodyAlignmentParameters(ali,par,cov,sel);
349     ali->setAlignmentParameters(dap);
350     num_det++;
351     }
352     else { // higher level object
353     CompositeRigidBodyAlignmentParameters* dap =
354     new CompositeRigidBodyAlignmentParameters(ali,par,cov,sel);
355     ali->setAlignmentParameters(dap);
356     num_hlo++;
357     }
358    
359     theAlignables.push_back(ali);
360     num_adu++;
361    
362     }
363     }
364    
365 fpschill 1.3 edm::LogWarning("Alignment") << "Added " << num_adu
366     << " Alignables, of which " << num_det << " are Dets and "
367     << num_hlo << " are higher level.";
368 fronga 1.1
369     }
370    
371    
372     //__________________________________________________________________________________________________
373     void AlignmentParameterBuilder::fixAlignables(int n)
374     {
375    
376 fpschill 1.3 if (n<1 || n>3) {
377     edm::LogError("BadArgument") << " n = " << n << " is not in [1,3]";
378 fronga 1.1 return;
379     }
380    
381     std::vector<Alignable*> theNewAlignables;
382     int i=0;
383     int imax = theAlignables.size();
384     for ( std::vector<Alignable*>::const_iterator ia=theAlignables.begin();
385     ia!=theAlignables.end(); ia++ )
386     {
387     i++;
388     if ( n==1 && i>1 )
389     theNewAlignables.push_back(*ia);
390     else if ( n==2 && i>1 && i<imax )
391     theNewAlignables.push_back(*ia);
392     else if ( n==3 && i>2 && i<imax)
393     theNewAlignables.push_back(*ia);
394     }
395    
396     theAlignables = theNewAlignables;
397    
398 fpschill 1.3 edm::LogWarning("Alignment") << "removing " << n
399     << " alignables, so that " << theAlignables.size() << " alignables left";
400 fronga 1.1
401     }
402