,fLayRadii(0)
,fLayZLength(0)
,fStavPerLay(0)
- ,fModPerStav(0)
- ,fStaThick(0)
- ,fStaWidth(0)
- ,fStaTilt(0)
+ ,fUnitPerStave(0)
+ ,fStaveThick(0)
+ ,fStaveWidth(0)
+ ,fStaveTilt(0)
,fDetThick(0)
,fChipTypeID(0)
,fBuildLevel(0)
,fLayRadii(0)
,fLayZLength(0)
,fStavPerLay(0)
- ,fModPerStav(0)
- ,fStaThick(0)
- ,fStaWidth(0)
- ,fStaTilt(0)
+ ,fUnitPerStave(0)
+ ,fStaveThick(0)
+ ,fStaveWidth(0)
+ ,fStaveTilt(0)
,fDetThick(0)
,fChipTypeID(0)
,fBuildLevel(0)
for (Int_t j=0; j<fNLayers; j++)
fLayerName[j].Form("%s%d",AliITSUGeomTGeo::GetITSSensorPattern(),j); // See AliITSUv1Layer
//
- fLayTurbo = new Bool_t[fNLayers];
- fLayPhi0 = new Double_t[fNLayers];
- fLayRadii = new Double_t[fNLayers];
- fLayZLength = new Double_t[fNLayers];
- fStavPerLay = new Int_t[fNLayers];
- fModPerStav = new Int_t[fNLayers];
- fStaThick = new Double_t[fNLayers];
- fStaWidth = new Double_t[fNLayers];
- fStaTilt = new Double_t[fNLayers];
- fDetThick = new Double_t[fNLayers];
- fChipTypeID = new UInt_t[fNLayers];
- fBuildLevel = new Int_t[fNLayers];
+ fLayTurbo = new Bool_t[fNLayers];
+ fLayPhi0 = new Double_t[fNLayers];
+ fLayRadii = new Double_t[fNLayers];
+ fLayZLength = new Double_t[fNLayers];
+ fStavPerLay = new Int_t[fNLayers];
+ fUnitPerStave = new Int_t[fNLayers];
+ fStaveThick = new Double_t[fNLayers];
+ fStaveWidth = new Double_t[fNLayers];
+ fStaveTilt = new Double_t[fNLayers];
+ fDetThick = new Double_t[fNLayers];
+ fChipTypeID = new UInt_t[fNLayers];
+ fBuildLevel = new Int_t[fNLayers];
fUpGeom = new AliITSUv1Layer*[fNLayers];
if (fNLayers > 0) { // if not, we'll Fatal-ize in CreateGeometry
for (Int_t j=0; j<fNLayers; j++) {
- fLayPhi0[j] = 0;
- fLayRadii[j] = 0.;
- fLayZLength[j] = 0.;
- fStavPerLay[j] = 0;
- fModPerStav[j] = 0;
- fStaWidth[j] = 0.;
- fDetThick[j] = 0.;
- fChipTypeID[j] = 0;
- fBuildLevel[j] = 0;
- fUpGeom[j] = 0;
+ fLayPhi0[j] = 0;
+ fLayRadii[j] = 0.;
+ fLayZLength[j] = 0.;
+ fStavPerLay[j] = 0;
+ fUnitPerStave[j] = 0;
+ fStaveWidth[j] = 0.;
+ fDetThick[j] = 0.;
+ fChipTypeID[j] = 0;
+ fBuildLevel[j] = 0;
+ fUpGeom[j] = 0;
}
}
}
delete [] fLayRadii;
delete [] fLayZLength;
delete [] fStavPerLay;
- delete [] fModPerStav;
- delete [] fStaThick;
- delete [] fStaWidth;
- delete [] fStaTilt;
+ delete [] fUnitPerStave;
+ delete [] fStaveThick;
+ delete [] fStaveWidth;
+ delete [] fStaveTilt;
delete [] fDetThick;
delete [] fChipTypeID;
delete [] fBuildLevel;
//printf("SetAlignable: %s %s\n",snmL.Data(),pthL.Data());
gGeoManager->SetAlignableEntry(AliITSUGeomTGeo::ComposeSymNameStave(lr,ld),pthL.Data());
//
- for (int md=0; md<fModPerStav[lr]; md++) {
+ for (int md=0; md<fUnitPerStave[lr]; md++) {
//
TString pthM = Form("%s/%s%d_%d",pthL.Data(),AliITSUGeomTGeo::GetITSChipPattern(),lr,md);
//
if (fNLayers <= 0) AliFatal(Form("Wrong number of layers (%d)",fNLayers));
//
for (Int_t j=0; j<fNLayers; j++) {
- if (fLayRadii[j] <= 0) AliFatal(Form("Wrong layer radius for layer %d (%f)",j,fLayRadii[j]));
- if (fLayZLength[j] <= 0) AliFatal(Form("Wrong layer length for layer %d (%f)",j,fLayZLength[j]));
- if (fStavPerLay[j] <= 0) AliFatal(Form("Wrong number of staves for layer %d (%d)",j,fStavPerLay[j]));
- if (fModPerStav[j] <= 0) AliFatal(Form("Wrong number of chips for layer %d (%d)",j,fModPerStav[j]));
- if (fStaThick[j] < 0) AliFatal(Form("Wrong stave thickness for layer %d (%f)",j,fStaThick[j]));
- if (fLayTurbo[j] && fStaWidth[j] <= 0) AliFatal(Form("Wrong stave width for layer %d (%f)",j,fStaWidth[j]));
- if (fDetThick[j] < 0) AliFatal(Form("Wrong chip thickness for layer %d (%f)",j,fDetThick[j]));
+ if (fLayRadii[j] <= 0) AliFatal(Form("Wrong layer radius for layer %d (%f)",j,fLayRadii[j]));
+ if (fLayZLength[j] <= 0) AliFatal(Form("Wrong layer length for layer %d (%f)",j,fLayZLength[j]));
+ if (fStavPerLay[j] <= 0) AliFatal(Form("Wrong number of staves for layer %d (%d)",j,fStavPerLay[j]));
+ if (fUnitPerStave[j] <= 0) AliFatal(Form("Wrong number of chips for layer %d (%d)",j,fUnitPerStave[j]));
+ if (fStaveThick[j] < 0) AliFatal(Form("Wrong stave thickness for layer %d (%f)",j,fStaveThick[j]));
+ if (fLayTurbo[j] && fStaveWidth[j] <= 0) AliFatal(Form("Wrong stave width for layer %d (%f)",j,fStaveWidth[j]));
+ if (fDetThick[j] < 0) AliFatal(Form("Wrong chip thickness for layer %d (%f)",j,fDetThick[j]));
//
if (j > 0) {
- if (fLayRadii[j]<=fLayRadii[j-1]) AliFatal(Form("Layer %d radius (%f) is smaller than layer %d radius (%f)",
- j,fLayRadii[j],j-1,fLayRadii[j-1]));
+ if (fLayRadii[j]<=fLayRadii[j-1]) AliFatal(Form("Layer %d radius (%f) is smaller than layer %d radius (%f)",
+ j,fLayRadii[j],j-1,fLayRadii[j-1]));
} // if (j > 0)
- if (fStaThick[j] == 0) AliInfo(Form("Stave thickness for layer %d not set, using default",j));
- if (fDetThick[j] == 0) AliInfo(Form("Chip thickness for layer %d not set, using default",j));
+ if (fStaveThick[j] == 0) AliInfo(Form("Stave thickness for layer %d not set, using default",j));
+ if (fDetThick[j] == 0) AliInfo(Form("Chip thickness for layer %d not set, using default",j));
} // for (Int_t j=0; j<fNLayers; j++)
//
if (fLayTurbo[j]) {
fUpGeom[j] = new AliITSUv1Layer(j,kTRUE,kFALSE);
- fUpGeom[j]->SetStaveWidth(fStaWidth[j]);
- fUpGeom[j]->SetStaveTilt(fStaTilt[j]);
+ fUpGeom[j]->SetStaveWidth(fStaveWidth[j]);
+ fUpGeom[j]->SetStaveTilt(fStaveTilt[j]);
}
else fUpGeom[j] = new AliITSUv1Layer(j,kFALSE);
//
fUpGeom[j]->SetRadius(fLayRadii[j]);
fUpGeom[j]->SetZLength(fLayZLength[j]);
fUpGeom[j]->SetNStaves(fStavPerLay[j]);
- fUpGeom[j]->SetNChips(fModPerStav[j]);
+ fUpGeom[j]->SetNUnits(fUnitPerStave[j]);
fUpGeom[j]->SetChipType(fChipTypeID[j]);
fUpGeom[j]->SetBuildLevel(fBuildLevel[j]);
if (j < 3)
fUpGeom[j]->SetStaveModel(fStaveModelOB);
AliDebug(1,Form("fBuildLevel: %d\n",fBuildLevel[j]));
//
- if (fStaThick[j] != 0) fUpGeom[j]->SetStaveThick(fStaThick[j]);
- if (fDetThick[j] != 0) fUpGeom[j]->SetSensorThick(fDetThick[j]);
+ if (fStaveThick[j] != 0) fUpGeom[j]->SetStaveThick(fStaveThick[j]);
+ if (fDetThick[j] != 0) fUpGeom[j]->SetSensorThick(fDetThick[j]);
//
for (int iw=0;iw<fNWrapVol;iw++) {
if (fLayRadii[j]>fWrapRMin[iw] && fLayRadii[j]<fWrapRMax[iw]) {
//______________________________________________________________________
void AliITSUv1::DefineLayer(const Int_t nlay, const double phi0, const Double_t r,
const Double_t zlen, const Int_t nstav,
- const Int_t nmod, const Double_t lthick,
+ const Int_t nunit, const Double_t lthick,
const Double_t dthick, const UInt_t dettypeID,
const Int_t buildLevel)
{
// r layer radius
// zlen layer length
// nstav number of staves
- // nmod number of chips per stave
+ // nunit IB: number of chips per stave
+ // OB: number of modules per half stave
// lthick stave thickness (if omitted, defaults to 0)
// dthick detector thickness (if omitted, defaults to 0)
+ // dettypeID ??
// buildLevel (if 0, all geometry is build, used for material budget studies)
// Outputs:
// none.
fLayRadii[nlay] = r;
fLayZLength[nlay] = zlen;
fStavPerLay[nlay] = nstav;
- fModPerStav[nlay] = nmod;
- fStaThick[nlay] = lthick;
+ fUnitPerStave[nlay] = nunit;
+ fStaveThick[nlay] = lthick;
fDetThick[nlay] = dthick;
fChipTypeID[nlay] = dettypeID;
fBuildLevel[nlay] = buildLevel;
//______________________________________________________________________
void AliITSUv1::DefineLayerTurbo(Int_t nlay, Double_t phi0, Double_t r, Double_t zlen, Int_t nstav,
- Int_t nmod, Double_t width, Double_t tilt,
+ Int_t nunit, Double_t width, Double_t tilt,
Double_t lthick,Double_t dthick,
UInt_t dettypeID, Int_t buildLevel)
{
// r layer radius
// zlen layer length
// nstav number of staves
- // nmod number of chips per stave
+ // nunit IB: number of chips per stave
+ // OB: number of modules per half stave
// width stave width
// tilt layer tilt angle (degrees)
// lthick stave thickness (if omitted, defaults to 0)
fLayRadii[nlay] = r;
fLayZLength[nlay] = zlen;
fStavPerLay[nlay] = nstav;
- fModPerStav[nlay] = nmod;
- fStaThick[nlay] = lthick;
- fStaWidth[nlay] = width;
- fStaTilt[nlay] = tilt;
+ fUnitPerStave[nlay] = nunit;
+ fStaveThick[nlay] = lthick;
+ fStaveWidth[nlay] = width;
+ fStaveTilt[nlay] = tilt;
fDetThick[nlay] = dthick;
fChipTypeID[nlay] = dettypeID;
fBuildLevel[nlay] = buildLevel;
// r layer radius
// zlen layer length
// nstav number of staves
- // nmod number of chips per stave
+ // nmod IB: number of chips per stave
+ // OB: number of modules per half stave
// width stave width
// tilt stave tilt angle
// lthick stave thickness
r = fLayRadii[nlay];
zlen = fLayZLength[nlay];
nstav = fStavPerLay[nlay];
- nmod = fModPerStav[nlay];
- width = fStaWidth[nlay];
- tilt = fStaTilt[nlay];
- lthick = fStaThick[nlay];
+ nmod = fUnitPerStave[nlay];
+ width = fStaveWidth[nlay];
+ tilt = fStaveTilt[nlay];
+ lthick = fStaveThick[nlay];
dthick = fDetThick[nlay];
dettype= fChipTypeID[nlay];
}
// none.
// Return:
// none.
+ //
if(!(this->IsActive())) return;
if(!(gMC->TrackCharge())) return;
//
//printf("R: %.1f | Lay: %d NotSens: %d\n",positionRS.Pt(), lay, notSens);
if (notSens) return;
-
- if(gMC->IsTrackExiting()) {
- AddTrackReference(gAlice->GetMCApp()->GetCurrentTrackNumber(), AliTrackReference::kITS);
- } // if Outer ITS mother Volume
-
+ //
+ if (lay < 0 || lay >= fNLayers) {
+ AliError(Form("Invalid value: lay=%d. Not an ITS sensitive volume",lay));
+ return; // not an ITS sensitive volume.
+ }
+ //
static TLorentzVector position, momentum; // Saves on calls to construtors
static AliITSUHit hit;// Saves on calls to constructors
-
+ //
TClonesArray &lhits = *(Hits());
- Int_t cpn0, cpn1, mod, status = 0;
+ Int_t chipID, status = 0;
//
// Track status
if(gMC->IsTrackInside()) status += 1;
if(gMC->IsTrackEntering()) status += 2;
- if(gMC->IsTrackExiting()) status += 4;
+ if(gMC->IsTrackExiting()) {
+ AddTrackReference(gAlice->GetMCApp()->GetCurrentTrackNumber(), AliTrackReference::kITS);
+ status += 4;
+ } // if Outer ITS mother Volume
if(gMC->IsTrackOut()) status += 8;
if(gMC->IsTrackDisappeared()) status += 16;
if(gMC->IsTrackStop()) status += 32;
if(gMC->IsTrackAlive()) status += 64;
-
//
// retrieve the indices with the volume path
//
- if (lay < 0 || lay >= fNLayers) {
- AliError(Form("Invalid value: lay=%d. Not an ITS sensitive volume",lay));
- return; // not an ITS sensitive volume.
- } else {
- copy = 1;
- gMC->CurrentVolOffID(1,cpn1);
- gMC->CurrentVolOffID(2,cpn0);
- } //
-
- mod = fGeomTGeo->GetChipIndex(lay,cpn0,cpn1);
- //RS2DEL fInitGeom.DecodeDetector(mod,lay+1,cpn0,cpn1,copy);
+ gMC->TrackPosition(position);
+ int chip=-1,module=-1,sstave=-1,stave=-1,level=0; // volume copies on different levels
+ gMC->CurrentVolOffID(++level,chip);
+ if (fGeomTGeo->GetNModules(lay)>0) gMC->CurrentVolOffID(++level,module);
+ if (fGeomTGeo->GetNHalfStaves(lay)>0) gMC->CurrentVolOffID(++level,sstave);
+ gMC->CurrentVolOffID(++level,stave);
//
+ chipID = fGeomTGeo->GetChipIndex(lay,stave,sstave,module,chip);
// Fill hit structure.
//
- hit.SetChip(mod);
+ hit.SetChip(chipID);
hit.SetTrack(gAlice->GetMCApp()->GetCurrentTrackNumber());
gMC->TrackPosition(position);
gMC->TrackMomentum(momentum);