fIdSens3 = 0;
fIdSens4 = 0;
fIdSens5 = 0;
- fMerger = 0;
+ // fMerger = 0;
SetMarkerColor (kRed);
}
// FMD define the different volumes
new TRotMatrix ("rot901", "rot901", 90, 0, 90, 90, 180, 0);
- new TTUBE ("S_FMD0", "FMD volume 0", "void", 3.5, 16.8, 1.5);
+ 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", 22., 34.9, 1.5);
+ 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.1, "");
+ 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", 3.5, 16.8, 1.5);
+ 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, -62.8, "");
+ 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", 22., 34.9, 1.5);
+ 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.1, "");
+ 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", 3.5, 16.8, 1.5);
+ 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, -345, "");
+ node = new TNode ("FMD4", "FMD4", "S_FMD4", 0, 0, -340, "");
node->SetLineColor (kColorFMD);
fNodes->Add (node);
}
MakeBranchInTree(gAlice->TreeD(),
branchname,&fDigits,
kBufferSize, file);
+ cout<<" tree "<<gAlice->TreeD()<<" "<<branchname<<" "<<&fDigits<<endl;
}
if (cR){
MakeBranchInTree(gAlice->TreeR(),
//---------------------------------------------------------------------
-void AliFMD::SetRingsSi1(Int_t ringsSi1)
+void AliFMD::SetRingsSi1(Int_t ringsSi1=256)
{
// fRingsSi1=ringsSi1;
fRingsSi1=256;
}
-void AliFMD::SetSectorsSi1(Int_t sectorsSi1)
+void AliFMD::SetSectorsSi1(Int_t sectorsSi1=20)
{
fSectorsSi1=20;
}
-void AliFMD::SetRingsSi2(Int_t ringsSi2)
+void AliFMD::SetRingsSi2(Int_t ringsSi2=128)
{
fRingsSi2=128;
}
-void AliFMD::SetSectorsSi2(Int_t sectorsSi2)
+void AliFMD::SetSectorsSi2(Int_t sectorsSi2=40)
{
fSectorsSi2=40;
}
//---------------------------------------------------------------------
-
+/*
void AliFMD::SDigits2Digits()
{
cout<<"AliFMD::SDigits2Digits"<<endl;
if (!fMerger) {
fMerger = new AliFMDMerger();
}
+
fMerger ->SetRingsSi1(fRingsSi1);
fMerger->SetRingsSi2(fRingsSi2);
fMerger ->SetSectorsSi1(fSectorsSi1);
fMerger ->SetSectorsSi2(fSectorsSi2);
+
fMerger->Init();
cout<<"AliFMD::SDigits2Digits Init"<<endl;
fMerger->Digitise();
cout<<"AliFMD::SDigits2Digits Digitise() "<<endl;
-}
-//---------------------------------------------------------------------
+ }
+
+ //---------------------------------------------------------------------
void AliFMD::SetMerger(AliFMDMerger* merger)
{
// Set pointer to merger
// Return pointer to merger
return fMerger;
}
-
+*/
//---------------------------------------------------------------------
cout<<"ALiFMD::Hits2SDigits> start...\n";
//#endif
- char * fileSDigits = 0 ;
+ 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("") ;
- sd->Print("");
-
+
delete sd ;
}
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);
+ }
+}
#include "AliDetector.h"
#include "TString.h"
-#include "AliFMDMerger.h"
+#include "TBranch.h"
+//#include "AliFMDMerger.h"
#include "AliFMDSDigitizer.h"
class TFile;
class TTree;
- class AliFMDMerger;
+// class AliFMDMerger;
class AliFMD : public AliDetector {
public:
virtual Int_t IsVersion() const =0;
virtual void Init();
virtual void MakeBranch(Option_t *opt=" ",const char *file=0);
+ virtual void MakeBranchInTreeD(TTree *treeD, const char *file=0);
virtual void SetTreeAddress();
virtual void ResetHits();
virtual void ResetDigits();
virtual void DrawDetector()=0;
virtual void StepManager() {}
- // Granularity
- virtual void SetRingsSi1(Int_t ringsSi1);
- virtual void SetSectorsSi1(Int_t sectorsSi1);
- virtual void SetRingsSi2(Int_t ringsSi2);
- virtual void SetSectorsSi2(Int_t sectorsSi2);
+ // Granularity
+ virtual void SetRingsSi1(Int_t ringsSi1=256);
+ virtual void SetSectorsSi1(Int_t sectorsSi1=20);
+ virtual void SetRingsSi2(Int_t ringsSi2=128);
+ virtual void SetSectorsSi2(Int_t sectorsSi2=40);
+ void SetEventNumber(Int_t i) {fEvNrSig = i;}
void Eta2Radius(Float_t, Float_t, Float_t*);
void Hits2SDigits();//
void Digits2Reco();
-
+ virtual void SetHitsAddressBranch(TBranch *b){b->SetAddress(&fHits);}
+
// Digitisation
TClonesArray *SDigits() const {return fSDigits;}
-// virtual void SDigits2Digits();
- virtual void SDigits2Digits();
- virtual void SetMerger(AliFMDMerger* merger);
- virtual AliFMDMerger* Merger();
TClonesArray *ReconParticles() const {return fReconParticles;}
- Int_t fNevents ; // Number of events to digitize
protected:
Int_t fIdSens1; //Si sensetive volume
Int_t fRingsSi2; // Number of rings
Int_t fSectorsSi2; // Number of sectors
+ Int_t fNevents ; // Number of events to digitize
+ Int_t fEvNrSig; // signal event number
- AliFMDMerger *fMerger; // ! pointer to merger
+ // AliFMDMerger *fMerger; // ! pointer to merger
TClonesArray *fSDigits ; // List of summable digits
TClonesArray *fReconParticles;
// if (GetDebug()>2)
// cerr<<"AliFMDDigitizer::AliFMDDigitizer"
// <<"(AliRunDigitizer* manager) was processed"<<endl;
-
}
//------------------------------------------------------------------------
AliFMDDigitizer::~AliFMDDigitizer()
{
// Destructor
- if(fSDigits) {
- fSDigits->Delete();
- delete fSDigits ;
- fSDigits = 0;
- }
}
//------------------------------------------------------------------------
cout<<"AliFMDDigitizer::>SDigits2Digits start...\n";
#endif
- AliFMD * FMD = (AliFMD *) gAlice->GetDetector("FMD") ;
- cout<<" FMD "<<FMD<<endl;
- if (gAlice->TreeD () == 0)
- gAlice->MakeTree ("D");
- fDigits = FMD->Digits();
-
+ // cout<<" FMD "<<FMD<<endl;
- Int_t chargeSum[10][50][300];
+ Int_t volume, sector, ring, charge;
+ Float_t e;
+ Float_t de[10][50][300];
+ Int_t hit;
Int_t digit[5];
Int_t ivol, iSector, iRing;
for (Int_t i=0; i<10; i++)
for(Int_t j=0; j<50; j++)
for(Int_t ij=0; ij<300; ij++)
- chargeSum[i][j][ij]=0;
+ de[i][j][ij]=0;
Int_t NumberOfRings[5]=
{256,128,256,128,256};
Int_t NumberOfSectors[5]=
{20,40,20,40,20};
+ AliFMDhit *fmdHit=0;
+ TTree *TH=0;
+ TBranch *brHits=0;
+ // fHits = new TClonesArray ("AliFMDhit", 1000);
+
+ AliFMD * fFMD = (AliFMD *) gAlice->GetDetector("FMD") ;
// Loop over files to digitize
- for (Int_t inputFile=0; inputFile<fManager->GetNinputs();
+ Int_t nFiles=GetManager()->GetNinputs();
+ for (Int_t inputFile=0; inputFile<nFiles;
inputFile++) {
- ReadDigit( chargeSum, inputFile);
+ cout<<" event "<<fManager->GetOutputEventNr()<<endl;
+ if (fFMD)
+ {
+ TClonesArray *FMDhits = fFMD->Hits ();
+ TH = fManager->GetInputTreeH(inputFile);
+ brHits = TH->GetBranch("FMD");
+ if (brHits) {
+ fFMD->SetHitsAddressBranch(brHits);
+ }else{
+ cerr<<"EXEC Branch FMD hit not found"<<endl;
+ exit(111);
+ }
+ Int_t ntracks = (Int_t) TH->GetEntries();
+
+ for (Int_t track = 0; track < ntracks; track++)
+ {
+ brHits->GetEntry(track);
+ Int_t nhits = FMDhits->GetEntries ();
+
+ for (hit = 0; hit < nhits; hit++)
+ {
+ fmdHit = (AliFMDhit *) FMDhits->UncheckedAt (hit);
+
+ volume = fmdHit->Volume ();
+ sector = fmdHit->NumberOfSector ();
+ ring = fmdHit->NumberOfRing ();
+ e = fmdHit->Edep ();
+ de[volume][sector][ring] += e;
+
+ } //hit loop
+ } //track loop
+ } //if FMD
- }
+
// Put noise and make ADC signal
- for ( ivol=1; ivol<=5; ivol++){
+ Float_t I = 1.664 * 0.04 * 2.33 / 22400; // = 0.69e-6;
+ for ( ivol=1; ivol<=5; ivol++){
for ( iSector=1; iSector<=NumberOfSectors[ivol-1]; iSector++){
for ( iRing=1; iRing<=NumberOfRings[ivol-1]; iRing++){
digit[0]=ivol;
digit[1]=iSector;
digit[2]=iRing;
- digit[3]=PutNoise(chargeSum[ivol][iSector][iRing]);
- if(chargeSum[ivol][iSector][iRing] <= 500) digit[3]=500;
+ charge = Int_t (de[ivol][iSector][iRing] / I);
+ digit[3]=PutNoise(charge);
+ if(digit[3]<= 500) digit[3]=500;
//dynamic range from MIP(0.155MeV) to 30MIP(4.65MeV)
//1024 ADC channels
Float_t channelWidth=(22400*50)/1024;
digit[4]=Int_t(digit[3]/channelWidth);
if (digit[4]>1024) digit[4]=1024;
- FMD->AddDigit(digit);
-
+ fFMD->AddDigit(digit);
} //ivol
} //iSector
} //iRing
+
TTree* treeD = fManager->GetTreeD();
+ treeD->Clear();
treeD->Reset();
- FMD->MakeBranch("D");
+ fFMD->MakeBranchInTreeD(treeD);
treeD->Fill();
fManager->GetTreeD()->Write(0,TObject::kOverwrite);
gAlice->ResetDigits();
-
-}
-
-//---------------------------------------------------------------------
-
-void AliFMDDigitizer::ReadDigit(Int_t chargeSum[][50][300], Int_t inputFile )
-{
- cout<<" AliFMDDigitizer::ReadDigit "<<endl;
- AliFMDdigit *fmddigit;
- gAlice->GetEvent(0) ;
- AliFMD * FMD = (AliFMD *) gAlice->GetDetector("FMD") ;
- Int_t ndig, k;
- gAlice->ResetDigits();
- treeS->GetEvent(0);
-
- treeS->GetEvent(0);
- TClonesArray * FMDSdigits = FMD->SDigits();
-
- ndig=FMDSdigits->GetEntries();
-
-
- for (k=0; k<ndig; k++) {
- fmddigit= (AliFMDdigit*) FMDSdigits->UncheckedAt(k);
- Int_t iVolume=fmddigit->Volume();
- Int_t iNumberOfSector =fmddigit->NumberOfSector();
- Int_t iNumberOfRing=fmddigit->NumberOfRing();
- chargeSum[iVolume][iNumberOfSector][iNumberOfRing]+=fmddigit->Charge();
}
}
-
#include "AliDigitizer.h"
class AliRunDigitizer;
-
+//class AliFMD;
+class AliFMDdigit;
+class AliFMDhit;
class AliFMDDigitizer : public AliDigitizer {
public:
AliFMDDigitizer(AliRunDigitizer * manager);
virtual ~AliFMDDigitizer();
virtual Bool_t Init();
-
+
// Do the main work
void Exec(Option_t* option=0) ;
Int_t PutNoise(Int_t charge){return (Int_t)(gRandom->Gaus(charge,500));}
- TClonesArray *SDigits() const {return fSDigits;}
+ TClonesArray *Digits() const {return fDigits;}
+ TClonesArray *Hits() const {return fHits;}
- void ReadDigit(Int_t a[][50][300], Int_t);
enum {kBgTag = -1};
private:
- TClonesArray *fDigits; // ! array with digits
- TClonesArray *fSDigits ; // List of summable digits
-
+ TClonesArray *fDigits; // ! array with digits
+ TClonesArray *fHits; // List of hits
+ AliRunDigitizer* GetManager(){return fManager;}
+
ClassDef(AliFMDDigitizer,0)
};
#endif
+
+
+
#pragma link C++ class AliFMDReconstruction+;
#pragma link C++ class AliFMDReconstParticles+;
#pragma link C++ class AliFMDMerger+;
-#pragma link C++ class AliFMDSDigitizer+;
+#pragma link C++ class AliFMDDigitizer+;
#endif
# C++ sources
-SRCS = AliFMD.cxx AliFMDv0.cxx AliFMDv1.cxx AliFMDhit.cxx AliFMDdigit.cxx AliFMDMerger.cxx AliFMDReconstruction.cxx AliFMDReconstParticles.cxx AliFMDSDigitizer.cxx
+SRCS = AliFMD.cxx AliFMDv0.cxx AliFMDv1.cxx AliFMDhit.cxx AliFMDdigit.cxx AliFMDMerger.cxx AliFMDReconstruction.cxx AliFMDReconstParticles.cxx AliFMDDigitizer.cxx
# C++ Headers
-SRCS= AliFMD.cxx AliFMDv0.cxx AliFMDv1.cxx AliFMDhit.cxx AliFMDdigit.cxx AliFMDMerger.cxx AliFMDReconstruction.cxx AliFMDReconstParticles.cxx AliFMDSDigitizer.cxx
+SRCS= AliFMD.cxx AliFMDv0.cxx AliFMDv1.cxx AliFMDhit.cxx AliFMDdigit.cxx AliFMDMerger.cxx AliFMDReconstruction.cxx AliFMDReconstParticles.cxx AliFMDDigitizer.cxx
HDRS= $(SRCS:.cxx=.h)