]>
Commit | Line | Data |
---|---|---|
392efe73 | 1 | // macro to create |
2 | Double_t sgXMod=30e-4,sgYMod=30e-4,sgZMod=30e-4,sgThtMod=0.1,sgPsiMod=0.1,sgPhiMod=0.1; | |
3 | Double_t sgXLad=30e-4,sgYLad=30e-4,sgZLad=30e-4,sgThtLad=0.1,sgPsiLad=0.1,sgPhiLad=0.1; | |
4 | Double_t sgXLay=30e-4,sgYLay=30e-4,sgZLay=30e-4,sgThtLay=0.1,sgPsiLay=0.1,sgPhiLay=0.1; | |
5 | Double_t sgXITS=100e-4,sgYITS=100e-4,sgZITS=2000e-4,sgThtITS=0.1,sgPsiITS=0.1,sgPhiITS=0.1; | |
6 | // | |
7 | TClonesArray* deltas=0; | |
8 | // | |
9 | void MakeITSUResMisAlignment() | |
10 | { | |
11 | gSystem->Load("libITSUpgradeBase"); | |
12 | // | |
13 | // at the moment we don't want to write to official CDB | |
14 | gSystem->Setenv("TOCDB","kTRUE"); | |
15 | gSystem->Setenv("STORAGE","local://"); | |
16 | // | |
17 | // Activate CDB storage and load geometry from CDB | |
18 | AliCDBManager* cdb = AliCDBManager::Instance(); | |
19 | if(!cdb->IsDefaultStorageSet()) cdb->SetDefaultStorage("local://"); | |
20 | cdb->SetRun(0); | |
21 | AliCDBStorage* storage; | |
22 | // | |
23 | if (!gGeoManager) { | |
24 | if (!gSystem->AccessPathName("geometry.root")) { | |
25 | printf("Loading geometry.root from current directory\n"); | |
26 | AliGeomManager::LoadGeometry("geometry.root"); //load geom from default CDB storage | |
27 | } | |
28 | } | |
29 | // | |
30 | if (TString(gSystem->Getenv("TOCDB")) == TString("kTRUE")) { | |
31 | TString Storage = gSystem->Getenv("STORAGE"); | |
32 | if (!Storage.BeginsWith("local://") && !Storage.BeginsWith("alien://")) { | |
33 | Error(macroname,"STORAGE variable set to %s is not valid. Exiting\n",Storage.Data()); | |
34 | return; | |
35 | } | |
36 | storage = cdb->GetStorage(Storage.Data()); | |
37 | if (!storage) { | |
38 | Error(macroname,"Unable to open storage %s\n",Storage.Data()); | |
39 | return; | |
40 | } | |
41 | // | |
42 | if (!gGeoManager) { | |
43 | AliCDBPath path("GRP","Geometry","Data"); | |
44 | AliCDBEntry *entry = storage->Get(path.GetPath(),cdb->GetRun()); | |
45 | if(!entry) Fatal(macroname,"Could not get the specified CDB entry!"); | |
46 | entry->SetOwner(0); | |
47 | TGeoManager* geom = (TGeoManager*) entry->GetObject(); | |
48 | AliGeomManager::SetGeometry(geom); | |
49 | } | |
50 | } | |
51 | // | |
52 | const UShort_t dummyVID = 0xffff; | |
53 | AliITSUGeomTGeo* gm0 = new AliITSUGeomTGeo(kTRUE); | |
54 | // | |
55 | deltas = new TClonesArray("AliAlignObjParams"); | |
56 | double dx,dy,dz,dtht,dpsi,dphi; | |
57 | // | |
58 | TString sname; | |
59 | int idel = 0; | |
60 | // | |
61 | dx = sgXITS*gRandom->Gaus(); | |
62 | dy = sgYITS*gRandom->Gaus(); | |
63 | dz = sgZITS*gRandom->Gaus(); | |
64 | dtht = sgThtITS*gRandom->Gaus(); | |
65 | dpsi = sgPsiITS*gRandom->Gaus(); | |
66 | dphi = sgPhiITS*gRandom->Gaus(); | |
67 | sname = gm0->ComposeSymNameITS(); | |
68 | new( (*deltas)[idel++] ) AliAlignObjParams(sname.Data(),dummyVID, | |
69 | dx,dy,dz,dtht,dpsi,dphi,kTRUE); | |
70 | // | |
71 | for (int ilr=0;ilr<gm0->GetNLayers();ilr++) { | |
72 | // | |
73 | dx = sgXLay*gRandom->Gaus(); | |
74 | dy = sgYLay*gRandom->Gaus(); | |
75 | dz = sgZLay*gRandom->Gaus(); | |
76 | dtht = sgThtLay*gRandom->Gaus(); | |
77 | dpsi = sgPsiLay*gRandom->Gaus(); | |
78 | dphi = sgPhiLay*gRandom->Gaus(); | |
79 | sname = gm0->ComposeSymNameLayer(ilr); | |
80 | new( (*deltas)[idel++] ) AliAlignObjParams(sname.Data(),dummyVID, | |
81 | dx,dy,dz,dtht,dpsi,dphi,kTRUE); | |
82 | // | |
83 | for (int ild=0;ild<gm0->GetNLadders(ilr);ild++) { | |
84 | // | |
85 | dx = sgXLad*gRandom->Gaus(); | |
86 | dy = sgYLad*gRandom->Gaus(); | |
87 | dz = sgZLad*gRandom->Gaus(); | |
88 | dtht = sgThtLad*gRandom->Gaus(); | |
89 | dpsi = sgPsiLad*gRandom->Gaus(); | |
90 | dphi = sgPhiLad*gRandom->Gaus(); | |
91 | sname = gm0->ComposeSymNameLadder(ilr,ild); | |
92 | new( (*deltas)[idel++] ) AliAlignObjParams(sname.Data(),dummyVID, | |
93 | dx,dy,dz,dtht,dpsi,dphi,kTRUE); | |
94 | // | |
95 | for (int isn=0;isn<gm0->GetNDetectors(ilr);isn++) { | |
96 | dx = sgXMod*gRandom->Gaus(); | |
97 | dy = sgYMod*gRandom->Gaus(); | |
98 | dz = sgZMod*gRandom->Gaus(); | |
99 | dtht = sgThtMod*gRandom->Gaus(); | |
100 | dpsi = sgPsiMod*gRandom->Gaus(); | |
101 | dphi = sgPhiMod*gRandom->Gaus(); | |
102 | int mid = gm0->GetModuleIndex(ilr,ild,isn); | |
103 | sname = gm0->GetSymName(mid); | |
104 | new( (*deltas)[idel++] ) AliAlignObjParams(sname.Data(),gm0->ModuleVolUID(mid), | |
105 | dx,dy,dz,dtht,dpsi,dphi,kTRUE); | |
106 | } | |
107 | } | |
108 | } | |
109 | // | |
110 | if( TString(gSystem->Getenv("TOCDB")) != TString("kTRUE") ){ | |
111 | // save on file | |
112 | const char* filename = "ITSUresidualMisalignment.root"; | |
113 | TFile f(filename,"RECREATE"); | |
114 | if(!f){ | |
115 | Error(macroname,"cannot open file for output\n"); | |
116 | return; | |
117 | } | |
118 | Info(macroname,"Saving alignment objects to the file %s", filename); | |
119 | f.cd(); | |
120 | f.WriteObject(deltas,"ITSUAlignObjs","kSingleKey"); | |
121 | f.Close(); | |
122 | } | |
123 | else{ | |
124 | // save in CDB storage | |
125 | AliCDBMetaData* md = new AliCDBMetaData(); | |
126 | md->SetResponsible("R.S."); | |
127 | md->SetComment("Residual misalignment for ITSU"); | |
128 | md->SetAliRootVersion(gSystem->Getenv("ARVERSION")); | |
129 | AliCDBId id("ITS/Align/Data",0,AliCDBRunRange::Infinity()); | |
130 | storage->Put(deltas,id,md); | |
131 | } | |
132 | ||
133 | // apply to geometry | |
134 | printf("Applying created misalignment to geometry in memory\n"); | |
135 | AliGeomManager::ApplyAlignObjsToGeom(*deltas); | |
136 | gGeoManager->LockGeometry(); | |
137 | // | |
138 | } |