#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);
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);
}
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]);
cSSDsensor->cd(6);
hrzSSDsensor->Draw();
+
+ TFile fout(filenameOut,"RECREATE");
+ fout.cd();
+ fout.WriteObject(arrayOut,"ITSAlignObjs","kSingleKey");
+ fout.Close();
+
return;
}
+