]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ITS/DrawITSAlignObj.C
update for the NUA
[u/mrichter/AliRoot.git] / ITS / DrawITSAlignObj.C
index f2e0a12615061d56fc0981e466920dde7e680f35..01de7dac4e338b458cd8207dbf0cc0a638890e30 100644 (file)
@@ -8,20 +8,51 @@
 #include <Riostream.h>
 #include "AliAlignObj.h"
 #endif
-void DrawITSAlignObj(const char* filename="ITSrealisticMisalignment.root",
-                    Bool_t local=kTRUE) {
-  //
+void DrawITSAlignObj(Bool_t local=kFALSE) {  //
   // Draw distribution of alignment constants
-  // (original version: A.Jacholkowski; modified by: A.Dainese)
+  // Set TOCDB and STORAGE environment variables to run the macro
+  // on an AliCDBEntry instead of on a file
   //
 
-/* $Id$ */
-
-  TGeoManager::Import("geometry.root");
-
-  TFile* f = TFile::Open(filename);
-  if(!f) {cerr<<"cannot open input file\n"; return;}
+  const char* filenameOut="ITSfullModuleMisalignment.root";
+  TClonesArray* ar = 0;
+  
+  AliCDBManager* cdb = AliCDBManager::Instance();
 
+  // Activate CDB storage and load geometry from CDB
+  if( TString(gSystem->Getenv("TOCDB")) == TString("kTRUE") ){
+    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;
+    }
+    cdb->SetDefaultStorage(Storage.Data());
+    cdb->SetRun(0);
+    AliCDBEntry *entry = cdb->Get("GRP/Geometry/Data");
+    if(!entry) Fatal("Could not get the specified CDB entry!");
+    entry->SetOwner(0);
+    TGeoManager* geom = (TGeoManager*) entry->GetObject();
+    AliGeomManager::SetGeometry(geom);
+    AliCDBEntry* eItsAlign = cdb->Get("ITS/Align/Data");
+    ar = (TClonesArray*)eItsAlign->GetObject();
+    if(!ar) {
+      Fatal("Could not get the alignment-objects array from the CDB entry!");
+      return;
+    }
+  }else{
+    cdb->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
+    cdb->SetRun(0);
+    AliGeomManager::LoadGeometry("geometry.root"); //load geom from default CDB storage
+    const char* filename="ITSfullMisalignment.root";
+    TFile* f = TFile::Open(filename);
+    if(!f) {cerr<<"cannot open input file\n"; return;}
+    ar = (TClonesArray*)f->Get("ITSAlignObjs");
+    if(!ar) {
+      Fatal("Could not get the alignment-objects array from the file %s!", filename);
+      return;
+    }
+  }    
+                 
   TCanvas  *cSPDsector = new TCanvas("cSPDsector","SPD sectors alignobjs",0,0,800,600);
   cSPDsector->Divide(3,2);                 
   TH1F* hxSPDsector = new TH1F("hxSPDsector","x in SPD sectors",100,-0.1,0.1);
@@ -129,25 +160,47 @@ void DrawITSAlignObj(const char* filename="ITSrealisticMisalignment.root",
   hrzSSDsensor->SetXTitle("[deg]");
 
 
-
-  TClonesArray* ar = (TClonesArray*)f->Get("ITSAlignObjs");
   Int_t entries = ar->GetEntriesFast();
-  cout<<"number of alignment objects: "<<entries<<endl;
+  Printf("number of alignment objects: %d",entries);
+  //Bool_t overlaps;
+  if(!AliGeomManager::GetGeometry()) return;
+  AliGeomManager::ApplyAlignObjsToGeom(*ar); //,overlaps);
 
   AliAlignObj* a;
   Option_t *opt = NULL;
   Double_t tr[3];
   Double_t rot[3];
+  TGeoHMatrix delta;
+
+
+  TClonesArray *arrayOut = new TClonesArray("AliAlignObjParams",4000);
+  TClonesArray &alobjOut = *arrayOut;
+  Int_t j=0;
 
   for(Int_t i=0; i<entries; i++){
     a=(AliAlignObj*)ar->UncheckedAt(i);
+    TString symName = a->GetSymName();
+    UShort_t volUID = a->GetVolUID();
+    //printf("VolId %d    %s\n",volUID,symName.Data());
+    
     if(local) {
       a->GetLocalPars(tr,rot);
     } else {
       a->GetPars(tr,rot);
     }
-    TString symName = a->GetSymName();
-    printf("  %s\n",symName.Data());
+
+    AliGeomManager::GetDeltaForBranch(*a,delta);
+    //delta.Print();
+
+    // create AliAlignObjParam with total delta
+    if(i==0 || volUID!=0) {
+      new(alobjOut[j]) AliAlignObjParams(symName.Data(),volUID,delta,kTRUE);
+      j++;
+    }
+
+
+    // plots
+    //
     if(!symName.Contains("SPD") && !symName.Contains("SDD") && !symName.Contains("SSD")) {
       a->Print(opt);
     }
@@ -157,7 +210,7 @@ void DrawITSAlignObj(const char* filename="ITSrealisticMisalignment.root",
       hzSPDsector->Fill(tr[2]);
       hrxSPDsector->Fill(rot[0]);
       hrySPDsector->Fill(rot[1]);
-      hrzSPDsector->Fill(rot[2]); printf("%f\n",rot[2]);
+      hrzSPDsector->Fill(rot[2]);
     }
     if(symName.Contains("SPD") && symName.Contains("Sector") && symName.Contains("HalfStave") && !symName.Contains("Ladder")) {
       hxSPDhalfstave->Fill(tr[0]);
@@ -304,5 +357,12 @@ void DrawITSAlignObj(const char* filename="ITSrealisticMisalignment.root",
   cSSDsensor->cd(6);
   hrzSSDsensor->Draw();
 
+
+  TFile fout(filenameOut,"RECREATE");
+  fout.cd();
+  fout.WriteObject(arrayOut,"ITSAlignObjs","kSingleKey");
+  fout.Close();
+  
   return;
 }
+