/*
$Log$
-Revision 1.11.4.8 2000/06/12 19:14:40 barbera
-Remove partical transision to new Config.C calling convension. Bug Found.
+Revision 1.21 2000/11/30 11:13:11 barbera
+ Added changes suggested by Federico Carminati on nov, 30, 2000
-Revision 1.11.4.7 2000/06/12 18:15:38 barbera
-fixed posible compilation errors on HP unix. Modifided default constructor
-for use with new calling requirements.
+Revision 1.20 2000/10/07 17:29:51 nilsen
+Blank Line added at end of file to remove a warning for hp compilers
+(Give me a Break!).
-Revision 1.11.4.6 2000/06/11 20:37:41 barbera
-coding convenstion update.
+Revision 1.19 2000/10/05 20:49:59 nilsen
+Now using root generated streamers.
+
+Revision 1.11.4.10 2000/07/31 13:50:51 barbera
+Updated from the release
+
+Revision 1.17 2000/07/10 16:07:19 fca
+Release version of ITS code
Revision 1.11.4.4 2000/05/19 10:09:51 nilsen
fix for bug with HP and Sun unix + fix for event display in ITS-working branch
#include <TFile.h> // only required for Tracking function?
#include <TCanvas.h>
#include <TObjArray.h>
+#include <TObjString.h>
#include <TClonesArray.h>
+#include <TLorentzVector.h>
+#include <TMath.h>
+
#include "AliMC.h"
#include "AliConst.h"
+#include "AliMagF.h"
#include "AliITShit.h"
#include "AliITSv3.h"
#include "AliRun.h"
-#include "AliMC.h"
-#include "AliConst.h"
-
ClassImp(AliITSv3)
//_____________________________________________________________________________
- AliITSv3::AliITSv3()/* : AliITS("ITS","TP version")*/{
+AliITSv3::AliITSv3() {
////////////////////////////////////////////////////////////////////////
// Standard default constructor for the ITS version 3.
////////////////////////////////////////////////////////////////////////
- fId3N = 6;
- fId3Name = new char*[fId3N];
- fId3Name[0] = "ITS1";
- fId3Name[1] = "ITS2";
- fId3Name[2] = "ITS3";
- fId3Name[3] = "ITS4";
- fId3Name[4] = "ITS5";
- fId3Name[5] = "ITS6";
- fMinorVersionV3=1;
- printf("Created ITS TP Detailed version\n");
+
+ fIdN = 0;
+ fIdName = 0;
+ fIdSens = 0;
+ fMajorVersion = 3;
+ fMinorVersion = -1;
}
//____________________________________________________________________________
AliITSv3::AliITSv3(const AliITSv3 &source){
// Copy Constructor for ITS version 3.
////////////////////////////////////////////////////////////////////////
if(&source == this) return;
- this->fId3N = source.fId3N;
- this->fId3Name = new char*[fId3N];
- Int_t i;
- for(i=0;i<6;i++) strcpy(this->fId3Name[i],source.fId3Name[i]);
+ printf("Not allowed to copy AliITSv3\n");
return;
}
//_____________________________________________________________________________
////////////////////////////////////////////////////////////////////////
// Assignment operator for the ITS version 3.
////////////////////////////////////////////////////////////////////////
- if(&source == this) return *this;
- this->fId3N = source.fId3N;
- this->fId3Name = new char*[fId3N];
- Int_t i;
- for(i=0;i<6;i++) strcpy(this->fId3Name[i],source.fId3Name[i]);
- return *this;
+ if(&source == this) return *this;
+ printf("Not allowed to copy AliITSv3\n");
+ return *this;
}
//_____________________________________________________________________________
AliITSv3::~AliITSv3() {
////////////////////////////////////////////////////////////////////////
// Standard destructor for the ITS version 3.
////////////////////////////////////////////////////////////////////////
- delete [] fId3Name;
}
//_____________________________________________________________________________
AliITSv3::AliITSv3(const char *name, const char *title) : AliITS(name, title){
////////////////////////////////////////////////////////////////////////
// Standard constructor for the ITS version 3.
////////////////////////////////////////////////////////////////////////
- fId3N = 6;
- fId3Name = new char*[fId3N];
- fId3Name[0] = "ITS1";
- fId3Name[1] = "ITS2";
- fId3Name[2] = "ITS3";
- fId3Name[3] = "ITS4";
- fId3Name[4] = "ITS5";
- fId3Name[5] = "ITS6";
- fMinorVersionV3=1;
- printf("Created ITS TP Detailed version\n");
+
+ fIdN = 6;
+/*
+// TObjArray of TObjStrings
+ fIdName = new TObjArray(fIdN);
+ fIdName->AddAt(new TObjString("ITS1"),0);
+ fIdName->AddAt(new TObjString("ITS2"),1);
+ fIdName->AddAt(new TObjString("ITS3"),2);
+ fIdName->AddAt(new TObjString("ITS4"),3);
+ fIdName->AddAt(new TObjString("ITS5"),4);
+ fIdName->AddAt(new TObjString("ITS6"),5);
+*/
+// Array of TStrings.
+ 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] = 0;
+ fMajorVersion = 3;
+ fMinorVersion = 1;
}//__________________________________________________________________________
void AliITSv3::BuildGeometry(){
////////////////////////////////////////////////////////////////////////
// Geometry builder for the ITS version 3.
////////////////////////////////////////////////////////////////////////
TNode *node, *top;
- const Int_t kColorITS=kYellow;
+ const int kColorITS=kYellow;
//
top = gAlice->GetGeometry()->GetNode("alice");
jbox2 = 0;
// counter over the number of elements of layer #2 (
- for(i = 1; i <= 10; ++i) {
+ for (i = 1; i <= 10; ++i) {
// --- Place part # 1-2 (see sketch)
// (IDV1)
ypos = 0.;
- for(j = 1; j <= 5; ++j) {
+ for (j = 1; j <= 5; ++j) {
// odd elements are up and even elements are down
if (j == 1) {
xpos = dbox1[0] - dpcb[0] * 2. - dcop[0] * 2. - dcer[0] * 2. - dsil[0] * 2. - dits[0];
// (IDV2)
ypos = 0.;
- for(j = 1; j <= 5; ++j) {
+ for (j = 1; j <= 5; ++j) {
// odd element are up and even elements are down
if (j == 1) {
xpos = dbox2[0] - dpcb[0] * 2. - dcop[0] * 2. - dcer[0] * 2. - dsil[0] * 2. - dits[0];
// mother volume (IT34)
// Odd elements have large ribs and even elements have small ribs
- for(i = 1; i <= 12; ++i) {
+ for (i = 1; i <= 12; ++i) {
atheta = (i-1) * 30.;
AliMatrix(idrotm[i+1299], 90., atheta, 90., atheta + 90., 0.,0.);
if (i % 2 == 0) {
// (IDV3)
ypos = 0.;
- for(j = 1; j <= 7; ++j) {
+ for (j = 1; j <= 7; ++j) {
// odd elements are down and even elements are up
if (j == 1) {
xpos = dbox1[0] - dpcb[0] * 2. - dcop[0] * 2. - dcer[0] * 2. - dsil[0] * 2. - dits[0];
// (IDV4)
ypos = 0.;
- for(j = 1; j <= 7; ++j) {
+ for (j = 1; j <= 7; ++j) {
// odd elements are down and even elements are up
if (j == 1) {
xpos = dbox2[0] - dpcb[0] * 2. - dcop[0] * 2. - dcer[0] * 2. - dsil[0] * 2. - dits[0];
// mother volume (IT34)
// Odd elements have large ribs and even elements have small ribs
- for(i = 1; i <= 24; ++i) {
+ for (i = 1; i <= 24; ++i) {
atheta = (i-1) * 15.;
AliMatrix(idrotm[i+1399], 90., atheta, 90., atheta + 90., 0.,0.);
if (i % 2 == 0) {
// --- Define SSD with the 35+39 lay-out
- if (fMinorVersionV3 < 3) {
+ if (fMinorVersion < 3) {
//--- Define ghost volume containing the Strip Detectors and fill it with air
// or vacuum
// --- Place the sensitive part of the strips into its mother (ISV1)
ypos = 0.;
- for(j = 1; j <= 23; ++j) {
+ for (j = 1; j <= 23; ++j) {
if (j % 2 == 0) xpos = dbox1[0] - dits[0];
else xpos = -dbox1[0] + dits[0];
zpos = ((j - 1) - 11.) * 3.91;
// --- Place the electronics of the strips into its mother (SSV1)
ypos = 0.;
- for(j = 1; j <= 23; ++j) {
+ for (j = 1; j <= 23; ++j) {
if (j % 2 == 0) xpos = -dsrv[0] + .28;
else xpos = -dsrv[0] + .28 - dits[0] * 2. - .03;
zpos = ((j - 1) - 11.) * 3.91 + .85;
xpos = -dsrv[0] + .47 + TMath::Sqrt(3.) / 6. * 4.2;
ypos = 0.;
- for(j = 1; j <= 23; ++j) { // Loop was to 24. Changed to 23 to fit inside
+ for (j = 1; j <= 23; ++j) { // Loop was to 24. Changed to 23 to fit inside
// volume SSV1. This is the same number of
// elements as SCH5 above. Done Bjorn S. Nilsen
// April 4 2000. Error found by Ivana
rzero = dbox1[0] + 40.;
runo = dbox1[0] * 2. + 40. + dsrv[0];
rtwo = dbox1[0] * 2. + 40. + dela[0];
- for(i = 1; i <= 35; ++i) {
+ for (i = 1; i <= 35; ++i) {
atheta = (i-1) * ktwopi * kraddeg / 35. + offset2;
AliMatrix(idrotm[i+1499], 90., atheta, 90., atheta + 90., 0., 0.);
// --- Place the sensitive part of the strips into its mother (ISV2)
ypos = 0.;
- for(j = 1; j <= 26; ++j) {
+ for (j = 1; j <= 26; ++j) {
if (j % 2 == 0) xpos = dbox2[0] - dits[0];
else xpos = -dbox2[0] + dits[0];
zpos = ((j - 1) - 12.) * 3.91 - 1.96;
// --- Place the electronics of the strips into its mother (SSV2)
ypos = 0.;
- for(j = 1; j <= 26; ++j) {
+ for (j = 1; j <= 26; ++j) {
if (j % 2 == 0) xpos = -dsrv[0] + .28;
else xpos = -dsrv[0] + .28 - dits[0] * 2. - .03;
zpos = ((j - 1) - 12.) * 3.91 - 1.96 + .85;
xpos = -dsrv[0] + .47 + TMath::Sqrt(3.) / 6. * 4.2;
ypos = 0.;
- for(j = 1; j <= 27; ++j) {
+ for (j = 1; j <= 27; ++j) {
zpos = ((j - 1) - 12.) * 3.91 - 1.96 - 4.2/2.;
gMC->Gspos("SFR6", j, "SSV2", xpos, ypos, zpos, 0, "ONLY");
}
rzero = dbox2[0] + 45.;
runo = dbox2[0] * 2. + 45. + dsrv[0];
rtwo = dbox2[0] * 2. + 45. + dela[0];
- for(i = 1; i <= 39; ++i) {
+ for (i = 1; i <= 39; ++i) {
atheta = (i-1) * ktwopi * kraddeg / 39. + offset2;
AliMatrix(idrotm[i+1599], 90., atheta, 90., atheta + 90., 0., 0.);
// --- Define SSD with the 32+36 lay-out
- if (fMinorVersionV3 >2 && fMinorVersionV3 < 6) {
+ if (fMinorVersion >2 && fMinorVersion < 6) {
//--- Define ghost volume containing the Strip Detectors and fill it with air
// or vacuum
// --- Place the sensitive part of the strips into its mother (ISV1)
ypos = 0.;
- for(j = 1; j <= 22; ++j) {
+ for (j = 1; j <= 22; ++j) {
if (j % 2 == 0) xpos = dbox1[0] - dits[0];
else xpos = -dbox1[0] + dits[0];
zpos = ((j - 1) - 10.) * 3.91 - 1.96;
// --- Place the electronics of the strips into its mother (SSV1)
ypos = 0.;
- for(j = 1; j <= 22; ++j) {
+ for (j = 1; j <= 22; ++j) {
if (j % 2 == 0) xpos = -dsrv[0] + .28;
else xpos = -dsrv[0] + .28 - dits[0] * 2. - .03;
zpos = ((j - 1) - 10.) * 3.91 - 1.96 + .85;
xpos = -dsrv[0] + .47 + TMath::Sqrt(3.) / 6. * 4.2;
ypos = 0.;
- for(j = 1; j <= 23; ++j) {
+ for (j = 1; j <= 23; ++j) {
zpos = ((j - 1) - 10.) * 3.91 - 1.96 - 4.2/2.;
gMC->Gspos("SFR5", j, "SSV1", xpos, ypos, zpos, 0, "ONLY");
}
rzero = dbox1[0] + 36.6;
runo = dbox1[0] * 2. + 36.6 + dsrv[0];
rtwo = dbox1[0] * 2. + 36.6 + dela[0];
- for(i = 1; i <= 32; ++i) {
+ for (i = 1; i <= 32; ++i) {
atheta = (i-1) * ktwopi * kraddeg / 32. + offset2;
AliMatrix(idrotm[i+1499], 90., atheta, 90., atheta + 90., 0., 0.);
// --- Place the sensitive part of the strips into its mother (ISV2)
ypos = 0.;
- for(j = 1; j <= 24; ++j) {
+ for (j = 1; j <= 24; ++j) {
if (j % 2 == 0) xpos = -dbox2[0] + dits[0];
else xpos = dbox2[0] - dits[0];
zpos = ((j - 1) - 11.) * 3.91 - 1.96;
// --- Place the electronics of the strips into its mother (SSV2)
ypos = 0.;
- for(j = 1; j <= 24; ++j) {
+ for (j = 1; j <= 24; ++j) {
if (j % 2 == 0) xpos = -dsrv[0] + .28 - dits[0] * 2. - .03;
else xpos = -dsrv[0] + .28;
zpos = ((j - 1) - 11.) * 3.91 - 1.96 + .85;
xpos = -dsrv[0] + .47 + TMath::Sqrt(3.) / 6. * 4.2;
ypos = 0.;
- for(j = 1; j <= 25; ++j) {
+ for (j = 1; j <= 25; ++j) {
zpos = ((j - 1) - 11.) * 3.91 - 1.96 - 4.2/2.;
gMC->Gspos("SFR6", j, "SSV2", xpos, ypos, zpos, 0, "ONLY");
}
rzero = dbox2[0] + 41.2;
runo = dbox2[0] * 2. + 41.2 + dsrv[0];
rtwo = dbox2[0] * 2. + 41.2 + dela[0];
- for(i = 1; i <= 36; ++i) {
+ for (i = 1; i <= 36; ++i) {
atheta = (i-1) * ktwopi * kraddeg / 36. + offset2;
AliMatrix(idrotm[i+1599], 90., atheta, 90., atheta + 90., 0., 0.);
// GOTO 8901 ! skip outer wall
- if (fMinorVersionV3 == 0 || fMinorVersionV3 == 3) {
+ if (fMinorVersion == 0 || fMinorVersion == 3) {
dits[0] = 49.9;
dits[1] = dits[0] + .06926;
// GOTO 9012 ! skip octagonal frame
- if (fMinorVersionV3 == 1) {
+ if (fMinorVersion == 1) {
rzero = 34.;
dtra[0] = .92;
dtra1[2] = TMath::Sqrt(dtra[2] * dtra[2] + (55.4*55.4-50.5*50.5))/2.;
angle = 45.;
offset = angle / 2.;
- for(i = 0; i < 8; ++i) {
+ for (i = 0; i < 8; ++i) {
xtra[i] = rzero * TMath::Cos(i * angle * kdegrad);
ytra[i] = rzero * TMath::Sin(i * angle * kdegrad);
ztra[i] = 0.;
gMC->Gspos(knatra1[15], 1, "ITSV", xpos, ypos, zpos, idrotm[5115], "ONLY");
- } else if (fMinorVersionV3 == 4) {
+ } else if (fMinorVersion == 4) {
rzero = 34.;
dtra1[2] = TMath::Sqrt(dtra[2] * dtra[2] + (55.4*55.4-50.5*50.5))/2.;
angle = 45.;
offset = angle / 2.;
- for(i = 0; i < 8; ++i) {
+ for (i = 0; i < 8; ++i) {
xtra[i] = rzero * TMath::Cos(i * angle * kdegrad);
ytra[i] = rzero * TMath::Sin(i * angle * kdegrad);
ztra[i] = 0.;
// GOTO 9123 ! skip hexagonal frame
- if (fMinorVersionV3 == 2) {
+ if (fMinorVersion == 2) {
rzero = 33.5;
dtra2[0] = .92;
dtra4[2] = TMath::Sqrt(dtra2[2] * dtra2[2] + (59.9*59.9-50.*50.)) / 2.;
angle = 60.;
offset = angle / 2.;
- for(i = 0; i < 6; ++i) {
+ for (i = 0; i < 6; ++i) {
xtra1[i] = rzero * TMath::Cos((i * angle + offset) *kdegrad);
ytra1[i] = rzero * TMath::Sin((i * angle + offset) *kdegrad);
ztra1[i] = 0.;
gMC->Gspos(knatra4[15], 1, "ITSV", xpos, ypos, zpos, idrotm[5225], "ONLY");
- } else if (fMinorVersionV3 == 5) {
+ } else if (fMinorVersion == 5) {
rzero = 33.5;
dtra4[2] = TMath::Sqrt(dtra2[2] * dtra2[2] + (59.9*59.9-50.*50.)) / 2.;
angle = 60.;
offset = angle / 2.;
- for(i = 0; i < 6; ++i) {
+ for (i = 0; i < 6; ++i) {
xtra1[i] = rzero * TMath::Cos((i * angle + offset) *kdegrad);
ytra1[i] = rzero * TMath::Sin((i * angle + offset) *kdegrad);
ztra1[i] = 0.;
gMC->Gsvolu("RP04", "PGON", idtmed[274], dpgon, 10);
gMC->Gspos("RP04", 1, "ITSV", xpos, ypos, zpos, 0, "ONLY");
- if (fMinorVersionV3 < 3 ) {
+ if (fMinorVersion < 3 ) {
offset2 = 5.2;
dpgon[0] = offset2 + 360./(2.*35.);
dpgon[1] = 360.;
gMC->Gsvolu("RP06", "PGON", idtmed[274], dpgon, 10);
gMC->Gspos("RP06", 1, "ITSV", xpos, ypos, zpos, 0, "ONLY");
}
- if (fMinorVersionV3 > 2 && fMinorVersionV3 < 6) {
+ if (fMinorVersion > 2 && fMinorVersion < 6) {
offset2 = 5.2;
dpgon[0] = offset2 + 5.625;
dpgon[1] = 360.;
gMC->Gsvolu("LP04", "PGON", idtmed[274], dpgon, 10);
gMC->Gspos("LP04", 1, "ITSV", xpos, ypos, zpos, 0, "ONLY");
- if (fMinorVersionV3 < 3) {
+ if (fMinorVersion < 3) {
offset2 = 5.2;
dpgon[0] = offset2 + 360./(2.*35.);
dpgon[1] = 360.;
gMC->Gsvolu("LP06", "PGON", idtmed[274], dpgon, 10);
gMC->Gspos("LP06", 1, "ITSV", xpos, ypos, zpos, 0, "ONLY");
}
- if (fMinorVersionV3 > 2 && fMinorVersionV3 < 6) {
+ if (fMinorVersion > 2 && fMinorVersion < 6) {
offset2 = 5.2;
dpgon[0] = offset2 + 5.625;
dpgon[1] = 360.;
if (fEuclidOut) {
gMC->WriteEuclid("ITSgeometry", "ITSV", 1, 5);
- }
- fMinorVersion = fMinorVersionV3;
+ };
}
//_____________________________________________________________________________
void AliITSv3::CreateMaterials(){
////////////////////////////////////////////////////////////////////////
// Initialise the ITS after it has been created.
////////////////////////////////////////////////////////////////////////
- Int_t i,j,l;
- fIdN = fId3N;;
- fIdName = new char*[fIdN];
- fIdSens = new Int_t[fIdN];
- for(i=0;i<fId3N;i++) {
- l = strlen(fId3Name[i]);
- fIdName[i] = new char[l+1];
- for(j=0;j<l;j++) fIdName[i][j] = fId3Name[i][j];
- fIdName[i][l] = '\0'; // Null terminate this string.
- } // end for i
- //
AliITS::Init();
fMajorVersion = 3;
- fMinorVersion = fMinorVersionV3;
}
//_____________________________________________________________________________
void AliITSv3::StepManager(){
} // end if printit[layer][ladder][detector]
#endif
}
-//____________________________________________________________________________
-void AliITSv3::Streamer(TBuffer &R__b){
-////////////////////////////////////////////////////////////////////////
-// A dummy Streamer function for this class AliITSv3. By default it
-// only streams the AliITS class as it is required. Since this class
-// dosen't contain any "real" data to be saved, it doesn't.
-////////////////////////////////////////////////////////////////////////
-
- printf("AliITSv3Streamer Starting\n");
- 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 >> fId3N;
- //R__b.ReadArray(fId3Name);
- }else{
- } // end if
- } else {
- R__b.WriteVersion(AliITSv3::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 << fId3N;
- //R__b.WriteArray(fId3Name, __COUNTER__);
- } // end if R__b.IsReading()
- printf("AliITSv3Streamer Finishing\n");
-}