]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PMD/AliPMD.cxx
Including St2 in the new geometry segmentation (Christian)
[u/mrichter/AliRoot.git] / PMD / AliPMD.cxx
index b1d0ff657db895383cb448ee51638f12f4a4a524..e2b12dc2b5e09198569f328cc0dd5caabc4c2172 100644 (file)
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
 
-/*
-$Log$
-Revision 1.13  2001/01/26 20:02:43  hristov
-Major upgrade of AliRoot code
-
-Revision 1.12  2000/12/04 08:48:18  alibrary
-Fixing problems in the HEAD
-
-Revision 1.11  2000/11/17 10:15:24  morsch
-Call to AliDetector::ResetHits() added to method  AliPMD::ResetHits()
-
-Revision 1.10  2000/11/06 09:07:13  morsch
-Set  fRecPoints to zero in default constructor.
-
-Revision 1.9  2000/10/30 09:03:59  morsch
-Prototype for PMD reconstructed hits (AliPMDRecPoint) added.
-
-Revision 1.8  2000/10/20 06:24:40  fca
-Put the PMD at the right position in the event display
-
-Revision 1.7  2000/10/02 21:28:12  fca
-Removal of useless dependecies via forward declarations
-
-Revision 1.6  2000/01/19 17:17:06  fca
-Introducing a list of lists of hits -- more hits allowed for detector now
-
-Revision 1.5  1999/09/29 09:24:27  fca
-Introduction of the Copyright and cvs Log
-
-*/
+/* $Id$ */
 
 ///////////////////////////////////////////////////////////////////////////////
 //
@@ -68,17 +39,21 @@ Introduction of the Copyright and cvs Log
 ///////////////////////////////////////////////////////////////////////////////
 
 #include <TBRIK.h>
+#include <TClonesArray.h>
+#include <TGeometry.h>
 #include <TNode.h>
 #include <TTree.h>
-#include <TGeometry.h>
-#include <TClonesArray.h>
-#include <TFile.h>
+#include <TVirtualMC.h>
 
+#include "AliLog.h"
+#include "AliLoader.h" 
+#include "AliPMDLoader.h" 
 #include "AliPMD.h"
 #include "AliRun.h"
-#include "AliMC.h" 
-#include "AliConst.h" 
-#include "AliPMDRecPoint.h"
+#include "AliMC.h"
+#include "AliPMDDigitizer.h"
+#include "AliPMDhit.h"
+#include "AliPMDDDLRawData.h"
   
 ClassImp(AliPMD)
  
@@ -90,9 +65,6 @@ AliPMD::AliPMD()
   //
   fIshunt = 0;
 
-  // Always make the TClonesArray, otherwise the automatic streamer gets angry
-  fRecPoints  = new TClonesArray("AliPMDRecPoint",10000); 
-
 }
  
 //_____________________________________________________________________________
@@ -106,13 +78,10 @@ AliPMD::AliPMD(const char *name, const char *title)
   // 
   // Allocate the array of hits
   fHits   = new TClonesArray("AliPMDhit",  405);
-  gAlice->AddHitList(fHits);
+  gAlice->GetMCApp()->AddHitList(fHits);
 
-  fRecPoints  = new TClonesArray("AliPMDRecPoint",10000); 
-  fNRecPoints = 0;
-  
 
-  fIshunt =  1;
+  fIshunt =  0;
   
   fPar[0] = 1;
   fPar[1] = 1;
@@ -132,13 +101,29 @@ AliPMD::AliPMD(const char *name, const char *title)
   fPadSize[3] = 1.5;
 }
 
+AliLoader* AliPMD::MakeLoader(const char* topfoldername)
+{
+  // Makes PMD Loader
+  fLoader = new AliPMDLoader(GetName(),topfoldername);
+  if (fLoader)
+    {
+      AliInfo("Success");
+    }
+  else
+    {
+      AliError("Failure");
+    }
+
+  return fLoader;
+}
+
 AliPMD::~AliPMD()
 {
   //
-  // Default constructor
+  // Destructor
   //
-    delete fRecPoints;
-    fNRecPoints=0;
 }
 
 //_____________________________________________________________________________
@@ -149,8 +134,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++) {
@@ -176,22 +163,22 @@ void AliPMD::BuildGeometry()
   // Build simple ROOT TNode geometry for event display
   //
 
-  TNode *Node, *Top;
+  TNode *node, *top;
   const int kColorPMD  = kRed;
 
   //
-  Top=gAlice->GetGeometry()->GetNode("alice");
+  top=gAlice->GetGeometry()->GetNode("alice");
 
   // PMD
   new TBRIK("S_PMD","PMD box","void",300,300,5);
-  Top->cd();
-  Node = new TNode("PMD","PMD","S_PMD",0,0,-600,"");
-  Node->SetLineColor(kColorPMD);
-  fNodes->Add(Node);
+  top->cd();
+  node = new TNode("PMD","PMD","S_PMD",0,0,-600,"");
+  node->SetLineColor(kColorPMD);
+  fNodes->Add(node);
 }
 
 //_____________________________________________________________________________
-Int_t AliPMD::DistancetoPrimitive(Int_t , Int_t )
+Int_t AliPMD::DistancetoPrimitive(Int_t , Int_t ) const
 {
   //
   // Distance from mouse to detector on the screen
@@ -256,92 +243,92 @@ 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, char *file)
+void AliPMD::MakeBranch(Option_t* option)
 {
     // Create Tree branches for the PMD
     
-    const char *cR = strstr(option,"R");
-    
-    AliDetector::MakeBranch(option,file);
-
-    if (cR) {
-      printf("Make Branch - TreeR address %p\n",gAlice->TreeR());
+    const char *cH = strstr(option,"H");
+    if (cH && fLoader->TreeH() && (fHits == 0x0))
+      fHits   = new TClonesArray("AliPMDhit",  405);
     
-      const Int_t kBufferSize = 4000;
-      char branchname[30];
-      
-      sprintf(branchname,"%sRecPoints",GetName());
-      if (fRecPoints   && gAlice->TreeR()) {
-        gAlice->MakeBranchInTree(gAlice->TreeR(), 
-                                 branchname, &fRecPoints, kBufferSize, file) ;
-      }
-   }   
+    AliDetector::MakeBranch(option);
 }
 
 
 void AliPMD::SetTreeAddress()
 {
-  // Set branch address for the TreeR
-    char branchname[30];
+  // Set branch address
+
+    if (fLoader->TreeH() && fHits==0x0)
+      fHits   = new TClonesArray("AliPMDhit",  405);
+      
     AliDetector::SetTreeAddress();
+}
 
-    TBranch *branch;
-    TTree *treeR = gAlice->TreeR();
+//____________________________________________________________________________
+void AliPMD::Hits2SDigits()  
+{ 
+// create summable digits
 
-    sprintf(branchname,"%s",GetName());
-    if (treeR && fRecPoints) {
-       branch = treeR->GetBranch(branchname);
-       if (branch) branch->SetAddress(&fRecPoints);
-    }
+  AliRunLoader* runLoader = fLoader->GetRunLoader(); 
+  AliPMDDigitizer* pmdDigitizer = new AliPMDDigitizer;
+  pmdDigitizer->OpengAliceFile(fLoader->GetRunLoader()->GetFileName().Data(),
+                              "HS");
+  pmdDigitizer->SetZPosition(361.5);
+
+  for (Int_t iEvent = 0; iEvent < runLoader->GetNumberOfEvents(); iEvent++) {
+    pmdDigitizer->Hits2SDigits(iEvent);
+  }
+  fLoader->UnloadHits();
+  fLoader->UnloadSDigits();
+  delete pmdDigitizer;
 }
+//____________________________________________________________________________
+void AliPMD::SDigits2Digits()  
+{ 
+  // creates sdigits to digits
+}
+//____________________________________________________________________________
+void AliPMD::Hits2Digits()  
+{ 
+// create digits
+
+  AliRunLoader* runLoader = fLoader->GetRunLoader(); 
+  AliPMDDigitizer* pmdDigitizer = new AliPMDDigitizer;
+  pmdDigitizer->OpengAliceFile(fLoader->GetRunLoader()->GetFileName().Data(),
+                              "HD");
+  pmdDigitizer->SetZPosition(361.5);
+
+  for (Int_t iEvent = 0; iEvent < runLoader->GetNumberOfEvents(); iEvent++) {
+    pmdDigitizer->Hits2Digits(iEvent);
+  }
+  fLoader->UnloadHits();
+  fLoader->UnloadDigits();
+  delete pmdDigitizer;
 
-void AliPMD::ResetHits()
-{
-  //
-  // Reset number of hits and the hits array
-  //
-    AliDetector::ResetHits();
-    fNRecPoints   = 0;
-    if (fRecPoints)   fRecPoints->Clear();
 }
+// ---------------------------------------------------------------------------
+AliDigitizer* AliPMD::CreateDigitizer(AliRunDigitizer* manager) const
+{ 
+  return new AliPMDDigitizer(manager);
+}
+// ---------------------------------------------------------------------------
+void AliPMD::Digits2Raw()
+{ 
+// convert digits of the current event to raw data
+
+  fLoader->LoadDigits();
+  TTree* digits = fLoader->TreeD();
+  if (!digits) {
+    AliError("No digits tree");
+    return;
+  }
 
-///////////////////////////////////////////////////////////////////////////////
-//                                                                           //
-//  Photon Multiplicity Detector Version 1                                   //
-//                                                                           //
-//Begin_Html
-/*
-<img src="picts/AliPMDv1Class.gif">
-*/
-//End_Html
-//                                                                           //
-///////////////////////////////////////////////////////////////////////////////
+  AliPMDDDLRawData rawWriter;
+  rawWriter.WritePMDRawData(digits);
+
+  fLoader->UnloadDigits();
+}
 
 
 
-ClassImp(AliPMDhit)
-  
-//_____________________________________________________________________________
-AliPMDhit::AliPMDhit(Int_t shunt,Int_t track, Int_t *vol, Float_t *hits):
-  AliHit(shunt, track)
-{
-  //
-  // Add a PMD hit
-  //
-  Int_t i;
-  for (i=0;i<5;i++) fVolume[i] = vol[i];
-  fX=hits[0];
-  fY=hits[1];
-  fZ=hits[2];
-  fEnergy=hits[3];
-}
-