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)
};
///////////////////////////////////////////////////////////////////////////////
#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)
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).
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();
}
delete fDigits;
fDigits = NULL;
}
- delete fTimeTDC;
+ delete fTimeCFD;
delete fADC;
- delete fTimeTDCAmp;
- delete fADCAmp;
- delete fSumMult;
+ delete fTimeLED;
+ delete fADC0;
}
//_____________________________________________________________________________
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"
return;
}
+*/
//---------------------------------------------------------------------------------------
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
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;
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
//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;}
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
#include "AliSTARTRawReader.h"
#include "AliSTARTRawData.h"
#include "AliSTARTdigit.h"
+#include "AliBitPacking.h"
#include <Riostream.h>
#include "TMath.h"
{
// 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);
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);
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);
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);
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();
}
#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
{
// 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);
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);
frecpoints->SetTimeBestLeft(besttimeleft);
frecpoints->SetVertex(ds);
frecpoints->SetMeanTime(meanTime);
+ /*
frecpoints->SetMult(multipl[0]);
frecpoints->SetMultA(multipl[2]);
frecpoints->SetMultC(multipl[1]);
-
+ */
clustersTree->Fill();
}
#include "AliReconstructor.h"
#include "AliSTARTdigit.h"
class AliRunLoader;
+class AliSTARTAlignData;
+class AliSTARTCalibData;
class AliSTARTReconstructor: public AliReconstructor {
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