Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make topoclustering work with the new theta-module readout for the FCC-ee calorimeter #13

Merged

Conversation

giovannimarchiori
Copy link
Contributor

@giovannimarchiori giovannimarchiori commented Sep 27, 2023

This PR and related ones for FCCDetectors and LAr_scripts make topoclustering work with the new theta-module readout for the FCC-ee calorimeter.
This one in particular contains the new python scripts to create noise vs theta histograms, neighbour maps and noise maps. It also includes a couple of ROOT macros for printing the neighbours of the cells and to display events with hits/cells/topoclusters in the ECal barrel.

Tagging @BrieucF @gartrog @dasphy

Related PRs
HEP-FCC/k4RecCalorimeter#51
HEP-FCC/FCCDetectors#63

@giovannimarchiori
Copy link
Contributor Author

Hi @BrieucF I think this PR and the related ones are now good for review. A little remaining thing for this package as we discussed one week ago is for you to check the nmult and nmult_trace values to use in various places in create_capacitance_file_theta.py (and perhaps update the maybe misleading comment about the value of nmult)
Thanks, Giovanni

Copy link
Owner

@BrieucF BrieucF left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks Giovanni! Can you also reflect the new workflow in the README.md?

geometry/create_capacitance_file_theta.py Outdated Show resolved Hide resolved
geometry/create_capacitance_file_theta.py Outdated Show resolved Hide resolved
# latest
activeTotal = 400.5
inclinedTotal = 565.86
tracesPerLayer = [6, 1, 1, 0, 0, 1, 2, 3, 4, 5, 6, 7] # only one trace for strip layer because 4 cells instead of one
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I propose to move to the version where we extract all channels from the back

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

how should I modify this part then?

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[0, 1, 5, 6, 7, 8, ...] (For the "1" in the strip layer this could be discussed but I think we can start with this)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ok, fixed in latest commit
08c4b8d

capa_per_mm = 0.123 # pF/mm
capa_per_mm_stripLayer = 0.062 # pF/mm
# multiplicative factor
# factor two because we merge two phi cells together, another factor 2 because we have two 1) signal pad / shield capa 2) HV plate / absorber capa per cell
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It looks like there is indeed a small mistake here, I had changed this to a factor 2 instead of 4 because I moved to capacitance derived from ANSYS Maxwell which already takes into account the "factor 2 because we have two signal pad / shield capa". But for the part "HV plate / absorber capa per cell" this factor 2 should be there. It won't make a big difference but it seems not correct per se.

I propose to refactor this a bit: apply the factor 2 for the "HV plate / absorber capa per cell", then apply the factor "numberOfMergedCellsInPhi" which now depends on the layer to all capacitances. The trace capacitance is in principle already taken into account in the noise estimation.

That being said, this very detailed treatment is probably an overkill now that we now that the noise is not a big deal. Let's discuss it when possible.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do I understand correctly that the factors to apply are:

  • shield: x2 (extra factor 2 already included from ANSYS)
  • trace: x4
  • detector: x2
    ?

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi Giovanni, not exactly. I am afraid we have to refactor this code a bit if we want to have a proper treatment for an arbitrary cell merging strategy. One way to do is to have lists of multiplicative factors n_cells_merged_phi and n_cells_merged_theta which should be applied (both) to the 'final cell capacitance'. To get the final cell capacitance, just sum the detector capacitance (2 * epsilon0 * epsilonRLAr * area / distance, explicitly adding here the missing factor 2 for the fact that we have two singal pad/absorber capa per cell) and the capacitance from the shields (the value for the "shield capacitance per mm" from Maxwell should be cross-checked and re-computed with the upcoming new PCB design but you can certainly start with what is there). The contribution from the "trace" (understand here the transmission line itself) is in principle already included in Martin's noise computation.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

changed in latest commit, please have a look. I have some doubt about the shield capacitance which is quite bigger than before due to the factor n_cells_merged_theta = 4 which was missing previously

@giovannimarchiori
Copy link
Contributor Author

Thanks Giovanni! Can you also reflect the new workflow in the README.md?

README.md updated in latest commit

@BrieucF
Copy link
Owner

BrieucF commented Oct 19, 2023

Can you add readoutName="ECalBarrelPhiEta", where CaloTopoClusterFCCee is used, like this:

createTopoClusters = CaloTopoClusterFCCee("CreateTopoClusters",
                                      #positionsHECTool = HECcells,
                                      #positionsEMFwdTool = ECalFwdcells,
                                      #positionsHFwdTool = HCalFwdcells,
+                                    readoutName="ECalBarrelPhiEta",
                                      seedSigma = 4,
                                      neighbourSigma = 2,
                                      lastNeighbourSigma = 0,

to avoid breaking those config files? e.g. in runTopoAndSlidingWindowAndCaloSim.py and runClueAndTopoAndSlidingWindowAndCaloSim.py

@giovannimarchiori
Copy link
Contributor Author

Can you add readoutName="ECalBarrelPhiEta", where CaloTopoClusterFCCee is used, like this:

createTopoClusters = CaloTopoClusterFCCee("CreateTopoClusters",
                                      #positionsHECTool = HECcells,
                                      #positionsEMFwdTool = ECalFwdcells,
                                      #positionsHFwdTool = HCalFwdcells,
+                                    readoutName="ECalBarrelPhiEta",
                                      seedSigma = 4,
                                      neighbourSigma = 2,
                                      lastNeighbourSigma = 0,

to avoid breaking those config files? e.g. in runTopoAndSlidingWindowAndCaloSim.py and runClueAndTopoAndSlidingWindowAndCaloSim.py

Done in latest commit

#distance = (radius[i+1] + radius[i]) / 2. * pi / Nplanes * cos (angle) - pcbThickness / 2. - passiveThickness / 2.

#Detector area (C = epsilon*A/d)
area = abs( real_radial_separation[i] * ( 1 / tan(thetaNext) - 1 / tan(theta) )
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we go for the treatment proposed above, the area should be the smallest cell from the simulation, before merging, which will probably be the "strip cell size" (here it was the 'nominal cell' area and a division was applied for the strip layer).

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

changed

# analytical formula (nmultShield = 2)
#capacitanceShield = nmultShield * nMergedModules[i] * cellLength * tracesPerLayer[i] * 1 / inch2mm * 0.67 * (epsilonR + 1.41) / logMicrostrip
# from maxwell (nmultShield = 1)
capacitanceShield = nmultShield * nMergedModules[i] * nMergedThetaCells[i] * cellLength * tracesPerLayer[i] * capa_per_mm[i]
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi Giovanni, nice! I think there is indeed some double counting here: the number of merged module in theta here account for the fact that we simulate the strip size everywhere, then merge them to get the nominal cells. But the shield/pad capa is reasonably independent of the cell size and this part of the merging is already taken into account by the tracesPerLayer.

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for spotting this, so the bottom line is that the nMergedThetaCells[i]should actually not be applied for the shield/pad capacitance

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed in latest commit

@BrieucF
Copy link
Owner

BrieucF commented Oct 25, 2023

Very nice! Thanks!

@BrieucF BrieucF merged commit a2c4dfc into BrieucF:main Oct 25, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants