]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TRD/AliTRDrawData.cxx
Fixes from Marian:
[u/mrichter/AliRoot.git] / TRD / AliTRDrawData.cxx
index 81fcf7f2f17c9f7c693705e314ab1468709f4154..0dab1698c2ec3720d2e56020081ee560fbf36734 100644 (file)
@@ -44,6 +44,8 @@
 #include "AliTRDfeeParam.h"
 #include "AliTRDmcmSim.h"
 #include "AliTRDtrackletWord.h"
+#include "AliTRDtrackGTU.h"
+#include "AliESDTrdTrack.h"
 #include "AliTRDdigitsParam.h"
 
 ClassImp(AliTRDrawData)
@@ -58,8 +60,8 @@ AliTRDrawData::AliTRDrawData()
   ,fFee(NULL)
   ,fNumberOfDDLs(0)
   ,fTrackletTree(NULL)
-  ,fTracklets(NULL)
-  ,fTracks(NULL)
+  ,fTracklets(new TClonesArray("AliTRDtrackletWord", 1000))
+  ,fTracks(new TClonesArray("AliESDTrdTrack", 500))
   ,fSMindexPos(0)
   ,fStackindexPos(0)
   ,fEventCounter(0)
@@ -84,8 +86,8 @@ AliTRDrawData::AliTRDrawData(const AliTRDrawData &r)
   ,fFee(NULL)
   ,fNumberOfDDLs(0)
   ,fTrackletTree(NULL)
-  ,fTracklets(NULL)
-  ,fTracks(NULL)
+  ,fTracklets(new TClonesArray("AliTRDtrackletWord", 1000))
+  ,fTracks(new TClonesArray("AliESDTrdTrack", 500))
   ,fSMindexPos(0)
   ,fStackindexPos(0)
   ,fEventCounter(0)
@@ -109,16 +111,8 @@ AliTRDrawData::~AliTRDrawData()
   // Destructor
   //
 
-  if (fTracklets){
-    fTracklets->Delete();
-    delete fTracklets;
-  }
-
-  if (fTracks){
-    fTracks->Delete();
-    delete fTracks;
-  }
-
+  delete fTracklets;
+  delete fTracks;
   delete fMcmSim;
 
 }
@@ -554,29 +548,72 @@ AliTRDdigitsManager *AliTRDrawData::Raw2Digits(AliRawReader *rawReader)
 
   AliTRDrawStream input(rawReader);
 
+  AliRunLoader *runLoader = AliRunLoader::Instance();
+
   // ----- preparing tracklet output -----
-  AliDataLoader *trklLoader = AliRunLoader::Instance()->GetLoader("TRDLoader")->GetDataLoader("tracklets");
+  AliDataLoader *trklLoader = runLoader->GetLoader("TRDLoader")->GetDataLoader("tracklets");
   if (!trklLoader) {
     trklLoader = new AliDataLoader("TRD.Tracklets.root","tracklets", "tracklets");
-    AliRunLoader::Instance()->GetLoader("TRDLoader")->AddDataLoader(trklLoader);
+    runLoader->GetLoader("TRDLoader")->AddDataLoader(trklLoader);
   }
   if (!trklLoader) {
+    AliError("Could not get the tracklet data loader!");
     return 0x0;
   }
+  // trklLoader->SetEvent();
+  trklLoader->Load("update");
   AliTreeLoader *trklTreeLoader = dynamic_cast<AliTreeLoader*> (trklLoader->GetBaseLoader("tracklets-raw"));
   if (!trklTreeLoader) {
     trklTreeLoader = new AliTreeLoader("tracklets-raw", trklLoader);
     trklLoader->AddBaseLoader(trklTreeLoader);
   }
-  if (!trklTreeLoader) {
+
+  TClonesArray *fTrackletArray = new TClonesArray("AliTRDtrackletWord", 256);
+  Int_t lastHC = -1;
+  if (trklLoader->Tree())
+    trklLoader->MakeTree();
+  TTree *trackletTree = trklTreeLoader->Tree();
+  if (!trackletTree) {
+    trklTreeLoader->MakeTree();
+    trackletTree = trklTreeLoader->Tree();
+  }
+  if (!trackletTree->GetBranch("hc"))
+    trackletTree->Branch("hc", &lastHC, "hc/I");
+  else
+    trackletTree->SetBranchAddress("hc", &lastHC);
+
+  if (!trackletTree->GetBranch("trkl"))
+    trackletTree->Branch("trkl", &fTrackletArray);
+  else
+    trackletTree->SetBranchAddress("trkl", &fTrackletArray);
+
+  // ----- preparing track output -----
+  AliDataLoader *trkLoader = 0x0;
+  trkLoader = runLoader->GetLoader("TRDLoader")->GetDataLoader("gtutracks");
+  if (!trkLoader) {
+    trkLoader = new AliDataLoader("TRD.GtuTracks.root","gtutracks", "gtutracks");
+    runLoader->GetLoader("TRDLoader")->AddDataLoader(trkLoader);
+  }
+  if (!trkLoader) {
+    AliError("Could not get the GTU-track data loader!");
     return 0x0;
   }
+  trkLoader->Load("UPDATE");
 
-  if (!trklTreeLoader->Tree())
-    trklTreeLoader->MakeTree();
+  TTree *trackTree = trkLoader->Tree();
+  if (!trackTree) {
+    trkLoader->MakeTree();
+    trackTree = trkLoader->Tree();
+  }
+
+  AliTRDtrackGTU trk;
+  if (!trackTree->GetBranch("TRDtrackGTU"))
+    trackTree->Branch("TRDtrackGTU", "AliTRDtrackGTU", &trk, 32000);
 
-  input.SetTrackletArray(TrackletsArray());
-  input.SetTrackArray(TracksArray());
+  // ----- read the raw data -----
+  // write the tracklets to arrays while reading raw data
+  input.SetTrackletArray(fTracklets);
+  input.SetTrackArray(fTracks);
 
   // Loop through the digits
   Int_t det    = 0;
@@ -604,8 +641,41 @@ AliTRDdigitsManager *AliTRDrawData::Raw2Digits(AliRawReader *rawReader)
     fTrgFlags[iSector] = input.GetTriggerFlags(iSector);
   }
 
+  // ----- tracklet output -----
+  fTrackletArray->Clear();
+  Int_t nTracklets = fTracklets ? fTracklets->GetEntries() : 0;
+  AliDebug(1, Form("Writing %i tracklets to loader", nTracklets));
+  for (Int_t iTracklet = 0; iTracklet < nTracklets; ++iTracklet) {
+    AliTRDtrackletWord *trkl = (AliTRDtrackletWord*) fTracklets->At(iTracklet);
+    if (trkl->GetHCId() != lastHC) {
+      if (fTrackletArray->GetEntriesFast() > 0) {
+       trackletTree->Fill();
+       fTrackletArray->Clear();
+      }
+      lastHC = trkl->GetHCId();
+    }
+    new ((*fTrackletArray)[fTrackletArray->GetEntriesFast()]) AliTRDtrackletWord(*trkl);
+  }
+  if (fTrackletArray->GetEntriesFast() > 0) {
+      trackletTree->Fill();
+      fTrackletArray->Clear();
+  }
   trklTreeLoader->WriteData("OVERWRITE");
+  trklLoader->WriteData("OVERWRITE");
   trklLoader->UnloadAll();
+  trklLoader->CloseFile();
+
+  // ----- track output -----
+  Int_t nTracks = fTracks ? fTracks->GetEntriesFast() : 0;
+  AliDebug(1, Form("Writing %i tracks to loader", nTracks));
+  for (Int_t iTrack = 0; iTrack < nTracks; ++iTrack) {
+    AliESDTrdTrack *trkEsd = (AliESDTrdTrack*) fTracks->At(iTrack);
+    trk = *trkEsd;
+    trackTree->Fill();
+  }
+  trkLoader->WriteData("OVERWRITE");
+  trkLoader->UnloadAll();
+  trkLoader->CloseFile();
 
   return digitsManager;
 }
@@ -668,23 +738,3 @@ void AliTRDrawData::WriteIntermediateWords(UInt_t* buf, Int_t& nw, Int_t& of, co
     x = ((kNTBin)<<26) | (bcCtr<<10) | (ptCtr<<6) | (ptPhase<<2) | 1;
     if (nw < maxSize) buf[nw++] = x; else of++;
 }
-
-TClonesArray *AliTRDrawData::TrackletsArray()
-{
-  // Returns the array of on-line tracklets
-
-  if (!fTracklets) {
-    fTracklets = new TClonesArray("AliTRDtrackletWord", 200);
-  }
-  return fTracklets;
-}
-
-TClonesArray* AliTRDrawData::TracksArray()
-{
-  // return array of GTU tracks (create TClonesArray if necessary)
-
-  if (!fTracks) {
-    fTracks = new TClonesArray("AliESDTrdTrack",100);
-  }
-  return fTracks;
-}