]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Modifications for embedding into raw data
authorcblume <cblume@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 30 Jun 2009 15:12:22 +0000 (15:12 +0000)
committercblume <cblume@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 30 Jun 2009 15:12:22 +0000 (15:12 +0000)
TRD/AliTRD.cxx
TRD/AliTRDdigitizer.cxx
TRD/AliTRDdigitizer.h
TRD/AliTRDrawData.cxx

index b7ebdb9efd83a7b5f60912411014e9bcfc0e7711..fb8bc0f6427b5b1047a79029a944c1edad07e588 100644 (file)
@@ -610,31 +610,60 @@ Bool_t AliTRD::Raw2SDigits(AliRawReader *rawReader)
     tree = loader->TreeS();
   }
 
+  AliTRDdigitizer digitizer("TRDdigitizer","TRD digitizer class");  
+
   AliTRDrawData       *rawdata        = new AliTRDrawData();
-  AliTRDdigitsManager *sdigitsManager = rawdata->Raw2Digits(rawReader);
+  AliTRDdigitsManager *digitsManager  = rawdata->Raw2Digits(rawReader);
+
+  // Create the s-digits manager
+  AliTRDdigitsManager *sdigitsManager = new AliTRDdigitsManager();
+  sdigitsManager->SetSDigits(kTRUE);
+  sdigitsManager->CreateArrays();
+
   if (sdigitsManager) {
-    sdigitsManager->SetSDigits(kTRUE);
+
+    // Convert the digits into s-digits
+    digitizer.Digits2SDigits(digitsManager,sdigitsManager);
+
     sdigitsManager->MakeBranch(tree);
     sdigitsManager->WriteDigits();
+
+    delete digitsManager;
+
     return kTRUE;
+
   } 
   else {
+
     return kFALSE;
+
   }
 
 }
 
 //_____________________________________________________________________________
-AliLoader* AliTRD::MakeLoader(const char* topfoldername)
+AliLoader *AliTRD::MakeLoader(const Char_t *topfoldername)
 {
+  //
+  // Create a loader for the TRD tracklets
+  //
+
  fLoader = new AliLoader(GetName(),topfoldername);
 
  AliInfo("Adding Tracklets-loader");
- AliDataLoader *dl = new AliDataLoader("TRD.Tracklets.root","tracklets", "tracklets");
+
+ AliDataLoader *dl = new AliDataLoader("TRD.Tracklets.root"
+                                      ,"tracklets"
+                                      ,"tracklets");
  fLoader->AddDataLoader(dl);
- dl = new AliDataLoader("TRD.GtuTracks.root", "gtutracks", "gtutracks");
+
+                dl = new AliDataLoader("TRD.GtuTracks.root"
+                                      ,"gtutracks"
+                                      ,"gtutracks");
  fLoader->AddDataLoader(dl);
+
  return fLoader;
+
 }
 
 //_____________________________________________________________________________
index 4b81f3d319ea22c3529a66fa22c7e8250e3abef3..9c38f830d13d78f5ed9ed410fac2cf579d1e6104 100644 (file)
@@ -1363,6 +1363,132 @@ Bool_t AliTRDdigitizer::Signal2SDigits(Int_t det, AliTRDarraySignal *signals)
 
 }
 
+//_____________________________________________________________________________
+Bool_t AliTRDdigitizer::Digits2SDigits(AliTRDdigitsManager *manDig
+                                     , AliTRDdigitsManager *manSDig)
+{
+  //
+  // Converts digits into s-digits. Needed for embedding into real data.
+  //
+
+  AliDebug(1,"Start converting digits to s-digits");
+
+  AliTRDcalibDB     *calibration = AliTRDcalibDB::Instance();
+  if (!calibration) {
+    AliFatal("Could not get calibration object");
+    return kFALSE;
+  }
+
+  AliTRDSimParam    *simParam    = AliTRDSimParam::Instance();
+  if (!simParam) {
+    AliFatal("Could not get simulation parameters");
+    return kFALSE;
+  }  
+
+  // Converts number of electrons to fC
+  const Double_t kEl2fC = 1.602e-19 * 1.0e15; 
+
+  // Coupling factor
+  Double_t coupling     = simParam->GetPadCoupling() 
+                        * simParam->GetTimeCoupling();
+  // Electronics conversion factor
+  Double_t convert      = kEl2fC 
+                        * simParam->GetChipGain();
+  // ADC conversion factor
+  Double_t adcConvert   = simParam->GetADCoutRange()
+                        / simParam->GetADCinRange();
+  // The electronics baseline in mV
+  Double_t baseline     = simParam->GetADCbaseline() 
+                        / adcConvert;
+  // The electronics baseline in electrons
+  Double_t baselineEl   = baseline
+                        / convert;
+
+  // The gainfactor calibration objects
+  //const AliTRDCalDet *calGainFactorDet      = calibration->GetGainFactorDet();  
+  //AliTRDCalROC       *calGainFactorROC      = 0;
+  //Float_t             calGainFactorDetValue = 0.0;
+
+  Int_t row  = 0;
+  Int_t col  = 0;
+  Int_t time = 0;
+
+  for (Int_t det = 0; det < AliTRDgeometry::Ndet(); det++) {
+
+    Int_t nRowMax    = fGeo->GetPadPlane(det)->GetNrows();
+    Int_t nColMax    = fGeo->GetPadPlane(det)->GetNcols();
+    Int_t nTimeTotal = calibration->GetNumberOfTimeBins();
+
+    // Get the calibration objects
+    //calGainFactorROC      = calibration->GetGainFactorROC(det);
+    //calGainFactorDetValue = calGainFactorDet->GetValue(det);
+
+    // Get the digits
+    AliTRDarrayADC *digits = (AliTRDarrayADC *) manDig->GetDigits(det);
+
+    if (!manSDig->HasSDigits()) {
+      AliError("SDigits manager has no s-digits");
+      return kFALSE;
+    }
+    // Get the s-digits
+    AliTRDarraySignal     *sdigits = (AliTRDarraySignal *)     manSDig->GetSDigits(det);
+    AliTRDarrayDictionary *tracks0 = (AliTRDarrayDictionary *) manSDig->GetDictionary(det,0);
+    AliTRDarrayDictionary *tracks1 = (AliTRDarrayDictionary *) manSDig->GetDictionary(det,1);
+    AliTRDarrayDictionary *tracks2 = (AliTRDarrayDictionary *) manSDig->GetDictionary(det,2);
+    // Allocate memory space for the digits buffer
+    sdigits->Allocate(nRowMax,nColMax,nTimeTotal);
+    tracks0->Allocate(nRowMax,nColMax,nTimeTotal);
+    tracks1->Allocate(nRowMax,nColMax,nTimeTotal);
+    tracks2->Allocate(nRowMax,nColMax,nTimeTotal);
+
+    // Create the sdigits for this chamber
+    for (row  = 0; row  <  nRowMax; row++ ) {
+      for (col  = 0; col  <  nColMax; col++ ) {
+
+        // The gain factors
+        //Float_t padgain = calGainFactorDetValue 
+        //                * calGainFactorROC->GetValue(col,row);
+
+        for (time = 0; time < nTimeTotal; time++) {
+
+          Double_t signal = (Double_t) digits->GetData(row,col,time);
+
+          // ADC -> signal in mV
+          signal /= adcConvert;
+
+          // Subtract baseline in mV
+          signal -= baseline;
+
+          // Signal in mV -> signal in #electrons
+          signal /= convert;
+
+          // Gain factor
+          //signal /= padgain; // Not needed for real data
+
+          // Pad and time coupling
+          signal /= coupling;
+
+          sdigits->SetData(row,col,time,signal);
+          tracks0->SetData(row,col,time,0);
+          tracks1->SetData(row,col,time,0);
+          tracks2->SetData(row,col,time,0);
+
+        } // for: time
+
+      } // for: col
+    } // for: row
+  
+    sdigits->Compress(0);
+    tracks0->Compress();
+    tracks1->Compress();
+    tracks2->Compress();
+
+  } // for: det
+
+  return kTRUE;
+
+}
+
 //_____________________________________________________________________________
 Bool_t AliTRDdigitizer::SDigits2Digits()
 {
index 786e414dacbb4c7db89b64a4f981f9b08f7ee709..f2b9c2907f4b4a3d21d092f008f9f1e48ec412f5 100644 (file)
@@ -56,6 +56,7 @@ class AliTRDdigitizer : public AliDigitizer {
           Bool_t       ConvertHits(Int_t det, Float_t *hits, Int_t nhit, AliTRDarraySignal *signals);
           Bool_t       ConvertSignals(Int_t det, AliTRDarraySignal *signals);
 
+          Bool_t       Digits2SDigits(AliTRDdigitsManager *manDig, AliTRDdigitsManager *manSDig);
           Bool_t       SDigits2Digits();
           Bool_t       MergeSDigits();
           Bool_t       ConvertSDigits();
index 5eba5586aac6829f2d44a86581f68c648d180dfd..442fc68c5937aeffa2e923c32579e1ef7d2e889b 100644 (file)
@@ -988,7 +988,6 @@ AliTRDdigitsManager *AliTRDrawData::Raw2Digits(AliRawReader *rawReader)
   return digitsManager;
 }
 
-
 //_____________________________________________________________________________
 void AliTRDrawData::WriteIntermediateWords(UInt_t* buf, Int_t& nw, Int_t& of, const Int_t& maxSize, const Int_t& det, const Int_t& side) {