X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=PMD%2FAliPMD.cxx;h=75d57f6d6e4ec4fc29b31b70fa0d2cd7f6dc8bd3;hb=00aa96f16388beedaa2f2786358120dd014454ac;hp=fc3aab848f9fe868c7d8a23d7042141e5e6d8808;hpb=d651cc98ff42e6e375bf65bdaeb10ca79b1c821a;p=u%2Fmrichter%2FAliRoot.git diff --git a/PMD/AliPMD.cxx b/PMD/AliPMD.cxx index fc3aab848f9..75d57f6d6e4 100644 --- a/PMD/AliPMD.cxx +++ b/PMD/AliPMD.cxx @@ -13,18 +13,7 @@ * provided "as is" without express or implied warranty. * **************************************************************************/ -/* -$Log$ -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$ */ /////////////////////////////////////////////////////////////////////////////// // @@ -50,14 +39,24 @@ Introduction of the Copyright and cvs Log /////////////////////////////////////////////////////////////////////////////// #include -#include +#include +#include #include +#include +#include +#include +#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" +#include "AliPMDDDLRawData.h" + ClassImp(AliPMD) //_____________________________________________________________________________ @@ -67,6 +66,9 @@ AliPMD::AliPMD() // Default constructor // fIshunt = 0; + + fRecPoints = 0; + } //_____________________________________________________________________________ @@ -80,9 +82,13 @@ 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; @@ -102,6 +108,33 @@ 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) + { + cout<<"Success"<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; iGetGeometry()->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 @@ -217,32 +252,140 @@ void AliPMD::StepManager() // } -/////////////////////////////////////////////////////////////////////////////// -// // -// Photon Multiplicity Detector Version 1 // -// // -//Begin_Html -/* - -*/ -//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); +} +// --------------------------------------------------------------------------- +void AliPMD::Digits2Raw() +{ +// convert digits of the current event to raw data + + fLoader->LoadDigits(); + TTree* digits = fLoader->TreeD(); + if (!digits) { + Error("Digits2Raw", "no digits tree"); + return; + } + + AliPMDDDLRawData rawWriter; + rawWriter.WritePMDRawData(digits); + + fLoader->UnloadDigits(); +} + + +