ROOT logo
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