- //Calculates the light yield, the number of photons produced in the
- //plastic layer
- // Here we need to know the fiber lebgth to calculate the attenuation
-
- Float_t lengthOfFiber = 0. ;// should be retrieved from the geometry
-
- Float_t lightYield = gRandom->Poisson(fLightFactor * depositedEnergy *
- exp(-fLightYieldAttenuation * lengthOfFiber)) ;
- xyzte[4] = fAPDFactor * lightYield ;
-
- primary = gAlice->GetPrimary(tracknumber);
- AddHit(fIshunt, primary,tracknumber, iparent, ienergy, absid, xyzte, pmom);
+ Int_t tower = (id[0]-1) % geom->GetNZ() + 1 + (id[1] - 1) * geom->GetNZ() ;
+ Int_t layer = static_cast<Int_t>((id[0]-1)/(geom->GetNZ())) + 1 ;
+ Int_t absid = tower;
+ Int_t nlayers = geom->GetNECLayers();
+ if ((layer > nlayers)||(layer<1))
+ Fatal("StepManager", "Wrong calculation of layer number: layer = %d > %d\n", layer, nlayers) ;
+
+ Float_t lightYield = depositedEnergy ;
+ // Apply Birk's law (copied from G3BIRK)
+
+ if (gMC->TrackCharge()!=0) { // Check
+ Float_t birkC1Mod = 0;
+ if (fBirkC0==1){ // Apply correction for higher charge states
+ if (TMath::Abs(gMC->TrackCharge())>=2)
+ birkC1Mod=fBirkC1*7.2/12.6;
+ else
+ birkC1Mod=fBirkC1;
+ }
+ Float_t dedxcm;
+ if (gMC->TrackStep()>0)
+ dedxcm=1000.*gMC->Edep()/gMC->TrackStep();
+ else
+ dedxcm=0;
+ lightYield=lightYield/(1.+birkC1Mod*dedxcm+fBirkC2*dedxcm*dedxcm);
+ }
+
+ // use sampling fraction to get original energy --HG
+ xyzte[4] = lightYield * geom->GetSampling();
+
+ if (gDebug == 2)
+ printf("StepManager: id0 = %d, id1 = %d, absid = %d tower = %d layer = %d energy = %f\n", id[0], id[1], absid, tower, layer, xyzte[4]) ;
+
+ AddHit(fIshunt, fCurPrimary,tracknumber, fCurParent, ienergy, absid, xyzte, pmom);