]> git.uio.no Git - u/mrichter/AliRoot.git/blob - TRD/MakeTRDResMisAlignment.C
Comments corrected.
[u/mrichter/AliRoot.git] / TRD / MakeTRDResMisAlignment.C
1 void MakeTRDResMisAlignment(){
2   // Create TClonesArray of residual misalignment objects for TRD
3   //
4   const char* macroname = "MakeTRDResMisAlignment.C";
5   TClonesArray *array = new TClonesArray("AliAlignObjParams",1000);
6   TClonesArray &alobj = *array;
7    
8   // Activate CDB storage and load geometry from CDB
9   AliCDBManager* cdb = AliCDBManager::Instance();
10   if(!cdb->IsDefaultStorageSet()) cdb->SetDefaultStorage("local://$ALICE_ROOT");
11   cdb->SetRun(0);
12   
13   AliCDBStorage* storage;
14   
15   if( TString(gSystem->Getenv("TOCDB")) == TString("kTRUE") ){
16     TString Storage = gSystem->Getenv("STORAGE");
17     if(!Storage.BeginsWith("local://") && !Storage.BeginsWith("alien://")) {
18       Error(macroname,"STORAGE variable set to %s is not valid. Exiting\n",Storage.Data());
19       return;
20     }
21     storage = cdb->GetStorage(Storage.Data());
22     if(!storage){
23       Error(macroname,"Unable to open storage %s\n",Storage.Data());
24       return;
25     }
26     AliCDBPath path("GRP","Geometry","Data");
27     AliCDBEntry *entry = storage->Get(path.GetPath(),cdb->GetRun());
28     if(!entry) Fatal(macroname,"Could not get the specified CDB entry!");
29     entry->SetOwner(0);
30     TGeoManager* geom = (TGeoManager*) entry->GetObject();
31     AliGeomManager::SetGeometry(geom);
32   }else{
33     AliGeomManager::LoadGeometry(); //load geom from default CDB storage
34   }    
35
36   // sigmas for the chambers
37   Double_t chdx=0.002; // 20 microns
38   Double_t chdy=0.003; // 30 microns
39   Double_t chdz=0.007; // 70 microns
40   Double_t chrx=0.3/1000/TMath::Pi()*180; // 0.3 mrad
41   Double_t chry=0.3/1000/TMath::Pi()*180; // 0.3 mrad
42   Double_t chrz=0.1/1000/TMath::Pi()*180; // 0.1 mrad
43
44   Int_t sActive[18]={0,0,1,1,1,0,1,0,0,0,0,1,1,0,1,1,0,0};
45   Double_t dx=0.,dy=0.,dz=0.,rx=0.,ry=0.,rz=0.;
46
47   Int_t j=0;
48   TRandom *ran = new TRandom(4357);
49   UShort_t volid;
50   const char* symname; 
51
52   // create the supermodules' alignment objects
53   for (Int_t iSect=0; iSect<18; iSect++) {
54     TString sm_symname(Form("TRD/sm%02d",iSect));
55     if( (TString(gSystem->Getenv("PARTGEOM")) == TString("kTRUE")) && !sActive[iSect] ) continue;
56     new((*array)[j++])
57       AliAlignObjParams(sm_symname.Data(),0,dx,dy,dz,rx,ry,rz,kTRUE);
58   }
59  
60   // create the chambers' alignment objects
61   Int_t chId;
62   for (Int_t iLayer = AliGeomManager::kTRD1; iLayer <= AliGeomManager::kTRD6; iLayer++) {
63     chId=-1;
64     for (Int_t iSect = 0; iSect < 18; iSect++){
65       for (Int_t iCh = 0; iCh < 5; iCh++) {
66       ran->Rannor(dx,rx);
67       ran->Rannor(dy,ry);
68       ran->Rannor(dz,rz);
69       dx*=chdx;
70       dy*=chdy;
71       dz*=chdz;
72       rx*=chrx;
73       ry*=chry;
74       rz*=chrz;
75         chId++;
76         volid = AliGeomManager::LayerToVolUID(iLayer,chId);
77       symname = AliGeomManager::SymName(volid);
78         if( (TString(gSystem->Getenv("PARTGEOM")) == TString("kTRUE")) && !sActive[iSect] ) continue;
79       new(alobj[j++]) AliAlignObjParams(symname,volid,dx,dy,dz,rx,ry,rz,kFALSE);
80     }
81   }
82   }
83
84   if( TString(gSystem->Getenv("TOCDB")) != TString("kTRUE") ){
85     // save on file
86     const char* filename = "TRDresidualMisalignment.root";
87     TFile f(filename,"RECREATE");
88     if(!f){
89       Error(macroname,"cannot open file for output\n");
90       return;
91     }
92     Info(macroname,"Saving alignment objects to the file %s", filename);
93     f.cd();
94     f.WriteObject(array,"TRDAlignObjs","kSingleKey");
95     f.Close();
96   }else{
97     // save in CDB storage
98     AliCDBMetaData* md = new AliCDBMetaData();
99     md->SetResponsible("Dariusz Miskowiec");
100     md->SetComment("Residual misalignment for TRD");
101     md->SetAliRootVersion(gSystem->Getenv("ARVERSION"));
102     AliCDBId id("TRD/Align/Data",0,AliCDBRunRange::Infinity());
103     storage->Put(array,id,md);
104   }
105
106   array->Delete();
107
108 }
109
110