]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PMD/AliPMD.cxx
defects fixed
[u/mrichter/AliRoot.git] / PMD / AliPMD.cxx
index 358991e624d5e8021a1bb423c97d13dd91a1868d..ba5f03387df89441704fc9d11f696d87aee1690d 100644 (file)
@@ -1,3 +1,20 @@
+/**************************************************************************
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ *                                                                        *
+ * Author: The ALICE Off-line Project.                                    *
+ * Contributors are mentioned in the code where appropriate.              *
+ *                                                                        *
+ * Permission to use, copy, modify and distribute this software and its   *
+ * documentation strictly for non-commercial purposes is hereby granted   *
+ * without fee, provided that the above copyright notice appears in all   *
+ * copies and that both the copyright notice and this permission notice   *
+ * appear in the supporting documentation. The authors make no claims     *
+ * about the suitability of this software for any purpose. It is          *
+ * provided "as is" without express or implied warranty.                  *
+ **************************************************************************/
+
+/* $Id$ */
+
 ///////////////////////////////////////////////////////////////////////////////
 //
 //                                                                           //
 ///////////////////////////////////////////////////////////////////////////////
 
 #include <TBRIK.h>
+#include <TClonesArray.h>
+#include <TGeometry.h>
 #include <TNode.h>
+#include <TTree.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 "AliMC.h"
+#include "AliPMDDigitizer.h"
+#include "AliPMDhit.h"
+#include "AliPMDDDLRawData.h"
+#include "AliPMDRawToSDigits.h"
+  
 ClassImp(AliPMD)
  
 //_____________________________________________________________________________
@@ -37,6 +65,7 @@ AliPMD::AliPMD()
   // Default constructor
   //
   fIshunt = 0;
+
 }
  
 //_____________________________________________________________________________
@@ -50,8 +79,10 @@ AliPMD::AliPMD(const char *name, const char *title)
   // 
   // Allocate the array of hits
   fHits   = new TClonesArray("AliPMDhit",  405);
-  
-  fIshunt =  1;
+  gAlice->GetMCApp()->AddHitList(fHits);
+
+
+  fIshunt =  0;
   
   fPar[0] = 1;
   fPar[1] = 1;
@@ -71,6 +102,31 @@ 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)
+    {
+      AliDebug(100,"Success");
+    }
+  else
+    {
+      AliError("Failure");
+    }
+
+  return fLoader;
+}
+
+AliPMD::~AliPMD()
+{
+  //
+  // Destructor
+  //
+}
+
 //_____________________________________________________________________________
 void AliPMD::AddHit(Int_t track, Int_t *vol, Float_t *hits)
 {
@@ -79,11 +135,13 @@ 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++) {
+
+  for (Int_t i=0; i<fNhits; i++) {
     //
     // See if this cell has already been hit
     curcell=(AliPMDhit*) lhits[i];
@@ -99,37 +157,6 @@ void AliPMD::AddHit(Int_t track, Int_t *vol, Float_t *hits)
   delete newcell;
 }
  
-//_____________________________________________________________________________
-void AliPMD::BuildGeometry()
-{
-  //
-  // Build simple ROOT TNode geometry for event display
-  //
-
-  TNode *Node, *Top;
-  const int kColorPMD  = kRed;
-
-  //
-  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);
-}
-
-//_____________________________________________________________________________
-Int_t AliPMD::DistancetoPrimitive(Int_t , Int_t )
-{
-  //
-  // Distance from mouse to detector on the screen
-  // dummy routine
-  //
-   return 9999;
-}
 //_____________________________________________________________________________
 void AliPMD::SetPAR(Float_t p1, Float_t p2, Float_t p3,Float_t p4)
 {
@@ -186,32 +213,117 @@ void AliPMD::StepManager()
   //
 }
 
-///////////////////////////////////////////////////////////////////////////////
-//                                                                           //
-//  Photon Multiplicity Detector Version 1                                   //
-//                                                                           //
-//Begin_Html
-/*
-<img src="picts/AliPMDv1Class.gif">
-*/
-//End_Html
-//                                                                           //
-///////////////////////////////////////////////////////////////////////////////
+void AliPMD::MakeBranch(Option_t* option)
+{
+    // Create Tree branches for the PMD
+    
+    const char *cH = strstr(option,"H");
+    if (cH && fLoader->TreeH() && (fHits == 0x0))
+      fHits   = new TClonesArray("AliPMDhit",  405);
+    
+    AliDetector::MakeBranch(option);
+}
 
-ClassImp(AliPMDhit)
-  
-//_____________________________________________________________________________
-AliPMDhit::AliPMDhit(Int_t shunt,Int_t track, Int_t *vol, Float_t *hits):
-  AliHit(shunt, track)
+
+void AliPMD::SetTreeAddress()
 {
-  //
-  // 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];
+  // Set branch address
+
+    if (fLoader->TreeH() && fHits==0x0)
+      fHits   = new TClonesArray("AliPMDhit",  405);
+      
+    AliDetector::SetTreeAddress();
 }
-  
+
+void AliPMD::SetCpvOff()
+{
+  // Set the CPV plane off
+}
+void AliPMD::SetPreOff()
+{
+  // Set the Preshower plane off
+
+}
+void AliPMD::SetModuleOff(Int_t /*imodule*/)
+{
+  // Set the desired module off
+
+}
+
+//____________________________________________________________________________
+void AliPMD::Hits2SDigits()  
+{ 
+// create summable digits
+
+  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;
+
+}
+// ---------------------------------------------------------------------------
+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;
+  }
+
+  AliPMDDDLRawData rawWriter;
+  rawWriter.WritePMDRawData(digits);
+
+  fLoader->UnloadDigits();
+}
+
+Bool_t AliPMD::Raw2SDigits(AliRawReader *rawReader)
+{
+  // converts raw to sdigits
+  AliRunLoader* runLoader = fLoader->GetRunLoader(); 
+  //runLoader->GetEvent(ievt);
+
+  AliPMDRawToSDigits pmdr2sd;
+  pmdr2sd.Raw2SDigits(runLoader, rawReader);
+  fLoader->UnloadSDigits();
+  return kTRUE;
+}
+