void MakePMDZeroMisAlignment(){
// Create TClonesArray of zero misalignment objects for PMD
//
// Macro to randomly displace the 4 sectors of the PMD
// in each plane. Each sector (to be misaligned)
// of PMD houses the following :
// (a) 6 modules of preshower plane
// (b) 6 modules of veto plane
// (c) The FEE boards on back plane of each module
// (d) 6 modules of convertor plates
// The clustering is done module-wise
// The actual amount displacement will be provided
// by the survey data and has to be converted into
// displacement in x,y,z,theta, phi and psi
// Now specify the path of the module to be misaligned
// as followed in the PMD geant
/*
_____________
| | |
| 1 | 3 |
| |________|
|____|___| |
| | 2 |
| 4 | |
|________|____|
// Misalignment Matrix is expected to be
// same for sectors 1 and 4
// and for the sectors 2 and 3
// As these will be mounted on the same
// Steel plate
*/
const char* macroname = "MakePMDZeroMisAlignment.C";
//Create a TClonesArray of Align Object to store displacement Angles
TClonesArray *array = new TClonesArray("AliAlignObjParams",10);
TClonesArray &alobj = *array;
Int_t iIndex=0; // let all modules have index=0 in a layer with no LUT
AliGeomManager::ELayerID iLayer = AliGeomManager::kInvalidLayer;
UShort_t volid = AliGeomManager::LayerToVolUID(iLayer,iIndex);
Double_t dx=0., dy=0., dz=0., dpsi=0., dtheta=0., dphi=0.;
Int_t i, j=0;
for(i=1; i<=4; i++){
TString snSector(Form("PMD/Sector%d",i));
new(alobj[j++]) AliAlignObjParams(snSector.Data(), volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);
}
if( TString(gSystem->Getenv("TOCDB")) != TString("kTRUE") ){
// Create a File to store the alignment data
const char* filename = "PMDzeroMisalignment.root";
TFile f(filename,"RECREATE");
if(!f){
Error(macroname,"cannot open file for output\n");
return;
}
Info(macroname,"Saving alignment objects to the file %s", filename);
f.cd();
f.WriteObject(array,"PMDAlignObjs","kSingleKey");
f.Close();
}else{
// save in CDB storage
TString Storage = gSystem->Getenv("STORAGE");
if(!Storage.BeginsWith("local://") && !Storage.BeginsWith("alien://")) {
Error(macroname,"STORAGE variable set to %s is not valid. Exiting\n",Storage.Data());
return;
}
Info(macroname,"Saving alignment objects in CDB storage %s",
Storage.Data());
AliCDBManager* cdb = AliCDBManager::Instance();
AliCDBStorage* storage = cdb->GetStorage(Storage.Data());
if(!storage){
Error(macroname,"Unable to open storage %s\n",Storage.Data());
return;
}
AliCDBMetaData* md = new AliCDBMetaData();
md->SetResponsible("");
md->SetComment("Zero misalignment for PMD");
md->SetAliRootVersion(gSystem->Getenv("ARVERSION"));
AliCDBId id("PMD/Align/Data",0,AliCDBRunRange::Infinity());
storage->Put(array,id,md);
}
array->Delete();
}
MakePMDZeroMisAlignment.C:1 MakePMDZeroMisAlignment.C:2 MakePMDZeroMisAlignment.C:3 MakePMDZeroMisAlignment.C:4 MakePMDZeroMisAlignment.C:5 MakePMDZeroMisAlignment.C:6 MakePMDZeroMisAlignment.C:7 MakePMDZeroMisAlignment.C:8 MakePMDZeroMisAlignment.C:9 MakePMDZeroMisAlignment.C:10 MakePMDZeroMisAlignment.C:11 MakePMDZeroMisAlignment.C:12 MakePMDZeroMisAlignment.C:13 MakePMDZeroMisAlignment.C:14 MakePMDZeroMisAlignment.C:15 MakePMDZeroMisAlignment.C:16 MakePMDZeroMisAlignment.C:17 MakePMDZeroMisAlignment.C:18 MakePMDZeroMisAlignment.C:19 MakePMDZeroMisAlignment.C:20 MakePMDZeroMisAlignment.C:21 MakePMDZeroMisAlignment.C:22 MakePMDZeroMisAlignment.C:23 MakePMDZeroMisAlignment.C:24 MakePMDZeroMisAlignment.C:25 MakePMDZeroMisAlignment.C:26 MakePMDZeroMisAlignment.C:27 MakePMDZeroMisAlignment.C:28 MakePMDZeroMisAlignment.C:29 MakePMDZeroMisAlignment.C:30 MakePMDZeroMisAlignment.C:31 MakePMDZeroMisAlignment.C:32 MakePMDZeroMisAlignment.C:33 MakePMDZeroMisAlignment.C:34 MakePMDZeroMisAlignment.C:35 MakePMDZeroMisAlignment.C:36 MakePMDZeroMisAlignment.C:37 MakePMDZeroMisAlignment.C:38 MakePMDZeroMisAlignment.C:39 MakePMDZeroMisAlignment.C:40 MakePMDZeroMisAlignment.C:41 MakePMDZeroMisAlignment.C:42 MakePMDZeroMisAlignment.C:43 MakePMDZeroMisAlignment.C:44 MakePMDZeroMisAlignment.C:45 MakePMDZeroMisAlignment.C:46 MakePMDZeroMisAlignment.C:47 MakePMDZeroMisAlignment.C:48 MakePMDZeroMisAlignment.C:49 MakePMDZeroMisAlignment.C:50 MakePMDZeroMisAlignment.C:51 MakePMDZeroMisAlignment.C:52 MakePMDZeroMisAlignment.C:53 MakePMDZeroMisAlignment.C:54 MakePMDZeroMisAlignment.C:55 MakePMDZeroMisAlignment.C:56 MakePMDZeroMisAlignment.C:57 MakePMDZeroMisAlignment.C:58 MakePMDZeroMisAlignment.C:59 MakePMDZeroMisAlignment.C:60 MakePMDZeroMisAlignment.C:61 MakePMDZeroMisAlignment.C:62 MakePMDZeroMisAlignment.C:63 MakePMDZeroMisAlignment.C:64 MakePMDZeroMisAlignment.C:65 MakePMDZeroMisAlignment.C:66 MakePMDZeroMisAlignment.C:67 MakePMDZeroMisAlignment.C:68 MakePMDZeroMisAlignment.C:69 MakePMDZeroMisAlignment.C:70 MakePMDZeroMisAlignment.C:71 MakePMDZeroMisAlignment.C:72 MakePMDZeroMisAlignment.C:73 MakePMDZeroMisAlignment.C:74 MakePMDZeroMisAlignment.C:75 MakePMDZeroMisAlignment.C:76 MakePMDZeroMisAlignment.C:77 MakePMDZeroMisAlignment.C:78 MakePMDZeroMisAlignment.C:79 MakePMDZeroMisAlignment.C:80 MakePMDZeroMisAlignment.C:81 MakePMDZeroMisAlignment.C:82 MakePMDZeroMisAlignment.C:83 MakePMDZeroMisAlignment.C:84 MakePMDZeroMisAlignment.C:85 MakePMDZeroMisAlignment.C:86 MakePMDZeroMisAlignment.C:87 MakePMDZeroMisAlignment.C:88 MakePMDZeroMisAlignment.C:89 MakePMDZeroMisAlignment.C:90 MakePMDZeroMisAlignment.C:91