2 Double_t sgXMod=30e-4,sgYMod=30e-4,sgZMod=30e-4,sgThtMod=0.1,sgPsiMod=0.1,sgPhiMod=0.1;
3 Double_t sgXSta=30e-4,sgYSta=30e-4,sgZSta=30e-4,sgThtSta=0.1,sgPsiSta=0.1,sgPhiSta=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;
7 TClonesArray* deltas=0;
9 void MakeITSUResMisAlignment()
11 gSystem->Load("libITSUpgradeBase");
13 // at the moment we don't want to write to official CDB
14 gSystem->Setenv("TOCDB","kTRUE");
15 gSystem->Setenv("STORAGE","local://");
17 // Activate CDB storage and load geometry from CDB
18 AliCDBManager* cdb = AliCDBManager::Instance();
19 if(!cdb->IsDefaultStorageSet()) cdb->SetDefaultStorage("local://");
21 AliCDBStorage* storage;
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
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());
36 storage = cdb->GetStorage(Storage.Data());
38 Error(macroname,"Unable to open storage %s\n",Storage.Data());
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!");
47 TGeoManager* geom = (TGeoManager*) entry->GetObject();
48 AliGeomManager::SetGeometry(geom);
52 const UShort_t dummyVID = 0xffff;
53 AliITSUGeomTGeo* gm0 = new AliITSUGeomTGeo(kTRUE);
55 deltas = new TClonesArray("AliAlignObjParams");
56 double dx,dy,dz,dtht,dpsi,dphi;
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);
71 for (int ilr=0;ilr<gm0->GetNLayers();ilr++) {
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);
83 for (int ild=0;ild<gm0->GetNStaves(ilr);ild++) {
85 dx = sgXSta*gRandom->Gaus();
86 dy = sgYSta*gRandom->Gaus();
87 dz = sgZSta*gRandom->Gaus();
88 dtht = sgThtSta*gRandom->Gaus();
89 dpsi = sgPsiSta*gRandom->Gaus();
90 dphi = sgPhiSta*gRandom->Gaus();
91 sname = gm0->ComposeSymNameStave(ilr,ild);
92 new( (*deltas)[idel++] ) AliAlignObjParams(sname.Data(),dummyVID,
93 dx,dy,dz,dtht,dpsi,dphi,kTRUE);
95 for (int isn=0;isn<gm0->GetNChipsPerStave(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->GetChipIndex(ilr,ild,isn);
103 sname = gm0->ComposeSymNameChip(ilr,ild,-1,-1,isn);
104 new( (*deltas)[idel++] ) AliAlignObjParams(sname.Data(),gm0->ChipVolUID(mid),
105 dx,dy,dz,dtht,dpsi,dphi,kTRUE);
110 if( TString(gSystem->Getenv("TOCDB")) != TString("kTRUE") ){
112 const char* filename = "ITSUresidualMisalignment.root";
113 TFile f(filename,"RECREATE");
115 Error(macroname,"cannot open file for output\n");
118 Info(macroname,"Saving alignment objects to the file %s", filename);
120 f.WriteObject(deltas,"ITSUAlignObjs","kSingleKey");
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);
134 printf("Applying created misalignment to geometry in memory\n");
135 AliGeomManager::ApplyAlignObjsToGeom(*deltas);
136 gGeoManager->LockGeometry();