X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=PHOS%2FAliPHOSv1.cxx;h=ac1cc9f6a4df037fa8a4b770832c66f630806151;hb=dc986a1d05344f08128a3c1e1c028846566dde95;hp=cff830d4a49ccd59ebdc67fac6a6e72ad86e2515;hpb=642f15cfce9ebda2ff71a55c5edb8d9bc0c729c4;p=u%2Fmrichter%2FAliRoot.git diff --git a/PHOS/AliPHOSv1.cxx b/PHOS/AliPHOSv1.cxx index cff830d4a49..ac1cc9f6a4d 100644 --- a/PHOS/AliPHOSv1.cxx +++ b/PHOS/AliPHOSv1.cxx @@ -18,35 +18,22 @@ //_________________________________________________________________________ // Implementation version v1 of PHOS Manager class //--- -// Layout EMC + PPSD has name GPS2: -// Produces cumulated hits //--- // Layout EMC + CPV has name IHEP: // Produces hits for CPV, cumulated hits //--- -// Layout EMC + CPV + PPSD has name GPS: -// Produces hits for CPV, cumulated hits //--- //*-- Author: Yves Schutz (SUBATECH) // --- ROOT system --- - -#include -#include #include -#include -#include #include // --- Standard library --- -#include -#include // --- AliRoot header files --- - -#include "AliConst.h" #include "AliPHOSCPVDigit.h" #include "AliPHOSGeometry.h" #include "AliPHOSHit.h" @@ -55,6 +42,7 @@ #include "AliPHOSQAMeanChecker.h" #include "AliPHOSv1.h" #include "AliRun.h" +#include "AliMC.h" ClassImp(AliPHOSv1) @@ -98,7 +86,7 @@ AliPHOSv1::AliPHOSv1(const char *name, const char *title): // and the TreeD at the end of the event (branch is set in FinishEvent() ). fHits= new TClonesArray("AliPHOSHit",1000) ; - gAlice->AddHitList(fHits) ; + gAlice->GetMCApp()->AddHitList(fHits) ; fNhits = 0 ; @@ -180,6 +168,21 @@ AliPHOSv1::~AliPHOSv1() } +//____________________________________________________________________________ +void AliPHOSv1::Copy(AliPHOSv1 & phos) +{ + TObject::Copy(phos) ; + AliPHOSv0::Copy(phos) ; + phos.fLightYieldMean = fLightYieldMean ; + phos.fIntrinsicPINEfficiency = fIntrinsicPINEfficiency ; + phos.fLightYieldAttenuation = fLightYieldAttenuation ; + phos.fRecalibrationFactor = fRecalibrationFactor ; + phos.fElectronsPerGeV = fElectronsPerGeV ; + phos.fAPDGain = fAPDGain ; + phos.fLightFactor = fLightFactor ; + phos.fAPDFactor = fAPDFactor ; +} + //____________________________________________________________________________ void AliPHOSv1::AddHit(Int_t shunt, Int_t primary, Int_t tracknumber, Int_t Id, Float_t * hits) { @@ -284,8 +287,7 @@ void AliPHOSv1::StepManager(void) TLorentzVector pos ; // Lorentz vector of the track current position Int_t copy ; - Int_t tracknumber = gAlice->GetCurrentTrackNumber() ; - Int_t primary = gAlice->GetPrimary( gAlice->GetCurrentTrackNumber() ); + Int_t tracknumber = gAlice->GetMCApp()->GetCurrentTrackNumber() ; TString name = GetGeometry()->GetName() ; Int_t moduleNumber ; @@ -325,7 +327,7 @@ void AliPHOSv1::StepManager(void) moduleNumber--; TClonesArray *cpvDigits = new TClonesArray("AliPHOSCPVDigit",0); // array of digits for current hit - CPVDigitize(pmom,xyd,moduleNumber,cpvDigits); + CPVDigitize(pmom,xyd,cpvDigits); Float_t xmean = 0; Float_t zmean = 0; @@ -369,8 +371,7 @@ void AliPHOSv1::StepManager(void) xyzte[3] = gMC->TrackTime() ; xyzte[4] = cpvDigit->GetQpad() ; // amplitude in a pad - primary = -1; // No need in primary for CPV - AddHit(fIshunt, primary, tracknumber, absid, xyzte); + AddHit(fIshunt, -1, tracknumber, absid, xyzte); // -1: No need in primary for CPV if (cpvDigit->GetQpad() > 0.02) { xmean += cpvDigit->GetQpad() * (cpvDigit->GetXpad() + 0.5); @@ -404,12 +405,11 @@ void AliPHOSv1::StepManager(void) if ( gMC->IsTrackEntering() ){ Float_t xyzd[3] ; gMC -> Gmtod (xyzte, xyzd, 1); // transform coordinate from master to daughter system - if (xyzd[1] > GetGeometry()->GetCrystalSize(1)/2-0.002 || - xyzd[1] < -GetGeometry()->GetCrystalSize(1)/2+0.002) { + if (xyzd[1] < -GetGeometry()->GetCrystalSize(1)/2.+0.001){ //Entered close to forward surface TParticle * part = 0 ; - Int_t parent = gAlice->GetCurrentTrackNumber() ; + Int_t parent = gAlice->GetMCApp()->GetCurrentTrackNumber() ; while ( parent != -1 ) { - part = gAlice->Particle(parent) ; + part = gAlice->GetMCApp()->Particle(parent) ; part->SetBit(kKeepBit); parent = part->GetFirstMother() ; } @@ -443,6 +443,23 @@ void AliPHOSv1::StepManager(void) //Calculates de energy deposited in the crystal xyzte[4] = fAPDFactor * lightYield ; + Int_t primary =-1 ; + if(fIshunt == 1) + primary = gAlice->GetMCApp()->GetPrimary( gAlice->GetMCApp()->GetCurrentTrackNumber() ); + else if(fIshunt == 2){ + primary = gAlice->GetMCApp()->GetCurrentTrackNumber() ; + TParticle * part = gAlice->GetMCApp()->Particle(primary) ; + while ( !part->TestBit(kKeepBit) ) { + primary = part->GetFirstMother() ; + if(primary == -1) break ; //there is a possibility that particle passed e.g. thermal isulator and hits a side + //surface of the crystal. In this case it may have no primary at all. + //We can not easily separate this case from the case when this is part of the shower, + //developed in the neighboring crystal. + part = gAlice->GetMCApp()->Particle(primary) ; + } + } + + // add current hit to the hit list // Info("StepManager","%d %d", primary, tracknumber) ; AddHit(fIshunt, primary,tracknumber, absid, xyzte); @@ -457,7 +474,7 @@ void AliPHOSv1::StepManager(void) } //____________________________________________________________________________ -void AliPHOSv1::CPVDigitize (TLorentzVector p, Float_t *zxhit, Int_t moduleNumber, TClonesArray *cpvDigits) +void AliPHOSv1::CPVDigitize (TLorentzVector p, Float_t *zxhit, TClonesArray *cpvDigits) { // ------------------------------------------------------------------------ // Digitize one CPV hit: