]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PMD/AliPMDDigitizer.cxx
da documentation page is defined in the Link
[u/mrichter/AliRoot.git] / PMD / AliPMDDigitizer.cxx
index ff7143d2f3e9e349f1914758d07e6b316bc3cf59..0df390b3bb818990d5df70571f2b452a4c91e867 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)
        {
@@ -438,6 +445,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++)
     {
@@ -461,7 +469,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);
                    }
                }
            }
@@ -499,6 +510,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.
@@ -531,7 +543,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)
@@ -673,6 +685,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++)
@@ -685,13 +699,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.)
                  {
@@ -720,7 +734,11 @@ void AliPMDDigitizer::Hits2Digits(Int_t ievt)
                      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
@@ -732,7 +750,7 @@ void AliPMDDigitizer::Hits2Digits(Int_t ievt)
   
   fPMDLoader->WriteDigits("OVERWRITE");
   ResetCellADC();
-  
+
 }
 //____________________________________________________________________________
 
@@ -766,7 +784,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;
 
@@ -782,6 +800,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();
@@ -810,7 +829,7 @@ void AliPMDDigitizer::SDigits2Digits(Int_t ievt)
          if(adc > 0.)
          {
              adc += (pedmean + 3.0*pedrms);
-             AddDigit(trno,det,smn,irow,icol,adc);
+             AddDigit(trno,trpid,det,smn,irow,icol,adc);
          }
 
        }
@@ -860,8 +879,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++)
     {
@@ -875,13 +895,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.)
                    {
@@ -911,7 +933,7 @@ void AliPMDDigitizer::Exec(Option_t *option)
                      if (adc > 0.)
                      {
                          adc += (pedmean + 3.0*pedrms);
-                         AddDigit(trno,detno,ism,jrow,kcol,adc);
+                         AddDigit(trno,trpid,detno,ism,jrow,kcol,adc);
                      }
 
                    }
@@ -1139,7 +1161,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();
@@ -1154,6 +1176,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();
@@ -1164,6 +1187,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;
            }
@@ -1172,6 +1196,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;
            }
@@ -1387,20 +1412,22 @@ 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
   // 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;
+  // Data provided by Ajay and agreed by Dr. Viyogi
+  // MPV data used for the fit and taken here
+
+  const Float_t kConstant   = -9.22;
+  const Float_t kErConstant =  0.602225;
+  const Float_t kSlope      = 79.1119;
+  const Float_t kErSlope    =  0.844047;
   
   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)
     {
@@ -1412,25 +1439,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);
 }
 //____________________________________________________________________________
 
@@ -1489,10 +1518,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;
            }
        }
     }