Moving the alignment-related static methods from AliAlignObj to the new geometry...
[u/mrichter/AliRoot.git] / PHOS / MakePHOSZeroMisAlignment.C
1 void MakePHOSZeroMisAlignment(){
2   // Create TClonesArray of zero misalignment objects for PHOS
3   //
4   const AliPHOSGeometry *phosGeom = AliPHOSGeometry::GetInstance("IHEP", "IHEP");
5   if (!phosGeom) {
6     Error("MakePHOSFullMisAlignment", "Cannot obtain AliPHOSGeometry singleton\n");
7     return;
8   }
9
10   AliPHOSEMCAGeometry *emca = phosGeom->GetEMCAGeometry();
11   TClonesArray *array = new TClonesArray("AliAlignObjAngles", 16 + phosGeom->GetNModules() * 
12                                          emca->GetNStripX() * emca->GetNStripZ());
13   TClonesArray &alobj = *array;
14    
15   Double_t dx=0., dy=0., dz=0., dpsi=0., dtheta=0., dphi=0.;
16   Int_t iIndex=0; // let all modules have index=0 in a layer with no LUT
17   AliGeomManager::ELayerID iLayer = AliGeomManager::kInvalidLayer;
18   UShort_t volid = AliGeomManager::LayerToVolUID(iLayer,iIndex);
19  
20   Int_t i=0 ;
21   // Alignment for 5 PHOS modules
22   new(alobj[i++]) AliAlignObjAngles("PHOS/Module1",
23         volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);
24   new(alobj[i++]) AliAlignObjAngles("PHOS/Module2",
25         volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);
26   new(alobj[i++]) AliAlignObjAngles("PHOS/Module3",
27         volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);
28   new(alobj[i++]) AliAlignObjAngles("PHOS/Module4",
29         volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);
30   new(alobj[i++]) AliAlignObjAngles("PHOS/Module5",
31         volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);
32
33   // Alignment of CPV modules
34   new(alobj[i++]) AliAlignObjAngles("PHOS/Module1/CPV",
35         volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);
36   new(alobj[i++]) AliAlignObjAngles("PHOS/Module2/CPV",
37         volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);
38   new(alobj[i++]) AliAlignObjAngles("PHOS/Module3/CPV",
39         volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);
40   new(alobj[i++]) AliAlignObjAngles("PHOS/Module4/CPV",
41         volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);
42   new(alobj[i++]) AliAlignObjAngles("PHOS/Module5/CPV",
43         volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);
44  
45
46   // Alignment for PHOS cradle
47   new(alobj[i++]) AliAlignObjAngles("PHOS/Cradle0",
48         volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);
49   new(alobj[i++]) AliAlignObjAngles("PHOS/Cradle1",
50         volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);
51
52   // Alignment for cradle wheels
53   new(alobj[i++])  AliAlignObjAngles("PHOS/Wheel0",
54         volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);
55   new(alobj[i++])  AliAlignObjAngles("PHOS/Wheel1",
56         volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);
57   new(alobj[i++])  AliAlignObjAngles("PHOS/Wheel2",
58         volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);
59   new(alobj[i++]) AliAlignObjAngles("PHOS/Wheel3",
60         volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);
61
62   AliPHOSSurvey geodesicData;
63   geodesicData.CreateNullObjects(alobj, phosGeom);
64
65   if(!gSystem->Getenv("TOCDB")){
66     // save on file
67     TFile f("PHOSzeroMisalignment.root","RECREATE");
68     if(!f) cerr<<"cannot open file for output\n";
69     f.cd();
70     f.WriteObject(array,"PHOSAlignObjs","kSingleKey");
71     f.Close();
72   }else{
73     // save in CDB storage
74     const char* Storage = gSystem->Getenv("STORAGE");
75     AliCDBManager *CDB = AliCDBManager::Instance();
76     AliCDBStorage* storage = CDB->GetStorage(Storage);
77     AliCDBMetaData *md= new AliCDBMetaData();
78     md->SetResponsible("Yuri Kharlov");
79     md->SetComment("Zero misalignment objects");
80     md->SetAliRootVersion(gSystem->Getenv("ARVERSION"));
81     AliCDBId id("PHOS/Align/Data",0,9999999);
82     storage->Put(array,id, md);
83   }
84
85   array->Delete();
86
87 }