#include "AliSTART.h"
#include "AliSTARTRawData.h"
#include "AliSTARTdigit.h"
-#include "AliSTARTLoader.h"
-
-#include <AliLoader.h>
-#include <AliRunLoader.h>
-
-#include "/home/alla/AliRoot/verynew/RAW/AliRawDataHeader.h"
-#include "/home/alla/AliRoot/verynew/RAW/AliRawData.h"
+#include <TTree.h>
+#include "AliRawDataHeader.h"
ClassImp(AliSTARTRawData)
//_____________________________________________________________________________
AliSTARTRawData::AliSTARTRawData():TObject()
{
-
+ /*
+- 48 channels (2 words each as in TOF DDL) for :
+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
+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).
+
+- T0-A and T0-C 2 channels
+- T0A-T0C vertex information
+- Time Meaner where T0C TOF increase to the T0A TOF distance
+- 6 multiplicity signals the same way as amplitude and with the same
+uncertances
+ */
fIndex=-1;
fDigits = NULL;
-
- ftimeTDC = new TArrayI(24);
- fADC = new TArrayI(24);
-
- this->Dump();
+
+ fTimeTDC = new TArrayI(24);
+ fADC = new TArrayI(24);
+ fTimeTDCAmp = new TArrayI(24);
+ fADCAmp = new TArrayI(24);
+ fSumMult = new TArrayI(6);
+ // this->Dump();
}
//
// Destructor
//
-
if (fDigits) {
delete fDigits;
fDigits = NULL;
- delete ftimeTDC;
- delete fADC;
}
-
+ delete fTimeTDC;
+ delete fADC;
+ delete fTimeTDCAmp;
+ delete fADCAmp;
+ delete fSumMult;
}
//_____________________________________________________________________________
//read START digits and fill TDC and ADC arrays
- cout<<"GetDigits(AliSTARTdigit *fDigits, UInt_t *buf) "<<endl;
+
UInt_t word;
UInt_t baseWord=0;
Int_t error=0;
+ // Get the digits array
- fDigits->Print();
-
- // Get the digits array
-
- fDigits->GetTime(*ftimeTDC);
- fDigits->GetADC(*fADC);
- fBestTimeRight=fDigits->GetBestTimeRight();
- fBestTimeLeft=fDigits->GetBestTimeLeft();
- fMeanTime = fDigits-> GetMeanTime();
-
+ fDigits->GetTime(*fTimeTDC);
+ fDigits->GetADC(*fADC);
+ fDigits->GetTimeAmp(*fTimeTDCAmp);
+ fDigits->GetADCAmp(*fADCAmp);
+ fDigits->GetSumMult(*fSumMult);
// Loop through all PMT
-
for (Int_t det = 0; det < 24; det++) {
- Int_t time=ftimeTDC->At(det);
- Int_t ADC=fADC->At(det);
- printf(" right det %x time %x ADC %x \n",det,time,ADC);
- //conver ADC to time (preliminary algorithm)
+ 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)
// DDL 1 0-5 -#PMT, 6-31 - empty
word=0;
baseWord=0;
- //TDC
+ //TDC
word=error;
PackWord(baseWord,word,0, 7); // Error flag
word=time;
PackWord(baseWord,word,8,31); // time-of-flight
fIndex++;
buf[fIndex]=baseWord;
+
word=0;
baseWord=0;
// amplified TDC
word=error;
PackWord(baseWord,word,0, 7); // Error flag
- word=time;
+ word=timeAmp;
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=ADC;
+ word=time;
PackWord(baseWord,word,8,31); // time-of-flight
fIndex++;
buf[fIndex]=baseWord;
- //Amplified ADC -> TDC
+
+ // ADC -> TDC :QTC
word=0;
baseWord=0;
baseWord=0;
word=error;
PackWord(baseWord,word,0, 7); // Error flag
- word=ADC;
+ 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;
+
+ // 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;
+ //Amplified ADC -> TDC
+ word=0;
+ baseWord=0;
+
+ 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;
+
+ word=0;
+ baseWord=0;
}
- /*
- //timemean
+
+
+ word=0;
+ baseWord=0;
fIndex++;
- buf[fIndex]=baseWord;
word=25;
PackWord(baseWord,word, 0, 5); // number of PMT on the right side
- word=fMeanTime;
+ word=fDigits->MeanTime();
PackWord(baseWord,word, 6, 31); // TDC on the right side from Marin
- printf("meantime buf[%i]=%x\n",fIndex,buf[fIndex]);
-
- fIndex++;
buf[fIndex]=baseWord;
-
+
baseWord=0;
-
word=error;
PackWord(baseWord,word,0, 7); // Error flag
- word=fMeanTime;
+ word=fDigits->MeanTime();
PackWord(baseWord,word,8,31); // time-of-flight
-
fIndex++;
buf[fIndex]=baseWord;
-
- printf("meantime buf[%i]=%x\n",fIndex,buf[fIndex]);
-
+
+
// besttime right & left
- fIndex++;
- cout<<" left "<<fBestTimeLeft<<" right "<<fBestTimeRight<<endl;
- buf[fIndex]=baseWord;
+ // fIndex++;
+ // buf[fIndex]=baseWord;
word=26;
PackWord(baseWord,word, 0, 5); // number of PMT on the right side
- word=fBestTimeRight;
+ word=fDigits->BestTimeRight();
PackWord(baseWord,word, 6, 31); // TDC on the right side from Marin
- printf("best buf[%i]=%x\n",fIndex,buf[fIndex]);
-
fIndex++;
buf[fIndex]=baseWord;
-
+
baseWord=0;
-
word=error;
PackWord(baseWord,word,0, 7); // Error flag
- word=fBestTimeRight;
+ word=fDigits->BestTimeRight();
PackWord(baseWord,word,8,31); // time-of-flight
-
fIndex++;
buf[fIndex]=baseWord;
-
- printf("4 right buf[%i]=%x\n",fIndex,buf[fIndex]);
-
+
word=27;
PackWord(baseWord,word, 0, 5); // number of PMT on the right side
- word=fBestTimeLeft;
+ word=fDigits->BestTimeLeft();
PackWord(baseWord,word, 6, 31); // TDC on the right side from Marin
- printf("5 left buf[%i]=%x\n",fIndex,buf[fIndex]);
-
fIndex++;
buf[fIndex]=baseWord;
-
+
baseWord=0;
-
+
word=error;
PackWord(baseWord,word,0, 7); // Error flag
- word=fBestTimeLeft;
+ word=fDigits->BestTimeLeft();
PackWord(baseWord,word,8,31); // time-of-flight
-
fIndex++;
buf[fIndex]=baseWord;
-
- printf("5 left buf[%i]=%x\n",fIndex,buf[fIndex]);
- */
- word=0;
+
+ // time difference
+ word=28;
+ PackWord(baseWord,word, 0, 5); // number of PMT on the right side
+ word=fDigits->TimeDiff();
+ 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=fDigits->TimeDiff();
+ PackWord(baseWord,word,8,31); // time-of-flight
+ fIndex++;
+ buf[fIndex]=baseWord;
+
+ // 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;
+ }
+ cout<<endl;
}
//-------------------------------------------------------------------------------------
}
//---------------------------------------------------------------------------------------
-Int_t AliSTARTRawData::RawDataSTART(AliSTARTdigit *fDigits){
-
- //This method creates the Raw data files for TOF detector
+Int_t AliSTARTRawData::RawDataSTART(AliSTARTdigit *fDigits)
+{
+ //This method creates the Raw data files for START detector
+
+
const Int_t kSize=512; //2*AliTOFGeometry::NpadXSector()
//max number of digits per DDL file times 2
UInt_t buf[kSize];
char fileName[15];
ofstream outfile; // logical name of the output file
AliRawDataHeader header;
- cout<<" AliRawDataHeader header; start "<<endl;
//loop over TOF DDL files
- sprintf(fileName,"START_0xd00.ddl"); //The name of the output file
+ sprintf(fileName,"START_%d.ddl", 0xd00);
+ // sprintf(fileName,"START_0xd00.ddl"); //The name of the output file
#ifndef __DECCXX
outfile.open(fileName,ios::binary);
#else
fIndex++;
buf[fIndex]=baseWord;
-
- // branch->GetEvent();
-
- //For each DDL file, buf contains the array of data words in Binary format
- //fIndex gives the number of 32 bits words in the buffer for each DDL file
- cout<<" AliSTARTRawData::RawDataSTART "<<fDigits<<endl;
-
GetDigits(fDigits,buf);
- cout<<"REAL DATA "<<fIndex<<endl;
- outfile.write((char *)buf,((fIndex+1)*sizeof(UInt_t)));
+
+ outfile.write((char *)buf,((fIndex+1)*sizeof(UInt_t)));
for(Int_t ii=0;ii<(fIndex+1);ii++) buf[ii]=0;
- fIndex=-1;
+ fIndex=-1;
//Write REAL DATA HEADER
UInt_t currentFilePosition=outfile.tellp();