]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PHOS/AliPHOSv1.cxx
Modification for DA (Christian Lippmann)
[u/mrichter/AliRoot.git] / PHOS / AliPHOSv1.cxx
index 6d221a3920bcbf51a3c14f427731542d1003a632..841e42b2dcb3e622954d4015e7c3e32e22699905 100644 (file)
 /* History of cvs commits:
  *
  * $Log$
+ * Revision 1.111  2007/07/24 09:41:19  morsch
+ * AliStack included for kKeepBit.
+ *
+ * Revision 1.110  2007/03/10 08:58:52  kharlov
+ * Protection for noCPV geometry
+ *
+ * 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.
  *
@@ -35,6 +56,7 @@
 
 
 // --- ROOT system ---
+#include <TClonesArray.h>
 #include <TParticle.h>
 #include <TVirtualMC.h>
 
@@ -48,6 +70,7 @@
 #include "AliPHOSv1.h"
 #include "AliRun.h"
 #include "AliMC.h"
+#include "AliStack.h"
 
 ClassImp(AliPHOSv1)
 
@@ -119,22 +142,6 @@ AliPHOSv1::AliPHOSv1(const char *name, const char *title):
   fAPDFactor              = (fRecalibrationFactor/100.) * fAPDGain ;   
 }
 
-AliPHOSv1::AliPHOSv1(AliPHOSv1 & phos) :
-  AliPHOSv0(phos),
-  fLightYieldMean(0.),
-  fIntrinsicPINEfficiency(0.),
-  fLightYieldAttenuation(0.),
-  fRecalibrationFactor(0.),
-  fElectronsPerGeV(0.),
-  fAPDGain(0.),
-  fLightFactor(0.),
-  fAPDFactor(0.)
-{
-  //Copy ctor. Can be wrong.
-  phos.Copy(*this) ; 
-}
-
-
 //____________________________________________________________________________
 AliPHOSv1::~AliPHOSv1()
 {
@@ -146,22 +153,6 @@ AliPHOSv1::~AliPHOSv1()
  }
 }
 
-//____________________________________________________________________________
-void AliPHOSv1::Copy(TObject & base)const
-{
-  TObject::Copy(base) ; 
-  AliPHOSv0::Copy(base) ;
-  AliPHOSv1 &phos = static_cast<AliPHOSv1 &>(base); 
-  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)
 {
@@ -227,22 +218,24 @@ void AliPHOSv1::StepManager(void)
   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) {      
     
     gMC -> TrackPosition(pos);
-    
+
     Float_t xyzm[3], xyzd[3] ;
     Int_t i;
     for (i=0; i<3; i++) xyzm[i] = pos[i];
-    gMC -> Gmtod (xyzm, xyzd, 1);    // transform coordinate from master to daughter system
-    
+    gMC -> Gmtod (xyzm, xyzd, 1);    // transform coordinate from master to daughter system    
+
+
     Float_t        xyd[3]={0,0,0}   ;   //local position of the entering
     xyd[0]  = xyzd[0];
     xyd[1]  =-xyzd[2];
@@ -286,8 +279,8 @@ void AliPHOSv1::StepManager(void)
        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) ;
        }
       }
@@ -337,10 +330,6 @@ void AliPHOSv1::StepManager(void)
     xyzte[1] = pos[1] ;
     xyzte[2] = pos[2] ;
 
-    Float_t global[3], local[3] ;
-    global[0] = pos[0] ;
-    global[1] = pos[1] ;
-    global[2] = pos[2] ;
     Float_t lostenergy = gMC->Edep(); 
     
     //Put in the TreeK particle entering PHOS and all its parents
@@ -375,24 +364,25 @@ void AliPHOSv1::StepManager(void)
       gMC->CurrentVolOffID(3, strip);
       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() ;
-      
-      gMC->Gmtod(global, local, 1) ;
+                   row * 2 + (col*GetGeometry()->GetEMCAGeometry()->GetNCellsXInStrip() + (cell - 1) / 2)*GetGeometry()->GetNZ() - (cell & 1 ? 1 : 0);
+
       
       //Calculates the light yield, the number of photons produced in the
       //crystal 
-      Float_t lightYield = gRandom->Poisson(fLightFactor * lostenergy *
-                                           exp(-fLightYieldAttenuation *
-                                               (local[1]+GetGeometry()->GetCrystalSize(1)/2.0 ))
-                                           ) ;
+      //There is no dependence of reponce on distance from energy deposition to APD
+      Float_t lightYield = gRandom->Poisson(fLightFactor * lostenergy) ;
 
       //Calculates de energy deposited in the crystal  
-      xyzte[4] = fAPDFactor * lightYield  ;
+      xyzte[4] = fAPDFactor * lightYield ;
       
       Int_t primary ;
       if(fIshunt == 2){