* provided "as is" without express or implied warranty. *
**************************************************************************/
-/*
-$Log$
-*/
+/* $Id$ */
///////////////////////////////////////////////////////////////////////////////
//
///////////////////////////////////////////////////////////////////////////////
#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 "AliPMDLoader.h"
#include "AliPMD.h"
+#include "AliPMDRecPoint.h"
#include "AliRun.h"
-#include "AliMC.h"
-#include "AliConst.h"
-
+#include "AliMC.h"
+#include "AliPMDDigitizer.h"
+#include "AliPMDhit.h"
+
ClassImp(AliPMD)
//_____________________________________________________________________________
// Default constructor
//
fIshunt = 0;
+
+ fRecPoints = 0;
+
}
//_____________________________________________________________________________
//
// Allocate the array of hits
fHits = new TClonesArray("AliPMDhit", 405);
+ gAlice->GetMCApp()->AddHitList(fHits);
+
+ fRecPoints = new TClonesArray("AliPMDRecPoint",10000);
+ fNRecPoints = 0;
- fIshunt = 1;
+
+ fIshunt = 0;
fPar[0] = 1;
fPar[1] = 1;
fPadSize[3] = 1.5;
}
+AliLoader* AliPMD::MakeLoader(const char* topfoldername)
+{
+ // Makes PMD Loader
+
+ 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)
{
//
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++) {
// 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
//
}
-///////////////////////////////////////////////////////////////////////////////
-// //
-// Photon Multiplicity Detector Version 1 //
-// //
-//Begin_Html
-/*
-<img src="picts/AliPMDv1Class.gif">
-*/
-//End_Html
-// //
-///////////////////////////////////////////////////////////////////////////////
+void AliPMD::AddRecPoint(const AliPMDRecPoint &p)
+{
+ //
+ // Add a PMD reconstructed hit to the list
+ //
+ TClonesArray &lrecpoints = *fRecPoints;
+ new(lrecpoints[fNRecPoints++]) AliPMDRecPoint(p);
+}
-ClassImp(AliPMDhit)
-
-//_____________________________________________________________________________
-AliPMDhit::AliPMDhit(Int_t shunt,Int_t track, Int_t *vol, Float_t *hits):
- AliHit(shunt, track)
+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",(void*)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()
{
//
- // Add a PMD hit
+ // Reset number of hits and the hits array
//
- 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];
+ AliDetector::ResetHits();
+ fNRecPoints = 0;
+ if (fRecPoints) fRecPoints->Clear();
}
-
+//____________________________________________________________________________
+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);
+}
+// ---------------------------------------------------------------------------
+
+