X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=FMD%2FAliFMD.cxx;h=132de2fc3db4947968fcaad4d0a4bfa13fb8f88a;hb=5b5d8342f0e7e9551165480ef3453c970d9d0761;hp=321c68fda9ab46a436aff38089d028830d36914c;hpb=d28dcc0d37f6ef6a6cc5bfe8d954d083cb43d9fe;p=u%2Fmrichter%2FAliRoot.git diff --git a/FMD/AliFMD.cxx b/FMD/AliFMD.cxx index 321c68fda9a..132de2fc3db 100644 --- a/FMD/AliFMD.cxx +++ b/FMD/AliFMD.cxx @@ -13,7 +13,7 @@ * provided "as is" without express or implied warranty. * **************************************************************************/ ////////////////////////////////////////////////////////////////////////////// -// // +// // // Forward Multiplicity Detector based on Silicon plates // // This class contains the base procedures for the Forward Multiplicity // // detector // @@ -36,113 +36,178 @@ // // /////////////////////////////////////////////////////////////////////////////// -#include -#include +#define DEBUG +#include #include +#include #include +#include +#include + +#include +#include +#include "AliFMDv1.h" #include "AliRun.h" #include "AliMC.h" -#include "AliFMD.h" +#include "AliDetector.h" +#include +#include +#include "AliMagF.h" #include "AliFMDhit.h" +#include "AliFMDdigit.h" +#include "AliFMDReconstruction.h" +#include "AliFMDReconstParticles.h" +#include -ClassImp(AliFMD) - -//_____________________________________________________________________________ -AliFMD::AliFMD(): AliDetector() + +ClassImp (AliFMD) + //_____________________________________________________________________________ +AliFMD::AliFMD ():AliDetector () { // // Default constructor for class AliFMD // - fIshunt = 0; + fIshunt = 0; + fHits = 0; + fDigits = 0; + fSDigits = 0; + fReconParticles=0; } - + //_____________________________________________________________________________ -AliFMD::AliFMD(const char *name, const char *title) - : AliDetector(name,title) +AliFMD::AliFMD (const char *name, const char *title): +AliDetector (name, title) { // // Standard constructor for Forward Multiplicity Detector // - + // // Initialise Hit array - fHits = new TClonesArray("AliFMDhit", 1000); - - fIshunt = 0; - fIdSens1 = 0; + fHits = new TClonesArray ("AliFMDhit", 1000); + // Digits for each Si disk + fDigits = new TClonesArray ("AliFMDdigit", 1000); + fSDigits = new TClonesArray ("AliFMDdigit", 1000); + fReconParticles=new TClonesArray("AliFMDReconstParticles",1000); + gAlice->AddHitList (fHits); - SetMarkerColor(kRed); + fIshunt = 0; + fIdSens1 = 0; + fIdSens2 = 0; + fIdSens3 = 0; + fIdSens4 = 0; + fIdSens5 = 0; + // fMerger = 0; + SetMarkerColor (kRed); } - -AliFMD::~AliFMD() +//----------------------------------------------------------------------------- +AliFMD::~AliFMD () { - delete fHits; + if (fHits) + { + fHits->Delete (); + delete fHits; + fHits = 0; + } + if (fDigits) + { + fDigits->Delete (); + delete fDigits; + fDigits = 0; + } + if (fSDigits) + { + fSDigits->Delete (); + delete fSDigits; + fSDigits = 0; + } + if (fReconParticles) + { + fReconParticles->Delete (); + delete fReconParticles; + fReconParticles = 0; + } + } + //_____________________________________________________________________________ -void AliFMD::AddHit(Int_t track, Int_t *vol, Float_t *hits) +void AliFMD::AddHit (Int_t track, Int_t * vol, Float_t * hits) { // // Add a hit to the list // - TClonesArray &lhits = *fHits; - new(lhits[fNhits++]) AliFMDhit(fIshunt,track,vol,hits); + TClonesArray & lhits = *fHits; + new (lhits[fNhits++]) AliFMDhit (fIshunt, track, vol, hits); +} + +//_____________________________________________________________________________ +void AliFMD::AddDigit (Int_t * digits) +{ + // add a real digit - as coming from data + + + TClonesArray & ldigits = *fDigits; + new (ldigits[fNdigits++]) AliFMDdigit (digits); + +} +//_____________________________________________________________________________ +void AliFMD::AddSDigit (Int_t * digits) +{ + // add a real digit - as coming from data + + TClonesArray & ldigits = *fSDigits; + new (ldigits[fNdigits++]) AliFMDdigit (digits); + } //_____________________________________________________________________________ -void AliFMD::BuildGeometry() +void AliFMD::BuildGeometry () { // // Build simple ROOT TNode geometry for event display // TNode *node, *top; - const int kColorFMD = 7; + const int kColorFMD = 5; // - top=gAlice->GetGeometry()->GetNode("alice"); + top = gAlice->GetGeometry ()->GetNode ("alice"); // FMD define the different volumes - new TRotMatrix("rot901","rot901", 90, 0, 90, 90, 180, 0); - - new TTUBE("S_FMD0","FMD volume 0","void",4.73,17.7,1.5); - top->cd(); - node = new TNode("FMD0","FMD0","S_FMD0",0,0,64,""); - node->SetLineColor(kColorFMD); - fNodes->Add(node); - - new TTUBE("S_FMD1","FMD volume 1","void",23.4,36.,1.5); - top->cd(); - node = new TNode("FMD1","FMD1","S_FMD1",0,0,85,""); - node->SetLineColor(kColorFMD); - fNodes->Add(node); - - new TTUBE("S_FMD2","FMD volume 2","void",4.73,17.7,1.5); - top->cd(); - node = new TNode("FMD2","FMD2","S_FMD2",0,0,-64,""); - node->SetLineColor(kColorFMD); - fNodes->Add(node); - - new TTUBE("S_FMD3","FMD volume 3","void",23.4,36.,1.5); - top->cd(); - node = new TNode("FMD3","FMD3","S_FMD3",0,0,-85,""); - node->SetLineColor(kColorFMD); - fNodes->Add(node); - - new TTUBE("S_FMD4","FMD volume 4","void",5,15,0.015); - top->cd(); - node = new TNode("FMD4","FMD4","S_FMD4",0,0,-270,""); - node->SetLineColor(kColorFMD); - fNodes->Add(node); - - - new TTUBE("S_FMD5","FMD volume 5","void",5,14,0.015); - top->cd(); - node = new TNode("FMD5","FMD5","S_FMD5",0,0,-630,""); - node->SetLineColor(kColorFMD); - fNodes->Add(node); + new TRotMatrix ("rot901", "rot901", 90, 0, 90, 90, 180, 0); + + new TTUBE ("S_FMD0", "FMD volume 0", "void", 4.2, 17.2, 1.5); + top->cd (); + node = new TNode ("FMD0", "FMD0", "S_FMD0", 0, 0, 62.8, ""); + node->SetLineColor (kColorFMD); + fNodes->Add (node); + + new TTUBE ("S_FMD1", "FMD volume 1", "void", 15.4, 28.4, 1.5); + top->cd (); + node = new TNode ("FMD1", "FMD1", "S_FMD1", 0, 0, 75.2, ""); + node->SetLineColor (kColorFMD); + fNodes->Add (node); + + new TTUBE ("S_FMD2", "FMD volume 2", "void", 4.2, 17.2, 1.5); + top->cd (); + node = new TNode ("FMD2", "FMD2", "S_FMD2", 0, 0, -83.2, ""); + node->SetLineColor (kColorFMD); + fNodes->Add (node); + new TTUBE ("S_FMD3", "FMD volume 3", "void", 15.4, 28.4, 1.5); + top->cd (); + node = new TNode ("FMD3", "FMD3", "S_FMD3", 0, 0, -75.2, ""); + node->SetLineColor (kColorFMD); + fNodes->Add (node); + + new TTUBE ("S_FMD4", "FMD volume 4", "void", 4.2, 17.2, 1.5); + top->cd (); + // node = new TNode("FMD4","FMD4","S_FMD4",0,0,-270,""); + node = new TNode ("FMD4", "FMD4", "S_FMD4", 0, 0, -340, ""); + node->SetLineColor (kColorFMD); + fNodes->Add (node); } - + //_____________________________________________________________________________ -Int_t AliFMD::DistanceToPrimitive(Int_t px, Int_t py) +Int_t AliFMD::DistanceToPrimitive (Int_t px, Int_t py) { // // Calculate the distance from the mouse to the FMD on the screen @@ -150,61 +215,249 @@ Int_t AliFMD::DistanceToPrimitive(Int_t px, Int_t py) // return 9999; } - -//_____________________________________________________________________________ + +//___________________________________________ +void AliFMD::ResetHits () +{ + // Reset number of clusters and the cluster array for this detector + AliDetector::ResetHits (); +} + +//____________________________________________ +void AliFMD::ResetDigits () +{ + // + // Reset number of digits and the digits array for this detector + AliDetector::ResetDigits (); + // +} //------------------------------------------------------------------------- -void AliFMD::Init() +void AliFMD::Init () { // // Initialis the FMD after it has been built Int_t i; - AliMC* pMC = AliMC::GetMC(); + AliMC *pMC = AliMC::GetMC (); + // + if (fDebug) + { + printf ("\n%s: ", ClassName ()); + for (i = 0; i < 35; i++) + printf ("*"); + printf (" FMD_INIT "); + for (i = 0; i < 35; i++) + printf ("*"); + printf ("\n%s: ", ClassName ()); + // + // Here the FMD initialisation code (if any!) + for (i = 0; i < 80; i++) + printf ("*"); + printf ("\n"); + } // - printf("\n"); - for(i=0;i<35;i++) printf("*"); - printf(" FMD_INIT "); - for(i=0;i<35;i++) printf("*"); - printf("\n"); // - // Here the FMD initialisation code (if any!) - for(i=0;i<80;i++) printf("*"); - printf("\n"); - // - // - fIdSens1=pMC->VolId("GFSI"); //Si sensetive volume + fIdSens1 = pMC->VolId ("GRN1"); //Si sensetive volume + fIdSens2 = pMC->VolId ("GRN2"); //Si sensetive volume + fIdSens3 = pMC->VolId ("GRN3"); //Si sensetive volume + fIdSens4 = pMC->VolId ("GRN4"); //Si sensetive volume } //--------------------------------------------------------------------- -void AliFMD::MakeBranch(Option_t* option) +void AliFMD::MakeBranch (Option_t * option, const char *file) { // Create Tree branches for the FMD. - Int_t buffersize = 4000; char branchname[10]; - sprintf(branchname,"%s",GetName()); + const Int_t kBufferSize = 16000; + sprintf (branchname, "%s", GetName ()); + + AliDetector::MakeBranch (option, file); + const char *cD = strstr(option,"D"); + const char *cR = strstr(option,"R"); + const char *cS = strstr(option,"S"); + + if (cS){ - AliDetector::MakeBranch(option); + MakeBranchInTree(gAlice->TreeS(), + branchname,&fSDigits, + kBufferSize, file); + } + if (cD){ - if (fDigits && gAlice->TreeD()) { - gAlice->TreeD()->Branch(branchname,&fDigits, buffersize); - printf("Making Branch %s for digits\n",branchname); + MakeBranchInTree(gAlice->TreeD(), + branchname,&fDigits, + kBufferSize, file); + cout<<" tree "<TreeD()<<" "<TreeR(), + branchname,&fReconParticles, + kBufferSize, file); } + } - + +//_____________________________________________________________________________ +void AliFMD::SetTreeAddress () +{ + // Set branch address for the Hits and Digits Tree. + char branchname[30]; + AliDetector::SetTreeAddress (); + + TBranch *branch; + TTree *treeD = gAlice->TreeD (); + + + if (treeD) + { + if (fDigits) + { + branch = treeD->GetBranch (branchname); + if (branch) + branch->SetAddress (&fDigits); + } + + } + if (fSDigits) + // fSDigits->Clear (); + + if (gAlice->TreeS () && fSDigits) + { + branch = gAlice->TreeS ()->GetBranch ("FMD"); + if (branch) + branch->SetAddress (&fSDigits); + } + + if (gAlice->TreeR() && fReconParticles) + { + branch = gAlice->TreeR()->GetBranch("FMD"); + if (branch) branch->SetAddress(&fReconParticles) ; + } +} + //--------------------------------------------------------------------- -void AliFMD::Eta2Radius(Float_t eta, Float_t zDisk, Float_t *radius) +void AliFMD::SetRingsSi1(Int_t ringsSi1) { - Float_t expEta=TMath::Exp(-eta); - Float_t theta=TMath::ATan(expEta); - theta=2.*theta; - Float_t rad=zDisk*(TMath::Tan(theta)); - *radius=rad; - - printf(" eta %f radius %f\n", eta, rad); + // fRingsSi1=ringsSi1; + fRingsSi1=256; +} +void AliFMD::SetSectorsSi1(Int_t sectorsSi1) +{ + fSectorsSi1=20; +} +void AliFMD::SetRingsSi2(Int_t ringsSi2) +{ + fRingsSi2=128; +} +void AliFMD::SetSectorsSi2(Int_t sectorsSi2) +{ + fSectorsSi2=40; } - - +//--------------------------------------------------------------------- +/* +void AliFMD::SDigits2Digits() +{ + cout<<"AliFMD::SDigits2Digits"<SetRingsSi1(fRingsSi1); + fMerger->SetRingsSi2(fRingsSi2); + fMerger ->SetSectorsSi1(fSectorsSi1); + fMerger ->SetSectorsSi2(fSectorsSi2); + + fMerger->Init(); + cout<<"AliFMD::SDigits2Digits Init"<Digitise(); + cout<<"AliFMD::SDigits2Digits Digitise() "< start...\n"; + //#endif + + char * fileSDigits = "FMD.SDigits.root"; + char * fileHeader = 0; + AliFMDSDigitizer * sd = new AliFMDSDigitizer(fileHeader,fileSDigits) ; + sd->SetRingsSi1(fRingsSi1); + sd->SetRingsSi2(fRingsSi2); + sd->SetSectorsSi1(fSectorsSi1); + sd->SetSectorsSi2(fSectorsSi2); + // sd->SetEventNumber(fEvNrSig); + sd->Exec("") ; + + delete sd ; + +} +//----------------------------------------------------------------------- + +void AliFMD::Digits2Reco() +{ + char * fileReconParticles=0; + char * fileHeader=0; + AliFMDReconstruction * reconstruction = + new AliFMDReconstruction(fileHeader,fileReconParticles) ; + // fReconParticles=new TClonesArray("AliFMDReconstParticles",1000); + reconstruction->Exec(""); + delete reconstruction; +} +//----------------------------------------------------------------------- + +void AliFMD::MakeBranchInTreeD(TTree *treeD, const char *file) +{ + // + // Create TreeD branches for the MUON. + // + + const Int_t kBufferSize = 4000; + char branchname[20]; + + + sprintf(branchname,"%s",GetName()); + if(treeD){ + MakeBranchInTree(treeD, + branchname,&fDigits, + kBufferSize, file); + } +} +