]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Mechanical support for FMD
authoralla <alla@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 29 Nov 2002 12:25:01 +0000 (12:25 +0000)
committeralla <alla@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 29 Nov 2002 12:25:01 +0000 (12:25 +0000)
FMD/AliFMDv2.cxx [new file with mode: 0644]
FMD/AliFMDv2.h [new file with mode: 0644]
FMD/FMDLinkDef.h
FMD/libFMD.pkg
FMD/module.mk [new file with mode: 0644]

diff --git a/FMD/AliFMDv2.cxx b/FMD/AliFMDv2.cxx
new file mode 100644 (file)
index 0000000..5e36529
--- /dev/null
@@ -0,0 +1,489 @@
+/**************************************************************************
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ *                                                                        *
+ * Author: The ALICE Off-line Project.                                    *
+ * Contributors are mentioned in the code where appropriate.              *
+ *                                                                        *
+ * Permission to use, copy, modify and distribute this software and its   *
+ * documentation strictly for non-commercial purposes is hereby granted   *
+ * without fee, provided that the above copyright notice appears in all   *
+ * copies and that both the copyright notice and this permission notice   *
+ * appear in the supporting documentation. The authors make no claims     *
+ * about the suitability of this software for any purpose. It is          *
+ * provided "as is" without express or implied warranty.                  *
+ **************************************************************************/
+ /////////////////////////////////////////////////////////////////////
+//                                                                 //
+// Forward Multiplicity detector based on Silicon version 0        //
+//
+//Begin Html       
+/*
+<img src="gif/AliFMDv0Class.gif">
+*/
+//End Html
+//                                                                  //
+//                                                                  //
+//////////////////////////////////////////////////////////////////////
+#include <TMath.h>
+#include <TGeometry.h>
+#include <TTUBE.h>
+#include <TFile.h>
+#include <TTree.h>
+#include <TNode.h>
+#include <TClonesArray.h>
+#include <TLorentzVector.h>
+#include <TDirectory.h>
+#include "AliFMDv2.h"
+#include "AliFMDv0.h"
+#include "AliRun.h"
+#include <Riostream.h>
+#include "AliMagF.h"
+#include "AliFMDhit.h"
+#include "AliFMDdigit.h"
+#include <stdlib.h>
+
+ClassImp(AliFMDv2)
+
+//--------------------------------------------------------------------
+AliFMDv2::AliFMDv2(const char *name, const char *title):
+ AliFMD(name,title)
+{
+  //
+  // Standart constructor for Forward Multiplicity Detector version 0
+  //
+  fIdSens1=0;
+  fIdSens2=0;
+  fIdSens3=0;
+  fIdSens4=0;
+  fIdSens5=0;
+//  setBufferSize(128000);
+}
+//-------------------------------------------------------------------------
+void AliFMDv2::CreateGeometry()
+{
+ //
+  // Create the geometry of Forward Multiplicity Detector version 0
+  //
+  //Detector consists of 6 volumes: 
+  // 1st covered pseudorapidity interval from 3.3 to 2.0
+  // and placed on 65cm in Z-direction;
+  // 2nd - from 2.0 to 1.6 and Z=85 cm;
+  // 3d  - the same pseudorapidity interval as the 1st 
+  // but on the other side from the interaction point z=-65cm;
+  // 4th - simmetricaly with the 2nd : 
+  // pseudorapidity from 2.0 to 1.6, Z=-85cm   
+  // 5th - from 3.6 to 4.7, Z=-270cm
+  // 6th - from 4.5 to 5.5 , Z=-630cm.
+  // Each part has 400mkm Si (sensetive area, detector itself),
+  // 0.75cm of plastic simulated electronics material,
+  // Al support ring 2cm thickness and 1cm width placed on 
+  // the outer radius of each Si disk;
+  //    
+  // begin Html
+  /*
+   <img src="gif/AliFMDv0.gif">
+   */
+  //
+
+  Int_t *idtmed = fIdtmed->GetArray();
+   
+  Int_t ifmd;
+  Int_t idrotm[999];
+  Float_t zFMD,par[3],ppcon[5];
+    //ppcon1[15],ppcon2[15],ppcon3[15],ppcon4[15],ppcon5[15];
+  Float_t z[5]={62.8, 75.2, -83.4, -75.2, -340.};
+  Float_t NylonTube[3]={0.2,0.6,0.45};
+  Float_t zPCB=0.12; Float_t zHoneyComb=0.5; 
+  Float_t zSi=0.03;
+//-------------------------------------------------------------------
+ //  FMD 
+ //------------------------------------------------------------------
+  //  cout<<" !!!!!!!!!!!New FMD geometry !!!!!!!!!"<<endl;
+  
+
+  char nameFMD[5], nameSi[5], nameSector[5], nameRing[5];
+  Char_t nameHoney[5], nameHoneyIn[5], nameHoneyOut[5];
+  Char_t namePCB[5], nameCopper[5], nameChips[5], nameG10[5];
+  Char_t nameLPCB[5], nameLCopper[5], nameLChips[5], nameGL10[5];;
+  Float_t rin[5]={4.2,15.4,4.2,15.4,4.2};
+  Float_t rout[5]={17.4,28.4,17.4,28.4,17.4};
+  Float_t RinHoneyComb[5] ={ 5.15,16.4,  5.15,16.4,  5.15};
+  Float_t RoutHoneyComb[5]={20.63,34.92,22.3, 32.02,20.63};
+  Float_t zInside;
+  Float_t zCooper=0.01; Float_t zChips=0.01;
+  Float_t yNylonTube[5]={10,20,10,20,10};
+
+
+  AliMatrix(idrotm[901], 90, 0, 90, 90, 180, 0);
+  
+  
+  // Nylon tubes
+   gMC->Gsvolu("GNYL","TUBE", idtmed[1], NylonTube, 3);  //support nylon tube
+   Float_t wideSupport=zSi+3*zPCB+2*NylonTube[2]+zHoneyComb;
+   //   cout<<" wideSupport "<<wideSupport<<endl;
+
+  for (ifmd=0; ifmd<5; ifmd++)
+    {
+      sprintf(nameFMD,"FMD%d",ifmd+1);
+      ppcon[0]=0;
+      ppcon[1]=360;
+      ppcon[2]=4;
+      
+      //      ppcon[3]=z[ifmd];
+      ppcon[3]=-wideSupport/2.;
+      ppcon[4]=rin[ifmd];
+      ppcon[5]=rout[ifmd];
+      
+      ppcon[6]=ppcon[3]+zSi+2*zPCB+2*NylonTube[2];
+      ppcon[7]=rin[ifmd];
+      ppcon[8]=rout[ifmd];
+      
+      ppcon[9]=ppcon[6];
+      ppcon[10]=RinHoneyComb[ifmd];
+      ppcon[11]=RoutHoneyComb[ifmd];
+
+      ppcon[12]=ppcon[9]+zHoneyComb+zPCB;
+      ppcon[13]=RinHoneyComb[ifmd];
+      ppcon[14]=RoutHoneyComb[ifmd];
+      zFMD=z[ifmd]+wideSupport/2.;
+      //      cout<<" Si "<<ifmd+1<<" "<<zFMD<<" "<<ppcon[12]<<endl;
+      gMC->Gsvolu(nameFMD,"PCON",idtmed[0],ppcon,15);
+      if (z[ifmd] >0){  
+       gMC->Gspos(nameFMD,1,"ALIC",0,0,z[ifmd],0, "ONLY");}
+      else { 
+       gMC->Gspos(nameFMD,1,"ALIC",0,0,z[ifmd],idrotm[901], "ONLY");}
+     //silicon
+      sprintf(nameSi,"GSI%d",ifmd+1);
+      sprintf(nameSector,"GSC%d",ifmd+1);
+      sprintf(nameRing,"GRN%d",ifmd+1);
+      //honeycomb support
+      sprintf(nameHoney,"GSU%d",ifmd+1);
+      gMC->Gsvolu(nameHoney,"TUBE", idtmed[0], par, 0);  //honeycomb 
+      sprintf(nameHoneyIn,"GHI%d",ifmd+1);
+      gMC->Gsvolu(nameHoneyIn,"TUBE", idtmed[7], par, 0);  //honey comb inside 
+      sprintf(nameHoneyOut,"GHO%d",ifmd+1);
+      gMC->Gsvolu(nameHoneyOut,"TUBE", idtmed[6], par, 0);  //honey comb skin
+      //PCB
+      sprintf(namePCB,"GPC%d",ifmd+1);
+      gMC->Gsvolu(namePCB,"TUBE", idtmed[0], par, 0); //PCB
+      sprintf(nameCopper,"GCO%d",ifmd+1);
+      gMC->Gsvolu(nameCopper,"TUBE", idtmed[3], par, 0);  // Cooper
+      sprintf(nameChips,"GCH%d",ifmd+1);
+      gMC->Gsvolu(nameChips,"TUBE", idtmed[5], par, 0); // Si chips
+      sprintf(nameG10,"G10%d",ifmd+1);
+      gMC->Gsvolu(nameG10,"TUBE", idtmed[2], par, 0);  //G10 plate
+      //last PCB
+      sprintf(nameLPCB,"GPL%d",ifmd+1);
+      gMC->Gsvolu(nameLPCB,"TUBE", idtmed[0], par, 0); //PCB
+      sprintf(nameLCopper,"GCL%d",ifmd+1);
+      gMC->Gsvolu(nameLCopper,"TUBE", idtmed[3], par, 0);  // Cooper
+      sprintf(nameLChips,"GHL%d",ifmd+1);
+      gMC->Gsvolu(nameLChips,"TUBE", idtmed[5], par, 0); // Si chips
+      sprintf(nameGL10,"G1L%d",ifmd+1);
+      gMC->Gsvolu(nameGL10,"TUBE", idtmed[2], par, 0);  //G10 plate
+     
+     
+      par[0]=rin[ifmd]; // pipe size
+      par[1]=rout[ifmd];
+      par[2]=zSi/2;
+      gMC->Gsvolu(nameSi,"TUBE", idtmed[4], par, 3);
+      printf ("rin %f rout %f ZFMD %f\n",par[0],par[1],z[ifmd]);
+      zInside=ppcon[3]+par[2];
+      //      cout<<" zInside "<<zInside<<endl;
+      gMC->Gspos(nameSi,ifmd+1,nameFMD,0,0,zInside,0, "ONLY");
+      //PCB 1
+      zInside += par[2]+zPCB/2;
+      par[2]=zPCB/2;
+      //   cout<<"FMD "<<ifmd<<" zInside PCB1 = "<<zInside<<endl;
+      gMC->Gsposp(namePCB,1,nameFMD,0,0,zInside,0, "ONLY",par,3);
+      zInside += zPCB;
+      //  cout<<"FMD "<<ifmd<<" zInside PCB2 = "<<zInside<<endl;
+      gMC->Gsposp(namePCB,2,nameFMD,0,0,zInside,0, "ONLY",par,3);
+      Float_t NulonTubeBegin=zInside+2*zPCB;
+      par[2]=zPCB/2-0.02;
+      Float_t zInPCB = -zPCB/2+par[2];
+      gMC->Gsposp(nameG10,1,namePCB,0,0,zInPCB,0, "ONLY",par,3);
+      zInPCB+=par[2]+zCooper/2 ;
+      par[2]=zCooper/2;
+      gMC->Gsposp(nameCopper,1,namePCB,0,0,zInPCB,0, "ONLY",par,3);
+      zInPCB += zCooper/2 + zChips/2;
+      par[2]=zChips/2;
+      gMC->Gsposp(nameChips,1,namePCB,0,0,zInPCB,0, "ONLY",par,3);
+      //HoneyComb
+      zHoneyComb=0.8;   
+      par[0] = RinHoneyComb[ifmd];
+      par[1] = RoutHoneyComb[ifmd];
+      par[2] = zHoneyComb/2;
+      //  cout<<"FMD "<<ifmd<<" zInside before HoneyComb = "<<zInside<<" par[2] "<<par[2]<<endl;
+      zInside += 2*NylonTube[2]+par[2];
+      // cout<<" zInside HoneyComb"<<zInside<<endl;
+      gMC->Gsposp(nameHoney,1,nameFMD,0,0,zInside,0, "ONLY",par,3);
+      par[2]=0.1/2;
+      Float_t zHoney=-zHoneyComb/2+par[2];
+      //  cout<<" zHoney shurka 1 "<<zHoney <<endl;
+      gMC->Gsposp(nameHoneyOut,1,nameHoney,0,0,zHoney,0,
+                 "ONLY",par,3); //shkurki
+      zHoney=zHoneyComb/2-par[2];
+      //  cout<<" zHoney shurka 2 "<<zHoney <<endl;
+      gMC->Gsposp(nameHoneyOut,2,nameHoney,0,0,zHoney,0, "ONLY",par,3);
+      par[2]=(zHoneyComb-2.*0.1)/2; //soty vnutri
+      gMC->Gsposp(nameHoneyIn,1,nameHoney,0,0,0,0, "ONLY",par,3);
+      
+      gMC->Gspos("GNYL",1,nameFMD,0,yNylonTube[ifmd],
+                NulonTubeBegin+NylonTube[2]/2.,0, "ONLY");
+      gMC->Gspos("GNYL",2,nameFMD,0,-yNylonTube[ifmd],
+                NulonTubeBegin+NylonTube[2]/2.,0, "ONLY");
+         
+      //last PCB
+      par[0]=RoutHoneyComb[ifmd]-9;
+      par[1]=RoutHoneyComb[ifmd];
+      par[2]=zPCB/2;
+      //  cout<<" rin "<<par[0]<<" rout "<<par[1]<<endl;
+      zInside += zHoneyComb/2+par[2];
+      gMC->Gsposp(nameLPCB,1,nameFMD,0,0,zInside,0, "ONLY",par,3);
+      
+       par[2]=zPCB/2-0.02;
+       zInPCB = -zPCB/2+par[2];
+       gMC->Gsposp(nameGL10,1,nameLPCB,0,0,zInPCB,0, "ONLY",par,3);
+       zInPCB+=par[2]+zCooper/2 ;
+       par[2]=zCooper/2;
+       gMC->Gsposp(nameLCopper,1,nameLPCB,0,0,zInPCB,0, "ONLY",par,3);
+       zInPCB += zCooper/2 + zChips/2;
+       par[2]=zChips/2;
+       gMC->Gsposp(nameLChips,1,nameLPCB,0,0,zInPCB,0, "ONLY",par,3);
+      
+       /*
+      if (ifmd==3) {
+       par[0]=0.1;
+       par[1]=7.;
+       par[2]=0.1;
+       gMC->Gsvolu("GST1","BOX ", idtmed[6], par, 3);  //support carbon stick
+       gMC->Gspos("GST1",1,nameFMD,0.,49.2-par[1],z[3]-0.7,0,"ONLY");
+       gMC->Gspos("GST1",2,nameFMD,0.,-49.2+par[1],z[3]-0.7,0,"ONLY");
+       
+       Float_t pSupportCone[5];
+       pSupportCone[0]=1.5;
+       pSupportCone[1]=34.4;
+       pSupportCone[2]=34.5;
+       pSupportCone[3]=30.;
+       pSupportCone[4]=29.9;
+       gMC->Gsvolu("GCY1","CONE", idtmed[6],pSupportCone , 5);  //support carbon stick
+       gMC->Gspos("GCY1",1,nameFMD,0.,0.,z[3]+1.5,0,"ONLY");
+       
+      }
+     if (ifmd==2) {
+       par[0]=0.1;
+       par[1]=1.3;
+       par[2]=0.1;
+       gMC->Gsvolu("GST3","BOX ", idtmed[6], par, 3);  //support carbon stick
+       gMC->Gspos("GST3",1,nameFMD,0.,23.-par[1],z[2]+2.1,0,"ONLY");
+       gMC->Gspos("GST3",2,nameFMD,0.,-23.+par[1],z[2]+2.1,0,"ONLY");
+
+       Float_t pSupportCone[5];
+       pSupportCone[0]=1.5;
+       pSupportCone[1]=30.;
+       pSupportCone[2]=29.9;
+       pSupportCone[3]=21.;
+       pSupportCone[4]=20.9;
+       gMC->Gsvolu("GCY2","CONE", idtmed[6],pSupportCone , 5);  //support carbon stick
+       gMC->Gspos("GCY2",1,nameFMD,0.,0.,z[2]+1.5,0,"ONLY");
+       
+     }
+       */
+       
+     //Granularity
+    fSectorsSi1=20;
+    fRingsSi1=256*3;
+    //fRingsSi1=3; // for drawing only
+    fSectorsSi2=40;
+    fRingsSi2=128*3;
+    // fRingsSi2=3; //for  drawing onl
+    if(ifmd==1||ifmd==3)
+      { 
+       gMC->Gsdvn(nameSector, nameSi , fSectorsSi2, 2);
+       gMC->Gsdvn(nameRing, nameSector, fRingsSi2, 1);
+      }
+    else
+      {
+       gMC->Gsdvn(nameSector, nameSi , fSectorsSi1, 2);
+       gMC->Gsdvn(nameRing, nameSector , fRingsSi1, 1);
+      }
+    
+    }
+}    
+
+
+//------------------------------------------------------------------------
+
+
+void AliFMDv2::CreateMaterials()
+{
+ Int_t isxfld   = gAlice->Field()->Integ();
+ Float_t sxmgmx = gAlice->Field()->Max();
+
+ // Plastic CH
+ Float_t aPlastic[2]={1.01,12.01};
+ Float_t zPlastic[2]={1,6};
+ Float_t wPlastic[2]={1,1};
+ Float_t denPlastic=1.03;
+ //     60% SiO2 , 40% G10FR4 
+ // PC board
+ Float_t apcb[3]  = { 28.0855,15.9994,17.749 };
+ Float_t zpcb[3]  = { 14.,8.,8.875 };
+ Float_t wpcb[3]  = { .28,.32,.4 };
+ Float_t denspcb  = 1.8;
+   //
+ //*** Definition Of avaible FMD materials ***
+ AliMaterial(0, "FMD Air$", 14.61, 7.3, .001205, 30423.,999); 
+ AliMixture(1, "Plastic$",aPlastic,zPlastic,denPlastic,-2,wPlastic);
+ AliMixture(2, "SSD PCB$",   apcb, zpcb, denspcb, 3, wpcb);
+ AliMaterial(3, "SSD Copper$", 63.546, 29., 8.96, 1.43, 999.);
+ AliMaterial(4, "SSD Si$",      28.0855, 14., 2.33, 9.36, 999.);
+ AliMaterial(5, "SSD Si chip$", 28.0855, 14., 2.33, 9.36, 999.);
+ AliMaterial(6, "SSD C$",       12.011,   6., 2.265,18.8, 999.);
+ AliMaterial(7, "SSD Kapton$", 12.011, 6., 0.01, 31.27, 999.);//honeycomb
+  AliMaterial(8, "SSD G10FR4$", 17.749, 8.875, 1.8, 21.822, 999.);
+   
+
+//**
+ AliMedium(0, "FMD air$", 0, 0, isxfld, sxmgmx, 1., .001, 1., .001, .001);
+ AliMedium(1, "Plastic$", 1, 0,isxfld, sxmgmx,  10., .01, 1., .003, .003);
+ AliMedium(2, "SSD PCB$", 2, 0, isxfld, sxmgmx, 1., .001, 1., .001, .001);
+ AliMedium(3, "SSD Copper$", 3, 0,isxfld, sxmgmx,  10., .01, 1., .003, .003);
+ AliMedium(4, "SSD Si$", 4, 1, isxfld, sxmgmx, 1., .001, 1., .001, .001);
+ AliMedium(5, "SSD Si chip$", 5, 0,isxfld, sxmgmx,  10., .01, 1., .003, .003);
+ AliMedium(6, "SSD C$", 6, 0,isxfld, sxmgmx,  10., .01, 1., .003, .003);
+ AliMedium(7, "SSD Kapton$", 7, 0, isxfld, sxmgmx, 1., .001, 1., .001, .001);
+ AliMedium(8, "SSD G10FR4$", 8, 0,isxfld, sxmgmx,  10., .01, 1., .003, .003);
+
+
+}
+
+//---------------------------------------------------------------------
+void AliFMDv2::DrawDetector()
+{
+//
+// Draw a shaded view of the Forward multiplicity detector version 0
+//
+
+
+//Set ALIC mother transparent
+gMC->Gsatt("ALIC","SEEN",0);
+//
+//Set volumes visible
+gMC->Gsatt("FMD1","SEEN",1);
+gMC->Gsatt("FMD2","SEEN",1);
+gMC->Gsatt("FMD3","SEEN",1);
+gMC->Gsatt("FMD4","SEEN",1);
+gMC->Gsatt("FMD5","SEEN",1);
+
+//
+gMC->Gdopt("hide","on");
+gMC->Gdopt("shad","on");
+gMC->SetClipBox(".");
+gMC->SetClipBox("*",0,1000,-1000,1000,-1000,1000);
+gMC->DefaultRange();
+gMC->Gdraw("alic",40,30,0,12,9.5,.2,0.2);
+gMC->Gdhead(1111,"Forward multiplicity detector");
+gMC->Gdopt("hide","off");
+}
+//-------------------------------------------------------------------
+void AliFMDv2::Init()
+{
+// Initialises version 0 of the Forward Multiplicity Detector
+//
+AliFMD::Init();
+fIdSens1=gMC->VolId("GRN1");
+fIdSens2=gMC->VolId("GRN2");
+fIdSens3=gMC->VolId("GRN3");
+fIdSens4=gMC->VolId("GRN4");
+fIdSens5=gMC->VolId("GRN5");
+printf("*** FMD version 2 initialized ***\n");
+}
+
+//-------------------------------------------------------------------
+
+void AliFMDv2::StepManager()
+{
+  //
+  // Called for every step in the Forward Multiplicity Detector
+  //
+  Int_t id,copy,copy1,copy2;
+  static Float_t hits[9];
+  static Int_t vol[3];
+  static Float_t de;
+  TLorentzVector pos;
+  TLorentzVector mom;
+
+
+  TClonesArray &lhits = *fHits;
+  if(!gMC->IsTrackAlive()) return; // particle has disappeared
+
+  Float_t charge = gMC->TrackCharge();
+  if(TMath::Abs(charge)<=0.) return; //take only charged particles
+
+  //  printf(" in StepManeger \n");
+  id=gMC->CurrentVolID(copy);
+  
+// Check the sensetive volume
+   if(id==fIdSens1||id==fIdSens2||id==fIdSens3||id==fIdSens4||id==fIdSens5)
+     {
+       if(gMC->IsTrackEntering())
+        {
+          vol[2]=copy;
+          gMC->CurrentVolOffID(1,copy1);
+          vol[1]=copy1;
+          gMC->CurrentVolOffID(2,copy2);
+          vol[0]=copy2;
+
+          gMC->TrackPosition(pos);
+          hits[0]=pos[0];
+          hits[1]=pos[1];
+          hits[2]=pos[2];
+
+          gMC->TrackMomentum(mom);
+          hits[3]=mom[0];
+          hits[4]=mom[1];
+          hits[5]=mom[2];
+
+          Int_t iPart= gMC->TrackPid();
+          Int_t partId=gMC->IdFromPDG(iPart);
+          hits[7]=partId;
+          hits[8]=1e9*gMC->TrackTime();
+          de=0.;
+        }
+       if(gMC->IsTrackInside()){
+          de=de+1000.*gMC->Edep();
+       }
+       
+       if(gMC->IsTrackExiting()
+         ||gMC->IsTrackDisappeared()||
+         gMC->IsTrackStop())
+        {
+            hits[6]=de+1000.*gMC->Edep();
+      new(lhits[fNhits++]) AliFMDhit(fIshunt,gAlice->CurrentTrack(),vol,hits);
+        } // IsTrackExiting()
+     }
+  }
+
+//--------------------------------------------------------------------------
+
+void AliFMDv2::Response( Float_t Edep)
+{
+  Float_t I=1.664*0.04*2.33/22400; // = 0.69e-6;
+  Float_t chargeOnly=Edep/I;
+  //Add noise ~500electrons
+  Int_t charge=500;
+  if (Edep>0)
+     charge=Int_t(gRandom->Gaus(chargeOnly,500));      
+ }   
+
+
+
+
+
+
+
diff --git a/FMD/AliFMDv2.h b/FMD/AliFMDv2.h
new file mode 100644 (file)
index 0000000..174a156
--- /dev/null
@@ -0,0 +1,45 @@
+#ifndef ALIFMDV2_H
+#define ALIFMDV2_H
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice                               */
+
+///////////////////////////////////////////////
+//  Manager and hits classes for set:FMD     //
+////////////////////////////////////////////////
+#include "AliFMD.h"
+class AliFMDv2 : public AliFMD {
+  
+public:
+  AliFMDv2() {};
+  AliFMDv2(const char *name, const char *title);
+  virtual       ~AliFMDv2() {}
+  virtual void   CreateGeometry();
+  virtual void   CreateMaterials();
+  virtual void   DrawDetector();
+  virtual void   Init();
+  virtual Int_t  IsVersion() const {return 1;}
+  virtual void   StepManager();
+  //  virtual void Hit2Digits(Int_t bgrEvent, Option_t *opt1=" ",
+  //   Option_t *opt2=" ",Text_t *name=" "); // hit to digit for v1 :test  
+ virtual void  Response( Float_t Edep);
+//private:
+ //Int_t fCharge; 
+
+
+protected:
+   Int_t fIdSens1; // Sensetive volume  in FMD
+   Int_t fIdSens2; // Sensetive volume  in FMD
+   Int_t fIdSens3; // Sensetive volume  in FMD
+   Int_t fIdSens4; // Sensetive volume  in FMD
+   Int_t fIdSens5; // Sensetive volume  in FMD
+   
+// Background event for event mixing
+  
+  ClassDef(AliFMDv2,2)  //Class for FMD version 0
+};
+
+#endif
+
+
index f5b24200888278026d2a7943fd5e0d6acac3e400..da61666fe9c3af18984c51f719e1feb314bc7eca 100644 (file)
@@ -11,6 +11,7 @@
 #pragma link C++ class  AliFMD+;
 #pragma link C++ class  AliFMDv0+;
 #pragma link C++ class  AliFMDv1+;
+#pragma link C++ class  AliFMDv2+;
 #pragma link C++ class  AliFMDhit+;
 #pragma link C++ class  AliFMDdigit+;
 #pragma link C++ class  AliFMDReconstruction+;
index 91613b176afc0da70f010e5b47f6eef273c56659..7f9f652f86aa7813a10e0aae450e2a4813ada9ec 100644 (file)
@@ -1,4 +1,4 @@
-SRCS= AliFMD.cxx AliFMDv0.cxx AliFMDv1.cxx AliFMDhit.cxx AliFMDdigit.cxx AliFMDMerger.cxx AliFMDReconstruction.cxx AliFMDReconstParticles.cxx AliFMDDigitizer.cxx AliFMDSDigitizer.cxx
+SRCS= AliFMD.cxx AliFMDv0.cxx AliFMDv1.cxx AliFMDv2.cxx AliFMDhit.cxx AliFMDdigit.cxx AliFMDMerger.cxx AliFMDReconstruction.cxx AliFMDReconstParticles.cxx AliFMDDigitizer.cxx AliFMDSDigitizer.cxx
 
 
 HDRS= $(SRCS:.cxx=.h)
diff --git a/FMD/module.mk b/FMD/module.mk
new file mode 100644 (file)
index 0000000..f592d41
--- /dev/null
@@ -0,0 +1,351 @@
+#**************************************************************************
+#**** This file is automatically generated from the mkmodules script  *****
+#****          DO NOT EDIT!!                                          *****
+#**************************************************************************
+
+
+#********** This part is for package FMD ***********
+
+#Determine if it's a library or a executable
+TYPE=lib
+    
+# Package head directory, source and include directories
+MODDIR:=FMD
+MODDIRS:=$(MODDIR)
+MODDIRI:=$(MODDIR)
+MODDIRO:=$(MODDIR)/tgt_$(ALICE_TARGET)
+
+# Reseting variables before importing pkg-file
+SRCS:=
+HDRS:=
+FSRCS:=
+DHDR:=
+CSRCS:=
+CHDRS:=
+EINCLUDE:=
+EDEFINE:=
+ELIBS:=
+ELIBSDIR:=
+PACKFFLAGS:=
+PACKCXXFLAGS:=
+PACKCFLAGS:=
+EXPORT:=
+EHDRS:=
+CINTHDRS:=
+SRCS= AliFMD.cxx AliFMDv0.cxx AliFMDv1.cxx AliFMDv2.cxx AliFMDhit.cxx AliFMDdigit.cxx AliFMDMerger.cxx AliFMDReconstruction.cxx AliFMDReconstParticles.cxx AliFMDDigitizer.cxx AliFMDSDigitizer.cxx
+
+
+HDRS= $(SRCS:.cxx=.h)
+
+DHDR:=FMDLinkDef.h
+
+
+
+
+ifndef PACKFFLAGS
+FMDFFLAGS:=$(FFLAGS)
+else
+FMDFFLAGS:=$(PACKFFLAGS)
+endif
+
+ifndef PACKCFLAGS
+FMDCFLAGS:=$(CFLAGS)
+else
+FMDCFLAGS:=$(PACKCFLAGS)
+endif
+
+ifndef PACKCXXFLAGS
+FMDCXXFLAGS:=$(CXXFLAGS)
+else
+FMDCXXFLAGS:=$(PACKCXXFLAGS)
+endif
+
+ifndef PACKDCXXFLAGS
+ifeq ($(PLATFORM),linuxicc)
+FMDDCXXFLAGS:=$(filter-out -O%,$(CXXFLAGS)) -O0
+else
+FMDDCXXFLAGS:=$(filter-out -O%,$(CXXFLAGS))
+endif
+else
+FMDDCXXFLAGS:=$(PACKCXXFLAGS)
+endif
+
+
+ifdef DHDR
+WITHDICT=YES
+else
+WITHDICT=
+endif
+
+# Headerfiles exported to common place:
+FMDEXPORT:=$(EXPORT)
+FMDEXPORTDEST:=$(patsubst %,$(EXPORTDIR)/%,$(EXPORT))
+
+
+#Extra include,libs, defines etc.
+
+FMDDEFINE:=$(EDEFINE)
+
+FMDINC:=$(patsubst %,-I%,$(EINCLUDE)) -IFMD
+
+FMDELIBS:=$(patsubst %,-l%,$(ELIBS))
+FMDELIBSDIR:=$(patsubst %,-L%,$(ELIBSDIR))
+
+#c sources and headers
+
+FMDCS:=$(patsubst %,$(MODDIR)/%,$(CSRCS))
+FMDCH:=$(patsubst %,$(MODDIR)/%,$(CHDRS))
+
+#Fortran sources 
+FMDFS:=$(patsubst %,$(MODDIR)/%,$(FSRCS))
+
+#c++ sources and header
+FMDS:=$(patsubst %,$(MODDIR)/%,$(SRCS))
+FMDH:=$(patsubst %,$(MODDIR)/%,$(HDRS)) $(EHDRS)
+
+#############################################################################
+#
+#            If special rootcint headerfiles is specified use them
+#                         else use all headers
+
+ifndef CINTHDRS
+FMDCINTHDRS:=$(FMDH) 
+else
+FMDCINTHDRS:=$(CINTHDRS)
+endif
+#############################################################################
+
+# Package Dictionary 
+
+FMDDH:=$(MODDIR)/$(DHDR)
+
+
+#All objects
+FMDCO:=$(patsubst %,$(MODDIRO)/%, $(CSRCS:.c=.o))
+TEMP:=$(FSRCS:.F=.o)
+FMDFO:=$(patsubst %,$(MODDIRO)/%, $(TEMP:.f=.o))
+FMDO:= $(patsubst %,$(MODDIRO)/%, $(SRCS:.cxx=.o)) $(FMDFO) $(FMDCO)
+
+
+
+ifdef WITHDICT
+  FMDDS:=$(MODDIRO)/G__FMD.cxx
+  FMDDO:=$(MODDIRO)/G__FMD.o
+  FMDDDEP:=$(FMDDO:.o=.d)
+  FMDDEP:=$(FMDO:.o=.d) $(FMDDDEP)
+else
+  FMDDS:=
+  FMDDO:=
+  FMDDDEP:=
+  FMDDEP:=$(FMDO:.o=.d)
+endif
+
+
+#The actual library file
+
+FMDLIB:=$(LIBPATH)/libFMD.$(SOEXT)
+
+#Add this to the modules libs
+FMDLIBS += $(FMDLIB)
+
+#The actual binary file
+
+FMDBIN:=$(BINPATH)/FMD
+
+#Add to modules list of binaries
+FMDBINS += $(FMDBIN)
+
+# Use in the main Makefile
+
+ifeq ($(TYPE),lib)
+ALLLIBS += $(FMDLIB)
+BINLIBS += -lFMD
+else
+ALLEXECS += $(FMDBIN)
+endif
+
+# include all dependency files
+INCLUDEFILES +=$(FMDDEP)
+
+EXPORTFILES += $(FMDEXPORTDEST)
+
+#local rules
+
+#The exportfiles only include if any!!
+
+ifdef FMDEXPORT
+#$(FMDEXPORTDEST): $(patsubst %,FMD/%,$(FMDEXPORT))
+
+$(FMDEXPORTDEST): $(EXPORTDIR)/%.h: FMD/%.h
+ifndef ALIQUIET
+         @echo "***** Copying file $^ to $@ *****"
+endif
+         @[ -d $(dir $@) ] || mkdir $(dir $@)
+         @cp $^ $@     
+endif
+
+$(FMDLIB):$(FMDO) $(FMDDO) FMD/module.mk
+ifndef ALIQUIET
+         @echo "***** Linking library $@ *****"
+endif
+         $(MUTE)TMPDIR=/tmp/FMD$$$$.`date +%M%S` ; \
+         export TMPDIR; mkdir $$TMPDIR ; cd $$TMPDIR ; \
+         find $(CURDIR)/FMD/tgt_$(ALICE_TARGET) -name '*.o' -exec ln -s {} . \; ;\
+      rm -f $(CURDIR)/$@ ;\
+         $(SHLD) $(SOFLAGS) -o $(CURDIR)/$@ $(notdir $(FMDO) $(FMDDO))  $(FMDELIBSDIR) $(FMDELIBS) $(SHLIB);\
+      cd $(CURDIR) ; rm -rf $$TMPDIR
+         $(MUTE)chmod a-w $@
+
+$(FMDBIN):$(FMDO) $(FMDDO) FMD/module.mk
+ifndef ALIQUIET
+         @echo "***** Making executable $@ *****"
+endif
+         $(MUTE)$(LD) $(LDFLAGS) $(FMDO) $(FMDDO) $(BINLIBDIRS) $(FMDELIBSDIR) $(FMDELIBS) $(LIBS) $(EXEFLAGS) -o $@ 
+
+$(FMDDS): $(FMDCINTHDRS) $(FMDDH) FMD/module.mk
+ifndef ALIQUIET
+        @echo "***** Creating $@ *****";       
+endif
+        @(if [ ! -d '$(dir $@)' ]; then echo "***** Making directory $(dir $@) *****"; mkdir -p $(dir $@); fi;)
+        $(MUTE)rootcint -f $@ -c $(FMDDEFINE) $(CINTFLAGS) $(FMDINC) $(FMDCINTHDRS) $(FMDDH) 
+
+$(FMDDO): $(FMDDS)
+ifndef ALIQUIET
+               @echo "***** Compiling $< *****";
+endif
+               $(MUTE)$(CXX) -c $(FMDINC)  -I$(ALICE_ROOT) $< -o $@ $(FMDDCXXFLAGS)
+
+#Different targets for the module
+
+ifeq ($(TYPE),lib)
+all-FMD: $(FMDLIB)
+else
+all-FMD: $(FMDBIN)
+endif
+
+depend-FMD: $(FMDDEP)
+
+# determination of object files
+$(MODDIRO)/%.o: $(MODDIRO)/%.cxx $(MODDIRO)/%.d 
+ifndef ALIQUIET
+       @echo "***** Compiling $< *****";
+endif
+       @(if [ ! -d '$(dir $@)' ]; then echo "***** Making directory $(dir $@) *****"; mkdir -p $(dir $@); fi;)
+       $(MUTE)$(CXX) $(FMDDEFINE) -c $(FMDINC)   $< -o $@ $(FMDCXXFLAGS)
+
+$(MODDIRO)/%.o: $(MODDIR)/%.cxx $(MODDIRO)/%.d 
+ifndef ALIQUIET
+       @echo "***** Compiling $< *****";
+endif
+       @(if [ ! -d '$(dir $@)' ]; then echo "***** Making directory $(dir $@) *****"; mkdir -p $(dir $@); fi;)
+       $(MUTE)$(CXX) $(FMDDEFINE) -c $(FMDINC)   $< -o $@ $(FMDCXXFLAGS)
+
+$(MODDIRO)/%.o: $(MODDIR)/%.F $(MODDIRO)/%.d 
+ifndef ALIQUIET
+       @echo "***** Compiling $< *****";
+endif
+       @(if [ ! -d '$(dir $@)' ]; then echo "***** Making directory $(dir $@) *****"; mkdir -p $(dir $@); fi;)
+       $(MUTE)$(F77) -c $(FMDINC)  $< -o $@ $(FMDFFLAGS)
+
+$(MODDIRO)/%.o: $(MODDIR)/%.f $(MODDIRO)/%.d 
+ifndef ALIQUIET
+       @echo "***** Compiling $< *****";
+endif
+       @(if [ ! -d '$(dir $@)' ]; then echo "***** Making directory $(dir $@) *****"; mkdir -p $(dir $@); fi;)
+       $(MUTE)$(F77) -c $(FMDINC)  $< -o $@ $(FMDFFLAGS)
+
+$(MODDIRO)/%.o: $(MODDIR)/%.c $(MODDIRO)/%.d 
+ifndef ALIQUIET
+       @echo "***** Compiling $< *****";
+endif
+       @(if [ ! -d '$(dir $@)' ]; then echo "***** Making directory $(dir $@) *****"; mkdir -p $(dir $@); fi;)
+       $(MUTE)$(CC) $(FMDDEFINE) -c  $(FMDINC)  $< -o $@   $(FMDCFLAGS)
+
+$(FMDDDEP): $(FMDDS)
+ifndef ALIQUIET
+               @echo "***** Making dependencies for $< *****";
+endif
+               @(if [ ! -d '$(dir $@)' ]; then echo "***** Making directory $(dir $@) *****"; mkdir -p $(dir $@); fi;)
+               @share/alibtool depend "$(FMDELIBSDIR) $(FMDINC) $(DEPINC)  $<" > $@
+
+$(MODDIRO)/%.d: $(MODDIRS)/%.cxx
+ifndef ALIQUIET
+               @echo "***** Making dependencies for $< *****";
+endif
+               @(if [ ! -d '$(dir $@)' ]; then echo "***** Making directory $(dir $@) *****"; mkdir -p $(dir $@); fi;)
+               @share/alibtool depend "$(FMDDEFINE) $(FMDELIBSDIR) $(FMDINC) $(DEPINC)  $<" > $@
+$(MODDIRO)/%.d: $(MODDIRS)/%.f
+ifndef ALIQUIET
+               @echo "***** Making dependencies for $< *****";
+endif
+               @(if [ ! -d '$(dir $@)' ]; then echo "***** Making directory $(dir $@) *****"; mkdir -p $(dir $@); fi;)
+               @share/alibtool dependF "$(FMDELIBSDIR) $(FMDINC) $(DEPINC)  $<" > $@
+$(MODDIRO)/%.d: $(MODDIRS)/%.F
+ifndef ALIQUIET
+               @echo "***** Making dependencies for $< *****";
+endif
+               @(if [ ! -d '$(dir $@)' ]; then echo "***** Making directory $(dir $@) *****"; mkdir -p $(dir $@); fi;)
+               $(MUTE)share/alibtool dependF "$(FMDELIBSDIR) $(FMDINC) $(DEPINC)  $<" > $@
+$(MODDIRO)/%.d: $(MODDIRS)/%.c
+ifndef ALIQUIET
+               @echo "***** Making dependencies for $< *****";
+endif
+               @(if [ ! -d '$(dir $@)' ]; then echo "***** Making directory $(dir $@) *****"; mkdir -p $(dir $@); fi;)
+               @share/alibtool depend "$(FMDDEFINE) $(FMDELIBSDIR) $(FMDINC) $(DEPINC) $<" > $@
+
+FMDCHECKS := $(patsubst %.cxx,FMD/check/%.viol,$(SRCS))
+
+check-FMD: $(FMDCHECKS)
+
+# IRST coding rule check 
+FMD/check/%.i : FMD/%.cxx
+       @[ -d $(dir $@) ] || mkdir -p $(dir $@)
+       $(MUTE)$(CXX) -E $(FMDDEFINE) $(FMDINC) $< > $@ $(FMDCXXFLAGS)
+       @cd $(dir $@) ; $(IRST_INSTALLDIR)/patch/patch4alice.prl $(notdir $@)
+
+# IRST coding rule check
+FMD/check/%.viol : FMD/check/%.i
+       @cd FMD ; [ -r FMD ] || ln -s ../FMD FMD
+       -@echo $@ ; $(CODE_CHECK) $< ./FMD > $@
+
+FMDPREPROC       = $(patsubst %.viol,%.i,$(FMDCHECKS))
+
+FMDREVENGS       = $(patsubst %.viol,%.ii,$(FMDCHECKS))
+
+.SECONDARY: $(FMDREVENGS) $(FMDPREPROC)
+
+reveng-FMD:            FMD/check/classDiagram.dot
+
+FMD/check/classDiagram.dot:    $(FMDPREPROC)
+       @$(REV_ENG) $^
+       @-mv classDiagram.dot $@
+
+revdisp-FMD:   reveng-FMD
+       @echo revdisp for FMD
+       @cd FMD/check ; \
+      $(IRST_INSTALLDIR)/webreveng/create-class-diagram-pages.sh
+       @sed -e "s/\@PACKAGE\@/FMD/g" < $(ALICE_ROOT)/build/HomePage.html > FMD/check/HomePage.html
+
+
+#  Clean option for the whole module
+clean-FMD:
+ifndef ALIQUIET
+               @echo "***** Cleaning FMD *****"
+endif
+               $(MUTE)rm FMD/module.mk
+               $(MUTE)rm -rf FMD/tgt_$(ALICE_TARGET) 
+               $(MUTE)rm -f $(FMDLIBS)
+               $(MUTE)rm -f $(FMDBINS)
+
+clean-check-FMD:
+ifndef ALIQUIET
+               @echo "***** Cleaning code check for FMD *****"
+endif
+               $(MUTE)rm -f FMD/check/*.i FMD/check/*.ii FMD/check/*.viol
+
+clean-reveng-FMD:
+ifndef ALIQUIET
+               @echo "***** Cleaning reverse engineering files for FMD *****"
+endif
+               $(MUTE)rm -f FMD/check/*.dot
+