]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PMD/AliPMD.cxx
fVolume dimension changed 5->8
[u/mrichter/AliRoot.git] / PMD / AliPMD.cxx
index 21a783a2fa550282dc20f3b2edda12947676f25f..9eacfe19c76dcafb0a5b46a3ba3660d89cc8fc7f 100644 (file)
@@ -13,9 +13,7 @@
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
 
-/*
-$Log$
-*/
+/* $Id$ */
 
 ///////////////////////////////////////////////////////////////////////////////
 //
@@ -41,12 +39,19 @@ $Log$
 ///////////////////////////////////////////////////////////////////////////////
 
 #include <TBRIK.h>
+#include <TClonesArray.h>
+#include <TFile.h>
+#include <TGeometry.h>
 #include <TNode.h>
+#include <TTree.h>
+#include <TVirtualMC.h>
+
+#include "AliConst.h" 
+#include "AliLoader.h" 
 #include "AliPMD.h"
+#include "AliPMDRecPoint.h"
 #include "AliRun.h"
-#include "AliMC.h" 
-#include "AliConst.h" 
+  
 ClassImp(AliPMD)
  
 //_____________________________________________________________________________
@@ -56,6 +61,9 @@ AliPMD::AliPMD()
   // Default constructor
   //
   fIshunt = 0;
+
+  fRecPoints  = 0;
+
 }
  
 //_____________________________________________________________________________
@@ -69,8 +77,13 @@ AliPMD::AliPMD(const char *name, const char *title)
   // 
   // Allocate the array of hits
   fHits   = new TClonesArray("AliPMDhit",  405);
+  gAlice->AddHitList(fHits);
+
+  fRecPoints  = new TClonesArray("AliPMDRecPoint",10000); 
+  fNRecPoints = 0;
   
-  fIshunt =  1;
+
+  fIshunt =  0;
   
   fPar[0] = 1;
   fPar[1] = 1;
@@ -90,6 +103,33 @@ AliPMD::AliPMD(const char *name, const char *title)
   fPadSize[3] = 1.5;
 }
 
+AliLoader* AliPMD::MakeLoader(const char* topfoldername)
+{
+ cout<<"AliPMD::MakeLoader ";
+ fLoader = new AliPMDLoader(GetName(),topfoldername);
+ if (fLoader)
+  {
+   cout<<"Success"<<endl;
+  }
+ else
+  {
+   cout<<"Failure"<<endl;
+  }
+
+ return fLoader;
+}
+
+AliPMD::~AliPMD()
+{
+  //
+  // Default constructor
+  //
+    delete fRecPoints;
+    fNRecPoints=0;
+}
+
 //_____________________________________________________________________________
 void AliPMD::AddHit(Int_t track, Int_t *vol, Float_t *hits)
 {
@@ -98,8 +138,10 @@ void AliPMD::AddHit(Int_t track, Int_t *vol, Float_t *hits)
   //
   TClonesArray &lhits = *fHits;
   AliPMDhit *newcell, *curcell;
-//    printf("PMD++ Adding energy %f, prim %d, vol %d %d %d %d\n",
-//      hits[3],gAlice->GetPrimary(track-1),vol[0],vol[1],vol[2],vol[3]);
+  //  printf("PMD++ Adding energy %f, prim %d, vol %d %d %d %d %d %d %d %d\n",
+  // hits[3],gAlice->GetPrimary(track-1),vol[0],vol[1],vol[2],vol[3],
+  // vol[4],vol[5],vol[6],vol[7]);
+
   newcell = new AliPMDhit(fIshunt, track, vol, hits);
   Int_t i;
   for (i=0; i<fNhits; i++) {
@@ -134,7 +176,7 @@ void AliPMD::BuildGeometry()
   // PMD
   new TBRIK("S_PMD","PMD box","void",300,300,5);
   Top->cd();
-  Node = new TNode("PMD","PMD","S_PMD",0,0,600,"");
+  Node = new TNode("PMD","PMD","S_PMD",0,0,-600,"");
   Node->SetLineColor(kColorPMD);
   fNodes->Add(Node);
 }
@@ -205,6 +247,77 @@ void AliPMD::StepManager()
   //
 }
 
+void AliPMD::AddRecPoint(const AliPMDRecPoint &p)
+{
+    //
+    // Add a PMD reconstructed hit to the list
+    //
+    TClonesArray &lrecpoints = *fRecPoints;
+    new(lrecpoints[fNRecPoints++]) AliPMDRecPoint(p);
+}
+
+void AliPMD::MakeBranch(Option_t* option)
+{
+    // Create Tree branches for the PMD
+    
+    const char *cR = strstr(option,"R");
+    const char *cH = strstr(option,"H");
+    if (cH && fLoader->TreeH() && (fHits == 0x0))
+      fHits   = new TClonesArray("AliPMDhit",  405);
+    
+    AliDetector::MakeBranch(option);
+
+    if (cR  && fLoader->TreeR()) {
+      printf("Make Branch - TreeR address %p\n",fLoader->TreeR());
+    
+      const Int_t kBufferSize = 4000;
+      char branchname[30];
+      
+      sprintf(branchname,"%sRecPoints",GetName());
+      if (fRecPoints == 0x0) {
+        fRecPoints  = new TClonesArray("AliPMDRecPoint",10000); 
+      }
+      MakeBranchInTree(fLoader->TreeR(), branchname, &fRecPoints, kBufferSize,0);
+   }   
+}
+
+
+void AliPMD::SetTreeAddress()
+{
+  // Set branch address for the TreeR
+    char branchname[30];
+    
+    if (fLoader->TreeH() && fHits==0x0)
+      fHits   = new TClonesArray("AliPMDhit",  405);
+      
+    AliDetector::SetTreeAddress();
+
+    TBranch *branch;
+    TTree *treeR = fLoader->TreeR();
+
+    sprintf(branchname,"%s",GetName());
+    if (treeR) {
+       branch = treeR->GetBranch(branchname);
+       if (branch) 
+       {
+         if (fRecPoints == 0x0) {
+           fRecPoints  = new TClonesArray("AliPMDRecPoint",10000); 
+         }
+         branch->SetAddress(&fRecPoints);
+       }
+    }
+}
+
+void AliPMD::ResetHits()
+{
+  //
+  // Reset number of hits and the hits array
+  //
+    AliDetector::ResetHits();
+    fNRecPoints   = 0;
+    if (fRecPoints)   fRecPoints->Clear();
+}
+
 ///////////////////////////////////////////////////////////////////////////////
 //                                                                           //
 //  Photon Multiplicity Detector Version 1                                   //
@@ -217,6 +330,8 @@ void AliPMD::StepManager()
 //                                                                           //
 ///////////////////////////////////////////////////////////////////////////////
 
+
+
 ClassImp(AliPMDhit)
   
 //_____________________________________________________________________________
@@ -227,7 +342,7 @@ AliPMDhit::AliPMDhit(Int_t shunt,Int_t track, Int_t *vol, Float_t *hits):
   // Add a PMD hit
   //
   Int_t i;
-  for (i=0;i<5;i++) fVolume[i] = vol[i];
+  for (i=0;i<8;i++) fVolume[i] = vol[i];
   fX=hits[0];
   fY=hits[1];
   fZ=hits[2];