]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TRD/AliTRDgtuSim.cxx
fix coverity
[u/mrichter/AliRoot.git] / TRD / AliTRDgtuSim.cxx
index 47b4505aab38270d4cb35af2ce894a1cea23caf8..dc25fe95593713c1b5d802752147d3705a6a922b 100644 (file)
 #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) 
@@ -59,6 +61,8 @@ AliTRDgtuSim::AliTRDgtuSim(AliRunLoader *rl)
 
 AliTRDgtuSim::~AliTRDgtuSim() 
 {
+  // destructor
+
   if (fTrackletArray)
     fTrackletArray->Delete();
   delete fTrackletArray;
@@ -67,6 +71,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());
     
@@ -107,20 +114,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);
-               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();
            }
@@ -143,15 +150,15 @@ Bool_t AliTRDgtuSim::RunGTUFromTrackletFile(TString filename, Int_t event, Int_t
     }
     
     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,11 +168,16 @@ 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;
     }
 
+    AliDebug(1, Form("running on %i tracklets", fTrackletArray->GetEntriesFast()));
+
     Int_t iStackPrev = -1;
     Int_t iSecPrev = -1;
     Int_t iSec = -1;
@@ -177,7 +189,7 @@ Bool_t AliTRDgtuSim::RunGTU(AliLoader *loader, AliESDEvent *esd)
        fTMU = 0x0;
     }
     
-    TList *ListOfTracks = new TList();
+    TList *listOfTracks = new TList();
     
     TIter next(fTrackletArray);
     AliTRDtrackletBase *trkl;
@@ -191,40 +203,43 @@ 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();
            }
            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) {
@@ -239,83 +254,84 @@ Bool_t AliTRDgtuSim::LoadTracklets(AliLoader *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(), 
@@ -332,14 +348,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*/) 
 {
-  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) {
@@ -353,7 +371,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);
@@ -364,7 +382,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)
@@ -375,10 +395,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);
@@ -390,6 +412,9 @@ Bool_t AliTRDgtuSim::WriteTracksToESD(TList *ListOfTracks, AliESDEvent *esd)
 
 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;
@@ -411,20 +436,15 @@ Bool_t AliTRDgtuSim::WriteTracksToLoader()
   }
   
   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();
   }