Putting the ADC samples + track labels in the digit object. Some addtional clean...
authorcvetan <cvetan@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 1 Jun 2010 14:48:04 +0000 (14:48 +0000)
committercvetan <cvetan@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 1 Jun 2010 14:48:04 +0000 (14:48 +0000)
VZERO/AliVZERODigitizer.cxx
VZERO/AliVZERODigitizer.h
VZERO/AliVZEROdigit.cxx
VZERO/AliVZEROdigit.h

index 0995561..d9801c7 100644 (file)
@@ -237,10 +237,12 @@ void AliVZERODigitizer::Exec(Option_t* /*option*/)
   // Creates digits from hits
   fNdigits     =    0;  
 
+  Int_t labels[64][3];
   for(Int_t i = 0 ; i < 64; ++i) {
     memset(fTime[i],0,fNBins[i]*sizeof(Float_t));
     for(Int_t j = 0; j < kNClocks; ++j) fAdc[i][j] = 0;
     fLeadingTime[i] = fTimeWidth[i] = 0;
+    labels[i][0] = labels[i][1] = labels[i][2] = -1;
   }
   Float_t integral = fPMResponse->Integral(-kPMRespTime,2.*kPMRespTime);
   Float_t meansPhE = fSinglePhESpectrum->Mean(0,20);
@@ -306,6 +308,13 @@ void AliVZERODigitizer::Exec(Option_t* /*option*/)
           Int_t nPhot = hit->Nphot();
           Int_t cell  = hit->Cell();                          
           Int_t pmt = Cell2Pmt(cell);
+          Int_t trackLabel = hit->GetTrack();
+          for(Int_t l = 0; l < 3; ++l) {
+            if (labels[pmt][l] < 0) {
+              labels[pmt][l] = trackLabel;
+              break;
+            }
+          }
           Float_t dt_scintillator = gRandom->Gaus(0,kIntTimeRes);
           Float_t t = dt_scintillator + 1e9*hit->Tof();
           if (pmt < 32) t += kV0CDelayCables;
@@ -380,22 +389,23 @@ void AliVZERODigitizer::Exec(Option_t* /*option*/)
        
   // Now add digits to the digit Tree 
 
+  Short_t *chargeADC = new Short_t[kNClocks];
   for (Int_t i=0; i<64; i++) {      
-    //    printf(" cell %d adc ",i);
-    //    for (Int_t j = 0; j < kNClocks; ++j)
-    //      printf("%d ", Int_t(fAdc[i][j]));
-    //    printf("\n");
     Float_t totADC = 0;
-    for (Int_t j = 8; j <= 11; ++j) {
+    for (Int_t j = 0; j < kNClocks; ++j) {
       Int_t tempadc = Int_t(fAdc[i][j]);
       if (tempadc > 1023) tempadc = 1023;
-      Int_t integrator = (j + evenOrOdd) % 2;
-      if ((Float_t(tempadc) - fAdcPedestal[i][integrator]) > (2.*fAdcSigma[i][integrator]))
-       totADC += (Float_t(tempadc) - fAdcPedestal[i][integrator]);
+      chargeADC[j] = tempadc;
+      if (j >= 8 && j <= 11) {
+       Int_t integrator = (j + evenOrOdd) % 2;
+       if ((Float_t(tempadc) - fAdcPedestal[i][integrator]) > (2.*fAdcSigma[i][integrator]))
+         totADC += (Float_t(tempadc) - fAdcPedestal[i][integrator]);
+      }
     }
     totADC += fAdcPedestal[i][(10+evenOrOdd)%2];
-    AddDigit(i, totADC, fLeadingTime[i], fTimeWidth[i], Bool_t((10+evenOrOdd)%2));
+    AddDigit(i, totADC, fLeadingTime[i], fTimeWidth[i], Bool_t((10+evenOrOdd)%2), chargeADC, labels[i]);
   }
+  delete [] chargeADC;
 
   treeD->Fill();
   outLoader->WriteDigits("OVERWRITE");  
@@ -404,14 +414,14 @@ void AliVZERODigitizer::Exec(Option_t* /*option*/)
 }
 
 //____________________________________________________________________________
-void AliVZERODigitizer::AddDigit(Int_t PMnumber, Float_t adc, Float_t time, Float_t width, Bool_t integrator) 
+void AliVZERODigitizer::AddDigit(Int_t PMnumber, Float_t adc, Float_t time, Float_t width, Bool_t integrator, Short_t *chargeADC, Int_t *labels) 
  { 
  
 // Adds Digit 
  
   TClonesArray &ldigits = *fDigits;  
         
-  new(ldigits[fNdigits++]) AliVZEROdigit(PMnumber,adc,time,width,kFALSE,kFALSE,integrator);
+  new(ldigits[fNdigits++]) AliVZEROdigit(PMnumber,adc,time,width,kFALSE,kFALSE,integrator,chargeADC,labels);
         
 }
 //____________________________________________________________________________
index 1de1931..8eedd86 100644 (file)
@@ -35,7 +35,7 @@ class AliVZERODigitizer: public AliDigitizer {
    virtual Bool_t Init();
    virtual void   Exec(Option_t* option=0);
 
-   void AddDigit(Int_t PMnumber, Float_t adc, Float_t time, Float_t width, Bool_t integrator);
+   void AddDigit(Int_t PMnumber, Float_t adc, Float_t time, Float_t width, Bool_t integrator, Short_t *chargeADC, Int_t *labels);
    void ResetDigit();
                                                
    AliVZEROCalibData *GetCalibData() const;
index 24596ca..fefaedc 100644 (file)
@@ -20,8 +20,6 @@ ClassImp(AliVZEROdigit)
 //__________________________________________________________________________
 AliVZEROdigit::AliVZEROdigit()
    :AliDigit(),
-    fTrack(0),
-    fEvent(0),
     fPMNumber(0),
     fADC(0.),
     fTime(0.),
@@ -31,70 +29,34 @@ AliVZEROdigit::AliVZEROdigit()
     fIntegrator(0)
 
 {
-  // Standard default constructor 
-}
-
-//__________________________________________________________________________
-AliVZEROdigit::AliVZEROdigit(Int_t* tracks, Int_t *digits)
-   :AliDigit(tracks),
-   fTrack(0),
-   fEvent(0),
-   fPMNumber(0),
-   fADC(0.),
-   fTime(0.),
-   fWidth(0.),
-   fBBFlag(0),
-   fBGFlag(0),
-   fIntegrator(0)
-  
-{
-  // Creates VZERO digits  
-  // Fills the AliVZEROdigit data members from the array digits. 
-    
-  fTrack      =  tracks[0];
-  fEvent      =  digits[0];  
+  // Standard default
+  // constructor 
+  for(Int_t iClock = 0; iClock < kNClocks; ++iClock) fChargeADC[iClock] = 0;
 }
 
 //__________________________________________________________________________
 AliVZEROdigit::AliVZEROdigit(Int_t PMnumber, Float_t adc, Float_t time)
    :AliDigit(),
-   fTrack(0),
-   fEvent(0),
-   fPMNumber(0),
-   fADC(0.),
-   fTime(0.),
+   fPMNumber(PMnumber),
+   fADC(adc),
+   fTime(time),
    fWidth(0.),
    fBBFlag(0),
    fBGFlag(0),
    fIntegrator(0)
 {  
-   fPMNumber   = PMnumber;
-   fADC        = adc;
-   fTime       = time;
+  // Constructor
+  // so far used in raw->sdigits
+  for(Int_t iClock = 0; iClock < kNClocks; ++iClock) fChargeADC[iClock] = 0;
 }
 
 //__________________________________________________________________________
-AliVZEROdigit::AliVZEROdigit(Int_t  PMnumber, Float_t adc, Float_t time, 
-                             Float_t width, Bool_t BeamBeamFlag, Bool_t BeamGasFlag)
-   :AliDigit(),
-   fTrack(0),
-   fEvent(0),
-   fPMNumber(PMnumber),
-   fADC(adc),
-   fTime(time),
-   fWidth(width),
-   fBBFlag(BeamBeamFlag),
-   fBGFlag(BeamGasFlag),
-   fIntegrator(0)
-{  
-
-}
-//__________________________________________________________________________
 AliVZEROdigit::AliVZEROdigit(Int_t   PMnumber, Float_t adc, Float_t time, 
-                             Float_t width, Bool_t BeamBeamFlag, Bool_t BeamGasFlag, Bool_t integrator)
+                             Float_t width, Bool_t BeamBeamFlag, Bool_t BeamGasFlag,
+                            Bool_t integrator,
+                            Short_t *chargeADC,
+                            Int_t *labels)
 :AliDigit(),
-fTrack(0),
-fEvent(0),
 fPMNumber(PMnumber),
 fADC(adc),
 fTime(time),
@@ -103,15 +65,24 @@ fBBFlag(BeamBeamFlag),
 fBGFlag(BeamGasFlag),
 fIntegrator(integrator)
 {  
-       
+  // Constructor
+  // Used in the digitizer
+  if (chargeADC) {
+    for(Int_t iClock = 0; iClock < kNClocks; ++iClock)
+      fChargeADC[iClock] = chargeADC[iClock];
+  }
+  else {
+    for(Int_t iClock = 0; iClock < kNClocks; ++iClock)
+      fChargeADC[iClock] = 0;
+  }
+
+  if (labels)
+    for(Int_t iTrack = 0; iTrack < 3; ++iTrack) fTracks[iTrack] = labels[iTrack];
 }
 
 //__________________________________________________________________________
 void AliVZEROdigit::Print(const Option_t*) const
 {
     // Dumps digit object
-    
     Dump();
 }
-
-
index cd13bc2..ac2692d 100644 (file)
@@ -12,15 +12,17 @@ class AliVZEROdigit: public AliDigit  {
 
  public:
     AliVZEROdigit();
-    AliVZEROdigit(Int_t* tracks, Int_t* digits);
-    AliVZEROdigit(Int_t   /* PMnumber */, Float_t  /* ADC */, Float_t /* Time */);
-    AliVZEROdigit(Int_t   /* PMnumber */, Float_t  /* ADC */, Float_t /* Time */, 
-                  Float_t /* TimeWidth*/, Bool_t /* BBFlag */, Bool_t /* BGFlag */);
-    AliVZEROdigit(Int_t   /* PMnumber */, Float_t  /* ADC */, Float_t /* Time */, 
-                  Float_t /* TimeWidth*/, Bool_t /* BBFlag */, Bool_t /* BGFlag */, Bool_t /* Integrator */);
+    AliVZEROdigit(Int_t   PMnumber, Float_t  adc, Float_t time);
+    AliVZEROdigit(Int_t   PMnumber, Float_t  adc, Float_t time, 
+                  Float_t TimeWidth, Bool_t BBFlag, Bool_t BGFlag,
+                 Bool_t  Integrator,
+                 Short_t *chargeADC = 0,
+                 Int_t *labels = 0);
     virtual ~AliVZEROdigit() {};
     virtual void Print(const Option_t* option="") const;
-    
+
+    enum {kNClocks = 21};
+
     Int_t   PMNumber()   const {return fPMNumber;}    
     Float_t ADC()        const {return fADC;}
     Float_t Time()       const {return fTime;}
@@ -28,12 +30,9 @@ class AliVZEROdigit: public AliDigit  {
     Bool_t  BBFlag()     const {return fBBFlag;} 
     Bool_t  BGFlag()     const {return fBGFlag;}
     Bool_t  Integrator() const {return fIntegrator;}
-       
-  private:
-    Int_t  fTrack;         // Track number
+    Short_t ChargeADC(Int_t clock) const {return (clock >= 0 && clock < kNClocks) ? fChargeADC[clock] : 0;}
     
   protected:
-    Int_t   fEvent;         // Event number  
     Int_t   fPMNumber;      // PhotoMultiplier number (0 to 63)
     Float_t fADC;           // ADC response
     Float_t fTime;          // Time of Flight
@@ -41,8 +40,9 @@ class AliVZEROdigit: public AliDigit  {
     Bool_t  fBBFlag;        // Beam-Beam Flag given by Yannick in Raw Data only
     Bool_t  fBGFlag;        // Beam-Gas  Flag given by Yannick in Raw Data only
     Bool_t  fIntegrator;    // Integrator used
-    
-    ClassDef(AliVZEROdigit,3)  //Digit (Header) object for set : VZERO
+    Short_t fChargeADC[kNClocks]; // ADC samples as present in raw data
+
+    ClassDef(AliVZEROdigit,4)  // VZERO Digit class
 };
 
 #endif