#include <Riostream.h>
#include <TClass.h>
#include <TMath.h>
#include <TBuffer.h>
#include <TCanvas.h>
#if ROOT_VERSION_CODE>= 331523
#include <TView3D.h>
#else
#include <TView.h>
#endif
#include <TPolyLine3D.h>
#include <TNode.h>
#include <TPCON.h>
#include <TBRIK.h>
#include <TXTRU.h>
#include "AliLog.h"
#include "AliITSgeomMatrix.h"
using std::endl;
using std::cout;
using std::ios;
using std::setprecision;
ClassImp(AliITSgeomMatrix)
AliITSgeomMatrix::AliITSgeomMatrix():
TObject(),
fDetectorIndex(0),
fid(),
frot(),
ftran(),
fCylR(0.0),
fCylPhi(0.0),
fm(),
fPath(){
/*
<img src="picts/ITS/AliITSgeomMatrix_L1.gif">
*/
//End_Html
Int_t i,j;
fDetectorIndex = -1;
for(i=0;i<3;i++){
fid[i] = 0;
frot[i] = ftran[i] = 0.0;
for(j=0;j<3;j++) fm[i][j] = 0.0;
}
fm[0][0] = fm[1][1] = fm[2][2] = 1.0;
}
AliITSgeomMatrix::AliITSgeomMatrix(const AliITSgeomMatrix &source) :
TObject(source),
fDetectorIndex(source.fDetectorIndex),
fid(),
frot(),
ftran(),
fCylR(source.fCylR),
fCylPhi(source.fCylPhi),
fm(),
fPath(source.fPath){
Int_t i,j;
for(i=0;i<3;i++){
this->fid[i] = source.fid[i];
this->frot[i] = source.frot[i];
this->ftran[i] = source.ftran[i];
for(j=0;j<3;j++) this->fm[i][j] = source.fm[i][j];
}
}
AliITSgeomMatrix& AliITSgeomMatrix::operator=(const AliITSgeomMatrix &source){
if(this == &source)return *this;
Int_t i,j;
this->fDetectorIndex = source.fDetectorIndex;
this->fCylR = source.fCylR;
this->fCylPhi = source.fCylPhi;
for(i=0;i<3;i++){
this->fid[i] = source.fid[i];
this->frot[i] = source.frot[i];
this->ftran[i] = source.ftran[i];
for(j=0;j<3;j++) this->fm[i][j] = source.fm[i][j];
}
this->fPath = source.fPath;
return *this;
}
AliITSgeomMatrix::AliITSgeomMatrix(Int_t idt,const Int_t id[3],
const Double_t rot[3],const Double_t tran[3]):
TObject(),
fDetectorIndex(idt),
fid(),
frot(),
ftran(),
fCylR(0.0),
fCylPhi(0.0),
fm(),
fPath(){
/*
<img src="picts/ITS/AliITSgeomMatrix_L1.gif">
*/
//End_Html
Int_t i;
for(i=0;i<3;i++){
fid[i] = id[i];
frot[i] = rot[i];
ftran[i] = tran[i];
}
fCylR = TMath::Sqrt(ftran[0]*ftran[0]+ftran[1]*ftran[1]);
fCylPhi = TMath::ATan2(ftran[1],ftran[0]);
if(fCylPhi<0.0) fCylPhi += 2.*TMath::Pi();
this->MatrixFromAngle();
}
AliITSgeomMatrix::AliITSgeomMatrix(Int_t idt, const Int_t id[3],
Double_t matrix[3][3],
const Double_t tran[3]):
TObject(),
fDetectorIndex(idt),
fid(),
frot(),
ftran(),
fCylR(0.0),
fCylPhi(0.0),
fm(),
fPath(){
/*
<img src="picts/ITS/AliITSgeomMatrix_L1.gif">
*/
//End_Html
Int_t i,j;
for(i=0;i<3;i++){
fid[i] = id[i];
ftran[i] = tran[i];
for(j=0;j<3;j++) fm[i][j] = matrix[i][j];
}
fCylR = TMath::Sqrt(ftran[0]*ftran[0]+ftran[1]*ftran[1]);
fCylPhi = TMath::ATan2(ftran[1],ftran[0]);
if(fCylPhi<0.0) fCylPhi += 2.*TMath::Pi();
this->AngleFromMatrix();
}
void AliITSgeomMatrix::SixAnglesFromMatrix(Double_t *ang)const{
Double_t si,c=180./TMath::Pi();
const Double_t epsil=1.e-15;
ang[1] = TMath::ATan2(fm[0][1],fm[0][0]);
if( !(TMath::AreEqualAbs(TMath::Cos(ang[1]),0.,epsil))) si = fm[0][0]/TMath::Cos(ang[1]);
else si = fm[0][1]/TMath::Sin(ang[1]);
ang[0] = TMath::ATan2(si,fm[0][2]);
ang[3] = TMath::ATan2(fm[1][1],fm[1][0]);
if(!(TMath::AreEqualAbs(TMath::Cos(ang[3]),0.,epsil))) si = fm[1][0]/TMath::Cos(ang[3]);
else si = fm[1][1]/TMath::Sin(ang[3]);
ang[2] = TMath::ATan2(si,fm[1][2]);
ang[5] = TMath::ATan2(fm[2][1],fm[2][0]);
if(!(TMath::AreEqualAbs(TMath::Cos(ang[5]),0.,epsil))) si = fm[2][0]/TMath::Cos(ang[5]);
else si = fm[2][1]/TMath::Sin(ang[5]);
ang[4] = TMath::ATan2(si,fm[2][2]);
for(Int_t i=0;i<6;i++) {ang[i] *= c; if(ang[i]<0.0) ang[i] += 360.;}
}
void AliITSgeomMatrix::MatrixFromSixAngles(const Double_t *ang){
Int_t i,j;
Double_t si,lr[9],c=TMath::Pi()/180.;
const Double_t epsil = 1.e-15;
si = TMath::Sin(c*ang[0]);
if(TMath::AreEqualAbs(ang[0],90.,epsil)) si = +1.0;
if(TMath::AreEqualAbs(ang[0],270.,epsil)) si = -1.0;
if(TMath::AreEqualAbs(ang[0],0.,epsil) ||TMath::AreEqualAbs(ang[0],180.,epsil)) si = 0.0;
lr[0] = si * TMath::Cos(c*ang[1]);
lr[1] = si * TMath::Sin(c*ang[1]);
lr[2] = TMath::Cos(c*ang[0]);
if(TMath::AreEqualAbs(ang[0],90.,epsil)||TMath::AreEqualAbs(ang[0],270.,epsil)) lr[2] = 0.0;
if(TMath::AreEqualAbs(ang[0],0.,epsil)) lr[2] = +1.0;
if(TMath::AreEqualAbs(ang[0],180.,epsil)) lr[2] = -1.0;
si = TMath::Sin(c*ang[2]);
if(TMath::AreEqualAbs(ang[2],90.,epsil)) si = +1.0;
if(TMath::AreEqualAbs(ang[2],270.,epsil)) si = -1.0;
if(TMath::AreEqualAbs(ang[2],0.,epsil) || TMath::AreEqualAbs(ang[2],180.,epsil)) si = 0.0;
lr[3] = si * TMath::Cos(c*ang[3]);
lr[4] = si * TMath::Sin(c*ang[3]);
lr[5] = TMath::Cos(c*ang[2]);
if(TMath::AreEqualAbs(ang[2],90.,epsil) || TMath::AreEqualAbs(ang[2],270.,epsil)) lr[5] = 0.0;
if(TMath::AreEqualAbs(ang[2],0.,epsil)) lr[5] = +1.0;
if(TMath::AreEqualAbs(ang[2],180.,epsil)) lr[5] = -1.0;
si = TMath::Sin(c*ang[4]);
if(TMath::AreEqualAbs(ang[4],90.,epsil)) si = +1.0;
if(TMath::AreEqualAbs(ang[4],270.0,epsil)) si = -1.0;
if(TMath::AreEqualAbs(ang[4],0.,epsil)|| TMath::AreEqualAbs(ang[4],180.,epsil)) si = 0.0;
lr[6] = si * TMath::Cos(c*ang[5]);
lr[7] = si * TMath::Sin(c*ang[5]);
lr[8] = TMath::Cos(c*ang[4]);
if(TMath::AreEqualAbs(ang[4],90.0,epsil) ||TMath::AreEqualAbs(ang[4],270.,epsil)) lr[8] = 0.0;
if(TMath::AreEqualAbs(ang[4],0.,epsil)) lr[8] = +1.0;
if(TMath::AreEqualAbs(ang[4],180.0,epsil)) lr[8] = -1.0;
for(i=0;i<3;i++){
si = 0.0;
for(j=0;j<3;j++) si += lr[3*i+j]*lr[3*i+j];
si = TMath::Sqrt(1./si);
for(j=0;j<3;j++) fm[i][j] = si*lr[3*i+j];
}
this->AngleFromMatrix();
}
AliITSgeomMatrix::AliITSgeomMatrix(const Double_t rotd[6],
Int_t idt,const Int_t id[3],
const Double_t tran[3]):
TObject(),
fDetectorIndex(idt),
fid(),
frot(),
ftran(),
fCylR(0.0),
fCylPhi(0.0),
fm(),
fPath(){
/*
<img src="picts/ITS/AliITSgeomMatrix_L1.gif">
*/
//End_Html
Int_t i;
for(i=0;i<3;i++){
fid[i] = id[i];
ftran[i] = tran[i];
}
fCylR = TMath::Sqrt(ftran[0]*ftran[0]+ftran[1]*ftran[1]);
fCylPhi = TMath::ATan2(ftran[1],ftran[0]);
if(fCylPhi<0.0) fCylPhi += 2.*TMath::Pi();
this->MatrixFromSixAngles(rotd);
}
void AliITSgeomMatrix::AngleFromMatrix(){
Double_t rx,ry,rz;
rx = TMath::ATan2(fm[2][1],fm[2][2]);if(rx<0.0) rx += 2.0*TMath::Pi();
ry = TMath::ASin(-fm[0][2]); if(ry<0.0) ry += 2.0*TMath::Pi();
rz = TMath::ATan2(fm[1][0],fm[0][0]);if(rz<0.0) rz += 2.0*TMath::Pi();
frot[0] = rx;
frot[1] = ry;
frot[2] = rz;
return;
}
void AliITSgeomMatrix::MatrixFromAngle(){
Double_t sx,sy,sz,cx,cy,cz;
sx = TMath::Sin(frot[0]); cx = TMath::Cos(frot[0]);
sy = TMath::Sin(frot[1]); cy = TMath::Cos(frot[1]);
sz = TMath::Sin(frot[2]); cz = TMath::Cos(frot[2]);
fm[0][0] = +cz*cy;
fm[0][1] = +cz*sy*sx - sz*cx;
fm[0][2] = +cz*sy*cx + sz*sx;
fm[1][0] = +sz*cy;
fm[1][1] = +sz*sy*sx + cz*cx;
fm[1][2] = +sz*sy*cx - cz*sx;
fm[2][0] = -sy;
fm[2][1] = +cy*sx;
fm[2][2] = +cy*cx;
}
void AliITSgeomMatrix::SetEulerAnglesChi(const Double_t ang[3]){
Double_t s0,s1,s2,c0,c1,c2;
s0 = TMath::Sin(ang[0]); c0 = TMath::Cos(ang[0]);
s1 = TMath::Sin(ang[1]); c1 = TMath::Cos(ang[1]);
s2 = TMath::Sin(ang[2]); c2 = TMath::Cos(ang[2]);
fm[0][0] = +c2*c0-c1*s0*s2;
fm[0][1] = +c2*s0+c1*c0*s2;
fm[0][2] = +s2*s1;
fm[1][0] = -s2*c0-c1*s0*c2;
fm[1][1] = -s2*s0+c1*c0*c2;
fm[1][2] = +c2*s1;
fm[2][0] = s1*s0;
fm[2][1] = -s1*c0;
fm[2][2] = +c1;
AngleFromMatrix();
return ;
}
void AliITSgeomMatrix::GtoLPosition(const Double_t g0[3],Double_t l[3]) const {
Int_t i,j;
Double_t g[3];
for(i=0;i<3;i++) g[i] = g0[i] - ftran[i];
for(i=0;i<3;i++){
l[i] = 0.0;
for(j=0;j<3;j++) l[i] += fm[i][j]*g[j];
}
return;
}
void AliITSgeomMatrix::LtoGPosition(const Double_t l[3],Double_t g[3]) const {
Int_t i,j;
for(i=0;i<3;i++){
g[i] = 0.0;
for(j=0;j<3;j++) g[i] += fm[j][i]*l[j];
g[i] += ftran[i];
}
return;
}
void AliITSgeomMatrix::GtoLMomentum(const Double_t g[3],Double_t l[3]) const{
Int_t i,j;
for(i=0;i<3;i++){
l[i] = 0.0;
for(j=0;j<3;j++) l[i] += fm[i][j]*g[j];
}
return;
}
void AliITSgeomMatrix::LtoGMomentum(const Double_t l[3],Double_t g[3]) const {
Int_t i,j;
for(i=0;i<3;i++){
g[i] = 0.0;
for(j=0;j<3;j++) g[i] += fm[j][i]*l[j];
}
return;
}
void AliITSgeomMatrix::GtoLPositionError(const Double_t g[3][3],
Double_t l[3][3]) const {
Int_t i,j,k,m;
for(i=0;i<3;i++)for(m=0;m<3;m++){
l[i][m] = 0.0;
for(j=0;j<3;j++)for(k=0;k<3;k++)
l[i][m] += fm[j][i]*g[j][k]*fm[k][m];
}
return;
}
void AliITSgeomMatrix::LtoGPositionError(const Double_t l[3][3],
Double_t g[3][3]) const {
Int_t i,j,k,m;
for(i=0;i<3;i++)for(m=0;m<3;m++){
g[i][m] = 0.0;
for(j=0;j<3;j++)for(k=0;k<3;k++)
g[i][m] += fm[i][j]*l[j][k]*fm[m][k];
}
return;
}
void AliITSgeomMatrix::GtoLPositionTracking(const Double_t g[3],
Double_t l[3]) const {
/*
<img src="picts/ITS/AliITSgeomMatrix_T1.gif">
*/
//End_Html
Double_t l0[3];
this->GtoLPosition(g,l0);
if(fid[0]==1){
l[0] = +l0[1];
l[1] = -l0[0];
l[2] = +l0[2];
}else{
l[0] = -l0[1];
l[1] = +l0[0];
l[2] = +l0[2];
}
return;
}
void AliITSgeomMatrix::LtoGPositionTracking(const Double_t l[3],
Double_t g[3]) const {
/*
<img src="picts/ITS/AliITSgeomMatrix_T1.gif">
*/
//End_Html
Double_t l0[3];
if(fid[0]==1){
l0[0] = -l[1];
l0[1] = +l[0];
l0[2] = +l[2];
}else{
l0[0] = +l[1];
l0[1] = -l[0];
l0[2] = +l[2];
}
this->LtoGPosition(l0,g);
return;
}
void AliITSgeomMatrix::GtoLMomentumTracking(const Double_t g[3],
Double_t l[3]) const {
/*
<img src="picts/ITS/AliITSgeomMatrix_T1.gif">
*/
//End_Html
Double_t l0[3];
this->GtoLMomentum(g,l0);
if(fid[0]==1){
l[0] = +l0[1];
l[1] = -l0[0];
l[2] = +l0[2];
}else{
l[0] = -l0[1];
l[1] = +l0[0];
l[2] = +l0[2];
}
return;
}
void AliITSgeomMatrix::LtoGMomentumTracking(const Double_t l[3],
Double_t g[3]) const {
/*
<img src="picts/ITS/AliITSgeomMatrix_T1.gif">
*/
//End_Html
Double_t l0[3];
if(fid[0]==1){
l0[0] = -l[1];
l0[1] = +l[0];
l0[2] = +l[2];
}else{
l0[0] = +l[1];
l0[1] = -l[0];
l0[2] = +l[2];
}
this->LtoGMomentum(l0,g);
return;
}
void AliITSgeomMatrix::GtoLPositionErrorTracking(const Double_t g[3][3],
Double_t l[3][3]) const {
/*
<img src="picts/ITS/AliITSgeomMatrix_TE1.gif">
*/
//End_Html
Int_t i,j,k,m;
Double_t rt[3][3];
Double_t a0[3][3] = {{0.,+1.,0.},{-1.,0.,0.},{0.,0.,+1.}};
Double_t a1[3][3] = {{0.,-1.,0.},{+1.,0.,0.},{0.,0.,+1.}};
if(fid[0]==1) for(i=0;i<3;i++)for(j=0;j<3;j++)for(k=0;k<3;k++)
rt[i][k] = a0[i][j]*fm[j][k];
else for(i=0;i<3;i++)for(j=0;j<3;j++)for(k=0;k<3;k++)
rt[i][k] = a1[i][j]*fm[j][k];
for(i=0;i<3;i++)for(m=0;m<3;m++){
l[i][m] = 0.0;
for(j=0;j<3;j++)for(k=0;k<3;k++)
l[i][m] += rt[j][i]*g[j][k]*rt[k][m];
}
return;
}
void AliITSgeomMatrix::LtoGPositionErrorTracking(const Double_t l[3][3],
Double_t g[3][3]) const {
/*
<img src="picts/ITS/AliITSgeomMatrix_TE1.gif">
*/
//End_Html
Int_t i,j,k,m;
Double_t rt[3][3];
Double_t a0[3][3] = {{0.,+1.,0.},{-1.,0.,0.},{0.,0.,+1.}};
Double_t a1[3][3] = {{0.,-1.,0.},{+1.,0.,0.},{0.,0.,+1.}};
if(fid[0]==1) for(i=0;i<3;i++)for(j=0;j<3;j++)for(k=0;k<3;k++)
rt[i][k] = a0[i][j]*fm[j][k];
else for(i=0;i<3;i++)for(j=0;j<3;j++)for(k=0;k<3;k++)
rt[i][k] = a1[i][j]*fm[j][k];
for(i=0;i<3;i++)for(m=0;m<3;m++){
g[i][m] = 0.0;
for(j=0;j<3;j++)for(k=0;k<3;k++)
g[i][m] += rt[i][j]*l[j][k]*rt[m][k];
}
return;
}
void AliITSgeomMatrix::PrintTitles(ostream *os) const {
Int_t i,j;
*os << "fDetectorIndex=" << fDetectorIndex << " fid[3]={";
for(i=0;i<3;i++) *os << fid[i] << " ";
*os << "} frot[3]={";
for(i=0;i<3;i++) *os << frot[i] << " ";
*os << "} ftran[3]={";
for(i=0;i<3;i++) *os << ftran[i] << " ";
*os << "} fm[3][3]={";
for(i=0;i<3;i++){for(j=0;j<3;j++){ *os << fm[i][j] << " ";} *os <<"}{";}
*os << "}" << endl;
return;
}
void AliITSgeomMatrix::PrintComment(ostream *os) const {
*os << "fDetectorIndex fid[0] fid[1] fid[2] ftran[0] ftran[1] ftran[2] ";
*os << "fm[0][0] fm[0][1] fm[0][2] fm[1][0] fm[1][1] fm[1][2] ";
*os << "fm[2][0] fm[2][1] fm[2][2] ";
return;
}
void AliITSgeomMatrix::Print(ostream *os)const{
Int_t i,j;
#if defined __GNUC__
#if __GNUC__ > 2
ios::fmtflags fmt;
#else
Int_t fmt;
#endif
#else
#if defined __ICC || defined __ECC || defined __xlC__
ios::fmtflags fmt;
#else
Int_t fmt;
#endif
#endif
fmt = os->setf(ios::scientific);
*os << fDetectorIndex << " ";
for(i=0;i<3;i++) *os << fid[i] << " ";
for(i=0;i<3;i++) *os << setprecision(16) << ftran[i] << " ";
for(i=0;i<3;i++)for(j=0;j<3;j++) *os << setprecision(16) <<
fm[i][j] << " ";
*os << fPath.Length()<< " ";
for(i=0;i<fPath.Length();i++) *os << fPath[i];
*os << endl;
os->flags(fmt);
return;
}
void AliITSgeomMatrix::Read(istream *is){
Int_t i,j;
const Int_t kMxVal=10000;
*is >> fDetectorIndex;
for(i=0;i<3;i++) *is >> fid[i];
for(i=0;i<3;i++) *is >> ftran[i];
for(i=0;i<3;i++)for(j=0;j<3;j++) *is >> fm[i][j];
while(is->peek()==' ')is->get();
if(isprint(is->peek())){
*is >> j;
if(j>kMxVal || j<0){
AliError(Form("j> %d",kMxVal));
return;
}
fPath.Resize(j);
for(i=0;i<j;i++) {*is >> fPath[i];}
}
AngleFromMatrix();
fCylR = TMath::Sqrt(ftran[0]*ftran[0]+ftran[1]*ftran[1]);
fCylPhi = TMath::ATan2(ftran[1],ftran[0]);
if(fCylPhi<0.0) fCylPhi += 2.*TMath::Pi();
return;
}
void AliITSgeomMatrix::Streamer(TBuffer &R__b){
if (R__b.IsReading()) {
AliITSgeomMatrix::Class()->ReadBuffer(R__b, this);
fCylR = TMath::Sqrt(ftran[0]*ftran[0]+ftran[1]*ftran[1]);
fCylPhi = TMath::ATan2(ftran[1],ftran[0]);
this->AngleFromMatrix();
if(fCylPhi<0.0) fCylPhi += 2.*TMath::Pi();
} else {
AliITSgeomMatrix::Class()->WriteBuffer(R__b, this);
}
}
void AliITSgeomMatrix::SetTranslation(const Double_t tran[3]){
for(Int_t i=0;i<3;i++) ftran[i] = tran[i];
fCylR = TMath::Sqrt(ftran[0]*ftran[0]+ftran[1]*ftran[1]);
fCylPhi = TMath::ATan2(ftran[1],ftran[0]);
if(fCylPhi<0.0) fCylPhi += 2.*TMath::Pi();
}
TPolyLine3D* AliITSgeomMatrix::CreateLocalAxis() const {
Float_t gf[15];
Double_t g[5][3];
Double_t l[5][3]={{1.0,0.0,0.0},{0.0,0.0,0.0},{0.0,1.0,0.0},{0.0,0.0,0.0},
{0.0,0.0,1.0}};
Int_t i;
for(i=0;i<5;i++) {
LtoGPosition(l[i],g[i]);
gf[3*i]=(Float_t)g[i][0];
gf[3*i+1]=(Float_t)g[i][1];
gf[3*i+2]=(Float_t)g[i][2];
}
return new TPolyLine3D(5,gf);
}
TPolyLine3D* AliITSgeomMatrix::CreateLocalAxisTracking() const {
Float_t gf[15];
Double_t g[5][3];
Double_t l[5][3]={{1.0,0.0,0.0},{0.0,0.0,0.0},{0.0,1.0,0.0},{0.0,0.0,0.0},
{0.0,0.0,1.0}};
Int_t i;
for(i=0;i<5;i++) {
LtoGPositionTracking(l[i],g[i]);
gf[3*i]=(Float_t)g[i][0];
gf[3*i+1]=(Float_t)g[i][1];
gf[3*i+2]=(Float_t)g[i][2];
}
return new TPolyLine3D(5,gf);
}
TNode* AliITSgeomMatrix::CreateNode(const Char_t *nodeName,
const Char_t *nodeTitle,TNode *mother,
TShape *shape,Bool_t axis) const {
Double_t trans[3],matrix[3][3],*matr;
TRotMatrix *rot = new TRotMatrix();
TString name,title;
matr = &(matrix[0][0]);
this->GetTranslation(trans);
this->GetMatrix(matrix);
rot->SetMatrix(matr);
name = nodeName;
title = nodeTitle;
mother->cd();
TNode *node1 = new TNode(name.Data(),title.Data(),shape,
trans[0],trans[1],trans[2],rot);
if(axis){
Int_t i,j;
const Float_t kScale=0.5,kLw=0.2;
Float_t xchar[13][2]={
{static_cast<Float_t>(0.5*kLw),1.},{0.,static_cast<Float_t>(0.5*kLw)},{static_cast<Float_t>(0.5-0.5*kLw),0.5},
{0.,static_cast<Float_t>(0.5*kLw)},{static_cast<Float_t>(0.5*kLw),0.},{0.5,static_cast<Float_t>(0.5-0.5*kLw)},
{static_cast<Float_t>(1-0.5*kLw),0.},{1.,static_cast<Float_t>(0.5*kLw)},{static_cast<Float_t>(0.5+0.5*kLw),0.5},
{1.,static_cast<Float_t>(1.-0.5*kLw)},{static_cast<Float_t>(1.-0.5*kLw),1.},{0.5,static_cast<Float_t>(0.5+0.5*kLw)},
{static_cast<Float_t>(0.5*kLw),1.}};
Float_t ychar[10][2]={
{static_cast<Float_t>(.5-0.5*kLw),0.},{static_cast<Float_t>(.5+0.5*kLw),0.},{static_cast<Float_t>(.5+0.5*kLw),static_cast<Float_t>(0.5-0.5*kLw)},
{1.,static_cast<Float_t>(1.-0.5*kLw)},{static_cast<Float_t>(1.-0.5*kLw),1.},{static_cast<Float_t>(0.5+0.5*kLw),0.5},
{static_cast<Float_t>(0.5*kLw),1.} ,{0.,static_cast<Float_t>(1-0.5*kLw)} ,{static_cast<Float_t>(0.5-0.5*kLw),0.5},
{static_cast<Float_t>(.5-0.5*kLw),0.}};
Float_t zchar[11][2]={
{0.,1.},{0,static_cast<Float_t>(1.-kLw)},{static_cast<Float_t>(1.-kLw),static_cast<Float_t>(1.-kLw)},{0.,kLw} ,{0.,0.},
{1.,0.},{1.,kLw} ,{kLw,kLw} ,{1.,static_cast<Float_t>(1.-kLw)},{1.,1.},
{0.,1.}};
for(i=0;i<13;i++)for(j=0;j<2;j++){
if(i<13) xchar[i][j] = kScale*xchar[i][j];
if(i<10) ychar[i][j] = kScale*ychar[i][j];
if(i<11) zchar[i][j] = kScale*zchar[i][j];
}
TXTRU *axisxl = new TXTRU("x","x","text",12,2);
for(i=0;i<12;i++) axisxl->DefineVertex(i,xchar[i][0],xchar[i][1]);
axisxl->DefineSection(0,-0.5*kLw);axisxl->DefineSection(1,0.5*kLw);
TXTRU *axisyl = new TXTRU("y","y","text",9,2);
for(i=0;i<9;i++) axisyl->DefineVertex(i,ychar[i][0],ychar[i][1]);
axisyl->DefineSection(0,-0.5*kLw);axisyl->DefineSection(1,0.5*kLw);
TXTRU *axiszl = new TXTRU("z","z","text",10,2);
for(i=0;i<10;i++) axiszl->DefineVertex(i,zchar[i][0],zchar[i][1]);
axiszl->DefineSection(0,-0.5*kLw);axiszl->DefineSection(1,0.5*kLw);
Float_t lxy[13][2]={
{static_cast<Float_t>(-0.5*kLw),static_cast<Float_t>(-0.5*kLw)},{0.8,static_cast<Float_t>(-0.5*kLw)},{0.8,-0.1},{1.0,0.0},
{0.8,0.1},{0.8,static_cast<Float_t>(0.5*kLw)},{static_cast<Float_t>(0.5*kLw),static_cast<Float_t>(0.5*kLw)},{static_cast<Float_t>(0.5*kLw),0.8},
{0.1,0.8},{0.0,1.0},{-0.1,0.8},{static_cast<Float_t>(-0.5*kLw),0.8},
{static_cast<Float_t>(-0.5*kLw),static_cast<Float_t>(-0.5*kLw)}};
TXTRU *axisxy = new TXTRU("axisxy","axisxy","text",13,2);
for(i=0;i<13;i++) axisxy->DefineVertex(i,lxy[i][0],lxy[i][1]);
axisxy->DefineSection(0,-0.5*kLw);axisxy->DefineSection(1,0.5*kLw);
Float_t lz[8][2]={
{static_cast<Float_t>(0.5*kLw),static_cast<Float_t>(-0.5*kLw)},{0.8,static_cast<Float_t>(-0.5*kLw)},{0.8,-0.1},{1.0,0.0},
{0.8,0.1},{0.8,static_cast<Float_t>(0.5*kLw)},{static_cast<Float_t>(0.5*kLw),static_cast<Float_t>(0.5*kLw)},
{static_cast<Float_t>(0.5*kLw),static_cast<Float_t>(-0.5*kLw)}};
TXTRU *axisz = new TXTRU("axisz","axisz","text",8,2);
for(i=0;i<8;i++) axisz->DefineVertex(i,lz[i][0],lz[i][1]);
axisz->DefineSection(0,-0.5*kLw);axisz->DefineSection(1,0.5*kLw);
TRotMatrix *yaxis90= new TRotMatrix("yaixis90","", 0.0,90.0, 0.0);
TRotMatrix *zaxis90= new TRotMatrix("zaixis90","", 0.0, 0.0,90.0);
node1->cd();
title = name.Append("axisxy");
TNode *nodeaxy = new TNode(title.Data(),title.Data(),axisxy);
title = name.Append("axisz");
TNode *nodeaz = new TNode(title.Data(),title.Data(),axisz,
0.,0.,0.,yaxis90);
TNode *textboxX0 = new TNode("textboxX0","textboxX0",axisxl,
lxy[3][0],lxy[3][1],0.0);
TNode *textboxX1 = new TNode("textboxX1","textboxX1",axisxl,
lxy[3][0],lxy[3][1],0.0,yaxis90);
TNode *textboxX2 = new TNode("textboxX2","textboxX2",axisxl,
lxy[3][0],lxy[3][1],0.0,zaxis90);
TNode *textboxY0 = new TNode("textboxY0","textboxY0",axisyl,
lxy[9][0],lxy[9][1],0.0);
TNode *textboxY1 = new TNode("textboxY1","textboxY1",axisyl,
lxy[9][0],lxy[9][1],0.0,yaxis90);
TNode *textboxY2 = new TNode("textboxY2","textboxY2",axisyl,
lxy[9][0],lxy[9][1],0.0,zaxis90);
TNode *textboxZ0 = new TNode("textboxZ0","textboxZ0",axiszl,
0.0,0.0,lz[3][0]);
TNode *textboxZ1 = new TNode("textboxZ1","textboxZ1",axiszl,
0.0,0.0,lz[3][0],yaxis90);
TNode *textboxZ2 = new TNode("textboxZ2","textboxZ2",axiszl,
0.0,0.0,lz[3][0],zaxis90);
nodeaxy->Draw();
nodeaz->Draw();
textboxX0->Draw();
textboxX1->Draw();
textboxX2->Draw();
textboxY0->Draw();
textboxY1->Draw();
textboxY2->Draw();
textboxZ0->Draw();
textboxZ1->Draw();
textboxZ2->Draw();
}
mother->cd();
return node1;
}
void AliITSgeomMatrix::MakeFigures() const {
const Double_t kDx0=550.,kDy0=550.,kDz0=550.;
const Double_t kDx=1.0,kDy=0.300,kDz=3.0,kRmax=0.1;
Float_t l[5][3]={{1.0,0.0,0.0},{0.0,0.0,0.0},{0.0,1.0,0.0},{0.0,0.0,0.0},
{0.0,0.0,1.0}};
TCanvas *c = new TCanvas(kFALSE);
#if ROOT_VERSION_CODE>= 331523
Double_t rmin[]={-1,-1,-1};
Double_t rmax[]={ 1, 1, 1};
TView *view = new TView3D(1,rmin,rmax);
#else
TView *view = new TView(1);
#endif
TBRIK *mother = new TBRIK("Mother","Mother","void",kDx0,kDy0,kDz0);
TBRIK *det = new TBRIK("Detector","","Si",kDx,kDy,kDz);
TPolyLine3D *axis = new TPolyLine3D(5,&(l[0][0]));
TPCON *arrow = new TPCON("arrow","","air",0.0,360.,2);
TRotMatrix *xarrow= new TRotMatrix("xarrow","",90.,0.0,0.0);
TRotMatrix *yarrow= new TRotMatrix("yarrow","",0.0,90.,0.0);
det->SetLineColor(0);
det->SetLineStyle(1);
det->SetLineWidth(2);
det->SetFillColor(1);
det->SetFillStyle(4010);
arrow->SetLineColor(det->GetLineColor());
arrow->SetLineWidth(det->GetLineWidth());
arrow->SetLineStyle(det->GetLineStyle());
arrow->SetFillColor(1);
arrow->SetFillStyle(4100);
arrow->DefineSection(0,0.0,0.0,kRmax);
arrow->DefineSection(1,2.*kRmax,0.0,0.0);
view->SetRange(-kDx0,-kDy0,-kDz0,kDx0,kDy0,kDz0);
TNode *node0 = new TNode("NODE0","NODE0",mother);
node0->cd();
TNode *node1 = new TNode("NODE1","NODE1",det);
node1->cd();
TNode *nodex = new TNode("NODEx","NODEx",arrow,
l[0][0],l[0][1],l[0][2],xarrow);
TNode *nodey = new TNode("NODEy","NODEy",arrow,
l[2][0],l[2][1],l[2][2],yarrow);
TNode *nodez = new TNode("NODEz","NODEz",arrow,l[4][0],l[4][1],l[4][2]);
axis->Draw();
nodex->Draw();
nodey->Draw();
nodez->Draw();
node0->cd();
node0->Draw();
c->Update();
c->SaveAs("AliITSgeomMatrix_L1.gif");
}
ostream &operator<<(ostream &os,AliITSgeomMatrix &p){
p.Print(&os);
return os;
}
istream &operator>>(istream &is,AliITSgeomMatrix &r){
r.Read(&is);
return is;
}
AliITSgeomMatrix.cxx:1000 AliITSgeomMatrix.cxx:1001 AliITSgeomMatrix.cxx:1002 AliITSgeomMatrix.cxx:1003 AliITSgeomMatrix.cxx:1004 AliITSgeomMatrix.cxx:1005 AliITSgeomMatrix.cxx:1006 AliITSgeomMatrix.cxx:1007 AliITSgeomMatrix.cxx:1008 AliITSgeomMatrix.cxx:1009 AliITSgeomMatrix.cxx:1010 AliITSgeomMatrix.cxx:1011 AliITSgeomMatrix.cxx:1012 AliITSgeomMatrix.cxx:1013 AliITSgeomMatrix.cxx:1014 AliITSgeomMatrix.cxx:1015 AliITSgeomMatrix.cxx:1016 AliITSgeomMatrix.cxx:1017 AliITSgeomMatrix.cxx:1018 AliITSgeomMatrix.cxx:1019 AliITSgeomMatrix.cxx:1020 AliITSgeomMatrix.cxx:1021 AliITSgeomMatrix.cxx:1022 AliITSgeomMatrix.cxx:1023 AliITSgeomMatrix.cxx:1024 AliITSgeomMatrix.cxx:1025 AliITSgeomMatrix.cxx:1026 AliITSgeomMatrix.cxx:1027 AliITSgeomMatrix.cxx:1028 AliITSgeomMatrix.cxx:1029 AliITSgeomMatrix.cxx:1030 AliITSgeomMatrix.cxx:1031 AliITSgeomMatrix.cxx:1032 AliITSgeomMatrix.cxx:1033 AliITSgeomMatrix.cxx:1034 AliITSgeomMatrix.cxx:1035 AliITSgeomMatrix.cxx:1036 AliITSgeomMatrix.cxx:1037 AliITSgeomMatrix.cxx:1038 AliITSgeomMatrix.cxx:1039 AliITSgeomMatrix.cxx:1040 AliITSgeomMatrix.cxx:1041 AliITSgeomMatrix.cxx:1042 AliITSgeomMatrix.cxx:1043 AliITSgeomMatrix.cxx:1044 AliITSgeomMatrix.cxx:1045 AliITSgeomMatrix.cxx:1046 AliITSgeomMatrix.cxx:1047 AliITSgeomMatrix.cxx:1048 AliITSgeomMatrix.cxx:1049 AliITSgeomMatrix.cxx:1050 AliITSgeomMatrix.cxx:1051 AliITSgeomMatrix.cxx:1052 AliITSgeomMatrix.cxx:1053 AliITSgeomMatrix.cxx:1054 AliITSgeomMatrix.cxx:1055 AliITSgeomMatrix.cxx:1056 AliITSgeomMatrix.cxx:1057 AliITSgeomMatrix.cxx:1058 AliITSgeomMatrix.cxx:1059 AliITSgeomMatrix.cxx:1060 AliITSgeomMatrix.cxx:1061 AliITSgeomMatrix.cxx:1062 AliITSgeomMatrix.cxx:1063 AliITSgeomMatrix.cxx:1064 AliITSgeomMatrix.cxx:1065 AliITSgeomMatrix.cxx:1066 AliITSgeomMatrix.cxx:1067 AliITSgeomMatrix.cxx:1068 AliITSgeomMatrix.cxx:1069 AliITSgeomMatrix.cxx:1070 AliITSgeomMatrix.cxx:1071 AliITSgeomMatrix.cxx:1072 AliITSgeomMatrix.cxx:1073 AliITSgeomMatrix.cxx:1074 AliITSgeomMatrix.cxx:1075 AliITSgeomMatrix.cxx:1076 AliITSgeomMatrix.cxx:1077 AliITSgeomMatrix.cxx:1078 AliITSgeomMatrix.cxx:1079 AliITSgeomMatrix.cxx:1080 AliITSgeomMatrix.cxx:1081 AliITSgeomMatrix.cxx:1082 AliITSgeomMatrix.cxx:1083 AliITSgeomMatrix.cxx:1084 AliITSgeomMatrix.cxx:1085 AliITSgeomMatrix.cxx:1086 AliITSgeomMatrix.cxx:1087 AliITSgeomMatrix.cxx:1088 AliITSgeomMatrix.cxx:1089 AliITSgeomMatrix.cxx:1090 AliITSgeomMatrix.cxx:1091 AliITSgeomMatrix.cxx:1092 AliITSgeomMatrix.cxx:1093 AliITSgeomMatrix.cxx:1094 AliITSgeomMatrix.cxx:1095 AliITSgeomMatrix.cxx:1096 AliITSgeomMatrix.cxx:1097 AliITSgeomMatrix.cxx:1098 AliITSgeomMatrix.cxx:1099 AliITSgeomMatrix.cxx:1100 AliITSgeomMatrix.cxx:1101 AliITSgeomMatrix.cxx:1102 AliITSgeomMatrix.cxx:1103 AliITSgeomMatrix.cxx:1104 AliITSgeomMatrix.cxx:1105 AliITSgeomMatrix.cxx:1106 AliITSgeomMatrix.cxx:1107 AliITSgeomMatrix.cxx:1108 AliITSgeomMatrix.cxx:1109 AliITSgeomMatrix.cxx:1110 AliITSgeomMatrix.cxx:1111 AliITSgeomMatrix.cxx:1112 AliITSgeomMatrix.cxx:1113 AliITSgeomMatrix.cxx:1114 AliITSgeomMatrix.cxx:1115 AliITSgeomMatrix.cxx:1116 AliITSgeomMatrix.cxx:1117 AliITSgeomMatrix.cxx:1118 AliITSgeomMatrix.cxx:1119 AliITSgeomMatrix.cxx:1120 AliITSgeomMatrix.cxx:1121 AliITSgeomMatrix.cxx:1122 AliITSgeomMatrix.cxx:1123 AliITSgeomMatrix.cxx:1124 AliITSgeomMatrix.cxx:1125 AliITSgeomMatrix.cxx:1126 AliITSgeomMatrix.cxx:1127 AliITSgeomMatrix.cxx:1128 AliITSgeomMatrix.cxx:1129 AliITSgeomMatrix.cxx:1130 AliITSgeomMatrix.cxx:1131 AliITSgeomMatrix.cxx:1132 AliITSgeomMatrix.cxx:1133 AliITSgeomMatrix.cxx:1134 AliITSgeomMatrix.cxx:1135 AliITSgeomMatrix.cxx:1136 AliITSgeomMatrix.cxx:1137 AliITSgeomMatrix.cxx:1138 AliITSgeomMatrix.cxx:1139 AliITSgeomMatrix.cxx:1140 AliITSgeomMatrix.cxx:1141 AliITSgeomMatrix.cxx:1142 AliITSgeomMatrix.cxx:1143 AliITSgeomMatrix.cxx:1144 AliITSgeomMatrix.cxx:1145 AliITSgeomMatrix.cxx:1146 AliITSgeomMatrix.cxx:1147 AliITSgeomMatrix.cxx:1148 AliITSgeomMatrix.cxx:1149 AliITSgeomMatrix.cxx:1150 AliITSgeomMatrix.cxx:1151 AliITSgeomMatrix.cxx:1152 AliITSgeomMatrix.cxx:1153 AliITSgeomMatrix.cxx:1154 AliITSgeomMatrix.cxx:1155 AliITSgeomMatrix.cxx:1156 AliITSgeomMatrix.cxx:1157 AliITSgeomMatrix.cxx:1158 AliITSgeomMatrix.cxx:1159 AliITSgeomMatrix.cxx:1160 AliITSgeomMatrix.cxx:1161 AliITSgeomMatrix.cxx:1162 AliITSgeomMatrix.cxx:1163 AliITSgeomMatrix.cxx:1164 AliITSgeomMatrix.cxx:1165 AliITSgeomMatrix.cxx:1166 AliITSgeomMatrix.cxx:1167 AliITSgeomMatrix.cxx:1168 AliITSgeomMatrix.cxx:1169 AliITSgeomMatrix.cxx:1170 AliITSgeomMatrix.cxx:1171 AliITSgeomMatrix.cxx:1172 AliITSgeomMatrix.cxx:1173 AliITSgeomMatrix.cxx:1174 AliITSgeomMatrix.cxx:1175 AliITSgeomMatrix.cxx:1176 AliITSgeomMatrix.cxx:1177 AliITSgeomMatrix.cxx:1178 AliITSgeomMatrix.cxx:1179 AliITSgeomMatrix.cxx:1180 AliITSgeomMatrix.cxx:1181 AliITSgeomMatrix.cxx:1182 AliITSgeomMatrix.cxx:1183 AliITSgeomMatrix.cxx:1184 AliITSgeomMatrix.cxx:1185 AliITSgeomMatrix.cxx:1186 AliITSgeomMatrix.cxx:1187 AliITSgeomMatrix.cxx:1188 AliITSgeomMatrix.cxx:1189 AliITSgeomMatrix.cxx:1190 AliITSgeomMatrix.cxx:1191 AliITSgeomMatrix.cxx:1192 AliITSgeomMatrix.cxx:1193 AliITSgeomMatrix.cxx:1194 AliITSgeomMatrix.cxx:1195 AliITSgeomMatrix.cxx:1196 AliITSgeomMatrix.cxx:1197 AliITSgeomMatrix.cxx:1198 AliITSgeomMatrix.cxx:1199 AliITSgeomMatrix.cxx:1200 AliITSgeomMatrix.cxx:1201 AliITSgeomMatrix.cxx:1202 AliITSgeomMatrix.cxx:1203 AliITSgeomMatrix.cxx:1204 AliITSgeomMatrix.cxx:1205 AliITSgeomMatrix.cxx:1206 AliITSgeomMatrix.cxx:1207 AliITSgeomMatrix.cxx:1208 AliITSgeomMatrix.cxx:1209 AliITSgeomMatrix.cxx:1210 AliITSgeomMatrix.cxx:1211 AliITSgeomMatrix.cxx:1212 AliITSgeomMatrix.cxx:1213 AliITSgeomMatrix.cxx:1214 AliITSgeomMatrix.cxx:1215 AliITSgeomMatrix.cxx:1216 AliITSgeomMatrix.cxx:1217 AliITSgeomMatrix.cxx:1218 AliITSgeomMatrix.cxx:1219 AliITSgeomMatrix.cxx:1220 AliITSgeomMatrix.cxx:1221 AliITSgeomMatrix.cxx:1222 AliITSgeomMatrix.cxx:1223 AliITSgeomMatrix.cxx:1224 AliITSgeomMatrix.cxx:1225 AliITSgeomMatrix.cxx:1226 AliITSgeomMatrix.cxx:1227 AliITSgeomMatrix.cxx:1228 AliITSgeomMatrix.cxx:1229 AliITSgeomMatrix.cxx:1230 AliITSgeomMatrix.cxx:1231 AliITSgeomMatrix.cxx:1232 AliITSgeomMatrix.cxx:1233 AliITSgeomMatrix.cxx:1234 AliITSgeomMatrix.cxx:1235 AliITSgeomMatrix.cxx:1236 AliITSgeomMatrix.cxx:1237 AliITSgeomMatrix.cxx:1238 AliITSgeomMatrix.cxx:1239 AliITSgeomMatrix.cxx:1240 AliITSgeomMatrix.cxx:1241 AliITSgeomMatrix.cxx:1242