ROOT logo
void AliPMDAlObjRnd(Float_t max_trans=1.0, Float_t max_rot=0.1)
{
  // 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 
 */
  
  TString path;
  const char *Sector1="/ALIC_1/EPM1_1"; 
  const char *Sector2="/ALIC_1/EPM2_1"; 
  const char *Sector3="/ALIC_1/EPM3_1"; 
  const char *Sector4="/ALIC_1/EPM4_1"; 
  
  
  //Sectors 1 and 4
  Double_t dx14, dy14, dz14;          // Misalignment in X,Y and Z
  Double_t dpsi14, dtheta14, dphi14; //  Angular displacements
  //Sectors 2 and 3
  Double_t dx23, dy23, dz23;          // Misalignment in X,Y and Z
  Double_t dpsi23, dtheta23, dphi23; //  Angular displacements
  
  
  
  // At present give some random shifts
  // generated by random numbers
  // max_trans : Maximun shifts in X,Y,Z  in centimeters
  // max_rot   : Maximum shifts in angles in degrees
  // Double_t max_trans, max_rot;
  
  
  TRandom *rnd   = new TRandom(4357);
  
  // For sectors 1 and 4
  // Translation displacement
  dx14     = (rnd->Uniform()-0.5)*max_trans;
  dy14     = (rnd->Uniform()-0.5)*max_trans;
  dz14     = (rnd->Uniform()-0.5)*max_trans;
  //Rotation angles
  dpsi14   = (rnd->Uniform()-0.5)*max_rot;
  dtheta14 = (rnd->Uniform()-0.5)*max_rot;
  dphi14   = (rnd->Uniform()-0.5)*max_rot;
  
  // For sectors 2 and 3
  // Translation displacement
  dx23     = (rnd->Uniform()-0.5)*max_trans;
  dy23     = (rnd->Uniform()-0.5)*max_trans;
  dz23     = (rnd->Uniform()-0.5)*max_trans;
  //Rotation angles
  dpsi23   = (rnd->Uniform()-0.5)*max_rot;
  dtheta23 = (rnd->Uniform()-0.5)*max_rot;
  dphi23   = (rnd->Uniform()-0.5)*max_rot;
  
  
  //Create a TClonesArray of Align Object to store displacement Angles
  TClonesArray *array = new TClonesArray("AliAlignObjParams",10000);
  TClonesArray &alobj = *array;
  
  // Create a File to store the alignment data
  // the translations and rotations
  
  TFile f("PMD_rnd_alobj.root","RECREATE");
  if(!f) {cerr<<"cannot open file for output\n";}
  
  AliAlignObjParams o;
  
  UShort_t iIndex=0;
//   AliGeomManager::ELayerID iLayer = AliGeomManager::kTOF;

//   UShort_t dvoluid = AliGeomManager::LayerToVolUID(iLayer,iIndex); //dummy volume identity 

  new(alobj[0]) AliAlignObjParams(Sector1, iIndex, dx14, dy14, dz14, dpsi14, dtheta14, dphi14);
  new(alobj[1]) AliAlignObjParams(Sector2, iIndex, dx14, dy14, dz14, dpsi14, dtheta14, dphi14);
  new(alobj[2]) AliAlignObjParams(Sector3, iIndex, dx23, dy23, dz23, dpsi23, dtheta23, dphi23);
  new(alobj[3]) AliAlignObjParams(Sector4, iIndex, dx23, dy23, dz23, dpsi23, dtheta23, dphi23);
  
  // This part needs to be understood
  f.cd();
  f.WriteObject(array,"PMDAlignObjs","kSingleKey");
  f.Close();
  array->Delete();
}
 AliPMDAlObjRnd.C:1
 AliPMDAlObjRnd.C:2
 AliPMDAlObjRnd.C:3
 AliPMDAlObjRnd.C:4
 AliPMDAlObjRnd.C:5
 AliPMDAlObjRnd.C:6
 AliPMDAlObjRnd.C:7
 AliPMDAlObjRnd.C:8
 AliPMDAlObjRnd.C:9
 AliPMDAlObjRnd.C:10
 AliPMDAlObjRnd.C:11
 AliPMDAlObjRnd.C:12
 AliPMDAlObjRnd.C:13
 AliPMDAlObjRnd.C:14
 AliPMDAlObjRnd.C:15
 AliPMDAlObjRnd.C:16
 AliPMDAlObjRnd.C:17
 AliPMDAlObjRnd.C:18
 AliPMDAlObjRnd.C:19
 AliPMDAlObjRnd.C:20
 AliPMDAlObjRnd.C:21
 AliPMDAlObjRnd.C:22
 AliPMDAlObjRnd.C:23
 AliPMDAlObjRnd.C:24
 AliPMDAlObjRnd.C:25
 AliPMDAlObjRnd.C:26
 AliPMDAlObjRnd.C:27
 AliPMDAlObjRnd.C:28
 AliPMDAlObjRnd.C:29
 AliPMDAlObjRnd.C:30
 AliPMDAlObjRnd.C:31
 AliPMDAlObjRnd.C:32
 AliPMDAlObjRnd.C:33
 AliPMDAlObjRnd.C:34
 AliPMDAlObjRnd.C:35
 AliPMDAlObjRnd.C:36
 AliPMDAlObjRnd.C:37
 AliPMDAlObjRnd.C:38
 AliPMDAlObjRnd.C:39
 AliPMDAlObjRnd.C:40
 AliPMDAlObjRnd.C:41
 AliPMDAlObjRnd.C:42
 AliPMDAlObjRnd.C:43
 AliPMDAlObjRnd.C:44
 AliPMDAlObjRnd.C:45
 AliPMDAlObjRnd.C:46
 AliPMDAlObjRnd.C:47
 AliPMDAlObjRnd.C:48
 AliPMDAlObjRnd.C:49
 AliPMDAlObjRnd.C:50
 AliPMDAlObjRnd.C:51
 AliPMDAlObjRnd.C:52
 AliPMDAlObjRnd.C:53
 AliPMDAlObjRnd.C:54
 AliPMDAlObjRnd.C:55
 AliPMDAlObjRnd.C:56
 AliPMDAlObjRnd.C:57
 AliPMDAlObjRnd.C:58
 AliPMDAlObjRnd.C:59
 AliPMDAlObjRnd.C:60
 AliPMDAlObjRnd.C:61
 AliPMDAlObjRnd.C:62
 AliPMDAlObjRnd.C:63
 AliPMDAlObjRnd.C:64
 AliPMDAlObjRnd.C:65
 AliPMDAlObjRnd.C:66
 AliPMDAlObjRnd.C:67
 AliPMDAlObjRnd.C:68
 AliPMDAlObjRnd.C:69
 AliPMDAlObjRnd.C:70
 AliPMDAlObjRnd.C:71
 AliPMDAlObjRnd.C:72
 AliPMDAlObjRnd.C:73
 AliPMDAlObjRnd.C:74
 AliPMDAlObjRnd.C:75
 AliPMDAlObjRnd.C:76
 AliPMDAlObjRnd.C:77
 AliPMDAlObjRnd.C:78
 AliPMDAlObjRnd.C:79
 AliPMDAlObjRnd.C:80
 AliPMDAlObjRnd.C:81
 AliPMDAlObjRnd.C:82
 AliPMDAlObjRnd.C:83
 AliPMDAlObjRnd.C:84
 AliPMDAlObjRnd.C:85
 AliPMDAlObjRnd.C:86
 AliPMDAlObjRnd.C:87
 AliPMDAlObjRnd.C:88
 AliPMDAlObjRnd.C:89
 AliPMDAlObjRnd.C:90
 AliPMDAlObjRnd.C:91
 AliPMDAlObjRnd.C:92
 AliPMDAlObjRnd.C:93
 AliPMDAlObjRnd.C:94
 AliPMDAlObjRnd.C:95
 AliPMDAlObjRnd.C:96
 AliPMDAlObjRnd.C:97
 AliPMDAlObjRnd.C:98
 AliPMDAlObjRnd.C:99
 AliPMDAlObjRnd.C:100
 AliPMDAlObjRnd.C:101
 AliPMDAlObjRnd.C:102
 AliPMDAlObjRnd.C:103
 AliPMDAlObjRnd.C:104
 AliPMDAlObjRnd.C:105
 AliPMDAlObjRnd.C:106
 AliPMDAlObjRnd.C:107
 AliPMDAlObjRnd.C:108
 AliPMDAlObjRnd.C:109
 AliPMDAlObjRnd.C:110