Print

Print


Hello Sebouh,

It sounds like we are not looking at the same code. The hps-dst_Issue44 code reads:

  try{
    hits = (IMPL::LCCollectionVec*) event->getCollection(hits_collection_name);
  }catch(...){
    hits = NULL;
  }
  if( hits == NULL){
    hits_collection_name = "EcalCalHits";
    try{
      hits = (IMPL::LCCollectionVec*) event->getCollection(hits_collection_name);
    }catch(...){
      hits = NULL;
    }
    if( hits ==  NULL){
      std::cerr << "Neither TimeCorrEcalHits nor EcalCalHits collections were found. Abort. \n";
      return;
    }
  }

This is in some sense equivalent to what you suggest, however, it calls getCollection only once and it properly catches the exceptions that occur if the collection does not exist. If you don’t catch that exception, the code aborts and does not go on to try the EcalCalHits.

Best,
Maurik







On Sep 21, 2016, at 9:56 PM, Sebouh Paul <[log in to unmask]> wrote:

you forgot to put in the part where it tests if the TimeCorrEcalHits exists in the lcio file, and uses it instead of EcalCalHits if the former exists.  I just made that change in my local copy.  

  if(event->getCollection("TimeCorrEcalHits") != NULL)

  hits = (IMPL::LCCollectionVec*) event->getCollection("TimeCorrEcalHits");

  else

  hits = (IMPL::LCCollectionVec*) event->getCollection(hits_collection_name);



After making this change, the DST i generated looks good now.  2 cluster time difference looks like what i expect it to be, so this is good.  

On Wed, Sep 21, 2016 at 9:31 PM, Nathan Baltzell <[log in to unmask]> wrote:
I expect we'll definitely be reverting A to keep collection name unchanged.
But still a useful test of B.

-Nathan


On Sep 21, 2016, at 9:14 PM, Maurik Holtrop <[log in to unmask]> wrote:

> Hello Sebouh, all,
>
> Could you please try the updated version of hps-dst on the hps-dst_Issue44 branch on GitHub?
>
> (i.e. in your source directory: git pull; git checkout hps-dst_Issue44; then rebuild the dst-maker )
>
> That version should:
>
> A) Test to see of the TimeCorrEcalHits exist in the lcio file. If it does, use it, if it does not, fall back to EcalCalHits.
> B) Use an std::pair<int,int> for the map key, with the first int the id0 of the hit and the second int 10*getTime(). This should uniquely identify any hit.
>
> Please let me know if you still see any issue with that version.
>
> Tomorrow in the software meeting we will discuss if we are going to keep the “TimeCorrEcalHits” collection, but either way, I think the version I just put up should work.
>
> Best,
>       Maurik
>
>
>> On Sep 21, 2016, at 3:26 PM, Maurik Holtrop <[log in to unmask]> wrote:
>>
>> Yes. 1) They “should” be there. 2) If you want to check anything regarding ECAL you need all the hits, 3) The previous scheme would write shared hits twice.
>> I am the one who needed this, as I was checking the clustering, looking for photons.
>>
>> Furthermore, the 2016 recon was changed. The new recon changed the name of the corrected Ecal hits to “TimeCorrEcalHits", so if you now want to analyze that data, whether with the DST or directly, you need to use this new name. I don’t think that is a good idea, I think it is confusing. I agree with Nathan that we should revert to the old name, “EcalCalHits”.
>>
>> Best,
>>      Maurik
>>
>>
>>
>>> On Sep 21, 2016, at 3:08 PM, Omar Moreno <[log in to unmask]> wrote:
>>>
>>> Maurik, was there a reason that you decided to add all Ecal hits in an event to the DST?  Did someone request it or did you just feel like they needed to be in there?  The reason I ask is because if everyone is OK with just having hits associated with clusters, then we can just revert the code to what I originally had and just apply a fix for the repeated hits.  This can be easily done using a single map, without the need of using Cell ID's.  The original version of the code worked with both the 2015 and 2016 recon so there will be no need to make changes to the LCIO recon.
>>>
>>> On Wed, Sep 21, 2016 at 11:43 AM, Maurik Holtrop <[log in to unmask]> wrote:
>>> Hello Sebouh,
>>>
>>> Thank you for looking further into this. It is very useful debugging too.
>>>
>>> Unfortunately, I don’t think it is quite so simple as using the other collection. The Engrun2015 data does not have the TimeCorrEcalHits collection at all, it only has EcalCalHits. So if you switch the collection that is being used to TimeCorrEcalHits, you now break the older passes and all the 2015 data.
>>>
>>> Perhaps it is better for us to fix the Java code so that it does not introduce yet another collection of Ecal hits?
>>> ​ ​
>>>
>>> Also, I thought that the CellID0 identified a hit uniquely, but as you point out, that was a misunderstanding. The SVT code uses a similar scheme to build the map to the hits.  I should look into that part of the code as well. Instead of using two maps, with a second “overflow” map, it would be better design to use a single map where each hit has a unique identification. I can look into what would work best. Perhaps some combination of the id0 and the time.
>>>
>>> ​When I wrote the SVT code, I made distributions to make sure things worked as expected.  ​ ​Please don't touch that code ... ​
>>>
>>> So please wait with a commit until we can figure out what is the best path forward.
>>>
>>> Best,
>>>     Maurik
>>>
>>>> On Sep 21, 2016, at 2:16 PM, Sebouh Paul <[log in to unmask]> wrote:
>>>>
>>>> Two things I've found
>>>> 1)  The collection name of the Ecal hits with corrections on the hit times is "TimeCorrEcalHits".   "EcalCalHits" does not have these corrections (see EcalTimeCorrectionDriver.java , which is the driver that makes these corrections)
>>>> 2)  8.7% of the hits are duplicates (second hits) on the same crystal, so sometimes using the map<int, EcalHit*> will give us the wrong hit.
>>>>
>>>> The attached file contains corrections for both of those two problems.  Maurik and Omar, do I have your permission to check these changes into the git repository?
>>>>
>>>>
>>>>
>>>>
>>>> On Wed, Sep 21, 2016 at 10:07 AM, Nathan Baltzell <[log in to unmask]> wrote:
>>>> Hi Maurik,
>>>>
>>>> Well, I think we probably should instead change recon (probably only steering files
>>>> are necessary) so the corrected hit collection name is back to what it used to be,
>>>> instead of changing the dst-maker.  People (and the dst-maker previously) usually
>>>> get to the hits via the clusters, so no one noticed a problem, but changing a
>>>> collection's name is asking for trouble ...
>>>>
>>>> -Nathan
>>>>
>>>>
>>>> On Sep 21, 2016, at 10:01, Maurik Holtrop <[log in to unmask]> wrote:
>>>>
>>>> > Hello Nathan, Sebouh, DST users,
>>>> >
>>>> > My bad. I apologize for incorrectly linking the ECAL hits from the DST to the EcalCalHits collection, which contrary to my understanding, seems to not contain the corrected hits. I will fix this problem as soon as I have figured out where the corrected hits are stored.
>>>> >
>>>> > I do think that the DST needs to contain the full collection of hits and not only the hits used by clusters, and certainly it should not store the same hit twice. Some some change in the DST is needed from the early behavior.
>>>> >
>>>> > I would appreciate it if someone could please point me to the documentation or the code that does the Ecal hit corrections, so I can figure out what it does and where it stores the output. See my email from yesterday about “CopyClusterCollectionDriver”.
>>>> >
>>>> > Thanks,
>>>> >       Maurik
>>>> >
>>>> >
>>>> >> On Sep 21, 2016, at 6:28 AM, Nathan Baltzell <[log in to unmask]> wrote:
>>>> >>
>>>> >> Hi All,
>>>> >>
>>>> >> It looks like at least 2 things happened that are contributing to what
>>>> >> Sebouh sees:
>>>> >>
>>>> >> 1. Prior to the release 3-9 used for 2016 pass0, ecal recon was modified
>>>> >> to have a separate driver do hit time corrections (a first step in the
>>>> >> suggested code cleanup from a while a ago).  It makes a hit collection
>>>> >> with a *new* name used by clustering.
>>>> >>
>>>> >> 2. Something was late changed in how dst-maker reads ecal hits.
>>>> >>
>>>> >> Somehow, after #1 but before #2 dsts were still ok.  Seems #1, for backward
>>>> >> compatibility, should be changed to output hit collection of same name as
>>>> >> before, or modify the input hit collection in-place.
>>>> >>
>>>> >> -Nathan
>>>> >>
>>>> >>
>>>> >>
>>>> >>
>>>> >> On Sep 20, 2016, at 4:09 PM, Maurik Holtrop <[log in to unmask]> wrote:
>>>> >>
>>>> >>> Hello ECAL folks,
>>>> >>>
>>>> >>> I am mightily confused about our Ecal collections in LCIO. Without reading a ton of code, could someone please help me sort some things out here?
>>>> >>>
>>>> >>> According to the Confluence page:
>>>> >>>
>>>> >>> EcalClustersCorr    Cluster CopyClusterCollectionDriver
>>>> >>> reconstructed ECal clusters with corrected energies
>>>> >>>
>>>> >>> This is very confusing. The driver “CopyClusterCollectionDriver” is supposed to just copy a collection, not also make corrections to the timing and energy, and indeed, it doesn’t seem to, so then EcalClustersCorr and EcalClusters are identical, or not? If they are the same, why? If not the same, how?
>>>> >>>
>>>> >>> I just confirmed that the hits that written in the “EcalClustersCorr” collection are NOT the same as those in EcalCalHits, when these hits have the same ID. So that puzzles me. Where are those hits changed? What collection are the corrected hits in?
>>>> >>>
>>>> >>> The “ReconClusterer” (nicely commented and quite readable code, thank you) that made the EcalClusters collection uses the EcalCalHits and does not appear to make any corrections to them. Am I wrong?
>>>> >>>
>>>> >>> Any help here would be appreciated. We can update the Confluence page with the answers.
>>>> >>>
>>>> >>> Best,
>>>> >>>     Maurik
>>>> >>>
>>>> >>>
>>>> >>>> On Sep 20, 2016, at 2:54 PM, Maurik Holtrop <[log in to unmask]> wrote:
>>>> >>>>
>>>> >>>> Hello Omar and Sebouh,
>>>> >>>>
>>>> >>>> I will look into the issue of the hits timing, and directly compare the various collections we have in LCIO. Give me a little time though.
>>>> >>>>
>>>> >>>> In the LCIO files, I can find the EcalReadoutHit (sounds like it is “raw” hit from Ecal) and hte EcalCalHit. According to the driver “EcalRawConverterDriver” the EcalCalHit is the output (and EcalReadoutHit the input), so it seems to me that is the one to use. Also, on Confluence:
>>>> >>>>
>>>> >>>> EcalCalHits        CalorimeterHit  EcalRawConverterDriver  calibrated ECal Hits
>>>> >>>>
>>>> >>>> Documentation is pretty sparse though, so correct me if I am wrong and need to use a different collection. I find the large number of collection more than a little confusing at times.
>>>> >>>>
>>>> >>>> Best,
>>>> >>>>    Maurik
>>>> >>>>
>>>> >>>>
>>>> >>>>
>>>> >>>>> On Sep 20, 2016, at 1:51 PM, Omar Moreno <[log in to unmask]> wrote:
>>>> >>>>>
>>>> >>>>>
>>>> >>>>> ​Originally, as Maurik said, the DST maker only wrote Ecal hits associated with a corrected Ecal cluster (i.e. cluster->getCalorimeterHits();)  With Maurik's changes, all Ecal hits written to the DST now come from the collection "EcalCalHits".  The cluster time comes from the seed hit of the cluster so if there was a correction applied to the seed that wasn't propagated to the original EcalCalHits collection, then this might be the issue.  This might be the reason why I didn't write all of the Ecal hits to the DST maker to begin with but I don't remember.
>>>> >>>>>
>>>> >>>>> Maurik,  did you look at distributions of Ecal clusters variables before and after your changes in order to make sure that there wasn't any changes?  If not, then we should revert all of your changes and do these checks.
>>>> >>>>>
>>>> >>>>>
>>>> >>>>> On Sep 20, 2016 9:59 AM, "Sebouh Paul" <[log in to unmask]> wrote:
>>>> >>>>> To get technical, I did not look at the recon LCIO files directly, but rather generated DQM from them.  And the DQM did not look different between the two files.  Now what Nathan had suggested was that possibly the DST maker is reading the hits from a different collection than it was reading from before, for instance uncallibrated hits instead of callibrated hits?
>>>> >>>>>
>>>> >>>>> On Tue, Sep 20, 2016 at 11:21 AM, Omar Moreno <[log in to unmask]> wrote:
>>>> >>>>> Just to make sure, this behavior isn't observed looking at the recon LCIO files correct?
>>>> >>>>>
>>>> >>>>>
>>>> >>>>> On Sep 20, 2016 7:59 AM, "Sebouh Paul" <[log in to unmask]> wrote:
>>>> >>>>> Without pulse fitting, or the mode7 emulation, all of the hit times would be at times that are multiples of 4 ns, corresponding to the time of the first sample crossing the threshold.  However, we use a pulse fitting algorithm, which improves our resolution on timing for the hit, as well as time-walk corrections.  If a fit fails the pulse fitting and the mode-7 emulation, then we use the time of the first sample that crosses the threshold.   In the "bad files" we see a lot of low energy hits with multiples of 4ns times, which probably failed both these two methods of time reconstruction.
>>>> >>>>>
>>>> >>>>> There is also another thing in here I forgot to mention:  there is also a shift in the timing window of when multiple hits are, between the "bad" files and the "good" files. What i mean is, you'll see a peak in hit time, corresponding to the trigger window.  This peak is shifted between files generated using the old version of the  DST and the new version.
>>>> >>>>>
>>>> >>>>> On Tue, Sep 20, 2016 at 10:47 AM, Maurik Holtrop <[log in to unmask]> wrote:
>>>> >>>>> Hello Sebouh,
>>>> >>>>>
>>>> >>>>> There was a bug in the DST maker where it would only write ECAL hits that were part of a cluster, and if a hit appeared in two clusters, it would write that hit twice. This is not the correct behavior. I fixed this in Issue44 (https://github.com/JeffersonLab/hps-dst/issues/44) and then merged to master.
>>>> >>>>>
>>>> >>>>> So, #1, is because now the unrelated and out of time hits are also in the DST.
>>>> >>>>> I don’t think this explains #2.
>>>> >>>>> #3 Since the FADC samples at 250Mhz, I would expect all ECAL hit times to be at multiples of 4ns, but perhaps I am missing something?
>>>> >>>>>
>>>> >>>>> Best,
>>>> >>>>>   Maurik
>>>> >>>>>
>>>> >>>>>> On Sep 20, 2016, at 9:37 AM, Sebouh Paul <[log in to unmask]> wrote:
>>>> >>>>>>
>>>> >>>>>> Has anyone made modifications to the DST maker since pass0 began in June 6? Nathan ran recon and DST maker on some files at the beginning of August, and there are some problems with the DST files produced:
>>>> >>>>>>
>>>> >>>>>> 1)  1.5x more ecal hits per event than in DST files generated in pass0.
>>>> >>>>>> 2)  two cluster time difference has a much larger sigma than usual.
>>>> >>>>>> 3)  many ecal hits have hit times that are exact multiples of 4 ns.
>>>> >>>>>>
>>>> >>>>>> I ran DQM on the corresponding LCIO files, and saw none of these effects, so the problem must be in the DST maker.
>>>> >>>>>>
>>>> >>>>>> thanks.
>>>> >>>>>>
>>>> >>>>>> Use REPLY-ALL to reply to list
>>>> >>>>>>
>>>> >>>>>> To unsubscribe from the HPS-SOFTWARE list, click the following link:
>>>> >>>>>> https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=HPS-SOFTWARE&A=1
>>>> >>>>>>
>>>> >>>>>
>>>> >>>>>
>>>> >>>>> Use REPLY-ALL to reply to list
>>>> >>>>>
>>>> >>>>> To unsubscribe from the HPS-SOFTWARE list, click the following link:
>>>> >>>>> https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=HPS-SOFTWARE&A=1
>>>> >>>>>
>>>> >>>>>
>>>> >>>>>
>>>> >>>>> Use REPLY-ALL to reply to list
>>>> >>>>>
>>>> >>>>> To unsubscribe from the HPS-SOFTWARE list, click the following link:
>>>> >>>>> https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=HPS-SOFTWARE&A=1
>>>> >>>>>
>>>> >>>>>
>>>> >>>>
>>>> >>>
>>>> >>>
>>>> >>> Use REPLY-ALL to reply to list
>>>> >>>
>>>> >>> To unsubscribe from the HPS-SOFTWARE list, click the following link:
>>>> >>> https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=HPS-SOFTWARE&A=1
>>>>
>>>>
>>>> <EcalDataWriter.cxx>
>>>
>>>
>>> Use REPLY-ALL to reply to list
>>>
>>> To unsubscribe from the HPS-SOFTWARE list, click the following link:
>>> https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=HPS-SOFTWARE&A=1
>>>
>>>
>>
>>
>> Use REPLY-ALL to reply to list
>>
>> To unsubscribe from the HPS-SOFTWARE list, click the following link:
>> https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=HPS-SOFTWARE&A=1
>>
>
>
> Use REPLY-ALL to reply to list
>
> To unsubscribe from the HPS-SOFTWARE list, click the following link:
> https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=HPS-SOFTWARE&A=1
>





Use REPLY-ALL to reply to list

To unsubscribe from the HPS-SOFTWARE list, click the following link:
https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=HPS-SOFTWARE&A=1