* provided "as is" without express or implied warranty. *
**************************************************************************/
-/*
-$Log$
-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$ */
///////////////////////////////////////////////////////////////////////////////
//
///////////////////////////////////////////////////////////////////////////////
#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"
+#include "AliPMDRawToSDigits.h"
ClassImp(AliPMD)
//
// Default constructor
//
- fIshunt = 0;
-
- // Always make the TClonesArray, otherwise the automatic streamer gets angry
- fRecPoints = new TClonesArray("AliPMDRecPoint",10000);
-
+ fIshunt = 0;
+ fPar[0] = 1.;
+ fPar[1] = 1.;
+ fPar[2] = 0.8;
+ fPar[3] = 0.02;
+ fIn[0] = 6.;
+ fIn[1] = 20.;
+ fIn[2] = 600.;
+ fIn[3] = 27.;
+ fIn[4] = 27.;
+ fGeo[0] = 0.;
+ fGeo[1] = 0.2;
+ fGeo[2] = 4.;
+ fPadSize[0] = 0.8;
+ fPadSize[1] = 1.0;
+ fPadSize[2] = 1.2;
+ fPadSize[3] = 1.5;
+ fNumPads[0] = 0;
+ fNumPads[1] = 0;
+ fNumPads[2] = 0;
+ fNumPads[3] = 0;
}
//_____________________________________________________________________________
//
// 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;
- fPar[2] = 0.8;
- fPar[3] = 0.02;
- fIn[0] = 6;
- fIn[1] = 20;
- fIn[2] = 600;
- fIn[3] = 27;
- fIn[4] = 27;
- fGeo[0] = 0;
- fGeo[1] = 0.2;
- fGeo[2] = 4;
+ fPar[0] = 1.;
+ fPar[1] = 1.;
+ fPar[2] = 0.8;
+ fPar[3] = 0.02;
+ fIn[0] = 6.;
+ fIn[1] = 20.;
+ fIn[2] = 600.;
+ fIn[3] = 27.;
+ fIn[4] = 27.;
+ fGeo[0] = 0.;
+ fGeo[1] = 0.2;
+ fGeo[2] = 4.;
fPadSize[0] = 0.8;
fPadSize[1] = 1.0;
fPadSize[2] = 1.2;
fPadSize[3] = 1.5;
+ fNumPads[0] = 0;
+ fNumPads[1] = 0;
+ fNumPads[2] = 0;
+ fNumPads[3] = 0;
+}
+
+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()
{
//
- // Default constructor
+ // Destructor
//
- delete fRecPoints;
- fNRecPoints=0;
}
//_____________________________________________________________________________
//
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];
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)
{
//
}
-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
- 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];
- AliDetector::SetTreeAddress();
+ // Set branch address
- TBranch *branch;
- TTree *treeR = gAlice->TreeR();
+ if (fLoader->TreeH() && fHits==0x0)
+ fHits = new TClonesArray("AliPMDhit", 405);
+
+ AliDetector::SetTreeAddress();
+}
- sprintf(branchname,"%s",GetName());
- if (treeR && fRecPoints) {
- branch = treeR->GetBranch(branchname);
- if (branch) branch->SetAddress(&fRecPoints);
- }
+void AliPMD::SetCpvOff()
+{
+ // Set the CPV plane off
}
+void AliPMD::SetPreOff()
+{
+ // Set the Preshower plane off
-void AliPMD::ResetHits()
+}
+void AliPMD::SetModuleOff(Int_t /*imodule*/)
{
- //
- // Reset number of hits and the hits array
- //
- AliDetector::ResetHits();
- fNRecPoints = 0;
- if (fRecPoints) fRecPoints->Clear();
+ // Set the desired module off
+
}
-///////////////////////////////////////////////////////////////////////////////
-// //
-// Photon Multiplicity Detector Version 1 //
-// //
-//Begin_Html
-/*
-<img src="picts/AliPMDv1Class.gif">
-*/
-//End_Html
-// //
-///////////////////////////////////////////////////////////////////////////////
+//____________________________________________________________________________
+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;
-ClassImp(AliPMDhit)
-
-//_____________________________________________________________________________
-AliPMDhit::AliPMDhit(Int_t shunt,Int_t track, Int_t *vol, Float_t *hits):
- AliHit(shunt, track)
+}
+// ---------------------------------------------------------------------------
+AliDigitizer* AliPMD::CreateDigitizer(AliDigitizationInput* digInput) const
+{
+ return new AliPMDDigitizer(digInput);
+}
+// ---------------------------------------------------------------------------
+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)
{
- //
- // 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];
+ // converts raw to sdigits
+ AliRunLoader* runLoader = fLoader->GetRunLoader();
+ //runLoader->GetEvent(ievt);
+
+ AliPMDRawToSDigits pmdr2sd;
+ pmdr2sd.Raw2SDigits(runLoader, rawReader);
+ fLoader->UnloadSDigits();
+ return kTRUE;
}
-
+