//
// defaul constructor
//
- fRnd.SetSeed(23472341);
+ fRnd.SetSeed(38217945);
}
//________________________________________________________________________
Int_t AliITSMisalignMaker::AddAlignObj(char* name,Double_t dx,Double_t dy,Double_t dz,
- Double_t dpsi,Double_t dtheta,Double_t dphi,Bool_t unif) {
+ Double_t dpsi,Double_t dtheta,Double_t dphi,const char* distrib) {
//
// misalignment by symname
//
- Double_t vx,vy,vz,vpsi,vtheta,vphi;
+ Double_t vx=0.,vy=0.,vz=0.,vpsi=0.,vtheta=0.,vphi=0.;
+
+ TString sdistrib(distrib);
- if(!unif) {
+ if(sdistrib==TString("gaussian")) {
vx = GaussCut(0,dx/3.,dx); // mean, sigma, max absolute value
vy = GaussCut(0,dy/3.,dy);
vz = GaussCut(0,dz/3.,dz);
vpsi = GaussCut(0,dpsi/3., dpsi );
vtheta = GaussCut(0,dtheta/3.,dtheta);
vphi = GaussCut(0,dphi/3., dphi);
- } else {
+ }else if(sdistrib==TString("uniform")){
vx = fRnd.Uniform(-dx,dx);
vy = fRnd.Uniform(-dy,dy);
vz = fRnd.Uniform(-dz,dz);
vpsi = fRnd.Uniform(-dpsi,dpsi);
vtheta = fRnd.Uniform(-dtheta,dtheta);
vphi = fRnd.Uniform(-dphi,dphi);
+ }else if(sdistrib==TString("fixed")){
+ vx=dx;
+ vy=dy;
+ vz=dz;
+ vpsi=dpsi;
+ vtheta=dtheta;
+ vphi=dphi;
+ }else{
+ AliFatal(Form("Invalid string \"%s\" specifying the misalignment type for the volume \"%s\""));
}
new(fAlobj[fInd]) AliAlignObjParams(name,0,vx,vy,vz,vpsi,vtheta,vphi,kFALSE);
Int_t AddAlignObj(char* name,Double_t dx,Double_t dy,Double_t dz,
Double_t dpsi,Double_t dtheta,Double_t dphi,
- Bool_t unif);
+ const char* distrib);
Int_t AddAlignObj(Int_t lay,Double_t dx,Double_t dy,Double_t dz,
Double_t dpsi,Double_t dtheta,Double_t dphi,
#include "AliGeomManager.h"
#include "AliITSMisalignMaker.h"
#endif
+
+
+TRandom3 rnd;
+rnd.SetSeed(23457856);
+
void MakeITSFullMisAlignment() {
//========================================================================
//
//=****************************************
- // overall ITS misalignment : source -
+ // misalignment of the whole ITS according to survey as reported by Werner Riegler (18/07/2008)
+ // + 100um smearing for translations and 0.1mrad smearing for rotations
//=****************************************
- Float_t its_dx = 0.3000; // 3 mm
- Float_t its_dy = 0.3000; // 3 mm
- Float_t its_dz = 0.3000; // 3 mm
- Float_t its_dpsi = 0.3000/100.*kRadToDeg; // so as to have 3 mm difference at the two extremes
- Float_t its_dtheta = 0.3000/100.*kRadToDeg; // so as to have 3 mm difference at the two extremes
- Float_t its_dphi = 0.3000/100.*kRadToDeg; // so as to have 3 mm difference at the two extremes
- Bool_t unifits=kTRUE;
+ Double_t sigmatrW = 0.01;
+ Double_t sigmarotW = 0.006;
+ Double_t its_dx = AliMathBase::TruncatedGaus(-0.12,sigmatrW,3.*sigmatrW);
+ Double_t its_dy = AliMathBase::TruncatedGaus(-0.07,sigmatrW,3.*sigmatrW);
+ Double_t its_dz = AliMathBase::TruncatedGaus(0.29,sigmatrW,3.*sigmatrW);
+ Double_t its_dpsi = AliMathBase::TruncatedGaus(0.,sigmarotW,3.*sigmarotW);
+ Double_t its_dtheta = AliMathBase::TruncatedGaus(0.03,sigmarotW,3.*sigmarotW);
+ Double_t its_dphi = AliMathBase::TruncatedGaus(0.04,sigmarotW,3.*sigmarotW);
+ const char* unifits="fixed";
//=****************************************
// misalignment at the level of SPD sectors : source - A.Pepato
//=****************************************
// misalignment at the level of SPD barrel : source - A.Pepato
//=****************************************
- Float_t spdbarrel_dx = 0.1000; // 1 mm (very pessimistic)
- Float_t spdbarrel_dy = 0.1000; // 1 mm (very pessimistic)
- Float_t spdbarrel_dz = 0.1000; // 1 mm (very pessimistic)
- Float_t spdbarrel_dpsi = 0.0500/30.*kRadToDeg; // so as to have 500 micron difference at the two extremes
- Float_t spdbarrel_dtheta = 0.0500/30.*kRadToDeg; // so as to have 500 micron difference at the two extremes
- Float_t spdbarrel_dphi = 0.0500/7.*kRadToDeg; // so as to have 500 micron difference at the two extremes
+ Float_t spdbarrel_dx = 0.1000; // 1 mm (very pessimistic)
+ Float_t spdbarrel_dy = 0.1000; // 1 mm (very pessimistic)
+ Float_t spdbarrel_dz = 0.1000; // 1 mm (very pessimistic)
+ Float_t spdbarrel_dpsi = 0.0500/30.*kRadToDeg; // so as to have 500 micron difference at the two extremes
+ Float_t spdbarrel_dtheta = 0.0500/30.*kRadToDeg; // so as to have 500 micron difference at the two extremes
+ Float_t spdbarrel_dphi = 0.0500/7.*kRadToDeg; // so as to have 500 micron difference at the two extremes
//=****************************************
alignMaker.AddAlignObj("ITS",its_dx,its_dy,its_dz,its_dpsi,its_dtheta,its_dphi,unifits);
-
//=****************************************
// misalignment at the level of SPD barrel, half-barrels, and at the level
// of SPD sectors
Double_t vxbarrel,vybarrel,vzbarrel,vpsibarrel,vthetabarrel,vphibarrel;
// barrel
- vxbarrel = alignMaker.GaussCut(0,spdbarrel_dx/3,spdbarrel_dx);
- vybarrel = alignMaker.GaussCut(0,spdbarrel_dy/3,spdbarrel_dy);
- vzbarrel = alignMaker.GaussCut(0,spdbarrel_dz/3,spdbarrel_dz);
- vpsibarrel = alignMaker.GaussCut(0,spdbarrel_dpsi/3,spdbarrel_dpsi);
- vthetabarrel = alignMaker.GaussCut(0,spdbarrel_dtheta/3,spdbarrel_dtheta);
- vphibarrel = alignMaker.GaussCut(0,spdbarrel_dphi/3,spdbarrel_dphi);
+ vxbarrel = AliMathBase::TruncatedGaus(0,spdbarrel_dx/3,spdbarrel_dx);
+ vybarrel = AliMathBase::TruncatedGaus(0,spdbarrel_dy/3,spdbarrel_dy);
+ vzbarrel = AliMathBase::TruncatedGaus(0,spdbarrel_dz/3,spdbarrel_dz);
+ vpsibarrel = AliMathBase::TruncatedGaus(0,spdbarrel_dpsi/3,spdbarrel_dpsi);
+ vthetabarrel = AliMathBase::TruncatedGaus(0,spdbarrel_dtheta/3,spdbarrel_dtheta);
+ vphibarrel = AliMathBase::TruncatedGaus(0,spdbarrel_dphi/3,spdbarrel_dphi);
// top half-barrel
- vx = alignMaker.GaussCut(0,spdhalfbarrel_dx/3,spdhalfbarrel_dx);
- vy = alignMaker.GaussCut(0,spdhalfbarrel_dy/3,spdhalfbarrel_dy);
- vz = alignMaker.GaussCut(0,spdhalfbarrel_dz/3,spdhalfbarrel_dz);
- vpsi = alignMaker.GaussCut(0,spdhalfbarrel_dpsi/3,spdhalfbarrel_dpsi);
- vtheta = alignMaker.GaussCut(0,spdhalfbarrel_dtheta/3,spdhalfbarrel_dtheta);
- vphi = alignMaker.GaussCut(0,spdhalfbarrel_dphi/3,spdhalfbarrel_dphi);
+ vx = AliMathBase::TruncatedGaus(0,spdhalfbarrel_dx/3,spdhalfbarrel_dx);
+ vy = AliMathBase::TruncatedGaus(0,spdhalfbarrel_dy/3,spdhalfbarrel_dy);
+ vz = AliMathBase::TruncatedGaus(0,spdhalfbarrel_dz/3,spdhalfbarrel_dz);
+ vpsi = AliMathBase::TruncatedGaus(0,spdhalfbarrel_dpsi/3,spdhalfbarrel_dpsi);
+ vtheta = AliMathBase::TruncatedGaus(0,spdhalfbarrel_dtheta/3,spdhalfbarrel_dtheta);
+ vphi = AliMathBase::TruncatedGaus(0,spdhalfbarrel_dphi/3,spdhalfbarrel_dphi);
vx += vxbarrel;
vy += vybarrel;
vx,vy,vz,vpsi,vtheta,vphi,unifspdsector);
// bottom half-barrel
- vx = alignMaker.GaussCut(0,spdhalfbarrel_dx/3,spdhalfbarrel_dx);
- vy = alignMaker.GaussCut(0,spdhalfbarrel_dy/3,spdhalfbarrel_dy);
- vz = alignMaker.GaussCut(0,spdhalfbarrel_dz/3,spdhalfbarrel_dz);
- vpsi = alignMaker.GaussCut(0,spdhalfbarrel_dpsi/3,spdhalfbarrel_dpsi);
- vtheta = alignMaker.GaussCut(0,spdhalfbarrel_dtheta/3,spdhalfbarrel_dtheta);
- vphi = alignMaker.GaussCut(0,spdhalfbarrel_dphi/3,spdhalfbarrel_dphi);
+ vx = AliMathBase::TruncatedGaus(0,spdhalfbarrel_dx/3,spdhalfbarrel_dx);
+ vy = AliMathBase::TruncatedGaus(0,spdhalfbarrel_dy/3,spdhalfbarrel_dy);
+ vz = AliMathBase::TruncatedGaus(0,spdhalfbarrel_dz/3,spdhalfbarrel_dz);
+ vpsi = AliMathBase::TruncatedGaus(0,spdhalfbarrel_dpsi/3,spdhalfbarrel_dpsi);
+ vtheta = AliMathBase::TruncatedGaus(0,spdhalfbarrel_dtheta/3,spdhalfbarrel_dtheta);
+ vphi = AliMathBase::TruncatedGaus(0,spdhalfbarrel_dphi/3,spdhalfbarrel_dphi);
vx += vxbarrel;
vy += vybarrel;
return;
}
+
+#if !defined(__CINT__) || defined(__MAKECINT__)
+#include <TError.h>
+#include <TFile.h>
+#include <TGeoManager.h>
+#include <TMath.h>
+#include <TString.h>
+#include <TSystem.h>
+#include "AliCDBPath.h"
+#include "AliCDBEntry.h"
+#include "AliCDBManager.h"
+#include "AliCDBStorage.h"
+#include "AliGeomManager.h"
+#include "AliITSMisalignMaker.h"
+#endif
+
+
+TRandom3 rnd;
+rnd.SetSeed(98723456);
+
void MakeITSResMisAlignment() {
//========================================================================
//
//=****************************************
- // overall ITS misalignment : source -
+ // misalignment of the whole ITS according to survey as reported by Werner Riegler (18/07/2008)
+ // + 100um smearing for translations and 0.1mrad smearing for rotations
//=****************************************
- Float_t its_dx = 0.0000; // ?
- Float_t its_dy = 0.0000; // ?
- Float_t its_dz = 0.0000; // ?
- Float_t its_dpsi = 0.0000; // ?
- Float_t its_dtheta = 0.0000; // ?
- Float_t its_dphi = 0.0000; // ?
+ Double_t sigmatrW = 0.01;
+ Double_t sigmarotW = 0.006;
+ Double_t its_dx = AliMathBase::TruncatedGaus(-0.12,sigmatrW,3.*sigmatrW);
+ Double_t its_dy = AliMathBase::TruncatedGaus(-0.07,sigmatrW,3.*sigmatrW);
+ Double_t its_dz = AliMathBase::TruncatedGaus(0.29,sigmatrW,3.*sigmatrW);
+ Double_t its_dpsi = AliMathBase::TruncatedGaus(0.,sigmarotW,3.*sigmarotW);
+ Double_t its_dtheta = AliMathBase::TruncatedGaus(0.03,sigmarotW,3.*sigmarotW);
+ Double_t its_dphi = AliMathBase::TruncatedGaus(0.04,sigmarotW,3.*sigmarotW);
+ const char* unifits="fixed";
//=****************************************
// misalignment at the level of SPD sectors : source - A.Pepato
//
// END SETTINGS
-
AliITSMisalignMaker alignMaker;
//=****************************************
// overall ITS misalignment :
//=****************************************
- alignMaker.AddAlignObj("ITS",its_dx,its_dy,its_dz,its_dpsi,its_dtheta,its_dphi,kFALSE);
+ alignMaker.AddAlignObj("ITS",its_dx,its_dy,its_dz,its_dpsi,its_dtheta,its_dphi,unifits);
//=****************************************
Double_t vxbarrel,vybarrel,vzbarrel,vpsibarrel,vthetabarrel,vphibarrel;
// barrel
- vxbarrel = alignMaker.GaussCut(0,spdbarrel_dx/3,spdbarrel_dx);
- vybarrel = alignMaker.GaussCut(0,spdbarrel_dy/3,spdbarrel_dy);
- vzbarrel = alignMaker.GaussCut(0,spdbarrel_dz/3,spdbarrel_dz);
- vpsibarrel = alignMaker.GaussCut(0,spdbarrel_dpsi/3,spdbarrel_dpsi);
- vthetabarrel = alignMaker.GaussCut(0,spdbarrel_dtheta/3,spdbarrel_dtheta);
- vphibarrel = alignMaker.GaussCut(0,spdbarrel_dphi/3,spdbarrel_dphi);
+ vxbarrel = AliMathBase::TruncatedGaus(0.,spdbarrel_dx/3,spdbarrel_dx);
+ vxbarrel = AliMathBase::TruncatedGaus(0,spdbarrel_dx/3,spdbarrel_dx);
+ vybarrel = AliMathBase::TruncatedGaus(0,spdbarrel_dy/3,spdbarrel_dy);
+ vzbarrel = AliMathBase::TruncatedGaus(0,spdbarrel_dz/3,spdbarrel_dz);
+ vpsibarrel = AliMathBase::TruncatedGaus(0,spdbarrel_dpsi/3,spdbarrel_dpsi);
+ vthetabarrel = AliMathBase::TruncatedGaus(0,spdbarrel_dtheta/3,spdbarrel_dtheta);
+ vphibarrel = AliMathBase::TruncatedGaus(0,spdbarrel_dphi/3,spdbarrel_dphi);
// top half-barrel
- vx = alignMaker.GaussCut(0,spdhalfbarrel_dx/3,spdhalfbarrel_dx);
- vy = alignMaker.GaussCut(0,spdhalfbarrel_dy/3,spdhalfbarrel_dy);
- vz = alignMaker.GaussCut(0,spdhalfbarrel_dz/3,spdhalfbarrel_dz);
- vpsi = alignMaker.GaussCut(0,spdhalfbarrel_dpsi/3,spdhalfbarrel_dpsi);
- vtheta = alignMaker.GaussCut(0,spdhalfbarrel_dtheta/3,spdhalfbarrel_dtheta);
- vphi = alignMaker.GaussCut(0,spdhalfbarrel_dphi/3,spdhalfbarrel_dphi);
+ vx = AliMathBase::TruncatedGaus(0,spdhalfbarrel_dx/3,spdhalfbarrel_dx);
+ vy = AliMathBase::TruncatedGaus(0,spdhalfbarrel_dy/3,spdhalfbarrel_dy);
+ vz = AliMathBase::TruncatedGaus(0,spdhalfbarrel_dz/3,spdhalfbarrel_dz);
+ vpsi = AliMathBase::TruncatedGaus(0,spdhalfbarrel_dpsi/3,spdhalfbarrel_dpsi);
+ vtheta = AliMathBase::TruncatedGaus(0,spdhalfbarrel_dtheta/3,spdhalfbarrel_dtheta);
+ vphi = AliMathBase::TruncatedGaus(0,spdhalfbarrel_dphi/3,spdhalfbarrel_dphi);
vx += vxbarrel;
vy += vybarrel;
vx,vy,vz,vpsi,vtheta,vphi,unifspdsector);
// bottom half-barrel
- vx = alignMaker.GaussCut(0,spdhalfbarrel_dx/3,spdhalfbarrel_dx);
- vy = alignMaker.GaussCut(0,spdhalfbarrel_dy/3,spdhalfbarrel_dy);
- vz = alignMaker.GaussCut(0,spdhalfbarrel_dz/3,spdhalfbarrel_dz);
- vpsi = alignMaker.GaussCut(0,spdhalfbarrel_dpsi/3,spdhalfbarrel_dpsi);
- vtheta = alignMaker.GaussCut(0,spdhalfbarrel_dtheta/3,spdhalfbarrel_dtheta);
- vphi = alignMaker.GaussCut(0,spdhalfbarrel_dphi/3,spdhalfbarrel_dphi);
+ vx = AliMathBase::TruncatedGaus(0,spdhalfbarrel_dx/3,spdhalfbarrel_dx);
+ vy = AliMathBase::TruncatedGaus(0,spdhalfbarrel_dy/3,spdhalfbarrel_dy);
+ vz = AliMathBase::TruncatedGaus(0,spdhalfbarrel_dz/3,spdhalfbarrel_dz);
+ vpsi = AliMathBase::TruncatedGaus(0,spdhalfbarrel_dpsi/3,spdhalfbarrel_dpsi);
+ vtheta = AliMathBase::TruncatedGaus(0,spdhalfbarrel_dtheta/3,spdhalfbarrel_dtheta);
+ vphi = AliMathBase::TruncatedGaus(0,spdhalfbarrel_dphi/3,spdhalfbarrel_dphi);
vx += vxbarrel;
vy += vybarrel;
alignMaker.AddAlignObj(5,ssdmodule_dx,ssdmodule_dy,ssdmodule_dz,ssdmodule_dpsi,ssdmodule_dtheta,ssdmodule_dphi,kFALSE); // all SSD2 modules
-
if( TString(gSystem->Getenv("TOCDB")) != TString("kTRUE") ){
// save on file
const char* filename = "ITSresidualMisalignment.root";
return;
}
+