]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Updated misalignment macros and AliITSMisalignMaker class (R. Grosso)
authormasera <masera@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 16 Sep 2008 16:44:51 +0000 (16:44 +0000)
committermasera <masera@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 16 Sep 2008 16:44:51 +0000 (16:44 +0000)
ITS/AliITSMisalignMaker.cxx
ITS/AliITSMisalignMaker.h
ITS/MakeITSFullMisAlignment.C
ITS/MakeITSResMisAlignment.C

index 122ebd46ecf62a8df63a21c4af035697a849fa64..370af324489c982cd5c6830a7eded6fb996c4614 100644 (file)
@@ -59,30 +59,41 @@ AliITSMisalignMaker::AliITSMisalignMaker():
   //
   // 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);
index 1b99bf84e38a7c5a0d6952e6a91ea289751b0350..4aaf3225e58419ced372878de2fb0b971888646b 100644 (file)
@@ -36,7 +36,7 @@ public:
   
   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,
index c97518f44e13638af537ad2ccf0fde71bdbf850e..bf8f9db49c388f2d918b21f1c0dc1ee81d07be5d 100644 (file)
 #include "AliGeomManager.h"
 #include "AliITSMisalignMaker.h"
 #endif
+
+
+TRandom3 rnd;
+rnd.SetSeed(23457856);
+
 void MakeITSFullMisAlignment() {
 //========================================================================
 //
@@ -66,15 +71,18 @@ 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
@@ -100,12 +108,12 @@ void MakeITSFullMisAlignment() {
   //=****************************************
   // 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
   
 
   //=****************************************
@@ -203,7 +211,6 @@ void MakeITSFullMisAlignment() {
 
   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
@@ -213,20 +220,20 @@ void MakeITSFullMisAlignment() {
   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;
@@ -240,12 +247,12 @@ void MakeITSFullMisAlignment() {
                               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;
@@ -394,3 +401,4 @@ void MakeITSFullMisAlignment() {
 
   return;
 }
+
index b0cf2da0eb46d27d1668ebd87ca1de4358519fa4..f06c02a5fc0d56a3cf4d37b7320ae9dba3262c47 100644 (file)
@@ -1,3 +1,22 @@
+#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() {
 //========================================================================
 //
@@ -52,14 +71,18 @@ 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
@@ -166,14 +189,13 @@ void MakeITSResMisAlignment() {
   //
   // 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);
 
 
   //=****************************************
@@ -185,20 +207,21 @@ void MakeITSResMisAlignment() {
   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;
@@ -212,12 +235,12 @@ void MakeITSResMisAlignment() {
                               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;
@@ -258,7 +281,6 @@ void MakeITSResMisAlignment() {
   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";
@@ -284,3 +306,4 @@ void MakeITSResMisAlignment() {
 
   return;
 }
+