FairRoot/PandaRoot
PndEmcHdrFiller.cxx
Go to the documentation of this file.
1 //
3 // PndEmcHdrFiller
4 //
5 // Filler of PndEmcHeader
6 //
7 // Created 21/04/07 by S.Spataro
8 //
10 
11 #include "PndEmcHdrFiller.h"
12 
13 #include "PndEmcHeader.h"
14 #include "PndEmcHit.h"
15 #include "PndEmcCluster.h"
16 
17 #include "FairRootManager.h"
18 
19 #include "TClonesArray.h"
20 #include "TLorentzVector.h"
21 
22 #include <iostream>
23 
24 using std::cout;
25 using std::endl;
26 
27 // ----- Default constructor -------------------------------------------
29  FairTask("EMC Header Filler"),fHitArray(0), fDigiArray(0), fCluArray(0), fHdrArray(0)
30  {
31 }
32 // -------------------------------------------------------------------------
33 
34 // ----- Destructor ----------------------------------------------------
36 // -------------------------------------------------------------------------
37 
38 
39 
40 // ----- Public method Init --------------------------------------------
41 InitStatus PndEmcHdrFiller::Init() {
42 
43  cout << " INITIALIZATION *********************" << endl;
44 
45  // Get RootManager
46  FairRootManager* ioman = FairRootManager::Instance();
47  if ( ! ioman ) {
48  cout << "-E- PndEmcHdrFiller::Init: "
49  << "RootManager not instantiated!" << endl;
50  return kFATAL;
51  }
52 
53  // Get input array
54  fHitArray = dynamic_cast<TClonesArray *>(ioman->GetObject("EmcHit"));
55  if ( ! fHitArray ) {
56  cout << "-W- PndEmcHdrFiller::Init: "
57  << "No PndEmcHit array!" << endl;
58  }
59 
60  fDigiArray = dynamic_cast<TClonesArray *> (ioman->GetObject("EmcDigi"));
61  if ( ! fDigiArray ) {
62  cout << "-W- PndEmcHdrFiller::Init: "
63  << "No PndEmcDigi array!" << endl;
64  }
65  fCluArray = dynamic_cast<TClonesArray *> (ioman->GetObject("EmcCluster"));
66  if ( ! fCluArray ) {
67  cout << "-W- PndEmcHdrFiller::Init: "
68  << "No PndEmcCluster array!" << endl;
69  }
70 
71  // Create and register output array
72  fHdrArray = new TClonesArray("PndEmcHeader");
73 
74  ioman->Register("EmcHeader","Emc",fHdrArray,kTRUE);
75 
76  cout << "-I- PndEmcHdrFiller: Intialization successfull" << endl;
77 
78  return kSUCCESS;
79 
80 }
81 
82 
83 // -------------------------------------------------------------------------
84 
85 // ----- Public method Exec --------------------------------------------
86 void PndEmcHdrFiller::Exec(Option_t*) {
87 
88  // Initial reset of parameters
89  Double32_t fHitEnergy = 0.;
90  Double32_t fCluEnergy = 0.;
91  Int_t nHitMult = 0;
92  Int_t nDigiMult = 0;
93  Int_t nCluMult = 0;
94 
95  PndEmcHit *hit;
96  fHdrArray->Clear();
97 
98  if ( fHitArray ) // Loop over PndEmcHit points
99  {
100  for (Int_t iHit=0; iHit< (fHitArray->GetEntriesFast()) ; iHit++)
101  {
102  hit = (PndEmcHit*) fHitArray->At(iHit);
103  fHitEnergy += hit->GetEnergy();
104  nHitMult++;
105  }
106  } // end of PndEmcHit loop
107 
108  if ( fDigiArray ) // Loop over PndEmcDigi points
109  {
110  nDigiMult = fDigiArray->GetEntriesFast();
111  } // end of PndEmcDigi loop
112 
113  PndEmcCluster *cluster;
114  TLorentzVector sum_clu(0., 0., 0., 0.), single_clu(0., 0., 0., 0.);
115  TVector3 mom_clu(0., 0., 0.);
116  if ( fCluArray ) // Loop over PndEmcCluster points
117  {
118  for (Int_t iClu=0; iClu< (fCluArray->GetEntriesFast()) ; iClu++)
119  {
120  cluster = (PndEmcCluster*) fCluArray->At(iClu);
121  fCluEnergy += cluster->energy();
122  nCluMult++;
123  mom_clu.SetMagThetaPhi(cluster->energy(), cluster->theta(), cluster->phi());
124  single_clu.SetVectM(mom_clu, 0.);
125  sum_clu = sum_clu + single_clu;
126  }
127  } // end of PndEmcCluster loop
128 
129  // Register EmcHeader
130 
131  AddHit(fHitEnergy, nHitMult, nDigiMult, fCluEnergy, nCluMult, sum_clu.Vect());
132 
133 }
134 // -------------------------------------------------------------------------
135 
136 // ----- Private method AddHit --------------------------------------------
137 PndEmcHeader* PndEmcHdrFiller::AddHit(Double32_t ene_hit, Int_t mult_hit, Int_t mult_digi, Double32_t ene_clu, Int_t mult_clu, TVector3 p_clu){
138  // It fills the PndEmcHeader category
139  TClonesArray& clref = *fHdrArray;
140  Int_t size = clref.GetEntriesFast();
141  PndEmcHeader(ene_hit, mult_hit, mult_digi, ene_clu, mult_clu, p_clu).Print();
142  return new(clref[size]) PndEmcHeader(ene_hit, mult_hit, mult_digi, ene_clu, mult_clu, p_clu);
143 }
144 // ----
145 
146 
virtual void Print(const Option_t *opt="") const
virtual InitStatus Init()
TClonesArray * fHdrArray
TClonesArray * fCluArray
virtual Double_t GetEnergy() const
Definition: PndEmcHit.h:54
a cluster (group of neighboring crystals) of hit emc crystals
Definition: PndEmcCluster.h:29
represents the deposited energy of one emc crystal from simulation
Definition: PndEmcHit.h:26
virtual Double_t energy() const
ClassImp(PndAnaContFact)
TClonesArray * fHitArray
Double_t theta() const
PndSdsMCPoint * hit
Definition: anasim.C:70
Double_t phi() const
Task to create Emc header.
virtual void Exec(Option_t *opt)
PndEmcHeader * AddHit(Double32_t ene_hit, Int_t mult_hit, Int_t mult_digi, Double32_t ene_clu, Int_t mult_clu, TVector3 p_clu)
TClonesArray * fDigiArray