/*
$Log$
-Revision 1.16 2000/03/05 00:11:03 nilsen
-Fixed merge error.
+Revision 1.23 2000/10/02 16:35:23 barbera
+Forward declarations added
-Revision 1.15 2000/02/23 16:25:21 fca
-AliVMC and AliGeant3 classes introduced
-ReadEuclid moved from AliRun to AliModule
+Revision 1.14.4.12 2000/10/02 16:04:03 barbera
+Forward declarations added
+
+Revision 1.22 2000/07/10 16:07:19 fca
+Release version of ITS code
+
+Revision 1.14.4.4 2000/05/19 10:10:21 nilsen
+fix for bug with HP and Sun unix + fix for event display in ITS-working branch
Revision 1.14.4.3 2000/03/04 23:46:38 nilsen
Fixed up the comments/documentation.
#include <TGeometry.h>
#include <TNode.h>
#include <TTUBE.h>
+#include <TFile.h> // only required for Tracking function?
+#include <TCanvas.h>
+#include <TObjArray.h>
+#include <TClonesArray.h>
+#include <TBRIK.h>
#include "AliRun.h"
+#include "AliMC.h"
#include "TSystem.h"
#if ALIITSPRINTGEOM==1
#include "../TGeant3/TGeant3.h"
////////////////////////////////////////////////////////////////////////
// Standard default constructor for the ITS version 5.
////////////////////////////////////////////////////////////////////////
- fId5N = 6;
- fId5Name = new char*[fId5N];
- fId5Name[0] = "ITS1";
- fId5Name[1] = "ITS2";
- fId5Name[2] = "ITS3";
- fId5Name[3] = "ITS4";
- fId5Name[4] = "ITS5";
- fId5Name[5] = "ITS6";
+
+ fIdN = 6;
+ fIdName = new TString[fIdN];
+ fIdName[0] = "ITS1";
+ fIdName[1] = "ITS2";
+ fIdName[2] = "ITS3";
+ fIdName[3] = "ITS4";
+ fIdName[4] = "ITS5";
+ fIdName[5] = "ITS6";
+ fIdSens = new Int_t[fIdN];
+ for (Int_t i=0;i<fIdN;i++) fIdSens[i]=fIdName[i].Length();
+ fMajorVersion = 5;
+}
+//____________________________________________________________________________
+AliITSv5::AliITSv5(const AliITSv5 &source){
+////////////////////////////////////////////////////////////////////////
+// Copy Constructor for ITS version 5.
+////////////////////////////////////////////////////////////////////////
+ if(&source == this) return;
+ printf("Not allowed to copy AliITSv5\n");
+ return;
+}
+//_____________________________________________________________________________
+AliITSv5& AliITSv5::operator=(const AliITSv5 &source){
+////////////////////////////////////////////////////////////////////////
+// Assignment operator for the ITS version 1.
+////////////////////////////////////////////////////////////////////////
+
+ if(&source == this) return *this;
+ printf("Not allowed to copy AliITSv3\n");
+ return *this;
+
}
//_____________________________________________________________________________
AliITSv5::~AliITSv5() {
////////////////////////////////////////////////////////////////////////
// Standard destructor for the ITS version 5.
////////////////////////////////////////////////////////////////////////
- delete [] fId5Name;
}
//_____________________________________________________________________________
AliITSv5::AliITSv5(const char *name, const char *title) : AliITS(name, title){
////////////////////////////////////////////////////////////////////////
// Standard constructor for the ITS version 5.
////////////////////////////////////////////////////////////////////////
- fId5N = 6;
- fId5Name = new char*[fId5N];
- fId5Name[0] = "ITS1";
- fId5Name[1] = "ITS2";
- fId5Name[2] = "ITS3";
- fId5Name[3] = "ITS4";
- fId5Name[4] = "ITS5";
- fId5Name[5] = "ITS6";
+ fIdN = 6;
+ fIdName = new TString[fIdN];
+ fIdName[0] = "ITS1";
+ fIdName[1] = "ITS2";
+ fIdName[2] = "ITS3";
+ fIdName[3] = "ITS4";
+ fIdName[4] = "ITS5";
+ fIdName[5] = "ITS6";
+ fIdSens = new Int_t[fIdN];
+ for (Int_t i=0;i<fIdN;i++) fIdSens[i]=fIdName[i].Length();
+ fMajorVersion = 5;
fEuclidMaterial = "$ALICE_ROOT/Euclid/ITSgeometry_5.tme";
fEuclidGeometry = "$ALICE_ROOT/Euclid/ITSgeometry_5.euc";
}
//_____________________________________________________________________________
void AliITSv5::BuildGeometry(){
+////////////////////////////////////////////////////////////////////////
+// Geometry builder for the ITS version 5.
+////////////////////////////////////////////////////////////////////////
//
// Build ITS TNODE geometry for event display using detailed geometry.
// This function builds a simple ITS geometry used by the ROOT macro
// ITSdisplay.C.
- TNode *Top;
+ TNode *top;
TNode *nd;
- //const int kColorITS_SPD=kRed;
- //const int kColorITS_SDD=kGreen;
- const int kColorITS_SSD=kBlue;
+ //const int kColorITSSPD=kRed;
+ //const int kColorITSSDD=kGreen;
+ const int kColorITSSSD=kBlue;
//
- Top=gAlice->GetGeometry()->GetNode("alice");
+ top=gAlice->GetGeometry()->GetNode("alice");
AliITSgeom *gm = this->GetITSgeom();
+ Int_t lay,lad,det,i;
Text_t name[10];
Float_t xg[3];
Float_t rt[9];
TRotMatrix *rm;
//TCanvas *c1 = new TCanvas("c1","ITS");
- for(Int_t lay=1;lay<=2;lay++)
- for(Int_t lad=1;lad<=gm->GetNladders(lay);lad++)
- for(Int_t det=1;det<=gm->GetNdetectors(lay);det++){
+ for(lay=1;lay<=2;lay++)
+ for(lad=1;lad<=gm->GetNladders(lay);lad++)
+ for(det=1;det<=gm->GetNdetectors(lay);det++){
try {
box = new TBRIK ("ActiveSPD","Active volume of SPD","SPD SI DET",
0.64,0.0075,4.19);
gm->GetTrans(lay,lad,det,xg[0],xg[1],xg[2]);
gm->GetRotMatrix(lay,lad,det,rt);
//sprintf(name,"ROT%1.1d2.2d2.2d",lay,lad,det);
- for(Int_t i=0;i<9;i++) rtd[i] = rt[i];
+ for(i=0;i<9;i++) rtd[i] = rt[i];
try {
rm = new TRotMatrix(name,name,rtd);
} catch (...) {
cout << "EXCEPTION in new TRotMatrix" << endl;
return;
}
- Top->cd();
+ top->cd();
//sprintf(name,"ND%1.1d2.2d2.2d",lay,lad,det);
try {
nd = new TNode("SPD"," ",box,xg[0],xg[1],xg[2],rm);
cout << "EXCEPTION in new TNode" << endl;
return;
}
- nd->SetLineColor(kColorITS_SSD);
+ nd->SetLineColor(kColorITSSSD);
fNodes->Add(nd);
}
- for(Int_t lay=3;lay<=3;lay++)
- for(Int_t lad=1;lad<=gm->GetNladders(lay);lad++)
- for(Int_t det=1;det<=gm->GetNdetectors(lay);det++){
+ for(lay=3;lay<=3;lay++)
+ for(lad=1;lad<=gm->GetNladders(lay);lad++)
+ for(det=1;det<=gm->GetNdetectors(lay);det++){
try {
box = new TBRIK ("ActiveSDD","Active volume of SDD","SDD SI DET",
3.5,0.014,3.763);
gm->GetTrans(lay,lad,det,xg[0],xg[1],xg[2]);
gm->GetRotMatrix(lay,lad,det,rt);
//sprintf(name,"ROT%1.1d2.2d2.2d",lay,lad,det);
- for(Int_t i=0;i<9;i++) rtd[i] = rt[i];
+ for(i=0;i<9;i++) rtd[i] = rt[i];
try {
rm = new TRotMatrix(name,name,rtd);
} catch (...) {
cout << "EXCEPTION in new TRotMatrix" << endl;
return;
}
- Top->cd();
+ top->cd();
//sprintf(name,"ND%1.1d2.2d2.2d",lay,lad,det);
try {
nd = new TNode("SDD"," ",box,xg[0],xg[1],xg[2],rm);
cout << "EXCEPTION in new TNode" << endl;
return;
}
- nd->SetLineColor(kColorITS_SSD);
+ nd->SetLineColor(kColorITSSSD);
fNodes->Add(nd);
}
- for(Int_t lay=4;lay<=4;lay++)
- for(Int_t lad=1;lad<=gm->GetNladders(lay);lad++)
- for(Int_t det=1;det<=gm->GetNdetectors(lay);det++){
+ for(lay=4;lay<=4;lay++)
+ for(lad=1;lad<=gm->GetNladders(lay);lad++)
+ for(det=1;det<=gm->GetNdetectors(lay);det++){
try {
box = new TBRIK ("ActiveSDD","Active volume of SDD","SDD SI DET",
3.5,0.014,3.763);
gm->GetTrans(lay,lad,det,xg[0],xg[1],xg[2]);
gm->GetRotMatrix(lay,lad,det,rt);
//sprintf(name,"ROT%1.1d2.2d2.2d",lay,lad,det);
- for(Int_t i=0;i<9;i++) rtd[i] = rt[i];
+ for(i=0;i<9;i++) rtd[i] = rt[i];
try {
rm = new TRotMatrix(name,name,rtd);
} catch (...) {
cout << "EXCEPTION in new TRotMatrix" << endl;
return;
}
- Top->cd();
+ top->cd();
//sprintf(name,"ND%1.1d2.2d2.2d",lay,lad,det);
try {
nd = new TNode("SDD"," ",box,xg[0],xg[1],xg[2],rm);
cout << "EXCEPTION in new TNode" << endl;
return;
}
- nd->SetLineColor(kColorITS_SSD);
+ nd->SetLineColor(kColorITSSSD);
fNodes->Add(nd);
}
- for(Int_t lay=5;lay<=5;lay++)
- for(Int_t lad=1;lad<=gm->GetNladders(lay);lad++)
- for(Int_t det=1;det<=gm->GetNdetectors(lay);det++){
+ for(lay=5;lay<=5;lay++)
+ for(lad=1;lad<=gm->GetNladders(lay);lad++)
+ for(det=1;det<=gm->GetNdetectors(lay);det++){
try {
box = new TBRIK ("ActiveSSD","Active volume of SSD","SSD SI DET",
3.65,0.015,2.0);
gm->GetTrans(lay,lad,det,xg[0],xg[1],xg[2]);
gm->GetRotMatrix(lay,lad,det,rt);
//sprintf(name,"ROT%1.1d2.2d2.2d",lay,lad,det);
- for(Int_t i=0;i<9;i++) rtd[i] = rt[i];
+ for(i=0;i<9;i++) rtd[i] = rt[i];
try {
rm = new TRotMatrix(name,name,rtd);
} catch (...) {
cout << "EXCEPTION in new TRotMatrix" << endl;
return;
}
- Top->cd();
+ top->cd();
//sprintf(name,"ND%1.1d2.2d2.2d",lay,lad,det);
try {
nd = new TNode("SSD"," ",box,xg[0],xg[1],xg[2],rm);
cout << "EXCEPTION in new TNode" << endl;
return;
}
- nd->SetLineColor(kColorITS_SSD);
+ nd->SetLineColor(kColorITSSSD);
fNodes->Add(nd);
}
- for(Int_t lay=6;lay<=6;lay++)
- for(Int_t lad=1;lad<=gm->GetNladders(lay);lad++)
- for(Int_t det=1;det<=gm->GetNdetectors(lay);det++){
+ for(lay=6;lay<=6;lay++)
+ for(lad=1;lad<=gm->GetNladders(lay);lad++)
+ for(det=1;det<=gm->GetNdetectors(lay);det++){
try {
box = new TBRIK ("ActiveSSD","Active volume of SSD","SSD SI DET",
3.65,0.015,2.0);
gm->GetTrans(lay,lad,det,xg[0],xg[1],xg[2]);
gm->GetRotMatrix(lay,lad,det,rt);
//sprintf(name,"ROT%1.1d2.2d2.2d",lay,lad,det);
- for(Int_t i=0;i<9;i++) rtd[i] = rt[i];
+ for(i=0;i<9;i++) rtd[i] = rt[i];
try {
rm = new TRotMatrix(name,name,rtd);
} catch (...) {
cout << "EXCEPTION in new TRotMatrix" << endl;
return;
}
- Top->cd();
+ top->cd();
//sprintf(name,"ND%1.1d2.2d2.2d",lay,lad,det);
try {
nd = new TNode("SSD"," ",box,xg[0],xg[1],xg[2],rm);
cout << "EXCEPTION in new TNode" << endl;
return;
}
- nd->SetLineColor(kColorITS_SSD);
+ nd->SetLineColor(kColorITSSSD);
fNodes->Add(nd);
}
-}
+}
//_____________________________________________________________________________
void AliITSv5::CreateMaterials(){
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
// Initialise the ITS after it has been created.
////////////////////////////////////////////////////////////////////////
- Int_t i,j,l;
-
- fIdN = fId5N;
- fIdName = new char*[fId5N];
- fIdSens = new Int_t[fId5N];
- for(i=0;i<fId5N;i++) {
- l = strlen(fId5Name[i]);
- fIdName[i] = new char[l+1];
- for(j=0;j<l;j++) fIdName[i][j] = fId5Name[i][j];
- fIdName[i][l] = '\0'; // Null terminate this string.
- } // end for i
AliITS::Init();
fMajorVersion = 5;
// only streams the AliITS class as it is required. Since this class
// dosen't contain any "real" data to be saved, it doesn't.
////////////////////////////////////////////////////////////////////////
+
if (R__b.IsReading()) {
Version_t R__v = R__b.ReadVersion();
if (R__v==1) {
AliITS::Streamer(R__b);
- // This information does not need to be read. It is "hard wired"
- // into this class via its creators.
- //R__b >> fId5N;
- //R__b.ReadArray(fId5Name);
}else{
+ AliITS::Streamer(R__b);
} // end if R__v==1
} else {
R__b.WriteVersion(AliITSv5::IsA());
AliITS::Streamer(R__b);
- // This information does not need to be saved. It is "hard wired"
- // into this class via its creators.
- //R__b << fId5N;
- //R__b.WriteArray(fId5Name, __COUNTER__);
} // end if R__b.IsReading()
}
-