]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PMD/AliPMDDigitizer.cxx
- Add information in the trigger chamber efficiency object in order to take into...
[u/mrichter/AliRoot.git] / PMD / AliPMDDigitizer.cxx
index bdd4b76eec108d916a4a71be31e60c1ad6ed0753..012376dfad493e84983f0bf6af1ff42f15c53c13 100644 (file)
@@ -84,12 +84,14 @@ AliPMDDigitizer::AliPMDDigitizer() :
        {
          for (Int_t k = 0; k < fgkCol; k++)
            {
-             fCPV[i][j][k] = 0.;
-             fPRE[i][j][k] = 0.;
-             fCPVCounter[i][j][k] =  0; 
-             fPRECounter[i][j][k] =  0;
-             fCPVTrackNo[i][j][k] = -1;
-             fPRETrackNo[i][j][k] = -1;
+             fCPV[i][j][k]         = 0.;
+             fPRE[i][j][k]         = 0.;
+             fCPVCounter[i][j][k]  =  0; 
+             fPRECounter[i][j][k]  =  0;
+             fCPVTrackNo[i][j][k]  = -1;
+             fPRETrackNo[i][j][k]  = -1;
+             fCPVTrackPid[i][j][k] = -1;
+             fPRETrackPid[i][j][k] = -1;
            }
        }
     }
@@ -152,12 +154,14 @@ AliPMDDigitizer::AliPMDDigitizer(AliRunDigitizer* manager):
        {
          for (Int_t k = 0; k < fgkCol; k++)
            {
-             fCPV[i][j][k] = 0.;
-             fPRE[i][j][k] = 0.;
-             fCPVCounter[i][j][k] =  0; 
-             fPRECounter[i][j][k] =  0;
-             fCPVTrackNo[i][j][k] = -1;
-             fPRETrackNo[i][j][k] = -1;
+             fCPV[i][j][k]         = 0.;
+             fPRE[i][j][k]         = 0.;
+             fCPVCounter[i][j][k]  =  0; 
+             fPRECounter[i][j][k]  =  0;
+             fCPVTrackNo[i][j][k]  = -1;
+             fPRETrackNo[i][j][k]  = -1;
+             fCPVTrackPid[i][j][k] = -1;
+             fPRETrackPid[i][j][k] = -1;
            }
        }
     }
@@ -276,6 +280,9 @@ void AliPMDDigitizer::Hits2SDigits(Int_t ievt)
   AliDebug(1,Form("Event Number = %d",ievt));
   Int_t nparticles = fRunLoader->GetHeader()->GetNtrack();
   AliDebug(1,Form("Number of Particles = %d",nparticles));
+
+  //
+
   fRunLoader->GetEvent(ievt);
   // ------------------------------------------------------- //
   // Pointer to specific detector hits.
@@ -301,7 +308,7 @@ void AliPMDDigitizer::Hits2SDigits(Int_t ievt)
 
   for (Int_t track=0; track<ntracks;track++)
     {
-      gAlice->ResetHits();
+      gAlice->GetMCApp()->ResetHits();
       treeH->GetEvent(track);
       if (fPMD)
        {
@@ -325,7 +332,8 @@ void AliPMDDigitizer::Hits2SDigits(Int_t ievt)
                  statusOld   = -1;
                }
              Int_t igstatus = 0;
-             //------------------modified by Mriganka ----------------------
+
+             Int_t trnotemp = trackno;    // Modified on 25th Nov 2009
              if(ks==1||(imo = mparticle->GetFirstMother())<0 ){
                vx = mparticle->Vx();
                vy = mparticle->Vy();
@@ -346,9 +354,19 @@ void AliPMDDigitizer::Hits2SDigits(Int_t ievt)
                  vy = mparticle->Vy();
                  vz = mparticle->Vz();
                  
-                 trackno=imo;
-                               
+                 // Modified on 25th Nov 2009
+
+                 trnotemp = trackno;
+                  if(trackpid == 111)
+                   {
+                     trackno = trnotemp;
+                   }
+                  if(trackpid != 111)
+                   {
+                     trackno=imo;
                    }
+                 // end of modification on 25th Nov 2009
+               }
         
              if(trackpid==kGamma||trackpid==11||trackpid==-11||
                 trackpid==kPi0)igstatus=1;
@@ -358,15 +376,17 @@ void AliPMDDigitizer::Hits2SDigits(Int_t ievt)
              trackno=tracknoOld;
              
              //-----------------end of modification----------------
+             Float_t ptime = fPMDHit->GetTime()*1e6;   // time in microsec
+             if (ptime < 0. || ptime > 1.2) continue;  
+
              xPos = fPMDHit->X();
              yPos = fPMDHit->Y();
              zPos = fPMDHit->Z();
-             
+
              edep       = fPMDHit->GetEnergy();
              Int_t vol1 = fPMDHit->GetVolume(1); // Column
              Int_t vol2 = fPMDHit->GetVolume(2); // Row
-             Int_t vol7 = fPMDHit->GetVolume(7); // UnitModule
-             Int_t vol8 = fPMDHit->GetVolume(8); // SuperModule
+             Int_t vol7 = fPMDHit->GetVolume(4); // Serial Module No
 
 
              // -----------------------------------------//
@@ -377,9 +397,15 @@ void AliPMDDigitizer::Hits2SDigits(Int_t ievt)
              //  nrow = 96, ncol = 48                    //
              // -----------------------------------------//
 
-
-             
-             smnumber = (vol8-1)*6 + vol7;
+             if (vol7 < 24)
+               {
+                 smnumber = vol7;
+               }
+             else
+               {
+                 smnumber = vol7 - 24;
+               }
+             Int_t vol8 = smnumber/6 + 1;   // fake supermodule
 
              if (vol8 == 1 || vol8 == 2)
                {
@@ -393,18 +419,19 @@ void AliPMDDigitizer::Hits2SDigits(Int_t ievt)
                }
 
              AliDebug(2,Form("Zposition = %f Edeposition = %f",zPos,edep));
-             //Float_t zposition = TMath::Abs(zPos);
-             if (zPos < fZPos)
+
+             if (vol7 < 24)
                {
-                 // CPV
-                 fDetNo = 1;
+                 // PRE
+                 fDetNo = 0;
                }
-             else if (zPos > fZPos)
+             else
                {
-                 // PMD
-                 fDetNo = 0;
+                 // CPV
+                 fDetNo = 1;
                }
-             Int_t smn = smnumber - 1;
+
+             Int_t smn = smnumber;
              Int_t ixx = xpad     - 1;
              Int_t iyy = ypad     - 1;
              if (fDetNo == 0)
@@ -432,6 +459,7 @@ void AliPMDDigitizer::Hits2SDigits(Int_t ievt)
   Float_t deltaE      = 0.;
   Int_t   detno       = 0;
   Int_t   trno        = -1;
+  Int_t   trpid       = -99;
 
   for (Int_t idet = 0; idet < 2; idet++)
     {
@@ -455,7 +483,10 @@ void AliPMDDigitizer::Hits2SDigits(Int_t ievt)
                    }
                  if (deltaE > 0.)
                    {
-                     AddSDigit(trno,detno,ism,jrow,kcol,deltaE);
+                     // Natasha
+                     TParticle *mparticle = gAlice->GetMCApp()->Particle(trno);
+                     trpid = mparticle->GetPdgCode();
+                     AddSDigit(trno,trpid,detno,ism,jrow,kcol,deltaE);
                    }
                }
            }
@@ -493,6 +524,7 @@ void AliPMDDigitizer::Hits2Digits(Int_t ievt)
   AliDebug(1,Form("Event Number =  %d",ievt));
   Int_t nparticles = fRunLoader->GetHeader()->GetNtrack();
   AliDebug(1,Form("Number of Particles = %d", nparticles));
+
   fRunLoader->GetEvent(ievt);
   // ------------------------------------------------------- //
   // Pointer to specific detector hits.
@@ -525,7 +557,7 @@ void AliPMDDigitizer::Hits2Digits(Int_t ievt)
 
   for (Int_t track=0; track<ntracks;track++)
     {
-      gAlice->ResetHits();
+      gAlice->GetMCApp()->ResetHits();
       treeH->GetEvent(track);
       
       if (fPMD)
@@ -551,7 +583,8 @@ void AliPMDDigitizer::Hits2Digits(Int_t ievt)
                }
 
              Int_t igstatus = 0;
-             //-----------------------modified by Mriganka ------------------
+
+             Int_t trnotemp = trackno;   // modified on 25th Nov 2009
              if(ks==1||(imo = mparticle->GetFirstMother())<0 ){
                vx = mparticle->Vx();
                vy = mparticle->Vy();
@@ -572,9 +605,18 @@ void AliPMDDigitizer::Hits2Digits(Int_t ievt)
                  vy = mparticle->Vy();
                  vz = mparticle->Vz();
                  
-                 trackno=imo;
-                               
+                 // Modified on 25th Nov 2009
+                 
+                 trnotemp = trackno;
+                  if(trackpid == 111)
+                   {
+                     trackno = trnotemp;
                    }
+                  if(trackpid != 111)
+                   {
+                     trackno=imo;
+                   }
+               }
         
              if(trackpid==kGamma||trackpid==11||trackpid==-11||trackpid==kPi0)
                igstatus=1;
@@ -582,17 +624,17 @@ void AliPMDDigitizer::Hits2Digits(Int_t ievt)
              mtrackno=trackno;
              trackpid=trackpidOld;
              trackno=tracknoOld;
+
+             Float_t ptime = fPMDHit->GetTime()*1e6;
+             if (ptime < 0. || ptime > 1.2) continue;
              
-             //-----------------end of modification----------------
              xPos = fPMDHit->X();
              yPos = fPMDHit->Y();
              zPos = fPMDHit->Z();
              edep       = fPMDHit->GetEnergy();
              Int_t vol1 = fPMDHit->GetVolume(1); // Column
              Int_t vol2 = fPMDHit->GetVolume(2); // Row
-             Int_t vol7 = fPMDHit->GetVolume(7); // UnitModule
-             Int_t vol8 = fPMDHit->GetVolume(8); // SuperModule
-
+             Int_t vol7 = fPMDHit->GetVolume(4); // Serial Module No
 
              // -----------------------------------------//
              // In new geometry after adding electronics //
@@ -602,7 +644,15 @@ void AliPMDDigitizer::Hits2Digits(Int_t ievt)
              //  nrow = 96, ncol = 48                    //
              // -----------------------------------------//
              
-             smnumber = (vol8-1)*6 + vol7;
+             if (vol7 < 24)
+               {
+                 smnumber = vol7;
+               }
+             else
+               {
+                 smnumber = vol7 - 24;
+               }
+             Int_t vol8 = smnumber/6 + 1;    // fake supermodule
 
              if (vol8 == 1 || vol8 == 2)
                {
@@ -616,20 +666,29 @@ void AliPMDDigitizer::Hits2Digits(Int_t ievt)
                }
 
              AliDebug(2,Form("ZPosition = %f Edeposition = %d",zPos,edep));
-             //Float_t zposition = TMath::Abs(zPos);
 
-             if (zPos < fZPos)
+             if (vol7 < 24)
+               {
+                 // PRE
+                 fDetNo = 0;
+               }
+             else
                {
-                 // CPV
                  fDetNo = 1;
                }
-             else if (zPos > fZPos)
+             /*
+               if (zPos < fZPos)
                {
-                 // PMD
-                 fDetNo = 0;
+               // CPV
+               fDetNo = 1;
                }
-
-             Int_t smn = smnumber - 1;
+               else if (zPos > fZPos)
+               {
+               // PMD
+               fDetNo = 0;
+               }
+             */
+             Int_t smn = smnumber;
              Int_t ixx = xpad     - 1;
              Int_t iyy = ypad     - 1;
              if (fDetNo == 0)
@@ -660,6 +719,8 @@ void AliPMDDigitizer::Hits2Digits(Int_t ievt)
   Float_t deltaE = 0.;
   Int_t detno = 0;
   Int_t trno = 1;
+  Int_t trpid = -99;
+
   for (Int_t idet = 0; idet < 2; idet++)
   {
       for (Int_t ism = 0; ism < fgkTotUM; ism++)
@@ -672,13 +733,13 @@ void AliPMDDigitizer::Hits2Digits(Int_t ievt)
                  {
                      deltaE = fPRE[ism][jrow][kcol];
                      trno   = fPRETrackNo[ism][jrow][kcol];
-                     detno = 0;
+                     detno  = 0;
                  }
                  else if (idet == 1)
                  {
                      deltaE = fCPV[ism][jrow][kcol];
                      trno   = fCPVTrackNo[ism][jrow][kcol];
-                     detno = 1;
+                     detno  = 1;
                  }
                  if (deltaE > 0.)
                  {
@@ -700,15 +761,18 @@ void AliPMDDigitizer::Hits2Digits(Int_t ievt)
                      // Pedestal Decalibration
                      Int_t   pedmeanrms = 
                          fCalibPed->GetPedMeanRms(idet,ism,jrow,kcol);
-                     Int_t   pedrms1    = (Int_t) pedmeanrms%1000;
+                     Int_t   pedrms1    = (Int_t) pedmeanrms%100;
                      Float_t pedrms     = (Float_t)pedrms1/10.;
                      Float_t pedmean    = 
                          (Float_t) (pedmeanrms - pedrms1)/1000.0;
-                     //printf("%f %f\n",pedmean, pedrms);
                      if (adc > 0.)
                      {
                          adc += (pedmean + 3.0*pedrms);
-                         AddDigit(trno,detno,ism,jrow,kcol,adc);
+                         TParticle *mparticle
+                           = gAlice->GetMCApp()->Particle(trno);
+                         trpid = mparticle->GetPdgCode();
+                         
+                         AddDigit(trno,trpid,detno,ism,jrow,kcol,adc);
                      }
                  }
              } // column loop
@@ -720,7 +784,7 @@ void AliPMDDigitizer::Hits2Digits(Int_t ievt)
   
   fPMDLoader->WriteDigits("OVERWRITE");
   ResetCellADC();
-  
+
 }
 //____________________________________________________________________________
 
@@ -754,7 +818,7 @@ void AliPMDDigitizer::SDigits2Digits(Int_t ievt)
   if (!fDigits) fDigits = new TClonesArray("AliPMDdigit", 1000);
   treeD->Branch("PMDDigit", &fDigits, bufsize);
 
-  Int_t   trno, det, smn;
+  Int_t   trno, trpid, det, smn;
   Int_t   irow, icol;
   Float_t edep, adc;
 
@@ -770,6 +834,7 @@ void AliPMDDigitizer::SDigits2Digits(Int_t ievt)
        {
          pmdsdigit = (AliPMDsdigit*)fSDigits->UncheckedAt(ient);
          trno   = pmdsdigit->GetTrackNumber();
+         trpid  = pmdsdigit->GetTrackPid();
          det    = pmdsdigit->GetDetector();
          smn    = pmdsdigit->GetSMNumber();
          irow   = pmdsdigit->GetRow();
@@ -792,15 +857,13 @@ void AliPMDDigitizer::SDigits2Digits(Int_t ievt)
          }
          // Pedestal Decalibration
          Int_t   pedmeanrms = fCalibPed->GetPedMeanRms(det,smn,irow,icol);
-         Int_t   pedrms1    = (Int_t) pedmeanrms%1000;
+         Int_t   pedrms1    = (Int_t) pedmeanrms%100;
          Float_t pedrms     = (Float_t)pedrms1/10.;
          Float_t pedmean    = (Float_t) (pedmeanrms - pedrms1)/1000.0;
-         //printf("%f %f\n",pedmean, pedrms);
-         
          if(adc > 0.)
          {
              adc += (pedmean + 3.0*pedrms);
-             AddDigit(trno,det,smn,irow,icol,adc);
+             AddDigit(trno,trpid,det,smn,irow,icol,adc);
          }
 
        }
@@ -850,8 +913,9 @@ void AliPMDDigitizer::Exec(Option_t *option)
 
   Float_t adc;
   Float_t deltaE = 0.;
-  Int_t detno = 0;
-  Int_t trno = 1;
+  Int_t detno    = 0;
+  Int_t trno     = 1;
+  Int_t trpid    = -99;
 
   for (Int_t idet = 0; idet < 2; idet++)
     {
@@ -865,13 +929,15 @@ void AliPMDDigitizer::Exec(Option_t *option)
                    {
                      deltaE = fPRE[ism][jrow][kcol];
                      trno   = fPRETrackNo[ism][jrow][kcol];
-                     detno = 0;
+                     trpid  = fPRETrackPid[ism][jrow][kcol];
+                     detno  = 0;
                    }
                  else if (idet == 1)
                    {
                      deltaE = fCPV[ism][jrow][kcol];
                      trno   = fCPVTrackNo[ism][jrow][kcol];
-                     detno = 1;
+                     trpid  = fCPVTrackPid[ism][jrow][kcol];
+                     detno  = 1;
                    }
                  if (deltaE > 0.)
                    {
@@ -894,15 +960,14 @@ void AliPMDDigitizer::Exec(Option_t *option)
                      // Pedestal Decalibration
                      Int_t   pedmeanrms = 
                          fCalibPed->GetPedMeanRms(idet,ism,jrow,kcol);
-                     Int_t   pedrms1    = (Int_t) pedmeanrms%1000;
+                     Int_t   pedrms1    = (Int_t) pedmeanrms%100;
                      Float_t pedrms     = (Float_t)pedrms1/10.;
                      Float_t pedmean    = 
                          (Float_t) (pedmeanrms - pedrms1)/1000.0;
-                     //printf("%f %f\n",pedmean, pedrms);
                      if (adc > 0.)
                      {
                          adc += (pedmean + 3.0*pedrms);
-                         AddDigit(trno,detno,ism,jrow,kcol,adc);
+                         AddDigit(trno,trpid,detno,ism,jrow,kcol,adc);
                      }
 
                    }
@@ -1130,7 +1195,7 @@ void AliPMDDigitizer::MergeSDigits(Int_t filenumber, Int_t troffset)
   if (!fSDigits) fSDigits = new TClonesArray("AliPMDsdigit", 1000);
   branch->SetAddress(&fSDigits);
 
-  Int_t   itrackno, idet, ism;
+  Int_t   itrackno, itrackpid, idet, ism;
   Int_t   ixp, iyp;
   Float_t edep;
   Int_t nmodules = (Int_t) treeS->GetEntries();
@@ -1145,6 +1210,7 @@ void AliPMDDigitizer::MergeSDigits(Int_t filenumber, Int_t troffset)
        {
          pmdsdigit = (AliPMDsdigit*)fSDigits->UncheckedAt(ient);
          itrackno  = pmdsdigit->GetTrackNumber();
+         itrackpid = pmdsdigit->GetTrackPid();
          idet      = pmdsdigit->GetDetector();
          ism       = pmdsdigit->GetSMNumber();
          ixp       = pmdsdigit->GetRow();
@@ -1155,6 +1221,7 @@ void AliPMDDigitizer::MergeSDigits(Int_t filenumber, Int_t troffset)
              if (fPRE[ism][ixp][iyp] < edep)
                {
                  fPRETrackNo[ism][ixp][iyp] = troffset + itrackno;
+                 fPRETrackPid[ism][ixp][iyp] = itrackpid;
                }
              fPRE[ism][ixp][iyp] += edep;
            }
@@ -1163,6 +1230,7 @@ void AliPMDDigitizer::MergeSDigits(Int_t filenumber, Int_t troffset)
              if (fCPV[ism][ixp][iyp] < edep)
                {
                  fCPVTrackNo[ism][ixp][iyp] = troffset + itrackno;
+                 fCPVTrackPid[ism][ixp][iyp] = itrackpid;
                }
              fCPV[ism][ixp][iyp] += edep;
            }
@@ -1378,20 +1446,21 @@ void AliPMDDigitizer::MeV2ADC(Float_t mev, Float_t & adc) const
 {
   // This converts the simulated edep to ADC according to the
   // Test Beam Data
-  //PS Test in September 2003 and 2006
+  //PS Test in May 2009, Voltage @ 1350 V
   // KeV - ADC conversion for 12bit ADC
-  // Modified by Ajay
-  const Float_t kConstant   =  0.07;
-  const Float_t kErConstant =  0.1;
-  const Float_t kSlope      = 76.0;
-  const Float_t kErSlope    =  5.0;
+  // MPV data used for the fit and taken here
+
+  const Float_t kConstant   = -0.1602;
+  const Float_t kErConstant =  0.9914;
+  const Float_t kSlope      = 77.47;
+  const Float_t kErSlope    =  3.16;
   
   Float_t cons   = gRandom->Gaus(kConstant,kErConstant);
   Float_t slop   = gRandom->Gaus(kSlope,kErSlope);
   
   Float_t adc12bit = slop*mev*0.001 + cons;
   
+  if (adc12bit < 0.) adc12bit = 0.;
                           
   if(adc12bit < 1600.0)
     {
@@ -1403,25 +1472,27 @@ void AliPMDDigitizer::MeV2ADC(Float_t mev, Float_t & adc) const
     }
 }
 //____________________________________________________________________________
-void AliPMDDigitizer::AddSDigit(Int_t trnumber, Int_t det, Int_t smnumber,
-                               Int_t irow, Int_t icol, Float_t adc)
+void AliPMDDigitizer::AddSDigit(Int_t trnumber, Int_t trpid, Int_t det,
+                               Int_t smnumber, Int_t irow, Int_t icol,
+                               Float_t adc)
 {
   // Add SDigit
   //
   if (!fSDigits) fSDigits = new TClonesArray("AliPMDsdigit", 1000);
   TClonesArray &lsdigits = *fSDigits;
-  new(lsdigits[fNsdigit++])  AliPMDsdigit(trnumber,det,smnumber,irow,icol,adc);
+  new(lsdigits[fNsdigit++])  AliPMDsdigit(trnumber,trpid,det,smnumber,irow,icol,adc);
 }
 //____________________________________________________________________________
 
-void AliPMDDigitizer::AddDigit(Int_t trnumber, Int_t det, Int_t smnumber,
-                              Int_t irow, Int_t icol, Float_t adc)
+void AliPMDDigitizer::AddDigit(Int_t trnumber, Int_t trpid, Int_t det,
+                              Int_t smnumber, Int_t irow, Int_t icol,
+                              Float_t adc)
 {
   // Add Digit
   //
   if (!fDigits) fDigits = new TClonesArray("AliPMDdigit", 1000);
   TClonesArray &ldigits = *fDigits;
-  new(ldigits[fNdigit++]) AliPMDdigit(trnumber,det,smnumber,irow,icol,adc);
+  new(ldigits[fNdigit++]) AliPMDdigit(trnumber,trpid, det,smnumber,irow,icol,adc);
 }
 //____________________________________________________________________________
 
@@ -1480,10 +1551,12 @@ void AliPMDDigitizer::ResetCellADC()
        {
          for (Int_t k = 0; k < fgkCol; k++)
            {
-             fCPV[i][j][k] = 0.;
-             fPRE[i][j][k] = 0.;
-             fCPVTrackNo[i][j][k] = 0;
-             fPRETrackNo[i][j][k] = 0;
+             fCPV[i][j][k]         = 0.;
+             fPRE[i][j][k]         = 0.;
+             fCPVTrackNo[i][j][k]  = 0;
+             fPRETrackNo[i][j][k]  = 0;
+             fCPVTrackPid[i][j][k] = -1;
+             fPRETrackPid[i][j][k] = -1;
            }
        }
     }