X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=FMD%2FAliFMD.cxx;h=483afc9523cb08aaf0f89fee6a79342beefc07ad;hb=f5a857b2e0246b9c09129323ca68f260bee7ebb2;hp=e3cc9ff3a34148f98daf63a4ccbc0baa82c3b362;hpb=0cc6230067307717032a74f58b8016a042dd834b;p=u%2Fmrichter%2FAliRoot.git
diff --git a/FMD/AliFMD.cxx b/FMD/AliFMD.cxx
index e3cc9ff3a34..483afc9523c 100644
--- a/FMD/AliFMD.cxx
+++ b/FMD/AliFMD.cxx
@@ -13,33 +13,24 @@
* provided "as is" without express or implied warranty. *
**************************************************************************/
-/*
-$Log$
-Revision 1.8 2000/10/02 21:28:07 fca
-Removal of useless dependecies via forward declarations
-
-Revision 1.7 2000/01/19 17:16:47 fca
-Introducing a list of lists of hits -- more hits allowed for detector now
+/* $Id$ */
-Revision 1.6 1999/09/29 09:24:14 fca
-Introduction of the Copyright and cvs Log
-
-*/
-
-///////////////////////////////////////////////////////////////////////////////
-// //
-// Forward Multiplicity Detector //
+ //////////////////////////////////////////////////////////////////////////////
+// //
+// Forward Multiplicity Detector based on Silicon plates //
// This class contains the base procedures for the Forward Multiplicity //
// detector //
+// Detector consists of 5 Si volumes covered pseudorapidity interval //
+// from 1.7 to 5.1. //
// //
//Begin_Html
/*
-
+
The responsible person for this module is
-Valeri Kondratiev.
+Alla Maevskaia.
*/ @@ -48,110 +39,158 @@ Introduction of the Copyright and cvs Log // // /////////////////////////////////////////////////////////////////////////////// -#include-#include +#define DEBUG + +#include +#include + +#include +#include #include #include +#include +#include +#include +#include +#include -#include "AliMC.h" +#include "AliDetector.h" +#include "AliFMDReconstParticles.h" +#include "AliFMDReconstruction.h" +#include "AliFMDdigit.h" +#include "AliFMDhit.h" +#include "AliFMDv1.h" +#include "AliLoader.h" +#include "AliMagF.h" #include "AliRun.h" -#include "AliFMD.h" - -ClassImp(AliFMD) - -//_____________________________________________________________________________ -AliFMD::AliFMD(): AliDetector() +#include "AliMC.h" +#include "AliFMDDigitizer.h" + +ClassImp (AliFMD) + //_____________________________________________________________________________ +AliFMD::AliFMD ():AliDetector () { // // Default constructor for class AliFMD // - fIshunt = 0; + fIshunt = 0; + fHits = 0; + fDigits = 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", 405); - gAlice->AddHitList(fHits); - - fIshunt = 0; + fHits = new TClonesArray ("AliFMDhit", 1000); + // Digits for each Si disk + fDigits = new TClonesArray ("AliFMDdigit", 1000); + fReconParticles=new TClonesArray("AliFMDReconstParticles",1000); + gAlice->GetMCApp()->AddHitList (fHits); + + fIshunt = 0; + // fMerger = 0; + SetMarkerColor (kRed); } - + +//----------------------------------------------------------------------------- +AliFMD::~AliFMD () +{ + if (fHits) + { + fHits->Delete (); + delete fHits; + fHits = 0; + } + if (fDigits) + { + fDigits->Delete (); + delete fDigits; + fDigits = 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 FMD hit + // 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 + + if (fDigits == 0x0) fDigits = new TClonesArray ("AliFMDdigit", 1000); + TClonesArray & ldigits = *fDigits; + 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; + TNode *node, *top; + const int kColorFMD = 5; // - Top=gAlice->GetGeometry()->GetNode("alice"); + top = gAlice->GetGeometry ()->GetNode ("alice"); // FMD define the different volumes - - new TTUBE("S_FMD1","FMD sensitive volume 1","void",4.5,10.5,3); - Top->cd(); - Node = new TNode("FMD1","FMD1","S_FMD1",0,0,86.5,""); - Node->SetLineColor(kColorFMD); - fNodes->Add(Node); - - new TTUBE("S_FMD2","FMD sensitive volume 2","void",4.5,10.5,3); - Top->cd(); - Node = new TNode("FMD2","FMD2","S_FMD2",0,0,-86.5,""); - Node->SetLineColor(kColorFMD); - fNodes->Add(Node); - - new TTUBE("S_FMD3","FMD sensitive volume 3","void",8,14,3); - Top->cd(); - Node = new TNode("FMD3","FMD3","S_FMD3",0,0,71.2,""); - Node->SetLineColor(kColorFMD); - fNodes->Add(Node); - - new TTUBE("S_FMD4","FMD sensitive volume 4","void",8,14,3); - Top->cd(); - Node = new TNode("FMD4","FMD4","S_FMD4",0,0,-71.2,""); - fNodes->Add(Node); - Node->SetLineColor(kColorFMD); - - new TTUBE("S_FMD5","FMD sensitive volume 5","void",8,17.5,3); - Top->cd(); - Node = new TNode("FMD5","FMD5","S_FMD5",0,0,44,""); - Node->SetLineColor(kColorFMD); - fNodes->Add(Node); - - new TTUBE("S_FMD6","FMD sensitive volume 6","void",8,17.5,3); - Top->cd(); - Node = new TNode("FMD6","FMD6","S_FMD6",0,0,-44,""); - Node->SetLineColor(kColorFMD); - fNodes->Add(Node); - - new TTUBE("S_FMD7","FMD sensitive volume 7","void",4.2,13,3); - Top->cd(); - Node = new TNode("FMD7","FMD7","S_FMD7",0,0,-231,""); - 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, 340, ""); + node->SetLineColor (kColorFMD); + fNodes->Add (node); } - + //_____________________________________________________________________________ -Int_t AliFMD::DistancetoPrimitive(Int_t , Int_t ) +Int_t AliFMD::DistanceToPrimitive (Int_t /*px*/, Int_t /*py*/) { // // Calculate the distance from the mouse to the FMD on the screen @@ -159,57 +198,152 @@ Int_t AliFMD::DistancetoPrimitive(Int_t , Int_t ) // return 9999; } - -//_____________________________________________________________________________ -void AliFMD::StepManager() + +//___________________________________________ +void AliFMD::ResetHits () +{ + // Reset number of clusters and the cluster array for this detector + AliDetector::ResetHits (); +} + +//____________________________________________ +void AliFMD::ResetDigits () { // - // Called for each step in the FMD + // Reset number of digits and the digits array for this detector + AliDetector::ResetDigits (); // - - Float_t hits[3]; - Int_t i,copy,vol[1]; - TClonesArray &lhits = *fHits; - TLorentzVector p; - - gMC->CurrentVolID(copy); - vol[0] = copy; - gMC->TrackPosition(p); - for(i=0;i<3;++i) hits[i]=p[i]; - new(lhits[fNhits++]) AliFMDhit(fIshunt,gAlice->CurrentTrack(),vol,hits); } -//___________________________________________ -void AliFMD::Init() +//------------------------------------------------------------------------- +void AliFMD::Init () { // // Initialis the FMD after it has been built Int_t i; // - printf("\n"); - for(i=0;i<35;i++) printf("*"); - printf(" FMD_INIT "); - for(i=0;i<35;i++) printf("*"); - printf("\n"); + 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"); + } + // // - // Here the FMD initialisation code (if any!) - for(i=0;i<80;i++) printf("*"); - printf("\n"); + +} +//--------------------------------------------------------------------- +void AliFMD::MakeBranch (Option_t * option) +{ + // Create Tree branches for the FMD. + char branchname[10]; + const Int_t kBufferSize = 16000; + sprintf (branchname, "%s", GetName ()); + + const char *cH = strstr(option,"H"); + const char *cD = strstr(option,"D"); + const char *cR = strstr(option,"R"); + + if (cH && (fHits == 0x0)) fHits = new TClonesArray ("AliFMDhit", 1000); + + AliDetector::MakeBranch (option); + + if (cD){ + if (fDigits == 0x0) fDigits = new TClonesArray ("AliFMDdigit", 1000); + MakeBranchInTree(fLoader->TreeD(), branchname,&fDigits, kBufferSize, 0); + } + + if (cR){ + if (fReconParticles == 0x0) + fReconParticles=new TClonesArray("AliFMDReconstParticles",1000); + MakeBranchInTree(fLoader->TreeR(), branchname,&fReconParticles, kBufferSize, 0); + } + } - -ClassImp(AliFMDhit) - //_____________________________________________________________________________ -AliFMDhit::AliFMDhit(Int_t shunt, Int_t track, Int_t *vol, Float_t *hits): - AliHit(shunt, track) +void AliFMD::SetTreeAddress () { - // - // Add a FMD hit - // - fVolume = vol[0]; - fX=hits[0]; - fY=hits[1]; - fZ=hits[2]; + // Set branch address for the Hits and Digits Tree. + char branchname[30]; + + if (fLoader->TreeH() && (fHits == 0x0)) + fHits = new TClonesArray ("AliFMDhit", 1000); + + AliDetector::SetTreeAddress (); + + TBranch *branch; + TTree *treeD = fLoader->TreeD(); + + if (treeD) + { + if (fDigits == 0x0) fDigits = new TClonesArray ("AliFMDdigit", 1000); + branch = treeD->GetBranch (branchname); + if (branch) + branch->SetAddress (&fDigits); + } + + if (fLoader->TreeR() && fReconParticles) + { + if (fReconParticles == 0x0) + fReconParticles=new TClonesArray("AliFMDReconstParticles",1000); + branch = fLoader->TreeR()->GetBranch("FMD"); + if (branch) branch->SetAddress(&fReconParticles) ; + } +} + + + +void +AliFMD::Eta2Radius (Float_t eta, Float_t zDisk, Float_t * radius) +{ + Float_t expEta = TMath::Exp (-eta); + Float_t theta = TMath::ATan (expEta); + theta = 2. * theta; + Float_t rad = zDisk * (TMath::Tan (theta)); + *radius = rad; + + if (fDebug) + printf ("%s: eta %f radius %f\n", ClassName (), eta, rad); +} + +//--------------------------------------------------------------------- + + +void AliFMD::Digits2Reco() +{ + AliFMDReconstruction * reconstruction = new AliFMDReconstruction(fLoader->GetRunLoader()); + cout<<" AliFMD::Digits2Reco >> "< Exec(); + delete reconstruction; +} +//----------------------------------------------------------------------- + +void AliFMD::MakeBranchInTreeD(TTree *treeD, const char *file) +{ + // + // Create TreeD branches for the FMD + // + const Int_t kBufferSize = 4000; + char branchname[20]; + sprintf(branchname,"%s",GetName()); + if(treeD) + { + MakeBranchInTree(treeD, branchname,&fDigits, kBufferSize, file); + } +} + +//____________________________________________________________________________ +AliDigitizer* AliFMD::CreateDigitizer(AliRunDigitizer* manager) const +{ + return new AliFMDDigitizer(manager); } -