d7a85ca0398aaa3ceda1015ac377be345648623d
[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   }
33   else {
34     AliGeomManager::LoadGeometry(); //load geom from default CDB storage
35   }    
36
37   // sigmas for the chambers
38   Double_t chdx    = 0.002; // 20 microns
39   Double_t chdy    = 0.003; // 30 microns
40   Double_t chdz    = 0.007; // 70 microns
41   Double_t chrx    = 0.0005 / 1000.0 / TMath::Pi()*180; // 0 mrad
42   Double_t chry    = 0.0005 / 1000.0 / TMath::Pi()*180; // 0 mrad
43   Double_t chrz    = 0.1    / 1000.0 / TMath::Pi()*180; // 0.1 mrad
44   // Truncation for the chambers
45   Double_t cutChdx = 3.0  * chdx;
46   Double_t cutChdy = 3.0  * chdy;
47   Double_t cutChdz = 0.14 * chdz;
48
49   Int_t sActive[18]={1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1};
50   Double_t dx=0.,dy=0.,dz=0.,rx=0.,ry=0.,rz=0.;
51
52   Int_t j=0;
53   TRandom *ran = new TRandom(4357);
54   UShort_t volid;
55   const char* symname; 
56
57   // create the supermodules' alignment objects
58   for (Int_t iSect=0; iSect<18; iSect++) {
59     TString sm_symname(Form("TRD/sm%02d",iSect));
60     if( (TString(gSystem->Getenv("REALSETUP")) == TString("kTRUE")) && !sActive[iSect] ) continue;
61     new((*array)[j++])
62       AliAlignObjParams(sm_symname.Data(),0,dx,dy,dz,rx,ry,rz,kTRUE);
63   }
64  
65   // create the chambers' alignment objects
66   Int_t chId;
67   for (Int_t iLayer = AliGeomManager::kTRD1; iLayer <= AliGeomManager::kTRD6; iLayer++) {
68     chId=-1;
69     for (Int_t iSect = 0; iSect < 18; iSect++){
70       for (Int_t iCh = 0; iCh < 5; iCh++) {
71         dx = AliMathBase::TruncatedGaus(0.0,chdx,cutChdx); 
72         dy = AliMathBase::TruncatedGaus(0.0,chdy,cutChdy); 
73         dz = AliMathBase::TruncatedGaus(0.0,chdz,cutChdz); 
74         rx = ran->Rndm() * 2.0*chrx - chrx;
75         ry = ran->Rndm() * 2.0*chry - chry;
76         rz = ran->Rndm() * 2.0*chrz - chrz;
77         chId++;
78         if ((iSect==13 || iSect==14 || iSect==15) && iCh==2) continue;
79         volid = AliGeomManager::LayerToVolUID(iLayer,chId);
80         if( (TString(gSystem->Getenv("REALSETUP")) == TString("kTRUE")) && !sActive[iSect] ) continue;
81         symname = AliGeomManager::SymName(volid);
82         new(alobj[j++]) AliAlignObjParams(symname,volid,dx,dy,dz,rx,ry,rz,kFALSE);
83       }
84     }
85   }
86
87   if ( TString(gSystem->Getenv("TOCDB")) != TString("kTRUE") ) {
88     // save on file
89     const char* filename = "TRDresidualMisalignment.root";
90     TFile f(filename,"RECREATE");
91     if(!f){
92       Error(macroname,"cannot open file for output\n");
93       return;
94     }
95     Info(macroname,"Saving alignment objects to the file %s", filename);
96     f.cd();
97     f.WriteObject(array,"TRDAlignObjs","kSingleKey");
98     f.Close();
99   }
100   else {
101     // save in CDB storage
102     AliCDBMetaData* md = new AliCDBMetaData();
103     md->SetResponsible("Dariusz Miskowiec");
104     md->SetComment("Residual misalignment for TRD");
105     md->SetAliRootVersion(gSystem->Getenv("ARVERSION"));
106     AliCDBId id("TRD/Align/Data",0,AliCDBRunRange::Infinity());
107     storage->Put(array,id,md);
108   }
109
110   array->Delete();
111
112 }
113
114