bugs fixed
authorbnandi <bnandi@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 4 Apr 2007 10:12:24 +0000 (10:12 +0000)
committerbnandi <bnandi@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 4 Apr 2007 10:12:24 +0000 (10:12 +0000)
PMD/AliPMDDDLRawData.cxx
PMD/AliPMDRawStream.cxx
PMD/AliPMDRawToSDigits.cxx

index 43db62e..bdad782 100644 (file)
@@ -355,6 +355,7 @@ void AliPMDDDLRawData::GetUMDigitsData(TTree *treeD, Int_t imodule,
                                       UInt_t busPatch[][1536])
 {
   // Retrives digits data UnitModule by UnitModule
+
   UInt_t baseword;
   UInt_t mcmno, chno;
   UInt_t adc;
@@ -391,10 +392,6 @@ void AliPMDDDLRawData::GetUMDigitsData(TTree *treeD, Int_t imodule,
       modulePerDDL = 12;
     }
 
-
-
-
-
   TString fileName(gSystem->Getenv("ALICE_ROOT"));
 
   if(ddlno == 0)
@@ -519,9 +516,6 @@ void AliPMDDDLRawData::TransformS2H(Int_t smn, Int_t &irow, Int_t &icol)
       icolnew = icol;
     }
 
-  // In the new geometry always Geant (0,0) and Hardware (0,0) start
-  // from the top left corner
-
   irow = irownew;
   icol = icolnew;
 
@@ -582,16 +576,14 @@ void AliPMDDDLRawData::GetMCMCh(Int_t ddlno, Int_t row, Int_t col,
              // PRE plane, SU Mod = 0, 1
              mcmno = (col-scol)/4;
              
-           } // end of ddl 0 and 1
+           }
          else if (ddlno == 2 || ddlno == 3)
            {
              // PRE plane,  SU Mod = 2, 3
              Int_t icolnew = (col - scol)/4;
              mcmno = tmcm - 1 - icolnew;
-           }// end of ddl 2 and 3
-
-
-         else if (ddlno == 4 ||ddlno == 5 )
+           }
+         else if (ddlno == 4 )
            {
              // CPV plane,  SU Mod = 0, 3 : ddl = 4
              
@@ -602,7 +594,8 @@ void AliPMDDDLRawData::GetMCMCh(Int_t ddlno, Int_t row, Int_t col,
                    {
                      mcmno = 12 + (col-scol)/4;
                    }
-                 else if(row >= midrow && row < erow)
+                 else if(row >= midrow && row <= erow)
+                 
                    {
                      mcmno = (col-scol)/4;
                    }
@@ -614,27 +607,60 @@ void AliPMDDDLRawData::GetMCMCh(Int_t ddlno, Int_t row, Int_t col,
                  if(rowdiff > 16)
                    {
                      Int_t midrow = srow + 16;
-                     if (row >= midrow && row < erow)
+                     if (row >= midrow && row <= erow)
                        {
-                         Int_t icolnew = (col - scol)/4;
-                         mcmno = 24 - 1 - icolnew;
-                         
+                         mcmno = 12 + (ecol -col)/4;
                        }
                      else if (row >= srow && row < midrow)
                        {
-                         Int_t icolnew = (col - scol)/4;
-                         mcmno = 12 - 1 - icolnew; 
+                         mcmno = (ecol - col)/4;
                        }
                    }
-                 else 
+                 else if (rowdiff < 16) 
                    {
-                     Int_t icolnew = (col - scol)/4;
-                     mcmno = 12 - 1 - icolnew;
+                     mcmno = (ecol - col)/4;
                    } 
                }
            }
-
-       }  
+         else if ( ddlno == 5)
+           {
+             // CPV plane,  SU Mod = 0, 3 : ddl = 4
+             
+             if(ibus <= 17)
+               {
+                 Int_t midrow = srow + 16;
+                 if(row >= srow && row < midrow)
+                   {
+                     mcmno = 12 + (col-scol)/4;
+                   }
+                 else if(row >= midrow && row <= erow)
+                   {
+                     mcmno = (col-scol)/4;
+                   }
+               }
+             
+             else if (ibus > 17)
+               {
+                 Int_t rowdiff = endRowBus[ibus] - startRowBus[ibus];
+                 if(rowdiff > 16)
+                   {
+                     Int_t midrow = srow + 16;
+                     if (row >= midrow && row <= erow)
+                       {
+                         mcmno = 12 + (ecol -col)/4;
+                       }
+                     else if (row >= srow && row < midrow)
+                       {
+                         mcmno = (ecol - col)/4;
+                       }
+                   }
+                 else if (rowdiff < 16) 
+                   {
+                     mcmno = (ecol - col)/4;
+                   } 
+               }
+           }
+       }
     }
 } 
 
index ba3cca9..aa451bc 100644 (file)
@@ -160,7 +160,6 @@ Bool_t AliPMDRawStream::DdlData(Int_t indexDDL, TObjArray *pmdddlcont)
   Int_t startRowBus[kNPatchBus], endRowBus[kNPatchBus];
   Int_t startColBus[kNPatchBus], endColBus[kNPatchBus];
 
-
   for (Int_t ibus = 0; ibus < kNPatchBus; ibus++)
     {
       mcmperBus[ibus]   = -1;
@@ -170,7 +169,6 @@ Bool_t AliPMDRawStream::DdlData(Int_t indexDDL, TObjArray *pmdddlcont)
       endColBus[ibus]   = -1;
     }
 
-
   for (Int_t im = 0; im < modulePerDDL; im++)
     {
       infile >> modno;
@@ -189,11 +187,8 @@ Bool_t AliPMDRawStream::DdlData(Int_t indexDDL, TObjArray *pmdddlcont)
        }
     }
 
-
-
   infile.close();
 
-
   AliPMDBlockHeader    blockHeader;
   AliPMDDspHeader      dspHeader;
   AliPMDPatchBusHeader pbusHeader;
@@ -211,11 +206,10 @@ Bool_t AliPMDRawStream::DdlData(Int_t indexDDL, TObjArray *pmdddlcont)
   Int_t dspHeaderWord[10];
   Int_t pbusHeaderWord[4];
 
-  Int_t ilowLimit = 0;
-  Int_t iuppLimit = 0;
-
+  Int_t ilowLimit       = 0;
+  Int_t iuppLimit       = 0;
   Int_t blRawDataLength = 0;
-  Int_t iwordcount = 0;
+  Int_t iwordcount      = 0;
 
 
   for (Int_t iblock = 0; iblock < 2; iblock++)
@@ -223,7 +217,6 @@ Bool_t AliPMDRawStream::DdlData(Int_t indexDDL, TObjArray *pmdddlcont)
       ilowLimit = iuppLimit;
       iuppLimit = ilowLimit + kblHLen;
 
-
       for (Int_t i = ilowLimit; i < iuppLimit; i++)
        {
          blHeaderWord[i-ilowLimit] = (Int_t) buffer[i];
@@ -247,7 +240,6 @@ Bool_t AliPMDRawStream::DdlData(Int_t indexDDL, TObjArray *pmdddlcont)
 
          for (Int_t ibus = 0; ibus < 5; ibus++)
            {
-
              ilowLimit = iuppLimit;
              iuppLimit = ilowLimit + kpbusHLen;
 
@@ -316,7 +308,6 @@ Bool_t AliPMDRawStream::DdlData(Int_t indexDDL, TObjArray *pmdddlcont)
       if (iwordcount == blRawDataLength) break;
 
     } // end of BLOCK
-
   
   delete [] buffer;
 
@@ -371,36 +362,38 @@ void AliPMDRawStream::GetRowCol(Int_t ddlno, Int_t pbusid,
     {
       if (pbusid  < 18)
        {
-         if(mcmno > 11)
-           {
-             row = startRowBus[pbusid] + irownew;
-             col = startColBus[pbusid] + (mcmno-12)*4 + icolnew;
-           }
-         else
+         if (mcmno <= 11)
            {
              // Add 16 to skip the 1st 15 rows
              row = startRowBus[pbusid] + irownew + 16;
              col = startColBus[pbusid] + (mcmno)*4 + icolnew;
            }
+         else if(mcmno > 11)
+           {
+             row = startRowBus[pbusid] + irownew;
+             col = startColBus[pbusid] + (mcmno-12)*4 + icolnew;
+           }
        }
       else if(pbusid > 17)
        {
-         if(mcmno > 11)
-           {
-             row = endRowBus[pbusid] - (15 - irownew)  ;
-             col = endColBus[pbusid] - (mcmno - 12)*4 - (3 - icolnew);
-           }
-         else 
+         if (mcmno <= 11)
            {
+             col = endColBus[pbusid] - mcmno*4 - (3 - icolnew); 
+
              if(endRowBus[pbusid] - startRowBus[pbusid] > 16)
                row = endRowBus[pbusid] - (15 - irownew) - 16 ;
              else
                row = endRowBus[pbusid] - (15 - irownew) ;
-             col = endColBus[pbusid] - mcmno*4 - (3 - icolnew); 
+             
+
+           }
+         else if(mcmno > 11)
+           {
+             row = endRowBus[pbusid] - (15 - irownew)  ;
+             col = endColBus[pbusid] - (mcmno - 12)*4 - (3 - icolnew);
            }
        }
     }
-  
   else if (ddlno == 5)
     {
       if (pbusid  <= 17)
index a866156..6cb22ce 100644 (file)
@@ -95,7 +95,7 @@ AliPMDRawToSDigits::~AliPMDRawToSDigits()
 
 void AliPMDRawToSDigits::Raw2SDigits(AliRunLoader *runLoader, AliRawReader *rawReader)
 {
-  // Converts RAW data to digits
+  // Converts RAW data to sdigits
   //
   TObjArray pmdddlcont;
   AliLoader *pmdLoader = runLoader->GetLoader("PMDLoader");
@@ -113,40 +113,33 @@ void AliPMDRawToSDigits::Raw2SDigits(AliRunLoader *runLoader, AliRawReader *rawR
   const Int_t kDDL = AliDAQ::NumberOfDdls("PMD");
   const Int_t kRow = 48;
   const Int_t kCol = 96;
+  const Int_t kSMN = 48;
 
   Int_t idet = 0;
-  Int_t iSMN = 0;
   Int_t indexsmn = 0;
-
-  for (Int_t indexDDL = 0; indexDDL < kDDL; indexDDL++)
+  Int_t ismn = 0;
+  
+  Int_t ***precpvADC;
+  precpvADC = new int **[kSMN];
+  for (Int_t i=0; i<kSMN; i++) precpvADC[i] = new int *[kRow];
+  for (Int_t i=0; i<kSMN;i++)
     {
-
-      if (indexDDL < 4)
-       {
-         iSMN = 6;
-       }
-      else if (indexDDL >= 4)
-       {
-         iSMN = 12;
-       }
-      Int_t ***precpvADC;
-      precpvADC = new int **[iSMN];
-      for (Int_t i=0; i<iSMN; i++) precpvADC[i] = new int *[kRow];
-      for (Int_t i=0; i<iSMN;i++)
-       {
-         for (Int_t j=0; j<kRow; j++) precpvADC[i][j] = new int [kCol];
-       }
-      for (Int_t i = 0; i < iSMN; i++)
+      for (Int_t j=0; j<kRow; j++) precpvADC[i][j] = new int [kCol];
+    }
+  for (Int_t i = 0; i < kSMN; i++)
+    {
+      for (Int_t j = 0; j < kRow; j++)
        {
-         for (Int_t j = 0; j < kRow; j++)
+         for (Int_t k = 0; k < kCol; k++)
            {
-             for (Int_t k = 0; k < kCol; k++)
-               {
-                 precpvADC[i][j][k] = 0;
-               }
+             precpvADC[i][j][k] = 0;
            }
        }
-      
+    }
+  
+  for (Int_t indexDDL = 0; indexDDL < kDDL; indexDDL++)
+    {
+
       rawReader->Reset();
       AliPMDRawStream pmdinput(rawReader);
       rawReader->Select("PMD", indexDDL, indexDDL);
@@ -166,106 +159,81 @@ void AliPMDRawToSDigits::Raw2SDigits(AliRunLoader *runLoader, AliRawReader *rawR
          Int_t col = pmdddl->GetColumn();
          Int_t sig = pmdddl->GetSignal();
          
-         
          if (indexDDL < 4)
            {
              if (det != 0)
                AliError(Form("*DDL %d and Detector NUMBER %d NOT MATCHING *",
                              indexDDL, det));
-             indexsmn = smn - indexDDL * 6;
+             indexsmn = smn;
            }
-         else if (indexDDL == 4)
+         else if (indexDDL == 4 || indexDDL == 5)
            {
              if (det != 1)
                AliError(Form("*DDL %d and Detector NUMBER %d NOT MATCHING *",
                              indexDDL, det));
-             if (smn < 6)
-               {
-                 indexsmn = smn;
-               }
-             else if (smn >= 18 && smn < 24)
-               {
-                 indexsmn = smn - 12;
-               }
+             indexsmn = smn + 24;
            }
-         else if (indexDDL == 5)
-           {
-             if (det != 1)
-               AliError(Form("*DDL %d and Detector NUMBER %d NOT MATCHING *",
-                             indexDDL, det));
-             if (smn >= 6 && smn < 12)
-               {
-                 indexsmn = smn - 6;
-               }
-             else if (smn >= 12 && smn < 18)
-               {
-                 indexsmn = smn - 6;
-               }
-           }         
+
          precpvADC[indexsmn][row][col] = sig;
        }
       
       pmdddlcont.Clear();
       
-      // Add the sdigits here
+    } // DDL Loop
+      
+  // Add the sdigits here
+  
+  for ( indexsmn = 0; indexsmn < kSMN; indexsmn++)
+    {
 
-      Int_t ismn = 0;
-      for (Int_t indexsmn = 0; indexsmn < iSMN; indexsmn++)
+      if (indexsmn < 23)
        {
-         if (indexDDL < 4)
-           {
-             ismn = indexsmn + indexDDL * 6;
-             idet = 0;
-           }
-         else if (indexDDL == 4)
-           {
-             if (indexsmn < 6)
-               {
-                 ismn = indexsmn;
-               }
-             else if (indexsmn >= 6 && indexsmn < 12)
-               {
-                 ismn = indexsmn + 12;
-               }
-             idet = 1;
-           }
-         else if (indexDDL == 5)
+         idet = 0;
+         ismn = indexsmn;
+       }
+      else if (indexsmn > 23)
+       {
+         idet = 0;
+         ismn = indexsmn - 24;
+       }
+      for (Int_t irow = 0; irow < kRow; irow++)
+       {
+         for (Int_t icol = 0; icol < kCol; icol++)
            {
-             if (indexsmn < 6)
-               {
-                 ismn = indexsmn + 6;
-               }
-             else if (indexsmn >= 6 && indexsmn < 12)
-               {
-                 ismn = indexsmn + 6;
-               }
-             idet = 1;
-           }
 
-         for (Int_t irow = 0; irow < kRow; irow++)
-           {
-             for (Int_t icol = 0; icol < kCol; icol++)
+             Int_t trno = -99999;
+             Int_t sig1 = precpvADC[indexsmn][irow][icol];
+             
+             // plug in a function to convert to adc to MeV
+             Float_t edep = 0.;
+             if (sig1 > 0)
                {
-
-                 Int_t trno = -99999;
-                 Int_t sig1 = precpvADC[indexsmn][irow][icol];
-                 
-                 // plug in a function to convert to adc to MeV
-                 Float_t edep = 0.;
-                 if (sig1 > 0)
-                   {
-                     AdcToMeV(sig1,edep);
-                     AddSDigit(trno,idet,ismn,irow,icol,edep);
-                   }
-               } // row
-           }     // col
-
-         treeS->Fill();
-         ResetSDigit();
-       }         
-    } // DDL Loop
+                 AdcToMeV(sig1,edep);
+                 AddSDigit(trno,idet,ismn,irow,icol,edep);
+               }
+           } // row
+       }     // col
+      
+      treeS->Fill();
+      ResetSDigit();
+    }
 
   pmdLoader->WriteSDigits("OVERWRITE");
+
+  // Delete all the pointers
+  
+  for (Int_t i = 0; i < kSMN; i++)
+    {
+      for (Int_t j = 0; j < kRow; j++)
+       {
+         delete [] precpvADC[i][j];
+       }
+    }
+  for (Int_t j = 0; j < kSMN; j++)
+    {
+      delete [] precpvADC[j];
+    }
+  delete [] precpvADC;
   
 }
 // ------------------------------------------------------------------------- //
@@ -274,7 +242,7 @@ void AliPMDRawToSDigits::Raw2Digits(AliRunLoader *runLoader, AliRawReader *rawRe
   // Converts RAW data to digits
   //
   TObjArray pmdddlcont;
-
+  
   AliLoader *pmdLoader = runLoader->GetLoader("PMDLoader");
   
   TTree* treeD = pmdLoader->TreeD();
@@ -286,44 +254,35 @@ void AliPMDRawToSDigits::Raw2Digits(AliRunLoader *runLoader, AliRawReader *rawRe
   Int_t bufsize = 16000;
   if (!fDigits) fDigits = new TClonesArray("AliPMDdigit", 1000);
   treeD->Branch("PMDDigit", &fDigits, bufsize); 
-
+  
   const Int_t kDDL = AliDAQ::NumberOfDdls("PMD");
   const Int_t kRow = 48;
   const Int_t kCol = 96;
-
+  const Int_t kSMN = 48;
+  
   Int_t idet = 0;
-  Int_t iSMN = 0;
+  Int_t ismn = 0;
   Int_t indexsmn = 0;
-
-  for (Int_t indexDDL = 0; indexDDL < kDDL; indexDDL++)
+  
+  Int_t ***precpvADC;
+  precpvADC = new int **[kSMN];
+  for (Int_t i=0; i<kSMN; i++) precpvADC[i] = new int *[kRow];
+  for (Int_t i=0; i<kSMN;i++)
     {
-
-      if (indexDDL < 4)
-       {
-         iSMN = 6;
-       }
-      else if (indexDDL >= 4)
-       {
-         iSMN = 12;
-       }
-      Int_t ***precpvADC;
-      precpvADC = new int **[iSMN];
-      for (Int_t i=0; i<iSMN; i++) precpvADC[i] = new int *[kRow];
-      for (Int_t i=0; i<iSMN;i++)
-       {
-         for (Int_t j=0; j<kRow; j++) precpvADC[i][j] = new int [kCol];
-       }
-      for (Int_t i = 0; i < iSMN; i++)
+      for (Int_t j=0; j<kRow; j++) precpvADC[i][j] = new int [kCol];
+    }
+  for (Int_t i = 0; i < kSMN; i++)
+    {
+      for (Int_t j = 0; j < kRow; j++)
        {
-         for (Int_t j = 0; j < kRow; j++)
+         for (Int_t k = 0; k < kCol; k++)
            {
-             for (Int_t k = 0; k < kCol; k++)
-               {
-                 precpvADC[i][j][k] = 0;
-               }
+             precpvADC[i][j][k] = 0;
            }
        }
-      
+    }
+  for (Int_t indexDDL = 0; indexDDL < kDDL; indexDDL++)
+    {    
       rawReader->Reset();
       AliPMDRawStream pmdinput(rawReader);
       rawReader->Select("PMD", indexDDL, indexDDL);
@@ -351,98 +310,68 @@ void AliPMDRawToSDigits::Raw2Digits(AliRunLoader *runLoader, AliRawReader *rawRe
              if (det != 0)
                AliError(Form("*DDL %d and Detector NUMBER %d NOT MATCHING *",
                              indexDDL, det));
-             indexsmn = smn - indexDDL * 6;
-           }
-         else if (indexDDL == 4)
-           {
-             if (det != 1)
-               AliError(Form("*DDL %d and Detector NUMBER %d NOT MATCHING *",
-                             indexDDL, det));
-             if (smn < 6)
-               {
-                 indexsmn = smn;
-               }
-             else if (smn >= 18 && smn < 24)
-               {
-                 indexsmn = smn - 12;
-               }
+             indexsmn = smn ;
            }
-         else if (indexDDL == 5)
+         else if (indexDDL == 4 || indexDDL == 5)
            {
              if (det != 1)
                AliError(Form("*DDL %d and Detector NUMBER %d NOT MATCHING *",
                              indexDDL, det));
-             if (smn >= 6 && smn < 12)
-               {
-                 indexsmn = smn - 6;
-               }
-             else if (smn >= 12 && smn < 18)
-               {
-                 indexsmn = smn - 6;
-               }
+             indexsmn = smn + 24;
            }         
          precpvADC[indexsmn][row][col] = sig;
        }
       
       pmdddlcont.Clear();
+    } // DDL Loop  
       
-      // Add the digits here
-      
-      Int_t ismn = 0;
-      for (Int_t indexsmn = 0; indexsmn < iSMN; indexsmn++)
+  // Add the digits here
+  for (indexsmn = 0; indexsmn < kSMN; indexsmn++)
+    {
+      if (indexsmn < 23)
        {
-         if (indexDDL < 4)
-           {
-             ismn = indexsmn + indexDDL * 6;
-             idet = 0;
-           }
-         else if (indexDDL == 4)
-           {
-             if (indexsmn < 6)
-               {
-                 ismn = indexsmn;
-               }
-             else if (indexsmn >= 6 && indexsmn < 12)
-               {
-                 ismn = indexsmn + 12;
-               }
-             idet = 1;
-           }
-         else if (indexDDL == 5)
+         ismn = indexsmn;
+         idet = 0;
+       }
+      else if (indexsmn > 23)
+       {
+         ismn = indexsmn -24;
+         idet = 1;
+       }
+      for (Int_t irow = 0; irow < kRow; irow++)
+       {
+         for (Int_t icol = 0; icol < kCol; icol++)
            {
-             if (indexsmn < 6)
+             Int_t trno = -99999;
+             Int_t sig1 = precpvADC[indexsmn][irow][icol];
+             
+             // plug in a function to convert to adc to MeV
+             if (sig1 > 0)
                {
-                 ismn = indexsmn + 6;
+                 AddDigit(trno,idet,ismn,irow,icol,sig1);
                }
-             else if (indexsmn >= 6 && indexsmn < 12)
-               {
-                 ismn = indexsmn + 6;
-               }
-             idet = 1;
-           }
-
-         for (Int_t irow = 0; irow < kRow; irow++)
-           {
-             for (Int_t icol = 0; icol < kCol; icol++)
-               {
-                 Int_t trno = -99999;
-                 Int_t sig1 = precpvADC[indexsmn][irow][icol];
-                 
-                 // plug in a function to convert to adc to MeV
-                 if (sig1 > 0)
-                   {
-                     AddDigit(trno,idet,ismn,irow,icol,sig1);
-                   }
-               } // row
-           }     // col
-         treeD->Fill();
-         ResetDigit();
-       }         
-         
-    } // DDL Loop
+           } // row
+       }     // col
+      treeD->Fill();
+      ResetDigit();
+    }    
   
   pmdLoader->WriteDigits("OVERWRITE");
 
+  // Delete all the pointers
+
+  for (Int_t i = 0; i < kSMN; i++)
+    {
+      for (Int_t j = 0; j < kRow; j++)
+       {
+         delete [] precpvADC[i][j];
+       }
+    }
+  for (Int_t j = 0; j < kSMN; j++)
+    {
+      delete [] precpvADC[j];
+    }
+  delete [] precpvADC;
 }
 // ------------------------------------------------------------------------- //