@@ -54,6 +54,10 @@ namespace lightana
5454 fhicl::Comment (" Group velocity for VIS photons" )
5555 };
5656
57+ fhicl::Atom<bool > fDataCalibration {
58+ fhicl::Name (" DataCalibration" ),
59+ fhicl::Comment (" Running on data" )
60+ };
5761 };
5862
5963 // Default constructor
@@ -79,6 +83,9 @@ namespace lightana
7983 double fVGroupVIS ;
8084 double fVGroupVUV_I ;
8185
86+ // Whether to use data calibration for drift distance estimation
87+ bool fDataCalibration ;
88+
8289 // Geo properties
8390 double fDriftDistance ;
8491 double fVISLightPropTime ;
@@ -168,28 +175,47 @@ namespace lightana
168175 }
169176 }
170177
178+ double pmtratio=-1 .;
171179 // compute PMTRatio metric
172- double PECoated=0 , PEUncoated=0 ;
173- for (size_t boxID=0 ; boxID<fPDSBoxIDs .size (); boxID++){
174- // we need the uncoated PMT in each window and at least one coated
175- if ( BoxMap_NUncoatedCh[boxID]==1 && BoxMap_NCoatedCh[boxID]>=1 ){
176- double CoWeight = 1 ./BoxMap_NCoatedCh[boxID];
177- PECoated+=CoWeight * BoxMap_PECoated[boxID];
178- PEUncoated+=BoxMap_PEUncoated[boxID];
180+ if (fDataCalibration )
181+ {
182+ double TotalPE=0 ;
183+ double RatioPerBoxWeight=0 ;
184+ for (size_t boxID=0 ; boxID<fPDSBoxIDs .size (); boxID++){
185+ double RatioPerBox;
186+ double PECoated=0 , PEUncoated=0 ;
187+ // we need the uncoated PMT in each window and at least one coated
188+ if ( BoxMap_NUncoatedCh[boxID]==1 && BoxMap_NCoatedCh[boxID]>=1 ){
189+ PECoated+= BoxMap_PECoated[boxID];
190+ PEUncoated+=BoxMap_PEUncoated[boxID];
191+ TotalPE += PECoated + PEUncoated;
192+ RatioPerBox = (PEUncoated/PECoated)*BoxMap_NCoatedCh[boxID];
193+ RatioPerBoxWeight += RatioPerBox * (PECoated + PEUncoated);
194+ }
179195 }
196+ if (TotalPE!=0 ) pmtratio = RatioPerBoxWeight/TotalPE;
197+ }
198+ else {
199+ double PECoated=0 , PEUncoated=0 ;
200+ for (size_t boxID=0 ; boxID<fPDSBoxIDs .size (); boxID++){
201+ // we need the uncoated PMT in each window and at least one coated
202+ if ( BoxMap_NUncoatedCh[boxID]==1 && BoxMap_NCoatedCh[boxID]>=1 ){
203+ double CoWeight = 1 ./BoxMap_NCoatedCh[boxID];
204+ PECoated+=CoWeight * BoxMap_PECoated[boxID];
205+ PEUncoated+=BoxMap_PEUncoated[boxID];
206+ }
207+ }
208+ if (PECoated!=0 ) pmtratio = PEUncoated/PECoated;
180209 }
181210
182- if (PECoated!=0 ){
183- double pmtratio = PEUncoated/PECoated;
184-
211+ if (pmtratio!=-1 ){
185212 double drift_distance;
186213 if (pmtratio<=fPMTRatioCal [0 ])
187214 drift_distance=fDriftCal [0 ];
188215 else if (pmtratio>=fPMTRatioCal [fNCalBins -1 ])
189216 drift_distance=fDriftCal [fNCalBins -1 ];
190217 else
191218 drift_distance=Interpolate (pmtratio);
192-
193219 return drift_distance;
194220 }
195221 else return fDriftCal [fNCalBins -1 ];
@@ -216,11 +242,11 @@ namespace lightana
216242
217243 size_t upix = std::upper_bound (fPMTRatioCal .begin (), fPMTRatioCal .end (), val)-fPMTRatioCal .begin ();
218244
219- double slope = ( fDriftCal [upix]-fDriftCal [upix] ) / ( fPMTRatioCal [upix]-fPMTRatioCal [upix-1 ] );
245+ double slope = ( fDriftCal [upix]-fDriftCal [upix- 1 ] ) / ( fPMTRatioCal [upix]-fPMTRatioCal [upix-1 ] );
220246
221247 return fDriftCal [upix-1 ] + slope * ( val - fPMTRatioCal [upix-1 ] );
222248 }
223249
224250}
225251
226- DEFINE_ART_CLASS_TOOL (lightana::DriftEstimatorPMTRatio)
252+ DEFINE_ART_CLASS_TOOL (lightana::DriftEstimatorPMTRatio)
0 commit comments