/*
<img src="picts/AliPMDClass.gif">
</pre>
<br clear=left>
<font size=+2 color=red>
<p>The responsible person for this module is
<a href="mailto:sub@vecdec.veccal.ernet.in">Subhasis Chattopadhyay</a>.
</font>
<pre>
*/
//End_Html
#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 "AliPMDDigitizer.h"
#include "AliPMDhit.h"
#include "AliPMDDDLRawData.h"
#include "AliPMDRawToSDigits.h"
ClassImp(AliPMD)
AliPMD::AliPMD()
{
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;
}
AliPMD::AliPMD(const char *name, const char *title)
: AliDetector(name,title)
{
fHits = new TClonesArray("AliPMDhit", 405);
gAlice->GetMCApp()->AddHitList(fHits);
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;
}
AliLoader* AliPMD::MakeLoader(const char* topfoldername)
{
fLoader = new AliPMDLoader(GetName(),topfoldername);
if (fLoader)
{
AliDebug(100,"Success");
}
else
{
AliError("Failure");
}
return fLoader;
}
AliPMD::~AliPMD()
{
}
void AliPMD::AddHit(Int_t track, Int_t *vol, Float_t *hits)
{
TClonesArray &lhits = *fHits;
AliPMDhit *newcell, *curcell;
newcell = new AliPMDhit(fIshunt, track, vol, hits);
for (Int_t i=0; i<fNhits; i++) {
curcell=(AliPMDhit*) lhits[i];
if (*curcell==*newcell) {
*curcell = *curcell+*newcell;
delete newcell;
return;
}
}
new(lhits[fNhits++]) AliPMDhit(newcell);
delete newcell;
}
void AliPMD::SetPAR(Float_t p1, Float_t p2, Float_t p3,Float_t p4)
{
fPar[0] = p1;
fPar[1] = p2;
fPar[2] = p3;
fPar[3] = p4;
}
void AliPMD::SetIN(Float_t p1, Float_t p2, Float_t p3,Float_t p4,Float_t p5)
{
fIn[0] = p1;
fIn[1] = p2;
fIn[2] = p3;
fIn[3] = p4;
fIn[4] = p5;
}
void AliPMD::SetGEO(Float_t p1, Float_t p2, Float_t p3)
{
fGeo[0] = p1;
fGeo[1] = p2;
fGeo[2] = p3;
}
void AliPMD::SetPadSize(Float_t p1, Float_t p2, Float_t p3,Float_t p4)
{
fPadSize[0] = p1;
fPadSize[1] = p2;
fPadSize[2] = p3;
fPadSize[3] = p4;
}
void AliPMD::StepManager()
{
}
void AliPMD::MakeBranch(Option_t* option)
{
const char *cH = strstr(option,"H");
if (cH && fLoader->TreeH() && (fHits == 0x0))
fHits = new TClonesArray("AliPMDhit", 405);
AliDetector::MakeBranch(option);
}
void AliPMD::SetTreeAddress()
{
if (fLoader->TreeH() && fHits==0x0)
fHits = new TClonesArray("AliPMDhit", 405);
AliDetector::SetTreeAddress();
}
void AliPMD::SetCpvOff()
{
}
void AliPMD::SetPreOff()
{
}
void AliPMD::SetModuleOff(Int_t )
{
}
void AliPMD::Hits2SDigits()
{
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()
{
}
void AliPMD::Hits2Digits()
{
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(AliDigitizationInput* digInput) const
{
return new AliPMDDigitizer(digInput);
}
void AliPMD::Digits2Raw()
{
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)
{
AliRunLoader* runLoader = fLoader->GetRunLoader();
AliPMDRawToSDigits pmdr2sd;
pmdr2sd.Raw2SDigits(runLoader, rawReader);
fLoader->UnloadSDigits();
return kTRUE;
}