/*
$Log$
+Revision 1.31 2002/02/11 14:25:27 cblume
+Geometry update, compressed hit structure
+
+Revision 1.30 2001/05/21 16:45:47 hristov
+Last minute changes (C.Blume)
+
Revision 1.29 2001/05/16 14:57:28 alibrary
New files for folders and Stack
// Default constructor
//
- fIdSensDr = 0;
- fIdSensAm = 0;
-
- fIdChamber1 = 0;
- fIdChamber2 = 0;
- fIdChamber3 = 0;
-
fSensSelect = 0;
fSensPlane = -1;
fSensChamber = -1;
// Standard constructor for Transition Radiation Detector version 1
//
- fIdSensDr = 0;
- fIdSensAm = 0;
-
- fIdChamber1 = 0;
- fIdChamber2 = 0;
- fIdChamber3 = 0;
-
fSensSelect = 0;
fSensPlane = -1;
fSensChamber = -1;
// Copy function
//
- ((AliTRDv1 &) trd).fIdSensDr = fIdSensDr;
- ((AliTRDv1 &) trd).fIdSensAm = fIdSensAm;
-
- ((AliTRDv1 &) trd).fIdChamber1 = fIdChamber1;
- ((AliTRDv1 &) trd).fIdChamber2 = fIdChamber2;
- ((AliTRDv1 &) trd).fIdChamber3 = fIdChamber3;
-
((AliTRDv1 &) trd).fSensSelect = fSensSelect;
((AliTRDv1 &) trd).fSensPlane = fSensPlane;
((AliTRDv1 &) trd).fSensChamber = fSensChamber;
const Int_t kNTR = 50;
TLorentzVector mom, pos;
- TClonesArray &lhits = *fHits;
// Create TR at the entrance of the chamber
if (gMC->IsTrackEntering()) {
// Add the hit to the array. TR photon hits are marked
// by negative charge
- AliTRDhit *hit = new(lhits[fNhits++]) AliTRDhit(fIshunt
- ,gAlice->CurrentTrack()
- ,det,posHit,-q);
- hit->SetTRphoton();
+ AddHit(gAlice->CurrentTrack(),det,posHit,-q,kTRUE);
}
Float_t eEnd = TMath::Log(kEend);
fDeltaE = new TF1("deltae",Ermilova,poti,eEnd,0);
- // Identifier of the sensitive volume (drift region)
- fIdSensDr = gMC->VolId("UL05");
- // Identifier of the sensitive volume (amplification region)
- fIdSensAm = gMC->VolId("UL06");
-
- // Identifier of the TRD-driftchambers
- fIdChamber1 = gMC->VolId("UCIO");
- fIdChamber2 = gMC->VolId("UCIM");
- fIdChamber3 = gMC->VolId("UCII");
-
if(fDebug) {
printf("%s: ",ClassName());
for (Int_t i = 0; i < 80; i++) printf("*");
// a spectrum taken from Ermilova et al.
//
- Int_t iIdSens, icSens;
- Int_t iIdChamber, icChamber;
Int_t pla = 0;
Int_t cha = 0;
Int_t sec = 0;
Double_t betaGamma, pp;
Double_t stepSize;
+ Bool_t drRegion = kFALSE;
+ Bool_t amRegion = kFALSE;
+
+ TString cIdCurrent;
+ TString cIdSensDr = "J";
+ TString cIdSensAm = "K";
+ Char_t cIdChamber[3];
+ cIdChamber[2] = 0;
+
TLorentzVector pos, mom;
- TClonesArray &lhits = *fHits;
- const Double_t kBig = 1.0E+12;
+ const Int_t kNplan = AliTRDgeometry::Nplan();
+ const Double_t kBig = 1.0E+12;
// Ionization energy
const Float_t kWion = 22.04;
(!gMC->IsTrackDisappeared())) {
// Inside a sensitive volume?
- iIdSens = gMC->CurrentVolID(icSens);
- if ((iIdSens == fIdSensDr) ||
- (iIdSens == fIdSensAm)) {
-
- iIdChamber = gMC->CurrentVolOffID(1,icChamber);
+ drRegion = kFALSE;
+ amRegion = kFALSE;
+ cIdCurrent = gMC->CurrentVolName();
+ if (cIdCurrent[1] == cIdSensDr) {
+ drRegion = kTRUE;
+ }
+ if (cIdCurrent[1] == cIdSensAm) {
+ amRegion = kTRUE;
+ }
+ if (drRegion || amRegion) {
// The hit coordinates and charge
gMC->TrackPosition(pos);
phi = phi - 90.;
sec = ((Int_t) (phi / 20));
- // The chamber number
- // 0: outer left
- // 1: middle left
- // 2: inner
- // 3: middle right
- // 4: outer right
- if (iIdChamber == fIdChamber1)
- cha = (hits[2] < 0 ? 0 : 4);
- else if (iIdChamber == fIdChamber2)
- cha = (hits[2] < 0 ? 1 : 3);
- else if (iIdChamber == fIdChamber3)
- cha = 2;
-
- // The plane number
- // The numbering starts at the innermost plane
- pla = icChamber - TMath::Nint((Float_t) (icChamber / 7)) * 6 - 1;
+ // The plane and chamber number
+ cIdChamber[0] = cIdCurrent[2];
+ cIdChamber[1] = cIdCurrent[3];
+ Int_t idChamber = atoi(cIdChamber);
+ cha = ((Int_t) idChamber / kNplan);
+ pla = ((Int_t) idChamber % kNplan);
// Check on selected volumes
Int_t addthishit = 1;
det = fGeometry->GetDetector(pla,cha,sec);
// Special hits and TR photons only in the drift region
- if (iIdSens == fIdSensDr) {
+ if (drRegion) {
// Create some special hits with amplitude 0 at the entrance and
// exit of each chamber that contain the momentum components of the particle
moms[0] = mom[0];
moms[1] = mom[1];
moms[2] = mom[2];
- AliTRDhit *hitTest = new(lhits[fNhits++]) AliTRDhit(fIshunt
- ,gAlice->CurrentTrack()
- ,det,moms,0);
- hitTest->SetTest();
+ AddHit(gAlice->CurrentTrack(),det,moms,0,kTRUE);
+ AddHit(gAlice->CurrentTrack(),det,hits,0,kTRUE);
}
// Create the hits from TR photons
qTot = ((Int_t) (eDelta / kWion) + 1);
// Create a new dEdx hit
- AliTRDhit *hit = new(lhits[fNhits++]) AliTRDhit(fIshunt
- ,gAlice->CurrentTrack()
- ,det,hits,qTot);
- if (iIdSens == fIdSensDr) {
- hit->SetDrift();
+ if (drRegion) {
+ AddHit(gAlice->CurrentTrack(),det,hits,qTot,kTRUE);
}
else {
- hit->SetAmplification();
+ AddHit(gAlice->CurrentTrack(),det,hits,qTot,kFALSE);
}
// Calculate the maximum step size for the next tracking step