]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TRD/AliTRDgtuSim.cxx
Bug fix for Savannah entry 74517 (Jochen)
[u/mrichter/AliRoot.git] / TRD / AliTRDgtuSim.cxx
index 6eba70dd2d619da113242c740c75f5424953b4e6..a90c8c295694fac5d4684b537633d829951b6f90 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 "AliTRDfeeParam.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) 
   : TObject(),
   fRunLoader(rl),
+  fFeeParam(AliTRDfeeParam::Instance()),
   fTMU(0x0),
   fTrackletArray(0x0),
   fTrackTree(0x0),
@@ -121,7 +125,7 @@ Bool_t AliTRDgtuSim::RunGTUFromTrackletFile(TString filename, Int_t event, Int_t
                fTMU->WriteTrackletsToTree(fTrackletTree);
                WriteTracksToDataFile(listOfTracks, iEventPrev);
                if (listOfTracks->GetEntries() > 0) 
-                   AliDebug(2,Form("   %d GeV/c", ((AliTRDtrackGTU*) listOfTracks->At(0))->GetPt() ));
+                   AliDebug(2,Form("   %4.1f GeV/c", ((AliTRDtrackGTU*) listOfTracks->At(0))->GetPt() ));
                delete fTMU;
                fTMU = new AliTRDgtuTMU(); 
                delete listOfTracks;
@@ -138,12 +142,13 @@ Bool_t AliTRDgtuSim::RunGTUFromTrackletFile(TString filename, Int_t event, Int_t
        }
        for (Int_t i = 5; i < tokens->GetEntriesFast(); i++) {
            UInt_t trackletWord = 0;
-           sscanf(((TObjString*) tokens->At(i))->GetString().Data(), "%x", &trackletWord);
+           sscanf(((TObjString*) tokens->At(i))->GetString().Data(), "%u", &trackletWord);
            if (trackletWord == 0x10001000) 
                break;
            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)
+             fTMU->AddTracklet(trkl, iLink);
        }
     }
     
@@ -169,11 +174,16 @@ 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 (!fFeeParam->GetTracklet())
+    return kFALSE;
+
     if (!LoadTracklets(loader)) {
        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;
@@ -211,7 +221,9 @@ Bool_t AliTRDgtuSim::RunGTU(AliLoader *loader, AliESDEvent *esd)
            iStackPrev = iStack;
            iSecPrev = iSec;
        }
-       fTMU->AddTracklet(trkl, iLink);
+       AliDebug(1, Form("adding tracklet: 0x%08x", trkl->GetTrackletWord()));
+       if (fTMU)
+         fTMU->AddTracklet(trkl, iLink);
     }
     
     if (fTMU) {
@@ -237,6 +249,9 @@ Bool_t AliTRDgtuSim::LoadTracklets(AliLoader *const loader)
 
   AliDebug(1,"Loading tracklets ...");
 
+  if (!fFeeParam->GetTracklet())
+    return kFALSE;
+
   if (!loader) {
     AliError("No loader given!");
     return kFALSE;
@@ -249,69 +264,67 @@ Bool_t AliTRDgtuSim::LoadTracklets(AliLoader *const 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) 
@@ -413,7 +426,7 @@ Bool_t AliTRDgtuSim::WriteTracksToLoader()
   // these tracks contain more information than the ones in the ESD
 
   if (!fTrackTree) {
-    AliError("No track tree found!");
+    AliDebug(1, "No track tree found!");
     return kFALSE;
   }
 
@@ -433,20 +446,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();
   }