X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=TRD%2FAliTRDgtuSim.cxx;h=832f170114a7d8b910e40a7032341ddf8c5fb92a;hb=4ea997df718622ff648fa363cd4b55e26c4485cd;hp=651cf9b2b4dc155d67a955d82784cbb08da2e615;hpb=80f93426e04ee998545f378eb7540e14c397e23f;p=u%2Fmrichter%2FAliRoot.git diff --git a/TRD/AliTRDgtuSim.cxx b/TRD/AliTRDgtuSim.cxx index 651cf9b2b4d..832f170114a 100644 --- a/TRD/AliTRDgtuSim.cxx +++ b/TRD/AliTRDgtuSim.cxx @@ -31,19 +31,19 @@ #include "TROOT.h" #include "TClonesArray.h" +#include "AliRun.h" +#include "AliRunLoader.h" +#include "AliLoader.h" +#include "AliLog.h" +#include "AliESDTrdTrack.h" + #include "AliTRDgtuSim.h" -#include "AliTRDmcmTracklet.h" #include "AliTRDgtuTMU.h" #include "AliTRDtrackGTU.h" #include "AliTRDtrackletWord.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) @@ -60,6 +60,8 @@ AliTRDgtuSim::AliTRDgtuSim(AliRunLoader *rl) AliTRDgtuSim::~AliTRDgtuSim() { + // destructor + if (fTrackletArray) fTrackletArray->Delete(); delete fTrackletArray; @@ -68,6 +70,9 @@ AliTRDgtuSim::~AliTRDgtuSim() 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()); @@ -86,11 +91,11 @@ Bool_t AliTRDgtuSim::RunGTUFromTrackletFile(TString filename, Int_t event, Int_t fTMU = 0x0; - AliInfo("--------- Reading from file ----------"); + AliDebug(5,"--------- Reading from file ----------"); while (getline(input, str)) { lineno++; string = str; - AliInfo(Form("Line %i : %s", lineno, string.Data())); + AliDebug(5,Form("Line %i : %s", lineno, string.Data())); TObjArray *tokens = string.Tokenize(" "); if (tokens->GetEntriesFast() < 7) { @@ -108,20 +113,20 @@ Bool_t AliTRDgtuSim::RunGTUFromTrackletFile(TString filename, Int_t event, Int_t 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); - AliInfo(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) - AliInfo(Form(" %d GeV/c", ((AliTRDtrackGTU*) ListOfTracks->At(0))->GetPt() )); + WriteTracksToDataFile(listOfTracks, iEventPrev); + if (listOfTracks->GetEntries() > 0) + AliDebug(2,Form(" %d GeV/c", ((AliTRDtrackGTU*) listOfTracks->At(0))->GetPt() )); delete fTMU; fTMU = new AliTRDgtuTMU(); - delete ListOfTracks; - ListOfTracks = 0x0; + delete listOfTracks; + listOfTracks = 0x0; } else { fTMU = new AliTRDgtuTMU(); } @@ -137,22 +142,22 @@ Bool_t AliTRDgtuSim::RunGTUFromTrackletFile(TString filename, Int_t event, Int_t sscanf(((TObjString*) tokens->At(i))->GetString().Data(), "%x", &trackletWord); if (trackletWord == 0x10001000) break; - AliInfo(Form("%i. tracklet: %s -> 0x%08x", i-4, ((TObjString*) tokens->At(i))->GetString().Data(), trackletWord)); + AliDebug(2,Form("%i. tracklet: %s -> 0x%08x", i-4, ((TObjString*) tokens->At(i))->GetString().Data(), trackletWord)); AliTRDtrackletWord *trkl = new AliTRDtrackletWord(trackletWord); fTMU->AddTracklet(trkl, iLink); } } 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; } @@ -162,8 +167,11 @@ Bool_t AliTRDgtuSim::RunGTUFromTrackletFile(TString filename, Int_t event, Int_t 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; } @@ -178,7 +186,7 @@ Bool_t AliTRDgtuSim::RunGTU(AliLoader *loader, AliESDEvent *esd) fTMU = 0x0; } - TList *ListOfTracks = new TList(); + TList *listOfTracks = new TList(); TIter next(fTrackletArray); AliTRDtrackletBase *trkl; @@ -192,12 +200,12 @@ Bool_t AliTRDgtuSim::RunGTU(AliLoader *loader, AliESDEvent *esd) 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(); } @@ -210,23 +218,25 @@ Bool_t AliTRDgtuSim::RunGTU(AliLoader *loader, AliESDEvent *esd) 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) { - AliInfo("Loading tracklets ..."); + // load the tracklets using the given loader + + AliDebug(1,"Loading tracklets ..."); if (!loader) { AliError("No loader given!"); @@ -288,7 +298,7 @@ Bool_t AliTRDgtuSim::LoadTracklets(AliLoader *loader) Int_t notrkl = 0; UInt_t *leaves = new UInt_t[258]; - AliInfo(Form("No. of entries: %i", trklbranch->GetEntries())); + AliDebug(1,Form("No. of entries: %i", trklbranch->GetEntries())); for (Int_t iEntry = 0; iEntry < trklbranch->GetEntries(); iEntry++) { trklbranch->SetAddress(leaves); @@ -296,27 +306,30 @@ Bool_t AliTRDgtuSim::LoadTracklets(AliLoader *loader) for (Int_t iTracklet = 0; iTracklet < 256; iTracklet++) { if (leaves[2 + iTracklet] == 0) break; - new((*fTrackletArray)[notrkl]) AliTRDtrackletWord(leaves[2 + iTracklet], leaves[0] + leaves[1]); + new((*fTrackletArray)[notrkl]) AliTRDtrackletWord(leaves[2 + iTracklet], 2*leaves[0] + leaves[1]); notrkl++; } - AliInfo(Form("Entry: %3i: Det: %3i, side: %i, 1st tracklet: 0x%08x, no: %i", iEntry, leaves[0], leaves[1], leaves[2], notrkl)); + 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; } -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"); - AliInfo(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(), @@ -333,14 +346,16 @@ Bool_t AliTRDgtuSim::WriteTracksToDataFile(TList *ListOfTracks, Int_t event) return kTRUE; } -Bool_t AliTRDgtuSim::WriteTracksToTree(TList *ListOfTracks, Int_t /*event*/) +Bool_t AliTRDgtuSim::WriteTracksToTree(TList *listOfTracks, Int_t /*event*/) { - AliInfo(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) { @@ -354,7 +369,7 @@ Bool_t AliTRDgtuSim::WriteTracksToTree(TList *ListOfTracks, Int_t /*event*/) branch = fTrackTree->Branch("TRDgtuTrack", "AliTRDtrackGTU", &trk, 32000, 99); } - TIter next(ListOfTracks); + TIter next(listOfTracks); while ((trk = (AliTRDtrackGTU*) next())) { trk->CookLabel(); branch->SetAddress(&trk); @@ -365,7 +380,9 @@ Bool_t AliTRDgtuSim::WriteTracksToTree(TList *ListOfTracks, Int_t /*event*/) 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) @@ -376,10 +393,12 @@ Bool_t AliTRDgtuSim::WriteTreesToFile() { 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); @@ -388,3 +407,51 @@ Bool_t AliTRDgtuSim::WriteTracksToESD(TList *ListOfTracks, AliESDEvent *esd) } return kTRUE; } + +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; + } + + AliRunLoader *rl = AliRunLoader::Instance(); + AliDataLoader *dl = 0x0; + if (rl) + dl = rl->GetLoader("TRDLoader")->GetDataLoader("gtutracks"); + if (!dl) { + AliError("Could not get the GTU-track data loader!"); + return kFALSE; + } + + TTree *trackTree = dl->Tree(); + if (!trackTree) { + dl->MakeTree(); + trackTree = dl->Tree(); + } + + AliTRDtrackGTU *trk = 0x0; + TBranch *trkbranch = trackTree->GetBranch("TRDtrackGTU"); + if (!trkbranch) + trkbranch = trackTree->Branch("TRDtrackGTU", "AliTRDtrackGTU", &trk, 32000); + + TBranch *branch = fTrackTree->GetBranch("TRDgtuTrack"); + if (!branch) + return kFALSE; + + AliDebug(1,Form("Found %i tracks", branch->GetEntries())); + + for (Int_t iTrack = 0; iTrack < branch->GetEntries(); iTrack++) { + branch->SetAddress(&trk); + branch->GetEntry(iTrack); + trkbranch->SetAddress(&trk); + trackTree->Fill(); + } + + dl->WriteData("OVERWRITE"); + + return kTRUE; +}