ROOT logo
void MakePHOSResMisAlignment(){
  // Create TClonesArray of residual misalignment objects for PHOS
  //
  const AliPHOSGeometry *phosGeom = AliPHOSGeometry::GetInstance("IHEP", "IHEP");
  if (!phosGeom) {
    Error("MakePHOSFullMisAlignment", "Cannot obtain AliPHOSGeometry singleton\n");
    return;
  }

  AliPHOSEMCAGeometry *emca = phosGeom->GetEMCAGeometry();
  TClonesArray *array = new TClonesArray("AliAlignObjParams", 16 + phosGeom->GetNModules() * 
                                         emca->GetNStripX() * emca->GetNStripZ());
  TClonesArray &alobj = *array;
   
  Double_t dpsi=0., dtheta=0., dphi=0.;
  Double_t displacement = 0.2;
  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);
 
  Int_t i=0 ;
  // Alignment for 5 PHOS modules
  new(alobj[i++]) AliAlignObjParams("PHOS/Module1",
        volid, -0.20, -0.1, +0.0, dpsi, dtheta, 0.2, kTRUE);
  new(alobj[i++]) AliAlignObjParams("PHOS/Module2",
	volid, -0.10, +0.0, -0.2, dpsi, dtheta, 0.2, kTRUE);
  new(alobj[i++]) AliAlignObjParams("PHOS/Module3",
	volid,  0.05, -0.1,  0.2, dpsi, dtheta, 0.0, kTRUE);
  new(alobj[i++]) AliAlignObjParams("PHOS/Module4",
	volid, +0.10, -0.0, -0.1, dpsi, dtheta, 0.1, kTRUE);
  new(alobj[i++]) AliAlignObjParams("PHOS/Module5",
	volid, +0.20, -0.1,  0.1, dpsi, dtheta, 0.2, kTRUE);
 
  Double_t dx=0., dy=0., dz=0. ;
  // Alignment of CPV modules
  new(alobj[i++]) AliAlignObjParams("PHOS/Module1/CPV",
        volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);
  new(alobj[i++]) AliAlignObjParams("PHOS/Module2/CPV",
        volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);
  new(alobj[i++]) AliAlignObjParams("PHOS/Module3/CPV",
        volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);
  new(alobj[i++]) AliAlignObjParams("PHOS/Module4/CPV",
        volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);
  new(alobj[i++]) AliAlignObjParams("PHOS/Module5/CPV",
        volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);
 

  // Alignment for PHOS cradle
  new(alobj[i++]) AliAlignObjParams("PHOS/Cradle0",
	volid, 0., 0., -displacement, dpsi, dtheta, dphi, kTRUE);
  new(alobj[i++]) AliAlignObjParams("PHOS/Cradle1",
	volid, 0., 0., +displacement, dpsi, dtheta, dphi, kTRUE);

  // Alignment for cradle wheels
  new(alobj[i++])  AliAlignObjParams("PHOS/Wheel0",
	volid, 0., 0., -displacement, dpsi, dtheta, dphi, kTRUE);
  new(alobj[i++])  AliAlignObjParams("PHOS/Wheel1",
	volid, 0., 0., -displacement, dpsi, dtheta, dphi, kTRUE);
  new(alobj[i++])  AliAlignObjParams("PHOS/Wheel2",
	volid, 0., 0., +displacement, dpsi, dtheta, dphi, kTRUE);
  new(alobj[i++]) AliAlignObjParams("PHOS/Wheel3",
	volid, 0., 0., +displacement, dpsi, dtheta, dphi, kTRUE);

  AliPHOSSurvey geodesicData("phos_mod3_survey.txt");
  geodesicData.CreateAliAlignObjParams(alobj);

  const char* macroname = "MakePHOSResMisAlignment.C";
  if( TString(gSystem->Getenv("TOCDB")) != TString("kTRUE") ){
    // save on file
    const char* filename = "PHOSresidualMisalignment.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,"PHOSAlignObjs","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("Yuri Kharlov");
    md->SetComment("Alignment objects for slightly misaligned geometry (residual misalignment");
    md->SetAliRootVersion(gSystem->Getenv("ARVERSION"));
    AliCDBId id("PHOS/Align/Data",0,AliCDBRunRange::Infinity());
    storage->Put(array,id, md);
  }

  array->Delete();

}
 MakePHOSResMisAlignment.C:1
 MakePHOSResMisAlignment.C:2
 MakePHOSResMisAlignment.C:3
 MakePHOSResMisAlignment.C:4
 MakePHOSResMisAlignment.C:5
 MakePHOSResMisAlignment.C:6
 MakePHOSResMisAlignment.C:7
 MakePHOSResMisAlignment.C:8
 MakePHOSResMisAlignment.C:9
 MakePHOSResMisAlignment.C:10
 MakePHOSResMisAlignment.C:11
 MakePHOSResMisAlignment.C:12
 MakePHOSResMisAlignment.C:13
 MakePHOSResMisAlignment.C:14
 MakePHOSResMisAlignment.C:15
 MakePHOSResMisAlignment.C:16
 MakePHOSResMisAlignment.C:17
 MakePHOSResMisAlignment.C:18
 MakePHOSResMisAlignment.C:19
 MakePHOSResMisAlignment.C:20
 MakePHOSResMisAlignment.C:21
 MakePHOSResMisAlignment.C:22
 MakePHOSResMisAlignment.C:23
 MakePHOSResMisAlignment.C:24
 MakePHOSResMisAlignment.C:25
 MakePHOSResMisAlignment.C:26
 MakePHOSResMisAlignment.C:27
 MakePHOSResMisAlignment.C:28
 MakePHOSResMisAlignment.C:29
 MakePHOSResMisAlignment.C:30
 MakePHOSResMisAlignment.C:31
 MakePHOSResMisAlignment.C:32
 MakePHOSResMisAlignment.C:33
 MakePHOSResMisAlignment.C:34
 MakePHOSResMisAlignment.C:35
 MakePHOSResMisAlignment.C:36
 MakePHOSResMisAlignment.C:37
 MakePHOSResMisAlignment.C:38
 MakePHOSResMisAlignment.C:39
 MakePHOSResMisAlignment.C:40
 MakePHOSResMisAlignment.C:41
 MakePHOSResMisAlignment.C:42
 MakePHOSResMisAlignment.C:43
 MakePHOSResMisAlignment.C:44
 MakePHOSResMisAlignment.C:45
 MakePHOSResMisAlignment.C:46
 MakePHOSResMisAlignment.C:47
 MakePHOSResMisAlignment.C:48
 MakePHOSResMisAlignment.C:49
 MakePHOSResMisAlignment.C:50
 MakePHOSResMisAlignment.C:51
 MakePHOSResMisAlignment.C:52
 MakePHOSResMisAlignment.C:53
 MakePHOSResMisAlignment.C:54
 MakePHOSResMisAlignment.C:55
 MakePHOSResMisAlignment.C:56
 MakePHOSResMisAlignment.C:57
 MakePHOSResMisAlignment.C:58
 MakePHOSResMisAlignment.C:59
 MakePHOSResMisAlignment.C:60
 MakePHOSResMisAlignment.C:61
 MakePHOSResMisAlignment.C:62
 MakePHOSResMisAlignment.C:63
 MakePHOSResMisAlignment.C:64
 MakePHOSResMisAlignment.C:65
 MakePHOSResMisAlignment.C:66
 MakePHOSResMisAlignment.C:67
 MakePHOSResMisAlignment.C:68
 MakePHOSResMisAlignment.C:69
 MakePHOSResMisAlignment.C:70
 MakePHOSResMisAlignment.C:71
 MakePHOSResMisAlignment.C:72
 MakePHOSResMisAlignment.C:73
 MakePHOSResMisAlignment.C:74
 MakePHOSResMisAlignment.C:75
 MakePHOSResMisAlignment.C:76
 MakePHOSResMisAlignment.C:77
 MakePHOSResMisAlignment.C:78
 MakePHOSResMisAlignment.C:79
 MakePHOSResMisAlignment.C:80
 MakePHOSResMisAlignment.C:81
 MakePHOSResMisAlignment.C:82
 MakePHOSResMisAlignment.C:83
 MakePHOSResMisAlignment.C:84
 MakePHOSResMisAlignment.C:85
 MakePHOSResMisAlignment.C:86
 MakePHOSResMisAlignment.C:87
 MakePHOSResMisAlignment.C:88
 MakePHOSResMisAlignment.C:89
 MakePHOSResMisAlignment.C:90
 MakePHOSResMisAlignment.C:91
 MakePHOSResMisAlignment.C:92
 MakePHOSResMisAlignment.C:93
 MakePHOSResMisAlignment.C:94
 MakePHOSResMisAlignment.C:95
 MakePHOSResMisAlignment.C:96
 MakePHOSResMisAlignment.C:97
 MakePHOSResMisAlignment.C:98
 MakePHOSResMisAlignment.C:99
 MakePHOSResMisAlignment.C:100
 MakePHOSResMisAlignment.C:101
 MakePHOSResMisAlignment.C:102
 MakePHOSResMisAlignment.C:103
 MakePHOSResMisAlignment.C:104
 MakePHOSResMisAlignment.C:105
 MakePHOSResMisAlignment.C:106