new digitization and reconstruction corresponded to new data format
authoralla <alla@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 24 Mar 2006 16:32:55 +0000 (16:32 +0000)
committeralla <alla@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 24 Mar 2006 16:32:55 +0000 (16:32 +0000)
START/AliSTARTDigitizer.h
START/AliSTARTRawData.cxx
START/AliSTARTRawData.h
START/AliSTARTRawReader.cxx
START/AliSTARTReconstructor.cxx
START/AliSTARTReconstructor.h

index 11cf1b7..1859ad4 100644 (file)
@@ -20,27 +20,28 @@ class AliSTARTDigitizer : public AliDigitizer {
   virtual ~AliSTARTDigitizer();
   virtual Bool_t Init();
   TClonesArray *Hits() const {return fHits;}
-  TArrayI *timeTDC() {return ftimeTDC;}
+  TArrayI *timeCFD() {return ftimeCFD;}
+  TArrayI *timeLED() {return ftimeLED;}
   TArrayI * ADC() {return fADC;} 
-  TArrayI *timeTDCAmp() {return ftimeTDCAmp;}
-  TArrayI * ADCAmp() {return fADCAmp;} 
-  TArrayI *SumMult() {return fSumMult;}
+   TArrayI * ADC0() {return fADC0;} 
+
   // Do the main work
   void Exec (Option_t* /*option=0*/) ;
-  Bool_t RegisterPhotoE(Double_t energy);
+  Bool_t RegisterPhotoE(Int_t impt, Double_t energy);
   enum {kBgTag = -1};
-
 private:
 
   AliSTART *fSTART;          //!
   TClonesArray *fHits      ; //! List of hits
   AliSTARTdigit *fdigits   ; //! digits
-  TArrayI *ftimeTDC    ; //! array of TDC signal from right side
-  TArrayI *fADC     ;//! array of ADC signal from left sida
-  TArrayI *ftimeTDCAmp    ; //! array of TDC amplified signal from right side
-  TArrayI *fADCAmp     ;//! array of ADC amplified signal from left sida
-  TArrayI *fSumMult; // multiplicity
-  TH1*     fEff;    //! efficiency histogram
+  TArrayI *ftimeCFD    ; //! array of CFD signal 
+  TArrayI *ftimeLED    ; //! array of (LED-GFD) time (amplitude)
+  TArrayI *fADC     ;//! array of QTC signals (main amplitude)
+  TArrayI *fADC0     ;//! array of QTC signals (main amplitude)
+  Int_t fSumMult; // multiplicity
+  TObjArray fEffPMT; //pmt registration effeicincy
+
   
     ClassDef(AliSTARTDigitizer,1)
 };    
index b9b2f9b..759c8ce 100644 (file)
 ///////////////////////////////////////////////////////////////////////////////
 
 #include <Riostream.h>
+#include <TTree.h>
 
 #include "AliSTART.h"
 #include "AliSTARTRawData.h"
 #include "AliSTARTdigit.h"
-#include <TTree.h>
+#include "AliBitPacking.h"
 #include "AliRawDataHeader.h"
+#include "AliBitPacking.h"
 
 ClassImp(AliSTARTRawData)
 
@@ -40,7 +42,7 @@ word 1 :0-5bit number of PMT; word 2: 0-7 error sign, 8-31 TDC
 and the same but for amplified signal. Now I wrote the same time because
 CDF are not ready and differences didn't measured yet.
 
--  96 channel for amplitude: very preliminary, QTC features are not
+-  48 channel for amplitude: very preliminary, QTC features are not
 known now, preliminary i put as T1 time signal for this PMT in first
 channel and T1+A in second, where A=Log(Amplitude);
 and the same for amplified but A=Log(10*Amplitude).
@@ -55,11 +57,10 @@ uncertances
   fIndex=-1;
   fDigits = NULL;
 
-  fTimeTDC = new TArrayI(24);
+  fTimeCFD = new TArrayI(24);
   fADC = new TArrayI(24);
-  fTimeTDCAmp = new TArrayI(24);
-  fADCAmp = new TArrayI(24);
-  fSumMult = new TArrayI(6);
+  fTimeLED = new TArrayI(24);
+  fADC0 = new TArrayI(24);
    //   this->Dump();
   
 }
@@ -85,11 +86,10 @@ AliSTARTRawData::~AliSTARTRawData()
     delete fDigits;
     fDigits = NULL;
   }
-  delete fTimeTDC;
+  delete fTimeCFD;
   delete fADC;
-  delete fTimeTDCAmp;
-  delete fADCAmp;
-  delete fSumMult;
+  delete fTimeLED;
+  delete fADC0;
 }
 
 //_____________________________________________________________________________
@@ -116,232 +116,284 @@ void AliSTARTRawData::GetDigits(AliSTARTdigit *fDigits, UInt_t *buf)
   UInt_t word;
   UInt_t baseWord=0;
   Int_t error=0;
+  AliBitPacking *pack ;
     // Get the digits array
 
-  fDigits->GetTime(*fTimeTDC);
+  fDigits->GetTime(*fTimeCFD);
   fDigits->GetADC(*fADC);
-  fDigits->GetTimeAmp(*fTimeTDCAmp);
-  fDigits->GetADCAmp(*fADCAmp);
-  fDigits->GetSumMult(*fSumMult);
+  fDigits->GetTimeAmp(*fTimeLED);
+  fDigits->GetADCAmp(*fADC0);
      
   // Loop through all PMT
  
   for (Int_t det = 0; det < 24; det++) {
-    Int_t time=fTimeTDC->At(det);
-    Int_t qtc=fADC->At(det);
-    Int_t timeAmp=fTimeTDCAmp->At(det);
-    Int_t qtcAmp=fADCAmp->At(det);
-
-    //conver ADC to time (preliminary algorithm)
+    Int_t timeLED=fTimeLED->At(det);
 
      // DDL 1 0-5 -#PMT, 6-31 - empty
-
+    //LED
      word=det;;
-     PackWord(baseWord,word, 0, 5); 
+     pack->PackWord(baseWord,word, 0, 5); 
      fIndex++;
      buf[fIndex]=baseWord;
 
      word=0;
      baseWord=0;
-
-     //TDC    
      word=error;
-     PackWord(baseWord,word,0, 7); // Error flag
-     word=time;
-     PackWord(baseWord,word,8,31); // time-of-flight
+     pack->PackWord(baseWord,word,0, 7); // Error flag
+     word=timeLED;
+     cout<<det<<" led "<<timeLED<<" "<<word<<" ";
+    pack->PackWord(baseWord,word,8,31); // time-of-flight
      fIndex++;
      buf[fIndex]=baseWord;
-
      word=0;
      baseWord=0;
-    
+  }
+  cout<<endl;
+   for (Int_t det = 0; det < 24; det++) {
+    //CDF
+    Int_t timeCFD=fTimeCFD->At(det);
     // DDL2 2 0-5 -#PMT, 6-31 - empty
-     word=det;;
-     PackWord(baseWord,word, 0, 5); // number of PMT on the right side
-     fIndex++;
-     buf[fIndex]=baseWord;
      word=0;
      baseWord=0;
-
-     //  amplified TDC    
-     word=error;
-     PackWord(baseWord,word,0, 7); // Error flag
-     word=timeAmp;
-     PackWord(baseWord,word,8,31); // time-of-flight
+     word=det+24;
+     pack->PackWord(baseWord,word, 0, 5); // number of PMT on the right side
      fIndex++;
      buf[fIndex]=baseWord;
-
      word=0;
      baseWord=0;
-
-     // DDL 3
-     word=det;;
-     PackWord(baseWord,word, 0, 5); // number of PMT on the right side
+     word=error;
+    pack-> PackWord(baseWord,word,0, 7); // Error flag
+     word=timeCFD;
+     cout<<det<<" CFD "<<timeCFD<<" "<<word<<" ";
+     pack->PackWord(baseWord,word,8,31); // time-of-flight
      fIndex++;
      buf[fIndex]=baseWord;
      word=0;
      baseWord=0;
-
-     // ADC -> TDC     
-     word=error;
-     PackWord(baseWord,word,0, 7); // Error flag
-     word=time;
-     PackWord(baseWord,word,8,31); // time-of-flight
-     fIndex++;
-     buf[fIndex]=baseWord;
+   }
+   cout<<endl;
+  for (Int_t det = 0; det < 24; det++) {
+    //conver ADC to time (preliminary algorithm)
+    Int_t qtc=fADC->At(det);
+    word=det+48;
+    pack->PackWord(baseWord,word, 0, 5); // number of PMT on the right side
+    fIndex++;
+    buf[fIndex]=baseWord;
+    baseWord=0;
+    word=error;
+    pack->PackWord(baseWord,word,0, 7); // Error flag
+    word=qtc;
+    cout<<det<<" "<<fIndex<<" adc1 "<<word<<" ";
+    pack->PackWord(baseWord,word,8,31); // Q->Time
+    fIndex++;
+    buf[fIndex]=baseWord;
+    word=0;
+    baseWord=0;
+  }
+  cout<<endl;
+  
+  for (Int_t det = 0; det < 24; det++) {
+    Int_t qtcAmp=fADC0->At(det);
+    
+    // DDL 4 amplified QTC charge * 10
+    
+     //Amplified  ADC -> TDC 
+    
+    word=det+72;
+    pack->PackWord(baseWord,word, 0, 5); // number of PMT on the right side
+    fIndex++;
+    buf[fIndex]=baseWord;
+    baseWord=0;
+    word=error;
+    pack->PackWord(baseWord,word,0, 7); // Error flag
+    word=qtcAmp;
+    cout<<det<<" "<<fIndex<<" adc2 "<<word<<" ";
+    pack->PackWord(baseWord,word,8,31); // Q->T amplified
+    fIndex++;
+    buf[fIndex]=baseWord;
+    
+    word=0;
+    baseWord=0;
+  }
 
 
-     // ADC -> TDC :QTC 
-     word=0;
-     baseWord=0;
+  word=0;
+  baseWord=0;
+  fIndex++;
+  word=97;
+  pack->PackWord(baseWord,word, 0, 5); // ?????????????????
+  buf[fIndex]=baseWord;
+  baseWord=0;
+  word=error;
+  pack->PackWord(baseWord,word,0, 7); // Error flag
+  word=fDigits->MeanTime();
+  cout<<fIndex<<" "<<" mean "<< word<<endl;
+  pack->PackWord(baseWord,word,8,31); // MEANER
+  fIndex++;
+  buf[fIndex]=baseWord;
+    cout<<fIndex<<" meaner "<<word<<" ";
 
-     word=det;;
-     PackWord(baseWord,word, 0, 5); // number of PMT on the right side
-     fIndex++;
-     buf[fIndex]=baseWord;
-     baseWord=0;
-     word=error;
-     PackWord(baseWord,word,0, 7); // Error flag
-     word=time+qtc;
-     PackWord(baseWord,word,8,31); // time-of-flight
-     fIndex++;
-     buf[fIndex]=baseWord;
 
-     word=0;
-     baseWord=0;
 
-    // DDL 4 amplified QTC charge * 10
-     word=det;;
-     PackWord(baseWord,word, 0, 5); // number of PMT on the right side
-     fIndex++;
-     buf[fIndex]=baseWord;
-     word=0;
-     baseWord=0;
+  // besttime right & left
+  word=98;
+ pack-> PackWord(baseWord,word, 0, 5); // T0-A sign
+  fIndex++;
+  buf[fIndex]=baseWord;
 
-     // ADC -> TDC     
-     word=error;
-     PackWord(baseWord,word,0, 7); // Error flag
-     word=timeAmp;
-     PackWord(baseWord,word,8,31); // time-of-flight
-     fIndex++;
-     buf[fIndex]=baseWord;
+  baseWord=0;
+  word=error;
+  pack->PackWord(baseWord,word,0, 7); // Error flag
+  word=fDigits->BestTimeRight();
+  pack-> PackWord(baseWord,word,8,31); // time-of-flight T0-A
+  fIndex++;
+  buf[fIndex]=baseWord;
+   cout<<fIndex<<" T0-A "<<word<<" ";
 
-     //Amplified  ADC -> TDC 
-     word=0;
-     baseWord=0;
+  word=99;
+   pack->PackWord(baseWord,word, 0, 5); // T0-C sign
+  fIndex++;
+  buf[fIndex]=baseWord;
 
-     word=det;;
-     PackWord(baseWord,word, 0, 5); // number of PMT on the right side
-     fIndex++;
-     buf[fIndex]=baseWord;
-     baseWord=0;
-     word=error;
-     PackWord(baseWord,word,0, 7); // Error flag
-     word=time+qtcAmp;
-     PackWord(baseWord,word,8,31); // time-of-flight
-     fIndex++;
-     buf[fIndex]=baseWord;
+  baseWord=0;
 
-     word=0;
-     baseWord=0;
- }
+  word=error;
+  pack->PackWord(baseWord,word,0, 7); // Error flag
+  word=fDigits->BestTimeLeft();
+ pack-> PackWord(baseWord,word,8,31); // time-of-flight T0-C 
+  fIndex++;
+  buf[fIndex]=baseWord;
 
+   cout<<fIndex<<" T0-C "<<word<<" ";
+  // time difference
+  word=100;
+ pack-> PackWord(baseWord,word, 0, 5); // TVDS sign
+  word=fDigits->TimeDiff();
+ pack-> PackWord(baseWord,word, 6, 31); // T0 vertex 
+  fIndex++;
+  buf[fIndex]=baseWord;
 
-  word=0;
   baseWord=0;
+
+  word=error;
+  pack->PackWord(baseWord,word,0, 7); // Error flag
+  word=fDigits->TimeDiff();
+  pack->PackWord(baseWord,word,8,31); // T0verex
   fIndex++;
-  word=25;
-  PackWord(baseWord,word, 0, 5); // number of PMT on the right side
-  word=fDigits->MeanTime();
-  PackWord(baseWord,word, 6, 31); // TDC on the right side from Marin
   buf[fIndex]=baseWord;
+  cout<<fIndex<<" diff "<<word<<endl;
 
+  // multiplicity 
+  
+   Int_t mult=fDigits->SumMult();
+  word=100;
+ pack-> PackWord(baseWord,word, 0, 5); 
+  word=mult;
+ pack-> PackWord(baseWord,word, 6, 31); // sum amplitude
+  fIndex++;
+  buf[fIndex]=baseWord;
+  
   baseWord=0;
   word=error;
-  PackWord(baseWord,word,0, 7); // Error flag
-  word=fDigits->MeanTime();
-  PackWord(baseWord,word,8,31); // time-of-flight
pack-> PackWord(baseWord,word,0, 7); // Error flag
+  word=mult;
+ pack-> PackWord(baseWord,word,8,31); // time amplitude
   fIndex++;
   buf[fIndex]=baseWord;
+  
+  cout<<endl;
 
-
-
-  // besttime right & left
-  //  fIndex++;
-  //  buf[fIndex]=baseWord;
-  word=26;
-  PackWord(baseWord,word, 0, 5); // number of PMT on the right side
-  word=fDigits->BestTimeRight();
-  PackWord(baseWord,word, 6, 31); // TDC on the right side from Marin
+  // trigger channels
+   // besttime right & left
+  word=101;
+  pack->PackWord(baseWord,word, 0, 5); // T0-A sign
   fIndex++;
   buf[fIndex]=baseWord;
 
   baseWord=0;
   word=error;
-  PackWord(baseWord,word,0, 7); // Error flag
pack-> PackWord(baseWord,word,0, 7); // Error flag
   word=fDigits->BestTimeRight();
-  PackWord(baseWord,word,8,31); // time-of-flight
+ pack-> PackWord(baseWord,word,8,31); // time-of-flight T0-A
   fIndex++;
   buf[fIndex]=baseWord;
+   cout<<fIndex<<" T0-A "<<word<<" ";
 
-  word=27;
-  PackWord(baseWord,word, 0, 5); // number of PMT on the right side
-  word=fDigits->BestTimeLeft();
-  PackWord(baseWord,word, 6, 31); // TDC on the right side from Marin
+  word=102;
+ pack-> PackWord(baseWord,word, 0, 5); // T0-C sign
   fIndex++;
   buf[fIndex]=baseWord;
 
   baseWord=0;
 
   word=error;
-  PackWord(baseWord,word,0, 7); // Error flag
pack-> PackWord(baseWord,word,0, 7); // Error flag
   word=fDigits->BestTimeLeft();
-  PackWord(baseWord,word,8,31); // time-of-flight
+ pack-> PackWord(baseWord,word,8,31); // time-of-flight T0-C 
   fIndex++;
   buf[fIndex]=baseWord;
 
+   cout<<fIndex<<" T0-C "<<word<<" ";
   // time difference
-  word=28;
-  PackWord(baseWord,word, 0, 5); // number of PMT on the right side
+  word=103;
+ pack-> PackWord(baseWord,word, 0, 5); // TVDS sign
   word=fDigits->TimeDiff();
-  PackWord(baseWord,word, 6, 31); // TDC on the right side from Marin
+ pack-> PackWord(baseWord,word, 6, 31); // T0 vertex 
   fIndex++;
   buf[fIndex]=baseWord;
 
   baseWord=0;
 
   word=error;
-  PackWord(baseWord,word,0, 7); // Error flag
pack-> PackWord(baseWord,word,0, 7); // Error flag
   word=fDigits->TimeDiff();
-  PackWord(baseWord,word,8,31); // time-of-flight
+ pack-> PackWord(baseWord,word,8,31); // T0verex
   fIndex++;
   buf[fIndex]=baseWord;
+  cout<<fIndex<<" diff "<<word<<endl;
 
   // multiplicity 
-
-  for (Int_t i=0; i<6; i++)
-    {
-      Int_t mult=fSumMult->At(i);
-      word=29+i;
-      PackWord(baseWord,word, 0, 5); 
-      word=mult;
-      PackWord(baseWord,word, 6, 31); // TDC on the right side from Marin
-      fIndex++;
-      buf[fIndex]=baseWord;
-      
-      baseWord=0;
-      word=error;
-      PackWord(baseWord,word,0, 7); // Error flag
-      word=mult;
-      PackWord(baseWord,word,8,31); // time QTC
-      fIndex++;
-      buf[fIndex]=baseWord;
-    }
+  
+   mult=fDigits->SumMult();
+  word=104;
+ pack-> PackWord(baseWord,word, 0, 5); 
+  word=mult;
+pack->  PackWord(baseWord,word, 6, 31); // sum amplitude
+  fIndex++;
+  buf[fIndex]=baseWord;
+  
+  baseWord=0;
+  word=error;
+ pack-> PackWord(baseWord,word,0, 7); // Error flag
+  word=mult;
+ pack-> PackWord(baseWord,word,8,31); // time amplitude
+  fIndex++;
+  buf[fIndex]=baseWord;
+  
+  // multiplicity 
+  
+   mult=fDigits->SumMult();
+  word=105;
+ pack-> PackWord(baseWord,word, 0, 5); 
+  word=mult;
+ pack-> PackWord(baseWord,word, 6, 31); // sum amplitude
+  fIndex++;
+  buf[fIndex]=baseWord;
+  
+  baseWord=0;
+  word=error;
+ pack-> PackWord(baseWord,word,0, 7); // Error flag
+  word=mult;
+ pack-> PackWord(baseWord,word,8,31); // time amplitude
+  fIndex++;
+  buf[fIndex]=baseWord;
   cout<<endl;
+
 }
 
 //-------------------------------------------------------------------------------------
-
+/*
 void AliSTARTRawData::PackWord(UInt_t &BaseWord, UInt_t Word, Int_t StartBit, Int_t StopBit)
 {
   //This method packs a word into the Baseword buffer starting form the "StartBit" 
@@ -373,6 +425,7 @@ void AliSTARTRawData::PackWord(UInt_t &BaseWord, UInt_t Word, Int_t StartBit, In
 
   return;
 }
+*/
 //---------------------------------------------------------------------------------------
 
 Int_t AliSTARTRawData::RawDataSTART(AliSTARTdigit *fDigits)
@@ -391,6 +444,7 @@ Int_t AliSTARTRawData::RawDataSTART(AliSTARTdigit *fDigits)
   char fileName[15];
   ofstream outfile;         // logical name of the output file 
   AliRawDataHeader header;
+  AliBitPacking *pack ;
   //loop over TOF DDL files
   sprintf(fileName,"START_%d.ddl", 0xd00);
   //   sprintf(fileName,"START_0xd00.ddl"); //The name of the output file
@@ -405,7 +459,7 @@ Int_t AliSTARTRawData::RawDataSTART(AliSTARTdigit *fDigits)
 
     baseWord=0;
     word=0;
-    PackWord(baseWord,word,0, 31); // Number of DDL file
+    pack-> PackWord(baseWord,word,0, 31); // Number of DDL file
 
     fIndex++;
     buf[fIndex]=baseWord;
index 22699ee..68e4e0e 100644 (file)
@@ -33,7 +33,7 @@ class AliSTARTRawData : public TObject {
   void  GetDigits(AliSTARTdigit *fDigits, UInt_t *buf);
   //This method formats and stores in buf all the digits of a TOF module
 
-  void  PackWord(UInt_t &BaseWord, UInt_t Word, Int_t StartBit, Int_t StopBit);
+  // void  PackWord(UInt_t &BaseWord, UInt_t Word, Int_t StartBit, Int_t StopBit);
   //This method stores the value of the variable Word of StopBit-StartBit+1 bits 
   //in BaseWord, starting from the bit StartBit
 
@@ -41,11 +41,10 @@ class AliSTARTRawData : public TObject {
  //START digits arrays
 
 
-  TArrayI *TimeTDC() {return fTimeTDC;}
+  TArrayI *TimeLED() {return fTimeLED;}
   TArrayI *ADC() {return fADC;}
-  TArrayI *TimeTDCAmp() {return fTimeTDCAmp;}
-  TArrayI *ADCAmp() {return fADCAmp;}
-  TArrayI *SumMult() {return fSumMult;}
+  TArrayI *TimeCFD() {return fTimeCFD;}
+  TArrayI *ADC0() {return fADC0;}
 
  
   
@@ -58,11 +57,12 @@ class AliSTARTRawData : public TObject {
   Int_t fMeanTime      ; // average time - ALICE start signal 
   Int_t fBestTimeLeft;   //first particle on the left
   Int_t fBestTimeRight;  //first particle on the right
-  TArrayI * fTimeTDC;        //TDC on the each PMT
+  Int_t fSumMult;        // sum multiplicity
+  TArrayI * fTimeCFD;        //TDC on the each PMT
   TArrayI *  fADC;           //QTC (ADC) on the each PMT
-  TArrayI * fTimeTDCAmp;    // TDC with amplified signal
-  TArrayI *  fADCAmp;        //QTC amplified
-  TArrayI *  fSumMult;       //multiplicity: left, right, left&right + all amplified
+  TArrayI * fTimeLED;    // TDC with amplified signal
+  TArrayI *  fADC0;        //QTC amplified
+
   AliSTARTdigit *fDigits;  //! The START digits manager
 
   ClassDef(AliSTARTRawData,1)             //  START raw data class
index cdff772..b4234ac 100644 (file)
@@ -1,6 +1,7 @@
 #include "AliSTARTRawReader.h"
 #include "AliSTARTRawData.h"
 #include "AliSTARTdigit.h"
+#include "AliBitPacking.h"
 
 #include <Riostream.h>
 #include "TMath.h"
@@ -45,13 +46,14 @@ void AliSTARTRawReader::NextThing()
 {
 // read the next raw digit
 // returns kFALSE if there is no digit left
+  AliBitPacking *pack ;
+
   UInt_t word, unpackword; 
   Int_t time, adc, pmt;
   TArrayI *timeTDC1 = new TArrayI(24);
   TArrayI * chargeTDC1 = new TArrayI(24);
   TArrayI *timeTDC2 = new TArrayI(24);
   TArrayI *chargeTDC2 = new TArrayI(24);
-  TArrayI *sumMult = new TArrayI(6);
 
   fRawReader->Reset();
   fRawReader->Select(13);
@@ -64,100 +66,99 @@ void AliSTARTRawReader::NextThing()
   fTree->Branch("START","AliSTARTdigit",&fDigits,400,1);
 
   fRawReader->ReadNextInt(word);
-   for (Int_t i=0; i<24; i++)
+  for (Int_t i=0; i<24; i++) //time LED
     {
       word=0;
       unpackword=0;
       fRawReader->ReadNextInt(word);
-      unpackword=UnpackWord(word,0,5);
+      unpackword=pack->UnpackWord(word,0,5);
       pmt=unpackword; 
       word=0;
       unpackword=0;
       fRawReader->ReadNextInt(word);
-      unpackword=UnpackWord(word,8,31);
+      unpackword=pack->UnpackWord(word,8,31);
       time=unpackword;
       timeTDC1->AddAt(time,pmt);
-
+      cout<<i<<" Led "<<time<<" ";
+      word=0;
+      unpackword=0;
+    }
+  cout<<endl;
+  for (Int_t i=0; i<24; i++) //time CFD
+    {
       word=0;
       unpackword=0;
       fRawReader->ReadNextInt(word);
-      unpackword=UnpackWord(word,0,5);
+      unpackword=pack->UnpackWord(word,0,5);
       pmt=unpackword;
       word=0;
       unpackword=0;
       fRawReader->ReadNextInt(word);
-      unpackword=UnpackWord(word,8,31);
+      unpackword=pack->UnpackWord(word,8,31);
       time=unpackword;
       timeTDC2->AddAt(time,pmt);
-      //  QTC
-      word=0;
-      unpackword=0;
-      fRawReader->ReadNextInt(word);
-      unpackword=UnpackWord(word,0,5);
-      pmt=unpackword;
+      cout<<i<<" CFD "<<time<<" ";
       word=0;
       unpackword=0;
-      fRawReader->ReadNextInt(word);
-      unpackword= UnpackWord(word,8,31);
-      time=unpackword; //T1
-  
+    } 
+  cout<<endl;
+
+  for (Int_t i=0; i<24; i++)
+    {
+      //  QTC
       word=0;
       unpackword=0;
-
       fRawReader->ReadNextInt(word);
-      unpackword=UnpackWord(word,0,5);
+      unpackword=pack->UnpackWord(word,0,5);
       pmt=unpackword;
       word=0;
       unpackword=0;
       fRawReader->ReadNextInt(word);
-      unpackword= UnpackWord(word,8,31);
-      adc=unpackword-time;  // T1+ T2 (A)
+      unpackword= pack->UnpackWord(word,8,31);
+      adc=unpackword; //
       chargeTDC1->AddAt(adc,pmt);
-      //QTC amplified
+      cout<<i<<" amp1 "<<adc<<" ";
 
       word=0;
       unpackword=0;
-      fRawReader->ReadNextInt(word);
-      unpackword=UnpackWord(word,0,5);
-      pmt=unpackword;
-      word=0;
-      unpackword=0;
-      fRawReader->ReadNextInt(word);
-      unpackword= UnpackWord(word,8,31);
-      time=unpackword; //T1
+    }
+  cout<<endl;
   
+   for (Int_t i=0; i<24; i++)   //QTC amplified
+     {
       word=0;
       unpackword=0;
-
+    
       fRawReader->ReadNextInt(word);
-      unpackword=UnpackWord(word,0,5);
+      unpackword=pack->UnpackWord(word,0,5);
       pmt=unpackword;
       word=0;
       unpackword=0;
       fRawReader->ReadNextInt(word);
-      unpackword= UnpackWord(word,8,31);
-      adc=unpackword-time;  // T1+ T2 (A)
+      unpackword= pack->UnpackWord(word,8,31);
+      adc=unpackword;  
       chargeTDC2->AddAt(adc,pmt);
-
-    }
-   fDigits->SetTime(*timeTDC1);
+       cout<<i<<" amp amp "<<adc<<" ";
+     }
+   cout<<endl;
+   fDigits->SetTime(*timeTDC2);
    fDigits->SetADC(*chargeTDC1);
  
+   fDigits->SetTimeAmp(*timeTDC1);
+   fDigits->SetADCAmp(*chargeTDC2);
 
    word=0;
    unpackword=0;
     
    fRawReader->ReadNextInt(word);
-   unpackword=UnpackWord(word,0,5);
+   unpackword=pack->UnpackWord(word,0,5);
    pmt=unpackword;
 
    word=0;
    unpackword=0;
    
    fRawReader->ReadNextInt(word);
-   unpackword=UnpackWord(word,8,31);
+   unpackword=pack->UnpackWord(word,8,31);
    time=unpackword;
    fDigits->SetMeanTime(time);   
     
@@ -166,14 +167,14 @@ void AliSTARTRawReader::NextThing()
    unpackword=0;
    
    fRawReader->ReadNextInt(word);
-   unpackword=UnpackWord(word,0,5);
+   unpackword=pack->UnpackWord(word,0,5);
    pmt=unpackword;
 
    word=0;
    unpackword=0;
 
    fRawReader->ReadNextInt(word);
-   unpackword=UnpackWord(word,8,31);
+   unpackword=pack->UnpackWord(word,8,31);
    time=unpackword;
    fDigits->SetTimeBestRight(time);   
  
@@ -183,14 +184,14 @@ void AliSTARTRawReader::NextThing()
    unpackword=0;
      
    fRawReader->ReadNextInt(word);
-   unpackword=UnpackWord(word,0,5);
+   unpackword=pack->UnpackWord(word,0,5);
    pmt=unpackword;
 
    word=0;
    unpackword=0;
    
    fRawReader->ReadNextInt(word);
-   unpackword=UnpackWord(word,8,31);
+   unpackword=pack->UnpackWord(word,8,31);
    time=unpackword;
    fDigits->SetTimeBestLeft(time);   
    
@@ -200,34 +201,30 @@ void AliSTARTRawReader::NextThing()
    unpackword=0;
    
    fRawReader->ReadNextInt(word);
-   unpackword=UnpackWord(word,0,5);
+   unpackword=pack->UnpackWord(word,0,5);
    pmt=unpackword;
 
    word=0;
    unpackword=0;
    
    fRawReader->ReadNextInt(word);
-   unpackword=UnpackWord(word,8,31);
+   unpackword=pack->UnpackWord(word,8,31);
    time=unpackword;
    fDigits->SetDiffTime(time);   
  
  //  multiplicity 
-   for (Int_t im=0; im<6; im++)
-     {
-       word=0;
-       unpackword=0;
-       fRawReader->ReadNextInt(word);
-       unpackword=UnpackWord(word,0,5);
-       pmt=unpackword;
-       word=0;
-       unpackword=0;
-       fRawReader->ReadNextInt(word);
-       unpackword=UnpackWord(word,8,31);
-       time=unpackword;
-       sumMult->AddAt(time,im);
-     }
-        fDigits->SetSumMult(*sumMult);   
-
+   word=0;
+   unpackword=0;
+   fRawReader->ReadNextInt(word);
+   unpackword=pack->UnpackWord(word,0,5);
+   pmt=unpackword;
+   word=0;
+   unpackword=0;
+   fRawReader->ReadNextInt(word);
+   unpackword=pack->UnpackWord(word,8,31);
+   time=unpackword;
+   fDigits->SetSumMult(time);   
+   
     fTree->Fill();
 
 }
index ccea96a..f094cc0 100644 (file)
 
 #include "AliRunLoader.h"
 #include "AliRun.h"
-#include "AliSTARTLoader.h"
-#include "AliSTARTdigit.h"
-#include "AliSTARTReconstructor.h"
 #include <AliESD.h>
+#include "AliLog.h"
 #include <TClonesArray.h>
 #include "AliSTARTRecPoint.h"
 #include "AliRawReader.h"
 #include "AliSTARTRawReader.h"
-#include "AliLog.h"
+#include "AliSTARTLoader.h"
+#include "AliSTARTdigit.h"
+#include "AliSTARTReconstructor.h"
+#include "AliSTARTParameters.h"
+#include "AliSTARTAlignData.h"
+#include "AliSTARTCalibData.h"
+#include "AliCDBLocal.h"
+#include "AliCDBStorage.h"
+#include "AliCDBManager.h"
+#include "AliCDBEntry.h"
+
+#include <TArrayI.h>
+
 ClassImp(AliSTARTReconstructor)
+AliSTARTAlignData* AliSTARTReconstructor::fgAlignData = 0;
+AliSTARTCalibData* AliSTARTReconstructor::fgCalibData = 0;
 
   void  AliSTARTReconstructor::ConvertDigits(AliRawReader* rawReader, TTree* digitsTree) const
 {
@@ -44,13 +56,37 @@ ClassImp(AliSTARTReconstructor)
 // START digits reconstruction
 // STARTRecPoint writing 
 
+    //Q->T-> coefficients !!!! should be asked!!!
+  //  Float_t ph2MIP=500;
+  Float_t gain[24], timeDelayCFD[24], timeDelayLED[24];
+  Int_t threshold =50; //photoelectrons
+  //  Int_t mV2channel=200000/(25*25);  //5V -> 200ns
+  Float_t zdetA,zdetC;
+  TObjArray slewingLED;
+    
+  TArrayI * fADC = new TArrayI(24); 
+  TArrayI * fTimeCFD = new TArrayI(24); 
+  TArrayI * fADCLED = new TArrayI(24); 
+  TArrayI * fTimeLED = new TArrayI(24); 
+
+  AliSTARTParameters* param = AliSTARTParameters::Instance();
+  Int_t ph2MIP = param->GetPh2Mip();     
+  Int_t channelWidth = param->GetChannelWidth() ;  
+  
+    for (Int_t i=0; i<24; i++){
+      timeDelayCFD[i] = param->GetTimeDelayCFD(i);
+      timeDelayLED[i] = param->GetTimeDelayLED(i);
+      gain[i] = param->GetGain(i);
+      slewingLED.AddAtAndExpand(param->GetSlew(i),i);
+    }
+    zdetC = param->GetZposition(0);
+    zdetA  = param->GetZposition(1);
+  
   AliDebug(1,Form("Start DIGITS reconstruction "));
    Int_t channelWigth=25; //ps
-  TArrayI* fSumMult = new TArrayI(6);
-  Float_t ph2mV = 150./500.;
-  Float_t mV2channel=200000/(25*25);  //5V -> 200ns
 
   TBranch *brDigits=digitsTree->GetBranch("START");
+  cout<<" TBranch *brDigits "<<brDigits<<endl;
   AliSTARTdigit *fDigits = new AliSTARTdigit();
   if (brDigits) {
     brDigits->SetAddress(&fDigits);
@@ -58,30 +94,57 @@ ClassImp(AliSTARTReconstructor)
     cerr<<"EXEC Branch START digits not found"<<endl;
     return;
   }
+  //  brDigits->Print();
   brDigits->GetEntry(0);
+  cout<<"  brDigits->GetEntry(0); "<<endl;
+  //  fDigits->Print();
+  fDigits->GetTime(*fTimeCFD);
+  cout<<"  fDigits->GetTime(*fTimeCFD); "<<endl;
+  fDigits->GetADC(*fADC);
+  fDigits->GetTimeAmp(*fTimeLED);
+  fDigits->GetADCAmp(*fADCLED);
+
+  Float_t time[24], adc[24];
+  for (Int_t ipmt=0; ipmt<24; ipmt++)
+    {
+      
+      if(fTimeCFD->At(ipmt)){
+        time[ipmt] = channelWigth *( fTimeCFD->At(ipmt)) - 1000*timeDelayCFD[ipmt];
+        cout<<ipmt<<" "<<time[ipmt];
+        Float_t adc_digmV = channelWigth * Float_t (fADC->At(ipmt)) ;
+        cout<<"  adc_digmV "<< adc_digmV;
+        //      adc[ipmt] = ( TMath::Exp (fADC->At(ipmt)) / gain[ipmt] /mV2channel );
+        adc[ipmt] = TMath::Exp(adc_digmV);
+        cout<<" adc"<<adc[ipmt]<<" inMIP "<<adc[ipmt]/50<< endl;
+      }
+    }
+
   Int_t besttimeright=channelWigth * (fDigits->BestTimeRight());
   Int_t besttimeleft=channelWigth * (fDigits->BestTimeLeft());
 
   //folding with experimental time distribution
   //  Float_t c = 29.9792; // cm/ns
   Float_t c = 0.0299792; // cm/ps
-  Float_t lenr=TMath::Sqrt(350*350 + 6.5*6.5);
-  Float_t lenl=TMath::Sqrt(69.7*69.7 + 6.5*6.5);
+  Float_t lenr=TMath::Sqrt(zdetA*zdetA + 6.5*6.5);
+  Float_t lenl=TMath::Sqrt(zdetC*zdetC + 6.5*6.5);
   Float_t timeDiff=channelWigth * (fDigits->TimeDiff());
   Int_t meanTime=channelWigth * (fDigits->MeanTime());
   Float_t ds=(c*(timeDiff)-(lenr-lenl))/2;
   AliDebug(2,Form(" timediff in ns %f  real point%f",timeDiff,ds));
   
-
+  /*
   fDigits->GetSumMult(*fSumMult);
-  Int_t multipl[6]; 
- for (Int_t i=0; i<6; i++)
+  Int_t multipl[4]; 
+ for (Int_t i=0; i<4; i++)
     {
       Float_t  mult=Float_t (fSumMult->At(i));
       Float_t   realMultmV=TMath::Exp(mult/mV2channel);
       multipl[i]=Int_t ((realMultmV/ph2mV)/500+0.5);
     }
-  AliDebug(2,Form(" multiplicity Abs side %i  multiplicity non-Abs side %i",multipl[1],multipl[2]));
+  */
+
+  //  AliDebug(2,Form(" multiplicity Abs side %i  multiplicity non-Abs side %i",multipl[1],multipl[2]));
 
   AliSTARTRecPoint* frecpoints= new AliSTARTRecPoint ();
   clustersTree->Branch( "START", "AliSTARTRecPoint" ,&frecpoints, 405,1);
@@ -89,10 +152,11 @@ ClassImp(AliSTARTReconstructor)
   frecpoints->SetTimeBestLeft(besttimeleft);
   frecpoints->SetVertex(ds);
   frecpoints->SetMeanTime(meanTime);
+  /*
   frecpoints->SetMult(multipl[0]);
   frecpoints->SetMultA(multipl[2]);
   frecpoints->SetMultC(multipl[1]);
-
+  */
   clustersTree->Fill();
 }
 
index 8a2e056..ef78fee 100644 (file)
@@ -8,6 +8,8 @@
 #include "AliReconstructor.h"
 #include "AliSTARTdigit.h"
 class AliRunLoader;
+class AliSTARTAlignData;
+class AliSTARTCalibData;
 
 class AliSTARTReconstructor: public AliReconstructor {
 public:
@@ -31,6 +33,8 @@ public:
  
   AliSTARTdigit *fdigits   ; // digits
   Float_t fZposition; // vertex position
+ static AliSTARTAlignData * fgAlignData; // singleton for Alignment data
+ static AliSTARTCalibData * fgCalibData; // singleton for Calibration data
 
   ClassDef(AliSTARTReconstructor, 0)   // class for the START reconstruction