#include "AliRawReader.h"
#include "AliLog.h"
#include "AliFstream.h"
+#include "AliLoader.h"
#include "AliTreeLoader.h"
#include "AliTRDrawData.h"
#include "AliTRDgeometry.h"
#include "AliTRDarrayDictionary.h"
#include "AliTRDarrayADC.h"
-#include "AliTRDrawStreamBase.h"
+#include "AliTRDrawStream.h"
#include "AliTRDcalibDB.h"
#include "AliTRDSignalIndex.h"
#include "AliTRDfeeParam.h"
,fFee(NULL)
,fNumberOfDDLs(0)
,fTrackletTree(NULL)
- ,fTrackletContainer(NULL)
+ ,fTracklets(NULL)
+ ,fTracks(NULL)
,fSMindexPos(0)
,fStackindexPos(0)
,fEventCounter(0)
+ ,fTrgFlags()
,fMcmSim(new AliTRDmcmSim)
,fDigitsParam(NULL)
{
,fFee(NULL)
,fNumberOfDDLs(0)
,fTrackletTree(NULL)
- ,fTrackletContainer(NULL)
+ ,fTracklets(NULL)
+ ,fTracks(NULL)
,fSMindexPos(0)
,fStackindexPos(0)
,fEventCounter(0)
+ ,fTrgFlags()
,fMcmSim(new AliTRDmcmSim)
,fDigitsParam(NULL)
{
// Destructor
//
- if (fTrackletContainer){
- delete fTrackletContainer;
- fTrackletContainer = NULL;
+ if (fTracklets){
+ fTracklets->Delete();
+ delete fTracklets;
+ }
+
+ if (fTracks){
+ fTracks->Delete();
+ delete fTracks;
}
delete fMcmSim;
for (Int_t sect = 0; sect < fGeo->Nsector(); sect++) {
char name[1024];
- snprintf(name,1024,"TRD_%d.ddl",sect + AliTRDrawStreamBase::kDDLOffset);
+ snprintf(name,1024,"TRD_%d.ddl",sect + AliTRDrawStream::kDDLOffset);
AliFstream* of = new AliFstream(name);
Bool_t bSMHasData = kFALSE;
//iwbuffer[nheader++] = 0x0001a020; // SM index words
- iwbuffer[nheader++] = 0x0044a020; // SM index words | additional SM header:48 = 1 SM header + 47 dummy words(for future use)
+ iwbuffer[nheader++] = 0x0044b020; // SM index words | additional SM header:48 = 1 SM header + 47 dummy words(for future use)
iwbuffer[nheader++] = 0x10404071; // SM header
for ( Int_t i=0; i<66; i++ ) iwbuffer[nheader++] = 0x00000000; // dummy words
iwbuffer[nheader++] = 0x10000000; // end of dummy words
if ( fgDataSuppressionLevel==0 || bSMHasData ){
iwbuffer[0] = iwbuffer[0] | bStackMask; // add stack masks to SM index word
- if (fgDataSuppressionLevel==0) iwbuffer[0] = 0x0044a03f; // no suppression : all stacks are active
+ if (fgDataSuppressionLevel==0) iwbuffer[0] = 0x0044b03f; // no suppression : all stacks are active
of->WriteBuffer((char *) iwbuffer, nheader*4);
AliDebug(11, Form("SM %d index word: %08x", sect, iwbuffer[0]));
AliDebug(11, Form("SM %d header: %08x", sect, iwbuffer[1]));
//buf[nw++] = 0x0001a03f; // SM index words
fSMindexPos = nw; // memorize position of the SM index word for re-allocating stack mask
- buf[nw++] = 0x0001a020; // SM index words
+ buf[nw++] = 0x0001b020; // SM index words
buf[nw++] = 0x10404071; // SM header
fStackindexPos = nw; // memorize position of the stack index word for future adding
AliTRDdigitsManager* digitsManager = new AliTRDdigitsManager();
digitsManager->CreateArrays();
- if (!fTrackletContainer) {
- const Int_t kTrackletChmb=256;
- fTrackletContainer = new UInt_t *[2];
- fTrackletContainer[0] = new UInt_t[kTrackletChmb];
- fTrackletContainer[1] = new UInt_t[kTrackletChmb];
- memset(fTrackletContainer[0], 0, kTrackletChmb*sizeof(UInt_t)); //jkl
- memset(fTrackletContainer[1], 0, kTrackletChmb*sizeof(UInt_t)); //jkl
- }
-
- AliTRDrawStreamBase *pinput = AliTRDrawStreamBase::GetRawStream(rawReader);
- AliTRDrawStreamBase &input = *pinput;
- input.SetRawVersion( fFee->GetRAWversion() ); //<= ADDED by MinJung
-
- AliInfo(Form("Stream version: %s", input.IsA()->GetName()));
+ AliTRDrawStream input(rawReader);
// ----- preparing tracklet output -----
AliDataLoader *trklLoader = AliRunLoader::Instance()->GetLoader("TRDLoader")->GetDataLoader("tracklets");
if (!trklLoader) {
- //AliInfo("Could not get the tracklets data loader, adding it now!");
trklLoader = new AliDataLoader("TRD.Tracklets.root","tracklets", "tracklets");
AliRunLoader::Instance()->GetLoader("TRDLoader")->AddDataLoader(trklLoader);
}
if (!trklTreeLoader->Tree())
trklTreeLoader->MakeTree();
+ input.SetTrackletArray(TrackletsArray());
+ input.SetTrackArray(TracksArray());
+
// Loop through the digits
Int_t det = 0;
while (det >= 0)
{
- det = input.NextChamber(digitsManager,fTrackletContainer);
-
- if (*(fTrackletContainer[0]) > 0 || *(fTrackletContainer[1]) > 0) WriteTracklets(det);
+ det = input.NextChamber(digitsManager);
if (det >= 0)
{
}
}
- trklTreeLoader->WriteData("OVERWRITE");
- trklLoader->UnloadAll();
-
- if (fTrackletContainer){
- delete [] fTrackletContainer[0];
- delete [] fTrackletContainer[1];
- delete [] fTrackletContainer;
- fTrackletContainer = NULL;
+ for (Int_t iSector = 0; iSector < fGeo->Nsector(); iSector++) {
+ fTrgFlags[iSector] = input.GetTriggerFlags(iSector);
}
- delete pinput;
- pinput = NULL;
+ trklTreeLoader->WriteData("OVERWRITE");
+ trklLoader->UnloadAll();
return digitsManager;
-
}
//_____________________________________________________________________________
if (nw < maxSize) buf[nw++] = x; else of++;
}
-//_____________________________________________________________________________
-Bool_t AliTRDrawData::WriteTracklets(Int_t det)
+TClonesArray *AliTRDrawData::TrackletsArray()
{
- //
- // Write the raw data tracklets into seperate file
- //
+ // Returns the array of on-line tracklets
- UInt_t **leaves = new UInt_t *[2];
- for (Int_t i=0; i<2 ;i++){
- leaves[i] = new UInt_t[258];
- leaves[i][0] = det; // det
- leaves[i][1] = i; // side
- memcpy(leaves[i]+2, fTrackletContainer[i], sizeof(UInt_t) * 256);
- }
-
- if (!fTrackletTree){
- AliDataLoader *dl = fRunLoader->GetLoader("TRDLoader")->GetDataLoader("tracklets");
- dl->MakeTree();
- fTrackletTree = dl->Tree();
+ if (!fTracklets) {
+ fTracklets = new TClonesArray("AliTRDtrackletWord", 200);
}
+ return fTracklets;
+}
- TBranch *trkbranch = fTrackletTree->GetBranch("trkbranch");
- if (!trkbranch) {
- trkbranch = fTrackletTree->Branch("trkbranch",leaves[0],"det/i:side/i:tracklets[256]/i");
- }
+TClonesArray* AliTRDrawData::TracksArray()
+{
+ // return array of GTU tracks (create TClonesArray if necessary)
- for (Int_t i=0; i<2; i++){
- if (leaves[i][2]>0) {
- trkbranch->SetAddress(leaves[i]);
- fTrackletTree->Fill();
- }
+ if (!fTracks) {
+ fTracks = new TClonesArray("AliESDTrdTrack",100);
}
-
- // AliDataLoader *dl = fRunLoader->GetLoader("TRDLoader")->GetDataLoader("tracklets"); //jkl: wrong
- // dl->WriteData("OVERWRITE"); //jkl: wrong
- //dl->Unload();
- delete [] leaves;
-
- return kTRUE;
+ return fTracks;
}