Adding the possibility to misalign the central beam pipe. New macro to produce realis...
authorcvetan <cvetan@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 10 Apr 2012 10:59:00 +0000 (10:59 +0000)
committercvetan <cvetan@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 10 Apr 2012 10:59:00 +0000 (10:59 +0000)
GRP/MakeForwardMisAlignment.C [new file with mode: 0644]
STRUCT/AliPIPEv3.cxx
STRUCT/AliPIPEv3.h

diff --git a/GRP/MakeForwardMisAlignment.C b/GRP/MakeForwardMisAlignment.C
new file mode 100644 (file)
index 0000000..597eba0
--- /dev/null
@@ -0,0 +1,95 @@
+void MakeForwardMisAlignment(Int_t inputRun){
+  // Creates misalignment of the beam pipe, frame and
+  // FMD2&3.
+  // The misalignment is based on the ITS global alignment
+  // object with the exception of the beam pipe where
+  // only the translations are used ignoring the rotation
+  // matrix.
+  const char* macroname = "MakeForwardMisAlignment.C";
+
+  AliCDBManager* cdb = AliCDBManager::Instance();
+  cdb->SetDefaultStorage("raw://");
+  cdb->SetRun(inputRun);
+  AliCDBEntry *inputEntry = cdb->Get("ITS/Align/Data");
+  TClonesArray *inputArray = (TClonesArray*)inputEntry->GetObject();
+  AliAlignObjParams *itsAlign = (AliAlignObjParams*)inputArray->At(0);
+  itsAlign->Print();
+  printf("\n\n\n");
+  Double_t inputTrans[3];
+  itsAlign->GetTranslation(inputTrans);
+  Double_t inputAngles[3];
+  itsAlign->GetAngles(inputAngles);
+
+  TClonesArray *array = new TClonesArray("AliAlignObjParams",20);
+
+  Int_t iIndex=0; //let all modules have index=0 in a layer with no LUT
+  AliGeomManager::ELayerID iLayer = AliGeomManager::kInvalidLayer;
+  UShort_t dvoluid = AliGeomManager::LayerToVolUID(iLayer,iIndex); //dummy vol id
+
+  const char* baseSymName ="FRAME/Sector"; //base of symbolic name corresponding to base of path "ALIC_1/B077_1/BSEGMO";
+  TString symname;
+
+  for(Int_t sm=0; sm<18; sm++){
+    symname = baseSymName;
+    symname += sm;
+    cout<<symname.Data()<<endl;
+    new((*array)[sm]) AliAlignObjParams(symname.Data(),dvoluid,0.,0.,0.,0.,0.,0.,kTRUE);
+  }
+
+  new((*array)[18]) AliAlignObjParams("CP1",dvoluid,inputTrans[0],inputTrans[1],0.,0.,0.,0.,kTRUE);
+  array->At(18)->Print();
+  printf("\n\n\n");
+
+  // FMD
+  TClonesArray *arrayFMD = new TClonesArray("AliAlignObjParams",4);
+  new((*arrayFMD)[0]) AliAlignObjParams("FMD/FMD2_T",0,inputTrans[0],inputTrans[1],inputTrans[2],inputAngles[0],inputAngles[1],inputAngles[2],kTRUE);
+  new((*arrayFMD)[1]) AliAlignObjParams("FMD/FMD2_B",0,inputTrans[0],inputTrans[1],inputTrans[2],inputAngles[0],inputAngles[1],inputAngles[2],kTRUE);
+  new((*arrayFMD)[2]) AliAlignObjParams("FMD/FMD3_T",0,inputTrans[0],inputTrans[1],inputTrans[2],inputAngles[0],inputAngles[1],inputAngles[2],kTRUE);
+  new((*arrayFMD)[3]) AliAlignObjParams("FMD/FMD3_B",0,inputTrans[0],inputTrans[1],inputTrans[2],inputAngles[0],inputAngles[1],inputAngles[2],kTRUE);
+  arrayFMD->Print();
+  printf("\n\n\n");
+
+  if( TString(gSystem->Getenv("TOCDB")) != TString("kTRUE") ){
+    // save on file
+    const char* filename = "ForwardMisalignment.root";
+    TFile f(filename,"RECREATE");
+    if(!f){
+      Error(macroname,"cannot open file for output\n");
+      return;
+    }
+    Info(macroname,"Saving alignment objects in %s", filename);
+    f.cd();
+    f.WriteObject(array,"STRUCTAlignObjs","kSingleKey");
+    f.WriteObject(arrayFMD,"FMDAlignObjs","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());
+    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("Grosso Raffaele");
+    md->SetComment("Misalignment for FRAME and beam pipe");
+    md->SetAliRootVersion(gSystem->Getenv("ARVERSION"));
+    AliCDBId id("GRP/Align/Data",0,AliCDBRunRange::Infinity());
+    storage->Put(array,id,md);
+    AliCDBMetaData* mdFMD = new AliCDBMetaData();
+    mdFMD->SetResponsible("FMD Experts");
+    mdFMD->SetComment("Misalignment for FMD using ITS object");
+    md->SetAliRootVersion(gSystem->Getenv("ARVERSION"));
+    AliCDBId idFMD("FMD/Align/Data",0,AliCDBRunRange::Infinity());
+    storage->Put(arrayFMD,idFMD,mdFMD);
+  }
+
+  array->Delete();
+
+}
+
index 40ee032..08f4eaa 100644 (file)
@@ -2980,6 +2980,26 @@ TGeoVolume* AliPIPEv3::MakeBellow(const char* ext, Int_t nc, Float_t rMin, Float
     return voBellow;
 }
 
+//_______________________________________________________________________
+void AliPIPEv3::AddAlignableVolumes() const
+{
+  // 
+  AliInfo("Add PIPE alignable volume");
+
+  if (!gGeoManager) {
+    AliFatal("TGeoManager doesn't exist !");
+    return;
+  }
+
+  TString symname("CP1");
+  TString volpath("/ALIC_1/CP_1/Cp1_1");
+  if(!gGeoManager->SetAlignableEntry(symname.Data(),volpath.Data()))
+    AliFatal(Form("Alignable entry %s not created. Volume path %s not valid",
+                 symname.Data(),volpath.Data()));
+
+}
+
+
 
 
 
index 38f728a..c317233 100644 (file)
@@ -31,6 +31,7 @@ class AliPIPEv3 : public AliPIPE {
   virtual void   CreateMaterials();
   virtual Int_t  IsVersion() const {return 0;}
   virtual void   SetBeamBackgroundSimulation() {fBeamBackground = kTRUE;}
+  virtual void   AddAlignableVolumes() const;
          
  private:
   virtual TGeoPcon*   MakeMotherFromTemplate(const TGeoPcon* shape, Int_t imin = -1, Int_t imax = -1, Float_t r0 = 0., Int_t nz =-1);