]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TRD/AliTRDdigitizer.cxx
Generation of Lambda(1520) in Pythia 6.4
[u/mrichter/AliRoot.git] / TRD / AliTRDdigitizer.cxx
index 66a029d7869b47a7aef9d854fde438dfc8716691..b571eab672c8180d7af3993826a4721e1d6cd1b0 100644 (file)
@@ -82,6 +82,7 @@ AliTRDdigitizer::AliTRDdigitizer()
   ,fSDigitsManagerList(0)
   ,fTRD(0)
   ,fGeo(0)
+  ,fMcmSim(new AliTRDmcmSim)
   ,fEvent(0)
   ,fMasks(0)
   ,fCompress(kTRUE)
@@ -103,6 +104,7 @@ AliTRDdigitizer::AliTRDdigitizer(const Text_t *name, const Text_t *title)
   ,fSDigitsManagerList(0)
   ,fTRD(0)
   ,fGeo(0)
+  ,fMcmSim(new AliTRDmcmSim)
   ,fEvent(0)
   ,fMasks(0)
   ,fCompress(kTRUE)
@@ -125,6 +127,7 @@ AliTRDdigitizer::AliTRDdigitizer(AliRunDigitizer *manager
   ,fSDigitsManagerList(0)
   ,fTRD(0)
   ,fGeo(0)
+  ,fMcmSim(new AliTRDmcmSim)
   ,fEvent(0)
   ,fMasks(0)
   ,fCompress(kTRUE)
@@ -146,6 +149,7 @@ AliTRDdigitizer::AliTRDdigitizer(AliRunDigitizer *manager)
   ,fSDigitsManagerList(0)
   ,fTRD(0)
   ,fGeo(0)
+  ,fMcmSim(new AliTRDmcmSim)
   ,fEvent(0)
   ,fMasks(0)
   ,fCompress(kTRUE)
@@ -167,6 +171,7 @@ AliTRDdigitizer::AliTRDdigitizer(const AliTRDdigitizer &d)
   ,fSDigitsManagerList(0)
   ,fTRD(0)
   ,fGeo(0)
+  ,fMcmSim(new AliTRDmcmSim)
   ,fEvent(0)
   ,fMasks(0)
   ,fCompress(d.fCompress)
@@ -192,7 +197,7 @@ AliTRDdigitizer::~AliTRDdigitizer()
   }
 
   if (fSDigitsManager) {
-    delete fSDigitsManager;
+    // s-digitsmanager will be deleted via list
     fSDigitsManager     = 0;
   }
 
@@ -207,6 +212,11 @@ AliTRDdigitizer::~AliTRDdigitizer()
     fMasks       = 0;
   }
 
+  if (fMcmSim) {
+    delete fMcmSim;
+    fMcmSim = 0;
+  }
+
   if (fGeo) {
     delete fGeo;
     fGeo = 0;
@@ -608,10 +618,19 @@ Bool_t AliTRDdigitizer::MakeDigits()
   Int_t    *nhit = new Int_t[kNdet];
 
   AliTRDarraySignal *signals = 0x0;
+
+  // 
+  if (calibration->GetNumberOfTimeBinsDCS() != AliTRDSimParam::Instance()->GetNTimeBins()) {
+    AliWarning(Form("Number of time bins is different to OCDB value [SIM=%d, OCDB=%d]"
+                  ,AliTRDSimParam::Instance()->GetNTimeBins()
+                   ,calibration->GetNumberOfTimeBinsDCS()));
+  }
  
   // Sort all hits according to detector number
   if (!SortHits(hits,nhit)) {
     AliError("Sorting hits failed");
+    delete [] hits;
+    delete [] nhit;
     return kFALSE;
   }
 
@@ -629,11 +648,19 @@ Bool_t AliTRDdigitizer::MakeDigits()
       // Convert the hits of the current detector to detector signals
       if (!ConvertHits(det,hits[det],nhit[det],signals)) {
        AliError(Form("Conversion of hits failed for detector=%d",det));
+        delete [] hits;
+        delete [] nhit;
+        delete signals;
+        signals = 0x0;
         return kFALSE;
       }
       // Convert the detector signals to digits or s-digits
       if (!ConvertSignals(det,signals)) {
        AliError(Form("Conversion of signals failed for detector=%d",det));
+        delete [] hits;
+        delete [] nhit;
+        delete signals;
+        signals = 0x0;
        return kFALSE;
       }
 
@@ -647,9 +674,20 @@ Bool_t AliTRDdigitizer::MakeDigits()
 
   } // for: detector
 
+  if (!fSDigits) {
+    if (AliDataLoader *trklLoader = AliRunLoader::Instance()->GetLoader("TRDLoader")->GetDataLoader("tracklets")) {
+      if (trklLoader->Tree())
+        trklLoader->WriteData("OVERWRITE");
+    }
+  }
+    
   delete [] hits;
   delete [] nhit;
 
+  // Save the values for the raw data headers
+  fDigitsManager->GetDigitsParam()->SetNTimeBinsAll(AliTRDSimParam::Instance()->GetNTimeBins());
+  fDigitsManager->GetDigitsParam()->SetADCbaselineAll(AliTRDSimParam::Instance()->GetADCbaseline());
+
   return kTRUE;
 
 }
@@ -686,6 +724,7 @@ Bool_t AliTRDdigitizer::SortHits(Float_t **hits, Int_t *nhit)
   TTree *hitTree = gimme->TreeH();
   if (hitTree == 0x0) {
     AliError("Can not get TreeH");
+    delete [] lhit;
     return kFALSE;
   }
   fTRD->SetTreeAddress();
@@ -830,7 +869,7 @@ Bool_t AliTRDdigitizer::ConvertHits(Int_t det
                   * commonParam->GetSamplingFrequency())) - 1;
   }
 
-  Int_t   nTimeTotal   = fDigitsManager->GetDigitsParam()->GetNTimeBins();
+  Int_t   nTimeTotal   = simParam->GetNTimeBins();
   Float_t samplingRate = commonParam->GetSamplingFrequency();
   Float_t elAttachProp = simParam->GetElAttachProp() / 100.0; 
 
@@ -1184,7 +1223,7 @@ Bool_t AliTRDdigitizer::Signal2ADC(Int_t det, AliTRDarraySignal *signals)
 
   Int_t nRowMax    = fGeo->GetPadPlane(det)->GetNrows();
   Int_t nColMax    = fGeo->GetPadPlane(det)->GetNcols();
-  Int_t nTimeTotal = fDigitsManager->GetDigitsParam()->GetNTimeBins();
+  Int_t nTimeTotal = simParam->GetNTimeBins();
 
   // The gainfactor calibration objects
   const AliTRDCalDet *calGainFactorDet      = calibration->GetGainFactorDet();  
@@ -1228,7 +1267,7 @@ Bool_t AliTRDdigitizer::Signal2ADC(Int_t det, AliTRDarraySignal *signals)
 
       // Check whether pad is masked
       // Bridged pads are not considered yet!!!
-      if (calibration->IsPadMasked(det,col,row)) {
+      if (calibration->IsPadMasked(det,col,row) || calibration->IsPadNotConnected(det,col,row)) {
         continue;
       }
 
@@ -1300,7 +1339,7 @@ Bool_t AliTRDdigitizer::Signal2SDigits(Int_t det, AliTRDarraySignal *signals)
 
   Int_t nRowMax    = fGeo->GetPadPlane(det)->GetNrows();
   Int_t nColMax    = fGeo->GetPadPlane(det)->GetNcols();
-  Int_t nTimeTotal = fDigitsManager->GetDigitsParam()->GetNTimeBins();
+  Int_t nTimeTotal = AliTRDSimParam::Instance()->GetNTimeBins();
 
   // Get the container for the digits of this detector
 
@@ -1386,7 +1425,7 @@ Bool_t AliTRDdigitizer::Digits2SDigits(AliTRDdigitsManager * const manDig
 
     Int_t nRowMax    = fGeo->GetPadPlane(det)->GetNrows();
     Int_t nColMax    = fGeo->GetPadPlane(det)->GetNcols();
-    Int_t nTimeTotal = calibration->GetNumberOfTimeBins();
+    Int_t nTimeTotal = manDig->GetDigitsParam()->GetNTimeBins(det);
 
     // Get the calibration objects
     //calGainFactorROC      = calibration->GetGainFactorROC(det);
@@ -1410,6 +1449,10 @@ Bool_t AliTRDdigitizer::Digits2SDigits(AliTRDdigitsManager * const manDig
     tracks1->Allocate(nRowMax,nColMax,nTimeTotal);
     tracks2->Allocate(nRowMax,nColMax,nTimeTotal);
 
+    // Keep the digits param
+    manSDig->GetDigitsParam()->SetNTimeBinsAll(manDig->GetDigitsParam()->GetNTimeBins(0));
+    manSDig->GetDigitsParam()->SetADCbaselineAll(manDig->GetDigitsParam()->GetADCbaseline(0));
+
     if (digits->HasData()) {
 
       digits->Expand();
@@ -1530,16 +1573,24 @@ Bool_t AliTRDdigitizer::MergeSDigits()
     AliDebug(1,"Only one input file.");
   }
   
-  Int_t nTimeTotal = calibration->GetNumberOfTimeBins();  
   Int_t iMerge = 0;
 
   while (mergeSDigitsManager) {
 
     iMerge++;
-      
+
     // Loop through the detectors
     for (Int_t iDet = 0; iDet < AliTRDgeometry::Ndet(); iDet++) {
 
+      Int_t nTimeTotal = fSDigitsManager->GetDigitsParam()->GetNTimeBins(iDet);
+      if (mergeSDigitsManager->GetDigitsParam()->GetNTimeBins(iDet) != nTimeTotal) {
+        AliError(Form("Mismatch in the number of time bins [%d,%d] in detector %d"
+                     ,nTimeTotal
+                    ,mergeSDigitsManager->GetDigitsParam()->GetNTimeBins(iDet)
+                    ,iDet));
+        return kFALSE;
+      }
+
       Int_t nRowMax = fGeo->GetPadPlane(iDet)->GetNrows();
       Int_t nColMax = fGeo->GetPadPlane(iDet)->GetNcols();
          
@@ -1667,6 +1718,14 @@ Bool_t AliTRDdigitizer::ConvertSDigits()
 
   } // for: detector numbers
 
+  if (AliDataLoader *trklLoader = AliRunLoader::Instance()->GetLoader("TRDLoader")->GetDataLoader("tracklets")) {
+    if (trklLoader->Tree())
+      trklLoader->WriteData("OVERWRITE");
+  }
+
+  // Save the values for the raw data headers
+  fDigitsManager->GetDigitsParam()->SetNTimeBinsAll(AliTRDSimParam::Instance()->GetNTimeBins());
+  fDigitsManager->GetDigitsParam()->SetADCbaselineAll(AliTRDSimParam::Instance()->GetADCbaseline());
 
   return kTRUE;
 
@@ -1694,7 +1753,7 @@ Bool_t AliTRDdigitizer::CopyDictionary(Int_t det)
 
   Int_t nRowMax    = fGeo->GetPadPlane(det)->GetNrows();
   Int_t nColMax    = fGeo->GetPadPlane(det)->GetNcols();
-  Int_t nTimeTotal = calibration->GetNumberOfTimeBins();
+  Int_t nTimeTotal = AliTRDSimParam::Instance()->GetNTimeBins();
 
   Int_t row  = 0;
   Int_t col  = 0;
@@ -1888,9 +1947,6 @@ void AliTRDdigitizer::RunDigitalProcessing(Int_t det)
 
   AliTRDfeeParam *feeParam = AliTRDfeeParam::Instance();
 
-  //Create and initialize the mcm object 
-  AliTRDmcmSim* mcmfast = new AliTRDmcmSim(); 
-
   AliTRDarrayADC *digits = fDigitsManager->GetDigits(det);
   if (!digits)
     return;
@@ -1900,18 +1956,16 @@ void AliTRDdigitizer::RunDigitalProcessing(Int_t det)
   {
     for(Int_t mcm = 0; mcm < 16; mcm++)
     {
-      mcmfast->Init(det, rob, mcm); 
-      mcmfast->SetData(digits, fDigitsManager);
-      mcmfast->Filter();
+      fMcmSim->Init(det, rob, mcm); 
+      fMcmSim->SetDataByPad(digits, fDigitsManager);
+      fMcmSim->Filter();
       if (feeParam->GetTracklet()) {
-        mcmfast->Tracklet();
-        mcmfast->StoreTracklets();
+        fMcmSim->Tracklet();
+        fMcmSim->StoreTracklets();
       }
-      mcmfast->ZSMapping();
-      mcmfast->WriteData(digits);
+      fMcmSim->ZSMapping();
+      fMcmSim->WriteData(digits);
     }
   }
-
-  delete mcmfast;
-
 }
+