/* $Id$ */
+/* History of cvs commits:
+ *
+ * $Log$
+ * Revision 1.109 2007/03/01 11:37:37 kharlov
+ * Strip units changed from 8x1 to 8x2 (T.Pocheptsov)
+ *
+ * Revision 1.108 2007/02/02 09:40:50 alibrary
+ * Includes required by ROOT head
+ *
+ * Revision 1.107 2007/02/01 10:34:47 hristov
+ * Removing warnings on Solaris x86
+ *
+ * Revision 1.106 2006/11/14 17:11:15 hristov
+ * Removing inheritances from TAttLine, TAttMarker and AliRndm in AliModule. The copy constructor and assignment operators are moved to the private part of the class and not implemented. The corresponding changes are propagated to the detectors
+ *
+ * Revision 1.105 2006/09/13 07:31:01 kharlov
+ * Effective C++ corrections (T.Pocheptsov)
+ *
+ * Revision 1.104 2005/05/28 14:19:05 schutz
+ * Compilation warnings fixed by T.P.
+ *
+ */
+
//_________________________________________________________________________
// Implementation version v1 of PHOS Manager class
//---
// --- ROOT system ---
+#include <TClonesArray.h>
#include <TParticle.h>
#include <TVirtualMC.h>
//____________________________________________________________________________
AliPHOSv1::AliPHOSv1():
-AliPHOSv0()
+ fLightYieldMean(0.),
+ fIntrinsicPINEfficiency(0.),
+ fLightYieldAttenuation(0.),
+ fRecalibrationFactor(0.),
+ fElectronsPerGeV(0.),
+ fAPDGain(0.),
+ fLightFactor(0.),
+ fAPDFactor(0.)
{
-
- fLightYieldMean = 0. ;
- fIntrinsicPINEfficiency = 0. ;
- fLightYieldAttenuation = 0. ;
- fRecalibrationFactor = 0. ;
- fElectronsPerGeV = 0. ;
- fAPDGain = 0. ;
- fLightFactor = 0. ;
- fAPDFactor = 0. ;
-
+ //Def ctor.
}
//____________________________________________________________________________
AliPHOSv1::AliPHOSv1(const char *name, const char *title):
- AliPHOSv0(name,title)
+ AliPHOSv0(name,title),
+ fLightYieldMean(0.),
+ fIntrinsicPINEfficiency(0.),
+ fLightYieldAttenuation(0.),
+ fRecalibrationFactor(0.),
+ fElectronsPerGeV(0.),
+ fAPDGain(0.),
+ fLightFactor(0.),
+ fAPDFactor(0.)
{
//
// We store hits :
}
}
-//____________________________________________________________________________
-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 Id, Float_t * hits)
{
TLorentzVector pos ; // Lorentz vector of the track current position
Int_t copy ;
- TString name = GetGeometry()->GetName() ;
-
Int_t moduleNumber ;
- static Int_t idPCPQ = gMC->VolId("PCPQ");
+ static Int_t idPCPQ = -1;
+ if (strstr(fTitle.Data(),"noCPV") == 0)
+ idPCPQ = gMC->VolId("PCPQ");
+
if( gMC->CurrentVolID(copy) == idPCPQ &&
(gMC->IsTrackEntering() ) &&
gMC->TrackCharge() != 0) {
Float_t x2 = cpvDigit2->GetXpad() ;
Float_t z2 = cpvDigit2->GetYpad() ;
if (x1==x2 && z1==z2) {
- Float_t qsum = cpvDigit1->GetQpad() + cpvDigit2->GetQpad() ;
- cpvDigit2->SetQpad(qsum) ;
+ Float_t qsumpad = cpvDigit1->GetQpad() + cpvDigit2->GetQpad() ;
+ cpvDigit2->SetQpad(qsumpad) ;
cpvDigits->RemoveAt(idigit) ;
}
}
Int_t cell ;
gMC->CurrentVolOffID(2, cell);
- Int_t row = 1 + GetGeometry()->GetNZ() - strip % GetGeometry()->GetNZ() ;
- Int_t col = (Int_t) TMath::Ceil((Double_t) strip/GetGeometry()->GetNZ()) -1 ;
-
+ //Old formula for row is wrong. For example, I have strip 56 (28 for 2 x 8), row must be 1.
+ //But row == 1 + 56 - 56 % 56 == 57 (row == 1 + 28 - 28 % 28 == 29)
+ //Int_t row = 1 + GetGeometry()->GetEMCAGeometry()->GetNStripZ() - strip % (GetGeometry()->GetEMCAGeometry()->GetNStripZ()) ;
+ Int_t row = GetGeometry()->GetEMCAGeometry()->GetNStripZ() - (strip - 1) % (GetGeometry()->GetEMCAGeometry()->GetNStripZ()) ;
+ Int_t col = (Int_t) TMath::Ceil((Double_t) strip/(GetGeometry()->GetEMCAGeometry()->GetNStripZ())) -1 ;
+
+ // Absid for 8x2-strips. Looks nice :)
absid = (moduleNumber-1)*GetGeometry()->GetNCristalsInModule() +
- row + (col*GetGeometry()->GetEMCAGeometry()->GetNCellsInStrip() + cell-1)*GetGeometry()->GetNZ() ;
-
+ row * 2 + (col*GetGeometry()->GetEMCAGeometry()->GetNCellsXInStrip() + (cell - 1) / 2)*GetGeometry()->GetNZ() - (cell & 1 ? 1 : 0);
+
gMC->Gmtod(global, local, 1) ;
//Calculates the light yield, the number of photons produced in the