]>
Commit | Line | Data |
---|---|---|
57e827c3 | 1 | /************************************************************************** |
2 | * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * | |
3 | * * | |
4 | * Author: The ALICE Off-line Project. * | |
5 | * Contributors are mentioned in the code where appropriate. * | |
6 | * * | |
7 | * Permission to use, copy, modify and distribute this software and its * | |
8 | * documentation strictly for non-commercial purposes is hereby granted * | |
9 | * without fee, provided that the above copyright notice appears in all * | |
10 | * copies and that both the copyright notice and this permission notice * | |
11 | * appear in the supporting documentation. The authors make no claims * | |
12 | * about the suitability of this software for any purpose. It is * | |
13 | * provided "as is" without express or implied warranty. * | |
14 | **************************************************************************/ | |
15 | ||
16 | /* $Id$ */ | |
17 | ||
18 | /* | |
19 | MUONCheckMisAligner: | |
20 | ||
21 | This macro performs the misalignment on an existing muon arm geometry | |
22 | based on the standard definition of the detector elements in | |
23 | $ALICE_ROOT/MUON/data | |
24 | ||
25 | It uses AliMUONGeometryAligner : | |
26 | --> creates a new AliMUONGeometryTransformer and AliMUONGeometryAligner | |
27 | --> reads the transformations in from the transform.dat file (make sure that | |
28 | this file is the _standard_ one by comparing it to the one in CVS) | |
29 | --> creates a second AliMUONGeometryTransformer by misaligning the existing | |
30 | one using AliMUONAligner::MisAlign | |
31 | --> User has to specify the magnitude of the alignments, in the Cartesian | |
32 | co-ordiantes (which are used to apply translation misalignments) and in the | |
33 | spherical co-ordinates (which are used to apply angular displacements) | |
34 | --> User can also set misalignment ranges by hand using the methods : | |
35 | SetMaxCartMisAlig, SetMaxAngMisAlig, SetXYAngMisAligFactor | |
36 | (last method takes account of the fact that the misalingment is greatest in | |
37 | the XY plane, since the detection elements are fixed to a support structure | |
38 | in this plane. Misalignments in the XZ and YZ plane will be very small | |
39 | compared to those in the XY plane, which are small already - of the order | |
40 | of microns) | |
2cbab029 | 41 | --> Default behavior generates a "residual" misalignment using gaussian |
42 | distributions. Uniform distributions can still be used, see | |
43 | AliMUONGeometryAligner. | |
4600314b | 44 | --> User can also generate module misalignments using SetModuleCartMisAlig |
45 | and SetModuleAngMisAlig | |
57e827c3 | 46 | Note : If the detection elements are allowed to be misaligned in all |
47 | directions, this has consequences for the alignment algorithm, which | |
48 | needs to know the number of free parameters. Eric only allowed 3 : | |
49 | x,y,theta_xy, but in principle z and the other two angles are alignable | |
50 | as well. | |
51 | ||
52 | // Author:Bruce Becker | |
53 | ||
54 | */ | |
55 | ||
2cbab029 | 56 | void MUONCheckMisAligner(Double_t xcartmisaligm = 0.0, Double_t xcartmisaligw = 0.004, |
57 | Double_t ycartmisaligm = 0.0, Double_t ycartmisaligw = 0.003, | |
b9bff1ec | 58 | Double_t angmisaligm = 0.0, Double_t angmisaligw = 0.0023, |
59 | TString nameCDB = "ResMisAlignCDB") | |
57e827c3 | 60 | { |
61 | ||
62 | AliMUONGeometryTransformer *transform = new AliMUONGeometryTransformer(true); | |
f1d59163 | 63 | transform->ReadGeometryData("volpath.dat", "transform.dat"); |
b9bff1ec | 64 | if (gSystem->AccessPathName("geometry.root",kFileExists)) |
65 | gGeoManager->Export("geometry.root"); | |
2cbab029 | 66 | AliMUONGeometryMisAligner misAligner(xcartmisaligm,xcartmisaligw, |
67 | ycartmisaligm,ycartmisaligw, | |
68 | angmisaligm,angmisaligw); | |
57e827c3 | 69 | |
f1d59163 | 70 | // Generate mis alignment data |
4600314b | 71 | // Uncomment lines below if you would like to generate module misalignments |
72 | // misAligner.SetModuleCartMisAlig(0.0,0.1,0.0,0.1,0.0,0.1); // Full | |
73 | // misAligner.SetModuleAngMisAlig(0.0,0.02,0.0,0.04,0.0,0.02); // Full | |
74 | // misAligner.SetModuleCartMisAlig(0.0,0.003,0.0,0.003,0.0,0.003); // Res | |
75 | // misAligner.SetModuleAngMisAlig(0.0,0.0006,0.0,0.001,0.0,0.0005); // Res | |
57e827c3 | 76 | AliMUONGeometryTransformer *newTransform = misAligner.MisAlign(transform,true); |
77 | newTransform->WriteTransformations("transform2.dat"); | |
f1d59163 | 78 | newTransform->WriteMisAlignmentData("misalign.root"); |
79 | ||
80 | // Apply misAlignment via AliRoot framework | |
81 | TGeoManager::Import("geometry.root"); | |
b9bff1ec | 82 | AliSimulation::ApplyAlignObjsToGeom( |
f1d59163 | 83 | const_cast<TClonesArray*>(newTransform->GetMisAlignmentData())); |
84 | // Save new geometry file | |
85 | gGeoManager->Export("geometry2.root"); | |
86 | ||
87 | // Extract new transformations | |
88 | AliMUONGeometryTransformer* transform3 = new AliMUONGeometryTransformer(true); | |
89 | transform3->ReadGeometryData("volpath.dat", "geometry2.root"); | |
90 | transform3->WriteTransformations("transform3.dat"); | |
91 | // Check that transform3.dat is equal to transform2.dat | |
57e827c3 | 92 | |
2cbab029 | 93 | // Generate misaligned data in local cdb |
94 | TClonesArray* array = newTransform->GetMisAlignmentData(); | |
95 | ||
b9bff1ec | 96 | TString sLocCDB("local://"); |
97 | sLocCDB += nameCDB; | |
2cbab029 | 98 | // CDB manager |
99 | AliCDBManager* cdbManager = AliCDBManager::Instance(); | |
b9bff1ec | 100 | cdbManager->SetDefaultStorage(sLocCDB.Data()); |
2cbab029 | 101 | |
102 | AliCDBMetaData* cdbData = new AliCDBMetaData(); | |
103 | cdbData->SetResponsible("Dimuon Offline project"); | |
104 | cdbData->SetComment("MUON alignment objects with residual misalignment"); | |
105 | AliCDBId id("MUON/Align/Data", 0, 0); | |
106 | cdbManager->Put(array, id, cdbData); | |
107 | ||
57e827c3 | 108 | // To run simulation with misaligned geometry, you have to set |
109 | // the Align option in Config.C: | |
110 | // MUON->SetAlign("transform2.dat"); | |
111 | } | |
112 | ||
113 | ||
114 | ||
115 |