3 #include "FPCCDPixelHit.h"
8 #include <EVENT/LCCollection.h>
9 #include <IMPL/LCCollectionVec.h>
10 #include <EVENT/MCParticle.h>
11 #include <IMPL/TrackerHitImpl.h>
12 #include <gear/VXDParameters.h>
13 #include <gear/VXDLayerLayout.h>
23 using namespace lcio ;
24 using namespace marlin ;
28 static double g_x = 0.;
29 static double g_y = 0.;
30 static double g_z = 0.;
48 _description =
"anaPix icteats TTree from FPCCDPixelHits" ;
51 FloatVec PixelSizeVec;
52 for(
int i=0;i<6;i++){PixelSizeVec.push_back(0.005);}
54 registerProcessorParameter(
"Each_FPCCD_pixelSize(mm)",
55 "Each ladder's Pixel size of FPCCD (unit:mm) (default:0.005)",
59 registerProcessorParameter(
"FPCCD_PixelSize" ,
60 "Pixel size of FPCCD (unit:mm) (default: 0.005)",
75 registerProcessorParameter(
"OutputROOTfileName" ,
76 "Name of output ROOT file" ,
78 std::string(
"./pixel.root" ));
83 registerInputCollection( LCIO::LCGENERICOBJECT,
84 "VTXPixelHitCollection" ,
85 "Name of the VTX PixelHit collection" ,
87 std::string(
"VTXPixelHits") ) ;
106 hTreePix->Branch(
"event", &
g_event,
"event/I");
107 hTreePix->Branch(
"x", &
g_x,
"x/D");
108 hTreePix->Branch(
"y", &
g_y,
"y/D");
109 hTreePix->Branch(
"z", &
g_z,
"z/D");
110 hTreePix->Branch(
"layer", &
g_layer,
"layer/I");
111 hTreePix->Branch(
"ladder", &
g_ladder,
"ladder/I");
112 hTreePix->Branch(
"dE", &
g_dE,
"dE/D");
113 hTreePix->Branch(
"digi_dE", &
g_digi_dE,
"digi_dE/D");
114 hTreePix->Branch(
"quality", &
g_quality,
"quality/I");
115 hTreePix->Branch(
"multiplicity", &
g_nparents,
"multiplicity/I");
116 hTreePix->Branch(
"xi", &
g_xi,
"xi/D");
117 hTreePix->Branch(
"zeta", &
g_zeta,
"zeta/D");
118 hTreePix->Branch(
"xi2", &
g_xi2,
"xi2/D");
119 hTreePix->Branch(
"zeta2", &
g_zeta2,
"zeta2/D");
137 const gear::VXDParameters &gearVXD = Global::GEAR->getVXDParameters();
138 const gear::VXDLayerLayout &layerVXD=gearVXD.getVXDLayerLayout();
140 _nLayer = layerVXD.getNLayers() ;
145 _geodata[ly].nladder=layerVXD.getNLadders(ly);
147 _geodata[ly].rmin=layerVXD.getSensitiveDistance(ly);
149 _geodata[ly].phi0=layerVXD.getPhi0(ly);
150 _geodata[ly].sthick=layerVXD.getSensitiveThickness(ly);
151 _geodata[ly].sximin=-layerVXD.getSensitiveOffset(ly)
152 -layerVXD.getSensitiveWidth(ly)/2.0;
153 _geodata[ly].sximax=-layerVXD.getSensitiveOffset(ly)
154 +layerVXD.getSensitiveWidth(ly)/2.0;
155 _geodata[ly].hlength=layerVXD.getSensitiveLength(ly);
158 for(
int ld=0;ld<
_geodata[ly].nladder;ld++) {
175 LCCollection* pHitCol=0;
179 catch(DataNotAvailableException &
e){
181 std::cout <<
"Collection " <<
_colNameVTX.c_str() <<
" is unavailable in event "
182 <<
_nEvt << std::endl;
186 std::cout <<
" Collection =" <<
_colNameVTX <<
" nevt=" <<
_nEvt << std::endl;
187 std::cout <<
" number of elements is " << pHitCol->getNumberOfElements() << std::endl;
191 int nhit = theData.unpackPixelHits(*pHitCol);
192 if(
_debug == 1 ) { theData.dump(); }
206 for(
int layer=0;layer<
_nLayer;layer++){
207 int nladder=
_geodata[layer].nladder;
209 double sthick=
_geodata[layer].sthick;
210 double sximin=
_geodata[layer].sximin;
211 for(
int ladder=0;ladder<nladder;ladder++){
212 PixelHitMap_t::iterator it=pHitCol.itBegin(layer, ladder);
213 while( it != pHitCol.itEnd(layer, ladder) ) {
214 FPCCDPixelHit *aHit=(*it).second;
215 int xiID=aHit->getXiID();
216 int zetaID=aHit->getZetaID();
217 int quality = aHit->getQuality();
218 int nparents = aHit->getNMCParticles();
219 double Edep = aHit->getEdep();
220 double eta=sthick*0.5;
230 double electronsPerKeV = 276.;
231 int electronsPerStep = 25;
232 int nbitsForEdep = 7;
233 int nEle =
static_cast<int>(
g_dE * 1
e+06 * electronsPerKeV) ;
234 int nStep = 1 << nbitsForEdep ;
235 int count = nEle/ electronsPerStep ;
236 if(count > nStep ) count = nStep ;
237 g_digi_dE = (count * electronsPerStep) * 1
e-6 / electronsPerKeV ;
244 newpos[0]= (xi+sximin)*
_geodata[layer].sinphi[ladder]
245 + (rmin+eta)*
_geodata[layer].cosphi[ladder];
246 newpos[1]=-(xi+sximin)*
_geodata[layer].cosphi[ladder]
247 + (rmin+eta)*
_geodata[layer].sinphi[ladder];
263 int tladder = ladder;
264 double sinphi =
_geodata[tlayer].sinphi[tladder];
265 double cosphi =
_geodata[tlayer].cosphi[tladder];
266 lpos[0] = gpos[0] * sinphi - gpos[1] * cosphi + gpos[2] * 0;
267 lpos[1] = gpos[0] * cosphi + gpos[1] * sinphi + gpos[2] * 0;
268 lpos[2] = gpos[0] * 0 + gpos[1] * 0 + gpos[2] * 1;
288 streamlog_out(MESSAGE) <<
" end() " << name()
289 <<
" processed " <<
_nEvt <<
" events in " <<
_nRun <<
" runs "
virtual void processRunHeader(LCRunHeader *run)
Called for every run.
std::vector< GeoData_t > _geodata
std::string _rootFileName
virtual void processEvent(LCEvent *evt)
Called for every event - the working horse.
virtual void check(LCEvent *evt)
virtual void init()
Called at the begin of the job before anything is read.
void fillTTree(FPCCDData &pxHits)
virtual void end()
Called after data processing for clean up.