X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=TRD%2FAliTRDgtuSim.cxx;h=832f170114a7d8b910e40a7032341ddf8c5fb92a;hb=82abc1dfa78772128237883bb1ed0d3d84d83eac;hp=43038826c38e6742d0f45b1d25f8042c79eeedb9;hpb=52c1902213afe6d83b1e31c66bb5bb986db0518d;p=u%2Fmrichter%2FAliRoot.git diff --git a/TRD/AliTRDgtuSim.cxx b/TRD/AliTRDgtuSim.cxx index 43038826c38..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) @@ -55,10 +55,13 @@ AliTRDgtuSim::AliTRDgtuSim(AliRunLoader *rl) fTrackletTree(0x0) { fTrackletTree = new TTree("gtutracklets", "Tree with GTU tracklets"); + fTrackletTree->SetDirectory(0); } AliTRDgtuSim::~AliTRDgtuSim() { + // destructor + if (fTrackletArray) fTrackletArray->Delete(); delete fTrackletArray; @@ -67,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()); @@ -85,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) { @@ -107,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(); } @@ -136,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; } @@ -161,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; } @@ -177,12 +186,12 @@ Bool_t AliTRDgtuSim::RunGTU(AliLoader *loader, AliESDEvent *esd) fTMU = 0x0; } - TList *ListOfTracks = new TList(); + TList *listOfTracks = new TList(); TIter next(fTrackletArray); AliTRDtrackletBase *trkl; - while (trkl = (AliTRDtrackletBase*) next()) { + while ((trkl = (AliTRDtrackletBase*) next())) { iSec = trkl->GetDetector() / 30; iStack = (trkl->GetDetector() % 30) / 6; iLink = 2 * (trkl->GetDetector() % 6) + (trkl->GetYbin() < 0 ? 0 : 1); @@ -191,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(); } @@ -209,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!"); @@ -287,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); @@ -295,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(), @@ -332,18 +346,22 @@ 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) + if (!fTrackTree) { fTrackTree = new TTree("gtutracks", "GTU tracks"); + fTrackTree->SetDirectory(0); + } AliTRDtrackGTU *trk = 0x0; TBranch *branch = fTrackTree->GetBranch("TRDgtuTrack"); @@ -351,8 +369,9 @@ Bool_t AliTRDgtuSim::WriteTracksToTree(TList *ListOfTracks, Int_t /*event*/) branch = fTrackTree->Branch("TRDgtuTrack", "AliTRDtrackGTU", &trk, 32000, 99); } - TIter next(ListOfTracks); - while (trk = (AliTRDtrackGTU*) next()) { + TIter next(listOfTracks); + while ((trk = (AliTRDtrackGTU*) next())) { + trk->CookLabel(); branch->SetAddress(&trk); fTrackTree->Fill(); } @@ -361,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) @@ -372,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); @@ -384,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; +}