#include "TROOT.h"
#include "TClonesArray.h"
+#include "AliRun.h"
+#include "AliRunLoader.h"
+#include "AliLoader.h"
+#include "AliTreeLoader.h"
+#include "AliLog.h"
+#include "AliESDTrdTrack.h"
+
#include "AliTRDgtuSim.h"
#include "AliTRDgtuTMU.h"
#include "AliTRDtrackGTU.h"
#include "AliTRDtrackletMCM.h"
#include "AliESDEvent.h"
-#include "AliRun.h"
-#include "AliRunLoader.h"
-#include "AliLoader.h"
-#include "AliLog.h"
-
ClassImp(AliTRDgtuSim)
AliTRDgtuSim::AliTRDgtuSim(AliRunLoader *rl)
AliTRDgtuSim::~AliTRDgtuSim()
{
+ // destructor
+
if (fTrackletArray)
fTrackletArray->Delete();
delete fTrackletArray;
Bool_t AliTRDgtuSim::RunGTUFromTrackletFile(TString filename, Int_t event, Int_t noev)
{
+ // run the GTU from a file of tracklets
+ // used for comparison to VHDL simulation
+
AliInfo(Form("Running the GTU simulation on file: %s", filename.Data()));
ifstream input(filename.Data());
if (iEvent != iEventPrev || iStack != iStackPrev || iSec != iSecPrev) {
if(fTMU) {
- TList *ListOfTracks = new TList();
+ TList *listOfTracks = new TList();
fTMU->SetStack(iStackPrev);
fTMU->SetSector(iSecPrev);
- fTMU->RunTMU(ListOfTracks);
- AliDebug(1,Form("--- There are %i tracks. Writing ...", ListOfTracks->GetEntries()));
- WriteTracksToTree(ListOfTracks);
+ fTMU->RunTMU(listOfTracks);
+ AliDebug(1,Form("--- There are %i tracks. Writing ...", listOfTracks->GetEntries()));
+ WriteTracksToTree(listOfTracks);
fTMU->WriteTrackletsToTree(fTrackletTree);
- WriteTracksToDataFile(ListOfTracks, iEventPrev);
- if (ListOfTracks->GetEntries() > 0)
- AliDebug(2,Form(" %d GeV/c", ((AliTRDtrackGTU*) ListOfTracks->At(0))->GetPt() ));
+ WriteTracksToDataFile(listOfTracks, iEventPrev);
+ if (listOfTracks->GetEntries() > 0)
+ AliDebug(2,Form(" %4.1f GeV/c", ((AliTRDtrackGTU*) listOfTracks->At(0))->GetPt() ));
delete fTMU;
fTMU = new AliTRDgtuTMU();
- delete ListOfTracks;
- ListOfTracks = 0x0;
+ delete listOfTracks;
+ listOfTracks = 0x0;
} else {
fTMU = new AliTRDgtuTMU();
}
}
if (fTMU && evcnt < noev) {
- TList *ListOfTracks = new TList();
+ TList *listOfTracks = new TList();
fTMU->SetStack(iStackPrev);
fTMU->SetSector(iSecPrev);
- fTMU->RunTMU(ListOfTracks);
- WriteTracksToTree(ListOfTracks);
+ fTMU->RunTMU(listOfTracks);
+ WriteTracksToTree(listOfTracks);
fTMU->WriteTrackletsToTree(fTrackletTree);
- WriteTracksToDataFile(ListOfTracks, iEventPrev);
+ WriteTracksToDataFile(listOfTracks, iEventPrev);
delete fTMU;
- delete ListOfTracks;
+ delete listOfTracks;
fTMU = 0x0;
}
Bool_t AliTRDgtuSim::RunGTU(AliLoader *loader, AliESDEvent *esd)
{
+ // run the GTU on tracklets taken from the loader
+ // if specified the GTU tracks are written to the ESD event
+
if (!LoadTracklets(loader)) {
- AliError("Could not load the tracklets. Aborting ...");
+ AliError("Could not load the tracklets. Nothing done ...");
return kFALSE;
}
+ AliDebug(1, Form("running on %i tracklets", fTrackletArray->GetEntriesFast()));
+
Int_t iStackPrev = -1;
Int_t iSecPrev = -1;
Int_t iSec = -1;
fTMU = 0x0;
}
- TList *ListOfTracks = new TList();
+ TList *listOfTracks = new TList();
TIter next(fTrackletArray);
AliTRDtrackletBase *trkl;
if(fTMU) {
fTMU->SetStack(iStackPrev);
fTMU->SetSector(iSecPrev);
- fTMU->RunTMU(ListOfTracks);
- WriteTracksToTree(ListOfTracks);
+ fTMU->RunTMU(listOfTracks);
+ WriteTracksToTree(listOfTracks);
fTMU->WriteTrackletsToTree(fTrackletTree);
- WriteTracksToESD(ListOfTracks, esd);
+ WriteTracksToESD(listOfTracks, esd);
fTMU->Reset();
- ListOfTracks->Delete();
+ listOfTracks->Delete();
} else {
fTMU = new AliTRDgtuTMU();
}
iStackPrev = iStack;
iSecPrev = iSec;
}
+ AliDebug(1, Form("adding tracklet: 0x%08x", trkl->GetTrackletWord()));
fTMU->AddTracklet(trkl, iLink);
}
if (fTMU) {
fTMU->SetStack(iStackPrev);
fTMU->SetSector(iSecPrev);
- fTMU->RunTMU(ListOfTracks);
- WriteTracksToTree(ListOfTracks);
+ fTMU->RunTMU(listOfTracks);
+ WriteTracksToTree(listOfTracks);
fTMU->WriteTrackletsToTree(fTrackletTree);
- WriteTracksToESD(ListOfTracks, esd);
+ WriteTracksToESD(listOfTracks, esd);
delete fTMU;
fTMU = 0x0;
- ListOfTracks->Delete();
+ listOfTracks->Delete();
}
- delete ListOfTracks;
+ delete listOfTracks;
return kTRUE;
}
-Bool_t AliTRDgtuSim::LoadTracklets(AliLoader *loader)
+Bool_t AliTRDgtuSim::LoadTracklets(AliLoader *const loader)
{
+ // load the tracklets using the given loader
+
AliDebug(1,"Loading tracklets ...");
if (!loader) {
}
trackletLoader->Load();
-
- TTree *trackletTree = trackletLoader->Tree();
- if (!trackletTree) {
- AliError("No tracklet tree found");
- return kFALSE;
- }
-
+ TTree *trackletTree = 0x0;
- TBranch *trklbranch = trackletTree->GetBranch("mcmtrklbranch");
- if (trklbranch) {
+ // simulated tracklets
+ trackletTree = trackletLoader->Tree();
+ if (trackletTree) {
+ TBranch *trklbranch = trackletTree->GetBranch("mcmtrklbranch");
+ if (trklbranch) {
if (!fTrackletArray)
- fTrackletArray = new TClonesArray("AliTRDtrackletMCM", 1000);
+ fTrackletArray = new TClonesArray("AliTRDtrackletMCM", 1000);
else if ((TClass::GetClass("AliTRDtrackletMCM"))->InheritsFrom(fTrackletArray->Class()))
- fTrackletArray->Delete();
+ fTrackletArray->Delete();
else {
- fTrackletArray->Delete();
- delete fTrackletArray;
- fTrackletArray = new TClonesArray("AliTRDtrackletMCM", 1000);
+ fTrackletArray->Delete();
+ delete fTrackletArray;
+ fTrackletArray = new TClonesArray("AliTRDtrackletMCM", 1000);
}
AliTRDtrackletMCM *trkl = new AliTRDtrackletMCM;
trklbranch->SetAddress(&trkl);
for (Int_t iTracklet = 0; iTracklet < trklbranch->GetEntries(); iTracklet++) {
- trklbranch->GetEntry(iTracklet);
- new ((*fTrackletArray)[fTrackletArray->GetEntries()]) AliTRDtrackletMCM(*trkl);
+ trklbranch->GetEntry(iTracklet);
+ new ((*fTrackletArray)[fTrackletArray->GetEntries()]) AliTRDtrackletMCM(*trkl);
}
return kTRUE;
+ }
}
- trklbranch = trackletTree->GetBranch("trkbranch");
+ // raw tracklets
+ AliTreeLoader *tl = (AliTreeLoader*) trackletLoader->GetBaseLoader("tracklets-raw");
+ trackletTree = tl ? tl->Load(), tl->Tree() : 0x0;
- if (!trklbranch) {
- AliError("Could not get trkbranch");
- return kFALSE;
- }
-
- if (!fTrackletArray)
+ if (trackletTree) {
+ if (!fTrackletArray)
fTrackletArray = new TClonesArray("AliTRDtrackletWord", 1000);
- else if ((TClass::GetClass("AliTRDtrackletWord"))->InheritsFrom(fTrackletArray->Class()))
+ else if ((TClass::GetClass("AliTRDtrackletWord"))->InheritsFrom(fTrackletArray->Class()))
fTrackletArray->Delete();
- else {
+ else {
fTrackletArray->Delete();
delete fTrackletArray;
fTrackletArray = new TClonesArray("AliTRDtrackletWord", 1000);
- }
-
- Int_t notrkl = 0;
- UInt_t *leaves = new UInt_t[258];
- AliDebug(1,Form("No. of entries: %i", trklbranch->GetEntries()));
-
- for (Int_t iEntry = 0; iEntry < trklbranch->GetEntries(); iEntry++) {
- trklbranch->SetAddress(leaves);
- trklbranch->GetEntry(iEntry);
- for (Int_t iTracklet = 0; iTracklet < 256; iTracklet++) {
- if (leaves[2 + iTracklet] == 0)
- break;
- new((*fTrackletArray)[notrkl]) AliTRDtrackletWord(leaves[2 + iTracklet], 2*leaves[0] + leaves[1]);
- notrkl++;
+ }
+
+ Int_t hc;
+ TClonesArray *ar = 0x0;
+ trackletTree->SetBranchAddress("hc", &hc);
+ trackletTree->SetBranchAddress("trkl", &ar);
+
+ for (Int_t iEntry = 0; iEntry < trackletTree->GetEntries(); iEntry++) {
+ trackletTree->GetEntry(iEntry);
+ printf("%i tracklets in HC %i\n", ar->GetEntriesFast(), hc);
+ for (Int_t iTracklet = 0; iTracklet < ar->GetEntriesFast(); iTracklet++) {
+ AliTRDtrackletWord *trklWord = (AliTRDtrackletWord*) (*ar)[iTracklet];
+ new((*fTrackletArray)[fTrackletArray->GetEntriesFast()]) AliTRDtrackletWord(trklWord->GetTrackletWord(), hc);
}
- AliDebug(2,Form("Entry: %3i: Det: %3i, side: %i, 1st tracklet: 0x%08x, no: %i", iEntry, leaves[0], leaves[1], leaves[2], notrkl));
+ }
+ return kTRUE;
}
+
+ AliError("No raw tracklet tree found\n");
- return kTRUE;
+ return kFALSE;
}
-Bool_t AliTRDgtuSim::WriteTracksToDataFile(TList *ListOfTracks, Int_t event)
+Bool_t AliTRDgtuSim::WriteTracksToDataFile(TList *listOfTracks, Int_t event)
{
+ // write the found tracks to a data file
+ // used for comparison to VHDL simulation
+
Int_t sm = 0;
Int_t stack = 0;
FILE *out;
out = fopen("test.data", "a");
- AliDebug(1,Form("%i tracks found in event %i", ListOfTracks->GetSize(), event));
+ AliDebug(1,Form("%i tracks found in event %i", listOfTracks->GetSize(), event));
fprintf(out, "0 %5i %2i %i 00000000\n", event, sm, stack);
- for (Int_t i = 0; i < ListOfTracks->GetSize(); i++) {
- AliTRDtrackGTU *trk = (AliTRDtrackGTU*) ListOfTracks->At(i);
+ for (Int_t i = 0; i < listOfTracks->GetSize(); i++) {
+ AliTRDtrackGTU *trk = (AliTRDtrackGTU*) listOfTracks->At(i);
sm = trk->GetSector();
stack = trk->GetStack();
fprintf(out, "1 %5i %2i %2i %3i %3i %3i %3i %3i %3i %3i %4i %f\n", event, sm, stack, trk->GetTrackletMask(),
return kTRUE;
}
-Bool_t AliTRDgtuSim::WriteTracksToTree(TList *ListOfTracks, Int_t /*event*/)
+Bool_t AliTRDgtuSim::WriteTracksToTree(TList *listOfTracks, Int_t /*event*/)
{
- AliDebug(1,Form("Writing %i tracks to the tree...", ListOfTracks->GetEntries()));
+ // write the tracks to the tree for intermediate storage
+
+ AliDebug(1,Form("Writing %i tracks to the tree...", listOfTracks->GetEntries()));
- if (!ListOfTracks)
+ if (!listOfTracks)
return kFALSE;
- if (ListOfTracks->GetEntries() <= 0)
+ if (listOfTracks->GetEntries() <= 0)
return kTRUE;
if (!fTrackTree) {
branch = fTrackTree->Branch("TRDgtuTrack", "AliTRDtrackGTU", &trk, 32000, 99);
}
- TIter next(ListOfTracks);
+ TIter next(listOfTracks);
while ((trk = (AliTRDtrackGTU*) next())) {
trk->CookLabel();
branch->SetAddress(&trk);
return kTRUE;
}
-Bool_t AliTRDgtuSim::WriteTreesToFile() {
+Bool_t AliTRDgtuSim::WriteTreesToFile() const {
+ // write the trees holding tracklets and tracks to file
+
TFile *f = TFile::Open("TRD.GtuTracking.root", "RECREATE");
f->cd();
if (fTrackTree)
return kTRUE;
}
-Bool_t AliTRDgtuSim::WriteTracksToESD(TList *ListOfTracks, AliESDEvent *esd)
+Bool_t AliTRDgtuSim::WriteTracksToESD(const TList * const listOfTracks, AliESDEvent *esd)
{
+ // fill the found tracks to the given ESD event
+
if (esd) {
- TIter next(ListOfTracks);
+ TIter next(listOfTracks);
while (AliTRDtrackGTU *trk = (AliTRDtrackGTU*) next()) {
AliESDTrdTrack *trdtrack = trk->CreateTrdTrack();
esd->AddTrdTrack(trdtrack);
Bool_t AliTRDgtuSim::WriteTracksToLoader()
{
+ // write the GTU tracks to the dedicated loader
+ // these tracks contain more information than the ones in the ESD
+
if (!fTrackTree) {
AliError("No track tree found!");
return kFALSE;
}
AliTRDtrackGTU *trk = 0x0;
- TBranch *trkbranch = trackTree->GetBranch("TRDtrackGTU");
- if (!trkbranch)
- trkbranch = trackTree->Branch("TRDtrackGTU", "AliTRDtrackGTU", &trk, 32000);
+ if (!trackTree->GetBranch("TRDtrackGTU"))
+ trackTree->Branch("TRDtrackGTU", "AliTRDtrackGTU", &trk, 32000);
- TBranch *branch = fTrackTree->GetBranch("TRDgtuTrack");
- if (!branch)
- return kFALSE;
-
- AliDebug(1,Form("Found %i tracks", branch->GetEntries()));
+ AliDebug(1,Form("Found %lld tracks", fTrackTree->GetEntries()));
- for (Int_t iTrack = 0; iTrack < branch->GetEntries(); iTrack++) {
- branch->SetAddress(&trk);
- branch->GetEntry(iTrack);
- trkbranch->SetAddress(&trk);
+ for (Int_t iTrack = 0; iTrack < fTrackTree->GetEntries(); iTrack++) {
+ fTrackTree->SetBranchAddress("TRDgtuTrack", &trk);
+ fTrackTree->GetEntry(iTrack);
+ trackTree->SetBranchAddress("TRDtrackGTU", &trk);
trackTree->Fill();
}